mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Add support for targets that want to do something with the llvm.used list,
because they have an aggressive linker that does dead code stripping. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30604 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -253,8 +253,11 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
|
||||
|
||||
assert(GV->hasInitializer() && "Not a special LLVM global!");
|
||||
|
||||
if (GV->getName() == "llvm.used")
|
||||
return true; // No need to emit this at all.
|
||||
if (GV->getName() == "llvm.used") {
|
||||
if (TAI->getUsedDirective() != 0) // No need to emit this at all.
|
||||
EmitLLVMUsedList(GV->getInitializer());
|
||||
return true;
|
||||
}
|
||||
|
||||
if (GV->getName() == "llvm.global_ctors" && GV->use_empty()) {
|
||||
SwitchToDataSection(TAI->getStaticCtorsSection(), 0);
|
||||
@@ -273,6 +276,22 @@ bool AsmPrinter::EmitSpecialLLVMGlobal(const GlobalVariable *GV) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// EmitLLVMUsedList - For targets that define a TAI::UsedDirective, mark each
|
||||
/// global in the specified llvm.used list as being used with this directive.
|
||||
void AsmPrinter::EmitLLVMUsedList(Constant *List) {
|
||||
const char *Directive = TAI->getUsedDirective();
|
||||
|
||||
// Should be an array of 'sbyte*'.
|
||||
ConstantArray *InitList = dyn_cast<ConstantArray>(List);
|
||||
if (InitList == 0) return;
|
||||
|
||||
for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) {
|
||||
O << Directive;
|
||||
EmitConstantValueOnly(InitList->getOperand(i));
|
||||
O << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
/// EmitXXStructorList - Emit the ctor or dtor list. This just prints out the
|
||||
/// function pointers, ignoring the init priority.
|
||||
void AsmPrinter::EmitXXStructorList(Constant *List) {
|
||||
|
||||
Reference in New Issue
Block a user