mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 21:24:00 +00:00
[MC/Mach-O] Implement integrated assembler support for linker options.
- Also, fixup syntax errors in LangRef and missing newline in the MCAsmStreamer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172837 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -406,14 +406,14 @@ TargetLoweringObjectFileELF::InitializeELF(bool UseInitArray_) {
|
||||
// MachO
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// emitModuleFlags - Emit the module flags that specify the garbage collection
|
||||
/// information.
|
||||
/// emitModuleFlags - Perform code emission for module flags.
|
||||
void TargetLoweringObjectFileMachO::
|
||||
emitModuleFlags(MCStreamer &Streamer,
|
||||
ArrayRef<Module::ModuleFlagEntry> ModuleFlags,
|
||||
Mangler *Mang, const TargetMachine &TM) const {
|
||||
unsigned VersionVal = 0;
|
||||
unsigned ImageInfoFlags = 0;
|
||||
MDNode *LinkerOptions = 0;
|
||||
StringRef SectionVal;
|
||||
|
||||
for (ArrayRef<Module::ModuleFlagEntry>::iterator
|
||||
@ -427,14 +427,33 @@ emitModuleFlags(MCStreamer &Streamer,
|
||||
StringRef Key = MFE.Key->getString();
|
||||
Value *Val = MFE.Val;
|
||||
|
||||
if (Key == "Objective-C Image Info Version")
|
||||
if (Key == "Objective-C Image Info Version") {
|
||||
VersionVal = cast<ConstantInt>(Val)->getZExtValue();
|
||||
else if (Key == "Objective-C Garbage Collection" ||
|
||||
Key == "Objective-C GC Only" ||
|
||||
Key == "Objective-C Is Simulated")
|
||||
} else if (Key == "Objective-C Garbage Collection" ||
|
||||
Key == "Objective-C GC Only" ||
|
||||
Key == "Objective-C Is Simulated") {
|
||||
ImageInfoFlags |= cast<ConstantInt>(Val)->getZExtValue();
|
||||
else if (Key == "Objective-C Image Info Section")
|
||||
} else if (Key == "Objective-C Image Info Section") {
|
||||
SectionVal = cast<MDString>(Val)->getString();
|
||||
} else if (Key == "Linker Options") {
|
||||
LinkerOptions = cast<MDNode>(Val);
|
||||
}
|
||||
}
|
||||
|
||||
// Emit the linker options if present.
|
||||
if (LinkerOptions) {
|
||||
for (unsigned i = 0, e = LinkerOptions->getNumOperands(); i != e; ++i) {
|
||||
MDNode *MDOptions = cast<MDNode>(LinkerOptions->getOperand(i));
|
||||
SmallVector<std::string, 4> StrOptions;
|
||||
|
||||
// Convert to strings.
|
||||
for (unsigned ii = 0, ie = MDOptions->getNumOperands(); ii != ie; ++ii) {
|
||||
MDString *MDOption = cast<MDString>(MDOptions->getOperand(ii));
|
||||
StrOptions.push_back(MDOption->getString());
|
||||
}
|
||||
|
||||
Streamer.EmitLinkerOptions(StrOptions);
|
||||
}
|
||||
}
|
||||
|
||||
// The section is mandatory. If we don't have it, then we don't have GC info.
|
||||
|
Reference in New Issue
Block a user