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