mirror of
https://github.com/rui314/mold.git
synced 2024-09-21 09:57:18 +03:00
[Mach-O] wip
This commit is contained in:
parent
433666a470
commit
91b9f925d6
@ -30,6 +30,15 @@ static void visit(Context &ctx, Subsection &subsec) {
|
||||
visit(ctx, *rel.subsec);
|
||||
}
|
||||
}
|
||||
|
||||
for (UnwindRecord &rec : subsec.get_unwind_records()) {
|
||||
rec.is_alive = true;
|
||||
visit(ctx, *rec.subsec);
|
||||
if (rec.lsda)
|
||||
visit(ctx, *rec.lsda);
|
||||
if (Symbol *sym = rec.personality; sym && sym->subsec)
|
||||
visit(ctx, *sym->subsec);
|
||||
}
|
||||
}
|
||||
|
||||
static void mark(Context &ctx, std::span<Subsection *> rootset) {
|
||||
|
@ -49,6 +49,7 @@ struct UnwindRecord {
|
||||
Symbol *personality = nullptr;
|
||||
Subsection *lsda = nullptr;
|
||||
u32 lsda_offset = 0;
|
||||
bool is_alive = false;
|
||||
};
|
||||
|
||||
class InputFile {
|
||||
|
@ -1142,7 +1142,8 @@ static std::vector<u8> construct_unwind_info(Context &ctx) {
|
||||
if (chunk->is_regular)
|
||||
for (Subsection *subsec : ((OutputSection *)chunk)->members)
|
||||
for (UnwindRecord &rec : subsec->get_unwind_records())
|
||||
records.push_back(rec);
|
||||
if (!ctx.arg.dead_strip || rec.is_alive)
|
||||
records.push_back(rec);
|
||||
return UnwindEncoder().encode(ctx, records);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user