| ... | ... | @@ -490,11 +490,16 @@ pub fn writeEhFrameHdr(elf_file: *Elf, writer: anytype) !void { |
| 490 | 490 | const eh_frame_shdr = shdrs[elf_file.eh_frame_section_index.?]; |
| 491 | 491 | const eh_frame_hdr_shdr = shdrs[elf_file.eh_frame_hdr_section_index.?]; |
| 492 | 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 | 498 | try writer.writeInt( |
| 494 | 499 | u32, |
| 495 | 500 | @as(u32, @bitCast(@as( |
| 496 | 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 | 504 | .little, |
| 500 | 505 | ); |