From a1a19f803c8fef05db627a8b73c909a50306e9d6 Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Tue, 17 Oct 2006 13:41:07 +0000 Subject: [PATCH] Basic support for getGlobalLinkName. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30997 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/AsmPrinter.h | 9 ++++++++- lib/CodeGen/AsmPrinter.cpp | 10 ++++++++++ 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 3632cc40714..8f73ce7f6c8 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 9f5447fa5fd..e9542fc6c13 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 8fe8b4e7627..1c52c5bf5d1 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(); -- 2.34.1