diff options
-rw-r--r-- | include/llvm/CodeGen/AsmPrinter.h | 9 | ||||
-rw-r--r-- | lib/CodeGen/AsmPrinter.cpp | 10 | ||||
-rw-r--r-- | lib/CodeGen/DwarfWriter.cpp | 4 |
3 files changed, 20 insertions, 3 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 3632cc4071..8f73ce7f6c 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -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 diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp index 9f5447fa5f..e9542fc6c1 100644 --- a/lib/CodeGen/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter.cpp @@ -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()) diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 8fe8b4e762..1c52c5bf5d 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -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(); |