aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-01-22 18:54:00 +0100
committerJakub Konka <kubkon@jakubkonka.com>2024-01-24 12:34:42 +0100
commitf2dce0c33794f363d1b7448ee110ca2ae4bbafac (patch)
tree26eb5778923d5dd9682d53fb574b8d6951b902e7
parent82628dd151c15241cffd17884ed5124808dc4ed2 (diff)
downloadzig-f2dce0c33794f363d1b7448ee110ca2ae4bbafac.tar.gz
zig-f2dce0c33794f363d1b7448ee110ca2ae4bbafac.zip
macho: exclude symbols from empty sections when parsing unwind info
-rw-r--r--src/link/MachO/Object.zig4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig
index 850120b64b..9aecf0a78e 100644
--- a/src/link/MachO/Object.zig
+++ b/src/link/MachO/Object.zig
@@ -156,10 +156,12 @@ pub fn parse(self: *Object, macho_file: *MachO) !void {
try self.initSymbolStabs(nlists.items, macho_file);
try self.initRelocs(macho_file);
+ // Parse DWARF __TEXT,__eh_frame section
if (self.eh_frame_sect_index) |index| {
try self.initEhFrameRecords(index, macho_file);
}
+ // Parse Apple's __LD,__compact_unwind section
if (self.compact_unwind_sect_index) |index| {
try self.initUnwindRecords(index, macho_file);
}
@@ -841,7 +843,7 @@ fn parseUnwindRecords(self: *Object, macho_file: *MachO) !void {
if (nlist.stab()) continue;
if (!nlist.sect()) continue;
const sect = self.sections.items(.header)[nlist.n_sect - 1];
- if (sect.isCode()) {
+ if (sect.isCode() and sect.size > 0) {
try superposition.ensureUnusedCapacity(1);
const gop = superposition.getOrPutAssumeCapacity(nlist.n_value);
if (gop.found_existing) {