1
1
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:
Rui Ueyama 2021-10-24 00:40:07 +09:00
parent b3528e0aee
commit 94cda25277
3 changed files with 18 additions and 19 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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) {