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
b3528e0aee
commit
94cda25277
@ -91,18 +91,6 @@ static void create_synthetic_chunks(Context &ctx) {
|
||||
ctx.linkedit_seg.chunks.push_back(&ctx.strtab);
|
||||
}
|
||||
|
||||
static void fill_symtab(Context &ctx) {
|
||||
for (ObjectFile *obj : ctx.objs)
|
||||
for (Symbol *sym : obj->syms)
|
||||
if (sym->file == obj)
|
||||
ctx.symtab.add(ctx, sym);
|
||||
|
||||
for (DylibFile *dylib : ctx.dylibs)
|
||||
for (Symbol *sym : dylib->syms)
|
||||
if (sym->file == dylib && sym->needs_stub)
|
||||
ctx.symtab.add(ctx, sym);
|
||||
}
|
||||
|
||||
static void export_symbols(Context &ctx) {
|
||||
std::vector<Symbol *> syms;
|
||||
|
||||
@ -220,7 +208,6 @@ int main(int argc, char **argv) {
|
||||
for (std::unique_ptr<InputSection> &sec : obj->sections)
|
||||
sec->scan_relocations(ctx);
|
||||
|
||||
fill_symtab(ctx);
|
||||
export_symbols(ctx);
|
||||
i64 output_size = assign_offsets(ctx);
|
||||
fix_synthetic_symbol_values(ctx);
|
||||
|
@ -349,8 +349,7 @@ public:
|
||||
hdr.p2align = __builtin_ctz(8);
|
||||
}
|
||||
|
||||
void add(Context &ctx, Symbol *sym);
|
||||
|
||||
void compute_size(Context &ctx) override;
|
||||
void copy_buf(Context &ctx) override;
|
||||
|
||||
std::vector<Symbol *> syms;
|
||||
|
@ -579,10 +579,23 @@ void OutputFunctionStartsSection::copy_buf(Context &ctx) {
|
||||
write_vector(ctx.buf + hdr.offset, contents);
|
||||
}
|
||||
|
||||
void OutputSymtabSection::add(Context &ctx, Symbol *sym) {
|
||||
hdr.size += sizeof(MachSym);
|
||||
syms.push_back(sym);
|
||||
stroffs.push_back(ctx.strtab.add_string(sym->name));
|
||||
void OutputSymtabSection::compute_size(Context &ctx) {
|
||||
auto add = [&](Symbol *sym) {
|
||||
syms.push_back(sym);
|
||||
stroffs.push_back(ctx.strtab.add_string(sym->name));
|
||||
};
|
||||
|
||||
for (ObjectFile *obj : ctx.objs)
|
||||
for (Symbol *sym : obj->syms)
|
||||
if (sym->file == obj)
|
||||
add(sym);
|
||||
|
||||
for (DylibFile *dylib : ctx.dylibs)
|
||||
for (Symbol *sym : dylib->syms)
|
||||
if (sym->file == dylib && sym->needs_stub)
|
||||
add(sym);
|
||||
|
||||
hdr.size = syms.size() * sizeof(MachSym);
|
||||
}
|
||||
|
||||
void OutputSymtabSection::copy_buf(Context &ctx) {
|
||||
|
Loading…
Reference in New Issue
Block a user