forked from OSchip/llvm-project
parent
16353d6583
commit
022030a425
|
@ -211,6 +211,10 @@ namespace llvm {
|
|||
/// as being used somehow that the assembler can't see. This prevents dead
|
||||
/// code elimination on some targets.
|
||||
const char *UsedDirective; // Defaults to null.
|
||||
|
||||
/// WeakRefDirective - This directive, if non-null, is used to decalre a
|
||||
/// global as being a weak undefined symbol.
|
||||
const char *WeakRefDirective; // Defaults to null.
|
||||
|
||||
//===--- Dwarf Emission Directives -----------------------------------===//
|
||||
|
||||
|
@ -422,6 +426,9 @@ namespace llvm {
|
|||
const char *getUsedDirective() const {
|
||||
return UsedDirective;
|
||||
}
|
||||
const char *getWeakRefDirective() const {
|
||||
return WeakRefDirective;
|
||||
}
|
||||
bool hasLEB128() const {
|
||||
return HasLEB128;
|
||||
}
|
||||
|
|
|
@ -647,11 +647,13 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
|
|||
}
|
||||
}
|
||||
|
||||
if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
|
||||
SwitchToDataSection("");
|
||||
for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
|
||||
e = ExtWeakSymbols.end(); i != e; ++i) {
|
||||
O << "\t.weak_reference " << *i << "\n";
|
||||
if (TAI->getWeakRefDirective()) {
|
||||
if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
|
||||
SwitchToDataSection("");
|
||||
for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
|
||||
e = ExtWeakSymbols.end(); i != e; ++i) {
|
||||
O << TAI->getWeakRefDirective() << *i << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
bool isPPC64 = TD->getPointerSizeInBits() == 64;
|
||||
|
|
|
@ -33,6 +33,7 @@ DarwinTargetAsmInfo::DarwinTargetAsmInfo(const PPCTargetMachine &TM) {
|
|||
StaticCtorsSection = ".mod_init_func";
|
||||
StaticDtorsSection = ".mod_term_func";
|
||||
UsedDirective = "\t.no_dead_strip\t";
|
||||
WeakRefDirective = "\t.weak_reference\t";
|
||||
InlineAsmStart = "# InlineAsm Start";
|
||||
InlineAsmEnd = "# InlineAsm End";
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ TargetAsmInfo::TargetAsmInfo() :
|
|||
COMMDirectiveTakesAlignment(true),
|
||||
HasDotTypeDotSizeDirective(true),
|
||||
UsedDirective(0),
|
||||
WeakRefDirective(0),
|
||||
HasLEB128(false),
|
||||
HasDotLoc(false),
|
||||
HasDotFile(false),
|
||||
|
|
|
@ -278,16 +278,12 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
|
|||
O << "\t.ascii \" -export:" << *i << "\"\n";
|
||||
}
|
||||
|
||||
if (!Subtarget->isTargetCygwin()) {
|
||||
// There is no external weak linkage on Mingw32 platform.
|
||||
// Defaulting to external
|
||||
if (TAI->getWeakRefDirective()) {
|
||||
if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
|
||||
SwitchToDataSection("");
|
||||
|
||||
for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
|
||||
e = ExtWeakSymbols.end(); i != e; ++i) {
|
||||
O << (Subtarget->isTargetDarwin() ? "\t.weak_reference" : "\t.weak")
|
||||
<< " " << *i << "\n";
|
||||
O << TAI->getWeakRefDirective() << *i << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) {
|
|||
InlineAsmEnd = "# InlineAsm End";
|
||||
SetDirective = "\t.set";
|
||||
UsedDirective = "\t.no_dead_strip\t";
|
||||
WeakRefDirective = "\t.weak_reference\t";
|
||||
|
||||
NeedsSet = true;
|
||||
DwarfAbbrevSection = ".section __DWARF,__debug_abbrev,regular,debug";
|
||||
|
@ -86,6 +87,7 @@ X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) {
|
|||
// HasDotFile - True if target asm supports .file directives.
|
||||
// bool HasDotFile; // Defaults to false.
|
||||
PrivateGlobalPrefix = "."; // Prefix for private global symbols
|
||||
WeakRefDirective = "\t.weak\t";
|
||||
DwarfRequiresFrameSection = false;
|
||||
DwarfAbbrevSection = "\t.section\t.debug_abbrev,\"\",@progbits";
|
||||
DwarfInfoSection = "\t.section\t.debug_info,\"\",@progbits";
|
||||
|
|
Loading…
Reference in New Issue