mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-27 15:29:51 +00:00
llvm-mc/Mach-O: Set .subsections_via_symbols flag properly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80144 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8464f07235
commit
6009db486e
@ -496,6 +496,8 @@ private:
|
||||
|
||||
std::vector<IndirectSymbolData> IndirectSymbols;
|
||||
|
||||
unsigned SubsectionsViaSymbols : 1;
|
||||
|
||||
private:
|
||||
/// LayoutSection - Assign offsets and sizes to the fragments in the section
|
||||
/// \arg SD, and update the section size. The section file offset should
|
||||
@ -521,6 +523,14 @@ public:
|
||||
/// Finish - Do final processing and write the object to the output stream.
|
||||
void Finish();
|
||||
|
||||
// FIXME: This does not belong here.
|
||||
bool getSubsectionsViaSymbols() const {
|
||||
return SubsectionsViaSymbols;
|
||||
}
|
||||
void setSubsectionsViaSymbols(bool Value) {
|
||||
SubsectionsViaSymbols = Value;
|
||||
}
|
||||
|
||||
/// @name Section List Access
|
||||
/// @{
|
||||
|
||||
|
@ -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() {
|
||||
}
|
||||
|
@ -159,7 +159,14 @@ void MCMachOStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
}
|
||||
|
||||
void MCMachOStreamer::EmitAssemblerFlag(AssemblerFlag Flag) {
|
||||
switch (Flag) {
|
||||
default:
|
||||
llvm_unreachable("FIXME: Not yet implemented!");
|
||||
|
||||
case SubsectionsViaSymbols:
|
||||
Assembler.setSubsectionsViaSymbols(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MCMachOStreamer::EmitAssignment(MCSymbol *Symbol,
|
||||
|
@ -42,13 +42,14 @@
|
||||
|
||||
.objc_selector_strs
|
||||
|
||||
.subsections_via_symbols
|
||||
|
||||
// CHECK: ('cputype', 7)
|
||||
// CHECK: ('cpusubtype', 3)
|
||||
// CHECK: ('filetype', 1)
|
||||
// CHECK: ('num_load_commands', 1)
|
||||
// CHECK: ('load_commands_size', 2436)
|
||||
// CHECK: ('flag', 0)
|
||||
// CHECK: ('flag', 8192)
|
||||
// CHECK: ('load_commands', [
|
||||
// CHECK: # Load Command 0
|
||||
// CHECK: (('command', 1)
|
||||
|
Loading…
Reference in New Issue
Block a user