diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-08-26 21:22:22 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-26 21:22:22 +0000 |
commit | e2697738a4ffdf3449363b19d95dfad3f483fb6c (patch) | |
tree | e6697d31a891b088d0cd135bdbb52daa4f5f93ba /llvm/lib/MC/MCAssembler.cpp | |
parent | 402250f2f9f607f0fc66d16021234f5b63021b58 (diff) | |
download | bcm5719-llvm-e2697738a4ffdf3449363b19d95dfad3f483fb6c.tar.gz bcm5719-llvm-e2697738a4ffdf3449363b19d95dfad3f483fb6c.zip |
llvm-mc/Mach-O: Set .subsections_via_symbols flag properly.
llvm-svn: 80144
Diffstat (limited to 'llvm/lib/MC/MCAssembler.cpp')
-rw-r--r-- | llvm/lib/MC/MCAssembler.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp index 1f62b060528..9efdfe359bb 100644 --- a/llvm/lib/MC/MCAssembler.cpp +++ b/llvm/lib/MC/MCAssembler.cpp @@ -48,6 +48,10 @@ class MachObjectWriter { HFT_Object = 0x1 }; + enum HeaderFlags { + HF_SubsectionsViaSymbols = 0x2000 + }; + enum LoadCommandType { LCT_Segment = 0x1, LCT_Symtab = 0x2, @@ -167,7 +171,13 @@ public: /// @} - void WriteHeader32(unsigned NumLoadCommands, unsigned LoadCommandsSize) { + void WriteHeader32(unsigned NumLoadCommands, unsigned LoadCommandsSize, + bool SubsectionsViaSymbols) { + uint32_t Flags = 0; + + if (SubsectionsViaSymbols) + Flags |= HF_SubsectionsViaSymbols; + // struct mach_header (28 bytes) uint64_t Start = OS.tell(); @@ -177,16 +187,13 @@ public: // FIXME: Support cputype. Write32(TargetMachOWriterInfo::HDR_CPU_TYPE_I386); - // FIXME: Support cpusubtype. Write32(TargetMachOWriterInfo::HDR_CPU_SUBTYPE_I386_ALL); - Write32(HFT_Object); - - // Object files have a single load command, the segment. - Write32(NumLoadCommands); + Write32(NumLoadCommands); // Object files have a single load command, the + // segment. Write32(LoadCommandsSize); - Write32(0); // Flags + Write32(Flags); assert(OS.tell() - Start == Header32Size); } @@ -674,7 +681,8 @@ public: } // Write the prolog, starting with the header and load command... - WriteHeader32(NumLoadCommands, LoadCommandsSize); + WriteHeader32(NumLoadCommands, LoadCommandsSize, + Asm.getSubsectionsViaSymbols()); WriteSegmentLoadCommand32(NumSections, SectionDataStart, SectionDataSize); // ... and then the section headers. @@ -864,7 +872,11 @@ MCSymbolData::MCSymbolData(MCSymbol &_Symbol, MCFragment *_Fragment, /* *** */ -MCAssembler::MCAssembler(raw_ostream &_OS) : OS(_OS) {} +MCAssembler::MCAssembler(raw_ostream &_OS) + : OS(_OS), + SubsectionsViaSymbols(false) +{ +} MCAssembler::~MCAssembler() { } |