mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 12:19:53 +00:00
move production of .reference directives for static ctor/dtor list on
darwin into common code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93849 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a756b1d914
commit
71eae71315
@ -36,7 +36,13 @@ namespace llvm {
|
||||
|
||||
/// HasMachoZeroFillDirective - True if this is a MachO target that supports
|
||||
/// the macho-specific .zerofill directive for emitting BSS Symbols.
|
||||
bool HasMachoZeroFillDirective; // Default is false.
|
||||
bool HasMachoZeroFillDirective; // Default is false.
|
||||
|
||||
/// HasStaticCtorDtorReferenceInStaticMode - True if the compiler should
|
||||
/// emit a ".reference .constructors_used" or ".reference .destructors_used"
|
||||
/// directive after the a static ctor/dtor list. This directive is only
|
||||
/// emitted in Static relocation model.
|
||||
bool HasStaticCtorDtorReferenceInStaticMode; // Default is false.
|
||||
|
||||
/// NeedsSet - True if target asm treats expressions in data directives
|
||||
/// as linktime-relocatable. For assembly-time computation, we need to
|
||||
@ -314,7 +320,9 @@ namespace llvm {
|
||||
// Accessors.
|
||||
//
|
||||
bool hasMachoZeroFillDirective() const { return HasMachoZeroFillDirective; }
|
||||
|
||||
bool hasStaticCtorDtorReferenceInStaticMode() const {
|
||||
return HasStaticCtorDtorReferenceInStaticMode;
|
||||
}
|
||||
const char *getNonexecutableStackDirective() const {
|
||||
return NonexecutableStackDirective;
|
||||
}
|
||||
|
@ -449,6 +449,10 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
|
||||
OutStreamer.SwitchSection(getObjFileLowering().getStaticCtorSection());
|
||||
EmitAlignment(Align, 0);
|
||||
EmitXXStructorList(GV->getInitializer());
|
||||
|
||||
if (TM.getRelocationModel() == Reloc::Static &&
|
||||
MAI->hasStaticCtorDtorReferenceInStaticMode())
|
||||
O << ".reference .constructors_used\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -456,6 +460,10 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
|
||||
OutStreamer.SwitchSection(getObjFileLowering().getStaticDtorSection());
|
||||
EmitAlignment(Align, 0);
|
||||
EmitXXStructorList(GV->getInitializer());
|
||||
|
||||
if (TM.getRelocationModel() == Reloc::Static &&
|
||||
MAI->hasStaticCtorDtorReferenceInStaticMode())
|
||||
O << ".reference .destructors_used\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ using namespace llvm;
|
||||
|
||||
MCAsmInfo::MCAsmInfo() {
|
||||
HasMachoZeroFillDirective = false;
|
||||
HasStaticCtorDtorReferenceInStaticMode = false;
|
||||
NonexecutableStackDirective = 0;
|
||||
NeedsSet = false;
|
||||
MaxInstLength = 4;
|
||||
|
@ -36,6 +36,7 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
|
||||
LCOMMDirective = "\t.lcomm\t";
|
||||
ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
|
||||
HasMachoZeroFillDirective = true; // Uses .zerofill
|
||||
HasStaticCtorDtorReferenceInStaticMode = true;
|
||||
SetDirective = "\t.set";
|
||||
ProtectedDirective = "\t.globl\t";
|
||||
HasDotTypeDotSizeDirective = false;
|
||||
|
@ -1171,17 +1171,8 @@ void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
|
||||
return;
|
||||
|
||||
// Check to see if this is a special global used by LLVM, if so, emit it.
|
||||
|
||||
if (EmitSpecialLLVMGlobal(GVar)) {
|
||||
if (Subtarget->isTargetDarwin() &&
|
||||
TM.getRelocationModel() == Reloc::Static) {
|
||||
if (GVar->getName() == "llvm.global_ctors")
|
||||
O << ".reference .constructors_used\n";
|
||||
else if (GVar->getName() == "llvm.global_dtors")
|
||||
O << ".reference .destructors_used\n";
|
||||
}
|
||||
if (EmitSpecialLLVMGlobal(GVar))
|
||||
return;
|
||||
}
|
||||
|
||||
MCSymbol *GVarSym = GetGlobalValueSymbol(GVar);
|
||||
|
||||
|
@ -933,15 +933,8 @@ void PPCDarwinAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
|
||||
return; // External global require no code
|
||||
|
||||
// Check to see if this is a special global used by LLVM, if so, emit it.
|
||||
if (EmitSpecialLLVMGlobal(GVar)) {
|
||||
if (TM.getRelocationModel() == Reloc::Static) {
|
||||
if (GVar->getName() == "llvm.global_ctors")
|
||||
O << ".reference .constructors_used\n";
|
||||
else if (GVar->getName() == "llvm.global_dtors")
|
||||
O << ".reference .destructors_used\n";
|
||||
}
|
||||
if (EmitSpecialLLVMGlobal(GVar))
|
||||
return;
|
||||
}
|
||||
|
||||
MCSymbol *GVarSym = GetGlobalValueSymbol(GVar);
|
||||
printVisibility(GVarSym, GVar->getVisibility());
|
||||
|
@ -651,16 +651,8 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
|
||||
return; // External global require no code
|
||||
|
||||
// Check to see if this is a special global used by LLVM, if so, emit it.
|
||||
if (EmitSpecialLLVMGlobal(GVar)) {
|
||||
if (Subtarget->isTargetDarwin() &&
|
||||
TM.getRelocationModel() == Reloc::Static) {
|
||||
if (GVar->getName() == "llvm.global_ctors")
|
||||
O << ".reference .constructors_used\n";
|
||||
else if (GVar->getName() == "llvm.global_dtors")
|
||||
O << ".reference .destructors_used\n";
|
||||
}
|
||||
if (EmitSpecialLLVMGlobal(GVar))
|
||||
return;
|
||||
}
|
||||
|
||||
const TargetData *TD = TM.getTargetData();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user