authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-08-09 08:35:46+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-08-13 13:30:24+02:00
log4c2b34e8abd1fc2091eeb10798658bd9bb3910f5
tree96b0a77ab8d31a296ad84b32c00844574b6a177d
parent7556b32840eabb027945d9a30b57bb9cb46cf0bb

elf: relax R_X86_64_32 into jump table indirection if zig_offset_table set


1 files changed, 4 insertions(+), 1 deletions(-)

src/link/Elf/Atom.zig+4-1
...@@ -1254,7 +1254,10 @@ const x86_64 = struct {...@@ -1254,7 +1254,10 @@ const x86_64 = struct {
1254 try cwriter.writeInt(i32, @as(i32, @intCast(G + GOT + A - P)), .little);1254 try cwriter.writeInt(i32, @as(i32, @intCast(G + GOT + A - P)), .little);
1255 },1255 },
12561256
1257 .@"32" => try cwriter.writeInt(u32, @as(u32, @truncate(@as(u64, @intCast(S + A)))), .little),1257 .@"32" => {
1258 const S_ = if (target.flags.zig_offset_table) target.zigOffsetTableAddress(elf_file) else S;
1259 try cwriter.writeInt(u32, @as(u32, @truncate(@as(u64, @intCast(S_ + A)))), .little);
1260 },
1258 .@"32S" => try cwriter.writeInt(i32, @as(i32, @truncate(S + A)), .little),1261 .@"32S" => try cwriter.writeInt(i32, @as(i32, @truncate(S + A)), .little),
12591262
1260 .TPOFF32 => try cwriter.writeInt(i32, @as(i32, @truncate(S + A - TP)), .little),1263 .TPOFF32 => try cwriter.writeInt(i32, @as(i32, @truncate(S + A - TP)), .little),