| ... | @@ -49,12 +49,8 @@ pub fn emitMir(emit: *Emit) Error!void { | ... | @@ -49,12 +49,8 @@ pub fn emitMir(emit: *Emit) Error!void { |
| 49 | const atom_ptr = zo.symbol(symbol.atom_index).atom(elf_file).?; | 49 | const atom_ptr = zo.symbol(symbol.atom_index).atom(elf_file).?; |
| 50 | const sym = zo.symbol(symbol.sym_index); | 50 | const sym = zo.symbol(symbol.sym_index); |
| 51 | | 51 | |
| 52 | if (sym.flags.is_extern_ptr) blk: { | 52 | if (sym.flags.is_extern_ptr and emit.lower.pic) { |
| 53 | const name = sym.name(elf_file); | 53 | return emit.fail("emit GOT relocation for symbol '{s}'", .{sym.name(elf_file)}); |
| 54 | if (mem.eql(u8, "__init_array_start", name) or mem.eql(u8, "__init_array_end", name) or | | |
| 55 | mem.eql(u8, "__fini_array_start", name) or mem.eql(u8, "__fini_array_end", name)) | | |
| 56 | break :blk; | | |
| 57 | return emit.fail("emit GOT relocation for symbol '{s}'", .{name}); | | |
| 58 | } | 54 | } |
| 59 | | 55 | |
| 60 | const hi_r_type: u32 = @intFromEnum(std.elf.R_RISCV.HI20); | 56 | const hi_r_type: u32 = @intFromEnum(std.elf.R_RISCV.HI20); |