| ... | ... | @@ -109,17 +109,25 @@ pub fn emitMir(emit: *Emit) Error!void { |
| 109 | 109 | .r_addend = -4, |
| 110 | 110 | }); |
| 111 | 111 | } else { |
| 112 | | const r_type: u32 = if (sym.flags.needs_zig_got and !is_obj_or_static_lib) |
| 113 | | link.File.Elf.R_X86_64_ZIG_GOT32 |
| 114 | | else if (sym.flags.needs_got) |
| 115 | | std.elf.R_X86_64_GOT32 |
| 116 | | else |
| 117 | | std.elf.R_X86_64_32; |
| 118 | | try atom.addReloc(elf_file, .{ |
| 119 | | .r_offset = end_offset - 4, |
| 120 | | .r_info = (@as(u64, @intCast(data.sym_index)) << 32) | r_type, |
| 121 | | .r_addend = 0, |
| 122 | | }); |
| 112 | if (lowered_inst.encoding.mnemonic == .call and sym.flags.needs_zig_got and is_obj_or_static_lib) { |
| 113 | try atom.addReloc(elf_file, .{ |
| 114 | .r_offset = end_offset - 4, |
| 115 | .r_info = (@as(u64, @intCast(data.sym_index)) << 32) | std.elf.R_X86_64_PC32, |
| 116 | .r_addend = -4, |
| 117 | }); |
| 118 | } else { |
| 119 | const r_type: u32 = if (sym.flags.needs_zig_got and !is_obj_or_static_lib) |
| 120 | link.File.Elf.R_X86_64_ZIG_GOT32 |
| 121 | else if (sym.flags.needs_got) |
| 122 | std.elf.R_X86_64_GOT32 |
| 123 | else |
| 124 | std.elf.R_X86_64_32; |
| 125 | try atom.addReloc(elf_file, .{ |
| 126 | .r_offset = end_offset - 4, |
| 127 | .r_info = (@as(u64, @intCast(data.sym_index)) << 32) | r_type, |
| 128 | .r_addend = 0, |
| 129 | }); |
| 130 | } |
| 123 | 131 | } |
| 124 | 132 | } else unreachable, |
| 125 | 133 | .linker_got, |