aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Laskey <jlaskey@mac.com>2007-02-21 22:47:38 +0000
committerJim Laskey <jlaskey@mac.com>2007-02-21 22:47:38 +0000
commitbda9b0ec7bd6974cebf751ecd23c5434b34054e9 (patch)
treec36ff74f5e1ec34a3e3e707e48b202b3323144ff
parenta15be8ce3aaaebc675f99302e2c5e1c564268322 (diff)
Add support for changes in DwarfWriter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34478 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/CodeGen/AsmPrinter.h5
-rw-r--r--lib/CodeGen/AsmPrinter.cpp12
-rw-r--r--lib/Target/PowerPC/PPCAsmPrinter.cpp14
3 files changed, 31 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h
index 88136c0eae..e3ca8aa663 100644
--- a/include/llvm/CodeGen/AsmPrinter.h
+++ b/include/llvm/CodeGen/AsmPrinter.h
@@ -105,6 +105,10 @@ namespace llvm {
/// generate the appropriate value.
virtual const std::string getGlobalLinkName(const GlobalVariable *GV) const;
+ /// EmitExternalGlobal - Emit the external reference to a global variable.
+ /// Should be overridden if an indirect reference should be used.
+ virtual void EmitExternalGlobal(const GlobalVariable *GV);
+
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
@@ -204,6 +208,7 @@ namespace llvm {
/// EOL - Print a newline character to asm stream. If a comment is present
/// then it will be printed first. Comments should not contain '\n'.
+ void EOL() const;
void EOL(const std::string &Comment) const;
/// EmitULEB128Bytes - Emit an assembler byte data directive to compose an
diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index 771d64ca23..c5d1c3177c 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -370,6 +370,14 @@ const std::string AsmPrinter::getGlobalLinkName(const GlobalVariable *GV) const{
return LinkName;
}
+/// EmitExternalGlobal - Emit the external reference to a global variable.
+/// Should be overridden if an indirect reference should be used.
+void AsmPrinter::EmitExternalGlobal(const GlobalVariable *GV) {
+ O << getGlobalLinkName(GV);
+}
+
+
+
//===----------------------------------------------------------------------===//
/// LEB 128 number encoding.
@@ -440,6 +448,9 @@ void AsmPrinter::PrintHex(int Value) const {
/// EOL - Print a newline character to asm stream. If a comment is present
/// then it will be printed first. Comments should not contain '\n'.
+void AsmPrinter::EOL() const {
+ O << "\n";
+}
void AsmPrinter::EOL(const std::string &Comment) const {
if (AsmVerbose && !Comment.empty()) {
O << "\t"
@@ -569,6 +580,7 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV) const {
O << TAI->getAlignDirective() << NumBits << "\n";
}
+
/// EmitZeros - Emit a block of zeros.
///
void AsmPrinter::EmitZeros(uint64_t NumZeros) const {
diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp
index c3ae5c8bbf..fc952273ff 100644
--- a/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -280,6 +280,8 @@ namespace {
virtual bool runOnMachineFunction(MachineFunction &F) = 0;
virtual bool doFinalization(Module &M) = 0;
+
+ virtual void EmitExternalGlobal(const GlobalVariable *GV);
};
/// LinuxAsmPrinter - PowerPC assembly printer, customized for Linux
@@ -401,6 +403,18 @@ 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 = getGlobalLinkName(GV);
+ if (TM.getRelocationModel() != Reloc::Static) {
+ GVStubs.insert(Name);
+ O << "L" << Name << "$non_lazy_ptr";
+ return;
+ }
+ O << Name;
+}
+
/// PrintAsmOperand - Print out an operand for an inline asm expression.
///
bool PPCAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,