aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2008-09-09 01:21:22 +0000
committerDale Johannesen <dalej@apple.com>2008-09-09 01:21:22 +0000
commit2d34f9f9db93f596ea731c546d833ab5d6bb5735 (patch)
tree38fb163f96e48210e7ebb62a66ef0c6c9b48e23d /lib
parent181f4e4c081baf26dc872ece93b0152e6af68f0b (diff)
downloadexternal_llvm-2d34f9f9db93f596ea731c546d833ab5d6bb5735.zip
external_llvm-2d34f9f9db93f596ea731c546d833ab5d6bb5735.tar.gz
external_llvm-2d34f9f9db93f596ea731c546d833ab5d6bb5735.tar.bz2
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
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/AsmPrinter/AsmPrinter.cpp16
-rw-r--r--lib/Target/ARM/ARMTargetAsmInfo.cpp1
-rw-r--r--lib/Target/PowerPC/PPCTargetAsmInfo.cpp1
-rw-r--r--lib/Target/TargetAsmInfo.cpp1
-rw-r--r--lib/Target/X86/X86TargetAsmInfo.cpp1
5 files changed, 18 insertions, 2 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 273253a..f041f3b 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -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';
diff --git a/lib/Target/ARM/ARMTargetAsmInfo.cpp b/lib/Target/ARM/ARMTargetAsmInfo.cpp
index 3e05735..a1a00a2 100644
--- a/lib/Target/ARM/ARMTargetAsmInfo.cpp
+++ b/lib/Target/ARM/ARMTargetAsmInfo.cpp
@@ -62,6 +62,7 @@ ARMDarwinTargetAsmInfo::ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM):
GlobalPrefix = "_";
PrivateGlobalPrefix = "L";
+ LessPrivateGlobalPrefix = "l";
StringConstantPrefix = "\1LC";
BSSSection = 0; // no BSS section
ZeroDirective = "\t.space\t";
diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
index 1b8c1a5..fc98e57 100644
--- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
+++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
@@ -38,6 +38,7 @@ PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM):
CommentString = ";";
GlobalPrefix = "_";
PrivateGlobalPrefix = "L";
+ LessPrivateGlobalPrefix = "l";
StringConstantPrefix = "\1LC";
ConstantPoolSection = "\t.const\t";
JumpTableDataSection = ".const";
diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index 6baebd0..06b77dd 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -50,6 +50,7 @@ TargetAsmInfo::TargetAsmInfo() :
CommentString("#"),
GlobalPrefix(""),
PrivateGlobalPrefix("."),
+ LessPrivateGlobalPrefix(""),
JumpTableSpecialLabelPrefix(0),
GlobalVarAddrPrefix(""),
GlobalVarAddrSuffix(""),
diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp
index be390c2..64858f8 100644
--- a/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -136,6 +136,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM):
Data64bitsDirective = 0; // we can't emit a 64-bit unit
ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
PrivateGlobalPrefix = "L"; // Marker for constant pool idxs
+ LessPrivateGlobalPrefix = "l"; // Marker for some ObjC metadata
BSSSection = 0; // no BSS section.
ZeroFillDirective = "\t.zerofill\t"; // Uses .zerofill
if (DTM->getRelocationModel() != Reloc::Static)