| ... | @@ -104,11 +104,12 @@ fn markLive( | ... | @@ -104,11 +104,12 @@ fn markLive( |
| 104 | alive: *AtomTable, | 104 | alive: *AtomTable, |
| 105 | reverse_lookups: [][]u32, | 105 | reverse_lookups: [][]u32, |
| 106 | ) anyerror!void { | 106 | ) anyerror!void { |
| | 107 | log.debug("mark(ATOM({d}))", .{atom_index}); |
| | 108 | |
| 107 | if (alive.contains(atom_index)) return; | 109 | if (alive.contains(atom_index)) return; |
| 108 | | 110 | |
| 109 | alive.putAssumeCapacityNoClobber(atom_index, {}); | 111 | alive.putAssumeCapacityNoClobber(atom_index, {}); |
| 110 | | 112 | |
| 111 | log.debug("marking live", .{}); | | |
| 112 | zld.logAtom(atom_index, log); | 113 | zld.logAtom(atom_index, log); |
| 113 | | 114 | |
| 114 | const cpu_arch = zld.options.target.cpu.arch; | 115 | const cpu_arch = zld.options.target.cpu.arch; |
| ... | @@ -152,11 +153,15 @@ fn markLive( | ... | @@ -152,11 +153,15 @@ fn markLive( |
| 152 | | 153 | |
| 153 | const object = zld.objects.items[target.getFile().?]; | 154 | const object = zld.objects.items[target.getFile().?]; |
| 154 | const target_atom_index = object.getAtomIndexForSymbol(target.sym_index).?; | 155 | const target_atom_index = object.getAtomIndexForSymbol(target.sym_index).?; |
| | 156 | log.debug(" following ATOM({d})", .{target_atom_index}); |
| | 157 | |
| 155 | try markLive(zld, target_atom_index, alive, reverse_lookups); | 158 | try markLive(zld, target_atom_index, alive, reverse_lookups); |
| 156 | } | 159 | } |
| 157 | } | 160 | } |
| 158 | | 161 | |
| 159 | fn refersLive(zld: *Zld, atom_index: AtomIndex, alive: AtomTable, reverse_lookups: [][]u32) !bool { | 162 | fn refersLive(zld: *Zld, atom_index: AtomIndex, alive: AtomTable, reverse_lookups: [][]u32) !bool { |
| | 163 | log.debug("refersLive(ATOM({d}))", .{atom_index}); |
| | 164 | |
| 160 | const cpu_arch = zld.options.target.cpu.arch; | 165 | const cpu_arch = zld.options.target.cpu.arch; |
| 161 | | 166 | |
| 162 | const atom = zld.getAtom(atom_index); | 167 | const atom = zld.getAtom(atom_index); |
| ... | @@ -191,7 +196,10 @@ fn refersLive(zld: *Zld, atom_index: AtomIndex, alive: AtomTable, reverse_lookup | ... | @@ -191,7 +196,10 @@ fn refersLive(zld: *Zld, atom_index: AtomIndex, alive: AtomTable, reverse_lookup |
| 191 | log.debug("atom for symbol '{s}' not found; skipping...", .{zld.getSymbolName(target)}); | 196 | log.debug("atom for symbol '{s}' not found; skipping...", .{zld.getSymbolName(target)}); |
| 192 | continue; | 197 | continue; |
| 193 | }; | 198 | }; |
| 194 | if (alive.contains(target_atom_index)) return true; | 199 | if (alive.contains(target_atom_index)) { |
| | 200 | log.debug(" refers live ATOM({d})", .{target_atom_index}); |
| | 201 | return true; |
| | 202 | } |
| 195 | } | 203 | } |
| 196 | | 204 | |
| 197 | return false; | 205 | return false; |