Basic support for getGlobalLinkName.
authorJim Laskey <jlaskey@mac.com>
Tue, 17 Oct 2006 13:41:07 +0000 (13:41 +0000)
committerJim Laskey <jlaskey@mac.com>
Tue, 17 Oct 2006 13:41:07 +0000 (13:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30997 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter.cpp
lib/CodeGen/DwarfWriter.cpp

index 3632cc40714ad567295a8de43ed444801c2c49b6..8f73ce7f6c8782c734623fd8e8d805ad60564087 100644 (file)
@@ -99,6 +99,13 @@ namespace llvm {
     /// specified global, returned in log form.  This includes an explicitly
     /// requested alignment (if the global has one).
     unsigned getPreferredAlignmentLog(const GlobalVariable *GV) const;
+    
+    /// getGlobalLinkName - Returns the asm/link name of of the specified
+    /// global variable.  Should be overridden by each target asm printer to
+    /// generate the appropriate value.
+    virtual void getGlobalLinkName(const GlobalVariable *GV,
+                                   std::string &LinkName);
+
   protected:
     /// doInitialization - Set up the AsmPrinter when we are working on a new
     /// module.  If your pass overrides this, it must make sure to explicitly
@@ -167,7 +174,7 @@ namespace llvm {
     /// special global used by LLVM.  If so, emit it and return true, otherwise
     /// do nothing and return false.
     bool EmitSpecialLLVMGlobal(const GlobalVariable *GV);
-
+    
     /// EmitAlignment - Emit an alignment directive to the specified power of
     /// two boundary.  For example, if you pass in 3 here, you will get an 8
     /// byte alignment.  If a global value is specified, and if that global has
index 9f5447fa5fd29a0b4488816b5cee2b6ab87f0a6b..e9542fc6c1381ed8a1edb4c065c55690d25db29c 100644 (file)
@@ -349,6 +349,16 @@ unsigned AsmPrinter::getPreferredAlignmentLog(const GlobalVariable *GV) const {
   return Alignment;
 }
 
+/// getGlobalLinkName - Returns the asm/link name of of the specified
+/// global variable.  Should be overridden by each target asm printer to
+/// generate the appropriate value.
+void AsmPrinter::getGlobalLinkName(const GlobalVariable *GV,
+                                  std::string &LinkName) {
+  // Default action is to use a global symbol.                              
+  LinkName = TAI->getGlobalPrefix();
+  LinkName += GV->getName();
+}
+
 // EmitAlignment - Emit an alignment directive to the specified power of two.
 void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV) const {
   if (GV && GV->getAlignment())
index 8fe8b4e76273aa41c48c208ba8d67143ff581295..1c52c5bf5d1596062ebf53020b13fe39d91d4e7f 100644 (file)
@@ -1634,8 +1634,8 @@ DIE *DwarfWriter::NewGlobalVariable(GlobalVariableDesc *GVD) {
   AddSourceLine(VariableDie, UnitDesc, GVD->getLine());
   
   // Work up linkage name.
-  std::string LinkageName(TAI->getGlobalPrefix());
-  LinkageName += GV->getName();
+  std::string LinkageName;
+  Asm->getGlobalLinkName(GV, LinkageName);
 
   // Add address.
   DIEBlock *Block = new DIEBlock();