add support for @PLT and friends on external symbols, fixes
authorChris Lattner <sabre@nondot.org>
Wed, 9 Sep 2009 00:10:14 +0000 (00:10 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 9 Sep 2009 00:10:14 +0000 (00:10 +0000)
x86-64-pic-11.ll with the new asmprinter.

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

lib/Target/X86/AsmPrinter/X86MCInstLower.cpp

index 6b1aa8195909c994a98fd210e3dcdd86c609808e..3c8f4031743278629960ff4a5493962eb8c8bb1b 100644 (file)
@@ -112,12 +112,37 @@ MCSymbol *X86ATTAsmPrinter::GetGlobalAddressSymbol(const MachineOperand &MO) {
 }
 
 MCSymbol *X86ATTAsmPrinter::GetExternalSymbolSymbol(const MachineOperand &MO) {
-  std::string Name = Mang->makeNameProper(MO.getSymbolName());
+  std::string Name = MO.getSymbolName();
   if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) {
-    FnStubs[Name+"$stub"] = Name;
     Name += "$stub";
   }
   
+  
+  switch (MO.getTargetFlags()) {
+  default: llvm_unreachable("Unknown target flag on GV operand");
+  case X86II::MO_NO_FLAG:                // No flag.
+  case X86II::MO_GOT_ABSOLUTE_ADDRESS:   // Doesn't modify symbol name.
+  case X86II::MO_PIC_BASE_OFFSET:        // Doesn't modify symbol name.
+    break;
+  case X86II::MO_DLLIMPORT:
+    // Handle dllimport linkage.
+    Name = "__imp_" + Name;
+    break;
+  case X86II::MO_DARWIN_STUB:
+    FnStubs[Name] = MO.getSymbolName();
+    break;
+    // FIXME: These probably should be a modifier on the symbol or something??
+  case X86II::MO_TLSGD:     Name += "@TLSGD";     break;
+  case X86II::MO_GOTTPOFF:  Name += "@GOTTPOFF";  break;
+  case X86II::MO_INDNTPOFF: Name += "@INDNTPOFF"; break;
+  case X86II::MO_TPOFF:     Name += "@TPOFF";     break;
+  case X86II::MO_NTPOFF:    Name += "@NTPOFF";    break;
+  case X86II::MO_GOTPCREL:  Name += "@GOTPCREL";  break;
+  case X86II::MO_GOT:       Name += "@GOT";       break;
+  case X86II::MO_GOTOFF:    Name += "@GOTOFF";    break;
+  case X86II::MO_PLT:       Name += "@PLT";       break;
+  }
+  
   return OutContext.GetOrCreateSymbol(Name);
 }