eliminate the PPC backend's implementation of EmitExternalGlobal
authorChris Lattner <sabre@nondot.org>
Wed, 16 Sep 2009 00:14:19 +0000 (00:14 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 16 Sep 2009 00:14:19 +0000 (00:14 +0000)
and use PersonalityPrefix/Suffix to achieve the same effect (like
the x86 backend).

This changes the code generated for ppc static mode, but guess what,
we were generating this before:

.byte 0x9B                                        ; Personality (indirect pcrel sdata4)
.long ___gxx_personality_v0-.                     ; Personality

which is not correct! (it is not an 'indirect' reference).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81965 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
lib/Target/PowerPC/PPCMCAsmInfo.cpp

index 9c02aefdc4cd0a99462afb685dad623798a76add..09f4af35a28d38c4b564a4086517d216e4c2138c 100644 (file)
@@ -341,8 +341,6 @@ namespace {
                                const char *Modifier);
 
     virtual bool runOnMachineFunction(MachineFunction &F) = 0;
-
-    virtual void EmitExternalGlobal(const GlobalVariable *GV);
   };
 
   /// PPCLinuxAsmPrinter - PowerPC assembly printer, customized for Linux
@@ -462,19 +460,6 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) {
   }
 }
 
-/// EmitExternalGlobal - In this case we need to use the indirect symbol.
-///
-void PPCAsmPrinter::EmitExternalGlobal(const GlobalVariable *GV) {
-  std::string Name;
-  
-  if (TM.getRelocationModel() != Reloc::Static) {
-    Name = Mang->getMangledName(GV, "$non_lazy_ptr", true);
-  } else {
-    Name = Mang->getMangledName(GV);
-  }
-  O << Name;
-}
-
 /// PrintAsmOperand - Print out an operand for an inline asm expression.
 ///
 bool PPCAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
index c87879b2a332a06222e1936d5f866bd2ef2156c4..6aad786f1d3ad3e1ce31e2bbe9c2a954b840df30 100644 (file)
@@ -22,6 +22,9 @@ PPCMCAsmInfoDarwin::PPCMCAsmInfoDarwin(bool is64Bit) {
   if (!is64Bit)
     Data64bitsDirective = 0;      // We can't emit a 64-bit unit in PPC32 mode.
   AssemblerDialect = 1;           // New-Style mnemonics.
+  
+  PersonalityPrefix = "L";
+  PersonalitySuffix = "$non_lazy_ptr";
 }
 
 PPCLinuxMCAsmInfo::PPCLinuxMCAsmInfo(bool is64Bit) {