mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Fix logic for not emitting no-dead-strip for some
objects in llvm.used (thanks Anton). Makes visible the magic 'l' prefix for symbols on Darwin which are to be passed through the assembler, then removed at linktime (previously all references to this had been hidden in the ObjC FE code, oh well). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55973 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -452,7 +452,9 @@ const GlobalValue * AsmPrinter::findGlobalValue(const Constant *CV) {
|
||||
|
||||
/// EmitLLVMUsedList - For targets that define a TAI::UsedDirective, mark each
|
||||
/// global in the specified llvm.used list as being used with this directive.
|
||||
/// Non-globals (i.e. internal linkage) should not be emitted.
|
||||
/// Internally linked data beginning with the PrivateGlobalPrefix or the
|
||||
/// LessPrivateGlobalPrefix does not have the directive emitted (this
|
||||
/// occurs in ObjC metadata).
|
||||
void AsmPrinter::EmitLLVMUsedList(Constant *List) {
|
||||
const char *Directive = TAI->getUsedDirective();
|
||||
|
||||
@@ -462,7 +464,17 @@ void AsmPrinter::EmitLLVMUsedList(Constant *List) {
|
||||
|
||||
for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) {
|
||||
const GlobalValue *GV = findGlobalValue(InitList->getOperand(i));
|
||||
if (GV && (!GV->hasInternalLinkage() || isa<Function>(GV))) {
|
||||
if (GV) {
|
||||
if (GV->hasInternalLinkage() && !isa<Function>(GV) &&
|
||||
((strlen(TAI->getPrivateGlobalPrefix()) != 0 &&
|
||||
Mang->getValueName(GV)
|
||||
.substr(0,strlen(TAI->getPrivateGlobalPrefix())) ==
|
||||
TAI->getPrivateGlobalPrefix()) ||
|
||||
(strlen(TAI->getLessPrivateGlobalPrefix()) != 0 &&
|
||||
Mang->getValueName(GV)
|
||||
.substr(0,strlen(TAI->getLessPrivateGlobalPrefix())) ==
|
||||
TAI->getLessPrivateGlobalPrefix())))
|
||||
continue;
|
||||
O << Directive;
|
||||
EmitConstantValueOnly(InitList->getOperand(i));
|
||||
O << '\n';
|
||||
|
Reference in New Issue
Block a user