authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-08-30 09:01:30-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-08-30 09:24:32-04:00
loga1a9d7440ca7b33a73ef7d3b4ee450271337f96f
treea5aae705179667dc378293c321faf8230649d481
parent7305184203dd94fd48da69f8a468b3094b848533

Elf: fix reference from `eh_frame_hdr` to `eh_frame`


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

src/link/Elf/eh_frame.zig+6-1
...@@ -490,11 +490,16 @@ pub fn writeEhFrameHdr(elf_file: *Elf, writer: anytype) !void {...@@ -490,11 +490,16 @@ pub fn writeEhFrameHdr(elf_file: *Elf, writer: anytype) !void {
490 const eh_frame_shdr = shdrs[elf_file.eh_frame_section_index.?];490 const eh_frame_shdr = shdrs[elf_file.eh_frame_section_index.?];
491 const eh_frame_hdr_shdr = shdrs[elf_file.eh_frame_hdr_section_index.?];491 const eh_frame_hdr_shdr = shdrs[elf_file.eh_frame_hdr_section_index.?];
492 const num_fdes = @as(u32, @intCast(@divExact(eh_frame_hdr_shdr.sh_size - eh_frame_hdr_header_size, 8)));492 const num_fdes = @as(u32, @intCast(@divExact(eh_frame_hdr_shdr.sh_size - eh_frame_hdr_header_size, 8)));
493 const existing_size = existing_size: {
494 const zo = elf_file.zigObjectPtr() orelse break :existing_size 0;
495 const sym = zo.symbol(zo.eh_frame_index orelse break :existing_size 0);
496 break :existing_size sym.atom(elf_file).?.size;
497 };
493 try writer.writeInt(498 try writer.writeInt(
494 u32,499 u32,
495 @as(u32, @bitCast(@as(500 @as(u32, @bitCast(@as(
496 i32,501 i32,
497 @truncate(@as(i64, @intCast(eh_frame_shdr.sh_addr)) - @as(i64, @intCast(eh_frame_hdr_shdr.sh_addr)) - 4),502 @truncate(@as(i64, @intCast(eh_frame_shdr.sh_addr + existing_size)) - @as(i64, @intCast(eh_frame_hdr_shdr.sh_addr)) - 4),
498 ))),503 ))),
499 .little,504 .little,
500 );505 );