zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 89db24ec6d6195cc10f17bf21dd9bf23e6ff1bf1 (tree)
parent e99818c602f7e2f75c62be7c4329688c8fa5afe1
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Tue,  6 Aug 2024 22:28:38 +0200

elf: fix .eh_frame calc in relocatable mode

Diffstat:
Msrc/link/Elf.zig | 4++++
Msrc/link/Elf/eh_frame.zig | 6+++---
2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/link/Elf.zig b/src/link/Elf.zig @@ -5860,6 +5860,10 @@ pub const Ref = struct { index: u32, file: u32, + pub fn eql(ref: Ref, other: Ref) bool { + return ref.index == other.index and ref.file == other.file; + } + pub fn format( ref: Ref, comptime unused_fmt_string: []const u8, diff --git a/src/link/Elf/eh_frame.zig b/src/link/Elf/eh_frame.zig @@ -145,10 +145,10 @@ pub const Cie = struct { if (cie_rel.r_addend != other_rel.r_addend) return false; const cie_object = elf_file.file(cie.file_index).?.object; + const cie_ref = cie_object.resolveSymbol(cie_rel.r_sym(), elf_file); const other_object = elf_file.file(other.file_index).?.object; - const cie_sym = cie_object.symbols.items[cie_rel.r_sym()]; - const other_sym = other_object.symbols.items[other_rel.r_sym()]; - if (!std.mem.eql(u8, std.mem.asBytes(&cie_sym), std.mem.asBytes(&other_sym))) return false; + const other_ref = other_object.resolveSymbol(other_rel.r_sym(), elf_file); + if (!cie_ref.eql(other_ref)) return false; } return true; }