forked from OSchip/llvm-project
parent
af76e0e58f
commit
18fc09723c
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue