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
a52179d090
commit
02ce171aba
@ -11,46 +11,32 @@
|
||||
namespace mold::macho {
|
||||
|
||||
static void create_synthetic_sections(Context &ctx) {
|
||||
OutputSegment *text =
|
||||
new OutputSegment("__TEXT", VM_PROT_READ | VM_PROT_EXECUTE, 0);
|
||||
ctx.segments.push_back(text);
|
||||
ctx.text_seg.reset(text);
|
||||
ctx.segments.push_back(&ctx.text_seg);
|
||||
ctx.segments.push_back(&ctx.data_const_seg);
|
||||
ctx.segments.push_back(&ctx.data_seg);
|
||||
ctx.segments.push_back(&ctx.linkedit_seg);
|
||||
|
||||
OutputSegment *data_const =
|
||||
new OutputSegment("__DATA_CONST", VM_PROT_READ | VM_PROT_WRITE, SG_READ_ONLY);
|
||||
ctx.segments.push_back(data_const);
|
||||
ctx.data_const_seg.reset(data_const);
|
||||
ctx.text_seg.sections.push_back(&ctx.mach_hdr);
|
||||
ctx.text_seg.sections.push_back(&ctx.load_cmd);
|
||||
ctx.text_seg.sections.push_back(new TextSection);
|
||||
ctx.text_seg.sections.push_back(new StubsSection);
|
||||
ctx.text_seg.sections.push_back(new StubHelperSection);
|
||||
ctx.text_seg.sections.push_back(new CstringSection);
|
||||
ctx.text_seg.sections.push_back(new UnwindInfoSection);
|
||||
|
||||
OutputSegment *data =
|
||||
new OutputSegment("__DATA", VM_PROT_READ | VM_PROT_WRITE, 0);
|
||||
ctx.segments.push_back(data);
|
||||
ctx.data_seg.reset(data);
|
||||
ctx.data_const_seg.sections.push_back(new GotSection);
|
||||
|
||||
OutputSegment *linkedit = new OutputSegment("__LINKEDIT", VM_PROT_READ, 0);
|
||||
ctx.segments.push_back(linkedit);
|
||||
ctx.linkedit_seg.reset(linkedit);
|
||||
ctx.data_seg.sections.push_back(new LazySymbolPtrSection);
|
||||
ctx.data_seg.sections.push_back(new DataSection);
|
||||
|
||||
ctx.text_seg->sections.push_back(&ctx.mach_hdr);
|
||||
ctx.text_seg->sections.push_back(&ctx.load_cmd);
|
||||
ctx.text_seg->sections.push_back(new TextSection);
|
||||
ctx.text_seg->sections.push_back(new StubsSection);
|
||||
ctx.text_seg->sections.push_back(new StubHelperSection);
|
||||
ctx.text_seg->sections.push_back(new CstringSection);
|
||||
ctx.text_seg->sections.push_back(new UnwindInfoSection);
|
||||
|
||||
ctx.data_const_seg->sections.push_back(new GotSection);
|
||||
|
||||
ctx.data_seg->sections.push_back(new LazySymbolPtrSection);
|
||||
ctx.data_seg->sections.push_back(new DataSection);
|
||||
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.rebase);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.bind);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.lazy_bind);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.export_);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.function_starts);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.symtab);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.indir_symtab);
|
||||
ctx.linkedit_seg->sections.push_back(&ctx.strtab);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.rebase);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.bind);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.lazy_bind);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.export_);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.function_starts);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.symtab);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.indir_symtab);
|
||||
ctx.linkedit_seg.sections.push_back(&ctx.strtab);
|
||||
}
|
||||
|
||||
static void fill_symtab(Context &ctx) {
|
||||
|
@ -346,10 +346,11 @@ struct Context {
|
||||
std::unique_ptr<OutputFile> output_file;
|
||||
u8 *buf;
|
||||
|
||||
std::unique_ptr<OutputSegment> text_seg;
|
||||
std::unique_ptr<OutputSegment> data_const_seg;
|
||||
std::unique_ptr<OutputSegment> data_seg;
|
||||
std::unique_ptr<OutputSegment> linkedit_seg;
|
||||
OutputSegment text_seg{"__TEXT", VM_PROT_READ | VM_PROT_EXECUTE, 0};
|
||||
OutputSegment data_const_seg{"__DATA_CONST", VM_PROT_READ | VM_PROT_WRITE,
|
||||
SG_READ_ONLY};
|
||||
OutputSegment data_seg{"__DATA", VM_PROT_READ | VM_PROT_WRITE, 0};
|
||||
OutputSegment linkedit_seg{"__LINKEDIT", VM_PROT_READ, 0};
|
||||
|
||||
OutputMachHeader mach_hdr;
|
||||
OutputLoadCommand load_cmd;
|
||||
|
Loading…
Reference in New Issue
Block a user