diff options
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 41 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 53 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 12 | 
4 files changed, 73 insertions, 39 deletions
| diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index ed7077129c7..e850ef1983b 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -127,10 +127,10 @@ namespace {          Name += ACPV->getSymbol();        if (ACPV->isNonLazyPointer()) {          GVNonLazyPtrs.insert(Name); -        O << TAI->getPrivateGlobalPrefix() << Name << "$non_lazy_ptr"; +        printSuffixedName(Name, "$non_lazy_ptr");        } else if (ACPV->isStub()) {          FnStubs.insert(Name); -        O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; +        printSuffixedName(Name, "$stub");        } else          O << Name;        if (ACPV->hasModifier()) O << "(" << ACPV->getModifier() << ")"; @@ -295,7 +295,7 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int opNum,                    GV->hasLinkOnceLinkage());      if (isExt && isCallOp && Subtarget->isTargetDarwin() &&          TM.getRelocationModel() != Reloc::Static) { -      O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; +      printSuffixedName(Name, "$stub");        FnStubs.insert(Name);      } else        O << Name; @@ -318,7 +318,7 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int opNum,      Name += MO.getSymbolName();      if (isCallOp && Subtarget->isTargetDarwin() &&          TM.getRelocationModel() != Reloc::Static) { -      O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; +      printSuffixedName(Name, "$stub");        FnStubs.insert(Name);      } else        O << Name; @@ -1004,21 +1004,32 @@ bool ARMAsmPrinter::doFinalization(Module &M) {        EmitAlignment(2);        O << "\t.code\t32\n"; -      O << "L" << *i << "$stub:\n"; +      std::string p = *i; +      printSuffixedName(p, "$stub"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n"; -      O << "\tldr ip, L" << *i << "$slp\n"; +      O << "\tldr ip, "; +      printSuffixedName(p, "$slp"); +      O << "\n";        if (TM.getRelocationModel() == Reloc::PIC_) { -        O << "L" << *i << "$scv:\n"; +        printSuffixedName(p, "$scv"); +        O << ":\n";          O << "\tadd ip, pc, ip\n";        }        O << "\tldr pc, [ip, #0]\n"; -      O << "L" << *i << "$slp:\n"; -      if (TM.getRelocationModel() == Reloc::PIC_) -        O << "\t.long\tL" << *i << "$lazy_ptr-(L" << *i << "$scv+8)\n"; -      else -        O << "\t.long\tL" << *i << "$lazy_ptr\n"; +      printSuffixedName(p, "$slp"); +      O << ":\n"; +      O << "\t.long\t"; +      printSuffixedName(p, "$lazy_ptr"); +      if (TM.getRelocationModel() == Reloc::PIC_) { +        O << "-("; +        printSuffixedName(p, "$scv"); +        O << "+8)\n"; +      } else +        O << "\n";        SwitchToDataSection(".lazy_symbol_pointer", 0); -      O << "L" << *i << "$lazy_ptr:\n"; +      printSuffixedName(p, "$lazy_ptr"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n";        O << "\t.long\tdyld_stub_binding_helper\n";      } @@ -1029,7 +1040,9 @@ bool ARMAsmPrinter::doFinalization(Module &M) {        SwitchToDataSection(".non_lazy_symbol_pointer", 0);      for (std::set<std::string>::iterator i = GVNonLazyPtrs.begin(),             e = GVNonLazyPtrs.end(); i != e; ++i) { -      O << "L" << *i << "$non_lazy_ptr:\n"; +      std::string p = *i; +      printSuffixedName(p, "$non_lazy_ptr"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n";        O << "\t.long\t0\n";      } diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index bd4975c42f7..75bf3b36e3f 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -189,7 +189,7 @@ namespace {              // Dynamically-resolved functions need a stub for the function.              std::string Name = Mang->getValueName(GV);              FnStubs.insert(Name); -            O << "L" << Name << "$stub"; +            printSuffixedName(Name, "$stub");              if (GV->hasExternalWeakLinkage())                ExtWeakSymbols.insert(GV);              return; @@ -198,7 +198,7 @@ namespace {          if (MO.getType() == MachineOperand::MO_ExternalSymbol) {            std::string Name(TAI->getGlobalPrefix()); Name += MO.getSymbolName();            FnStubs.insert(Name); -          O << "L" << Name << "$stub"; +          printSuffixedName(Name, "$stub");            return;          }        } @@ -377,7 +377,7 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) {      if (TM.getRelocationModel() != Reloc::Static) {        std::string Name(TAI->getGlobalPrefix()); Name += MO.getSymbolName();        GVStubs.insert(Name); -      O << "L" << Name << "$non_lazy_ptr"; +      printSuffixedName(Name, "$non_lazy_ptr");        return;      }      O << TAI->getGlobalPrefix() << MO.getSymbolName(); @@ -392,7 +392,7 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) {        if (((GV->isDeclaration() || GV->hasWeakLinkage() ||              GV->hasLinkOnceLinkage() || GV->hasCommonLinkage()))) {          GVStubs.insert(Name); -        O << "L" << Name << "$non_lazy_ptr"; +        printSuffixedName(Name, "$non_lazy_ptr");          if (GV->hasExternalWeakLinkage())            ExtWeakSymbols.insert(GV);          return; @@ -422,7 +422,7 @@ 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"; +    printSuffixedName(Name, "$non_lazy_ptr");      return;    }    O << Name; @@ -1051,22 +1051,30 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {        SwitchToTextSection("\t.section __TEXT,__picsymbolstub1,symbol_stubs,"                            "pure_instructions,32");        EmitAlignment(4); -      O << "L" << *i << "$stub:\n"; +      std::string p = *i; +      std::string L0p = (p[0]=='\"') ? "\"L0$" + p.substr(1) : "L0$" + p ; +      printSuffixedName(p, "$stub"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n";        O << "\tmflr r0\n"; -      O << "\tbcl 20,31,L0$" << *i << "\n"; -      O << "L0$" << *i << ":\n"; +      O << "\tbcl 20,31," << L0p << "\n"; +      O << L0p << ":\n";        O << "\tmflr r11\n"; -      O << "\taddis r11,r11,ha16(L" << *i << "$lazy_ptr-L0$" << *i << ")\n"; +      O << "\taddis r11,r11,ha16("; +      printSuffixedName(p, "$lazy_ptr"); +      O << "-" << L0p << ")\n";        O << "\tmtlr r0\n";        if (isPPC64) -        O << "\tldu r12,lo16(L" << *i << "$lazy_ptr-L0$" << *i << ")(r11)\n"; +        O << "\tldu r12,lo16(";        else -        O << "\tlwzu r12,lo16(L" << *i << "$lazy_ptr-L0$" << *i << ")(r11)\n"; +        O << "\tlwzu r12,lo16("; +      printSuffixedName(p, "$lazy_ptr"); +      O << "-" << L0p << ")(r11)\n";        O << "\tmtctr r12\n";        O << "\tbctr\n";        SwitchToDataSection(".lazy_symbol_pointer"); -      O << "L" << *i << "$lazy_ptr:\n"; +      printSuffixedName(p, "$lazy_ptr"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n";        if (isPPC64)          O << "\t.quad dyld_stub_binding_helper\n"; @@ -1079,17 +1087,24 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {        SwitchToTextSection("\t.section __TEXT,__symbol_stub1,symbol_stubs,"                            "pure_instructions,16");        EmitAlignment(4); -      O << "L" << *i << "$stub:\n"; +      std::string p = *i; +      printSuffixedName(p, "$stub"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n"; -      O << "\tlis r11,ha16(L" << *i << "$lazy_ptr)\n"; +      O << "\tlis r11,ha16("; +      printSuffixedName(p, "$lazy_ptr"); +      O << ")\n";        if (isPPC64) -        O << "\tldu r12,lo16(L" << *i << "$lazy_ptr)(r11)\n"; +        O << "\tldu r12,lo16(";        else -        O << "\tlwzu r12,lo16(L" << *i << "$lazy_ptr)(r11)\n"; +        O << "\tlwzu r12,lo16("; +      printSuffixedName(p, "$lazy_ptr"); +      O << ")(r11)\n";        O << "\tmtctr r12\n";        O << "\tbctr\n";        SwitchToDataSection(".lazy_symbol_pointer"); -      O << "L" << *i << "$lazy_ptr:\n"; +      printSuffixedName(p, "$lazy_ptr"); +      O << ":\n";        O << "\t.indirect_symbol " << *i << "\n";        if (isPPC64)          O << "\t.quad dyld_stub_binding_helper\n"; @@ -1115,7 +1130,9 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {      SwitchToDataSection(".non_lazy_symbol_pointer");      for (std::set<std::string>::iterator I = GVStubs.begin(),           E = GVStubs.end(); I != E; ++I) { -      O << "L" << *I << "$non_lazy_ptr:\n"; +      std::string p = *I; +      printSuffixedName(p, "$non_lazy_ptr"); +      O << ":\n";        O << "\t.indirect_symbol " << *I << "\n";        if (isPPC64)          O << "\t.quad\t0\n"; diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index 4659deb1467..5cae112f578 100644 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -314,10 +314,10 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,          // Dynamically-resolved functions need a stub for the function.          if (isCallOp && isa<Function>(GV)) {            FnStubs.insert(Name); -          O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; +          printSuffixedName(Name, "$stub");          } else {            GVStubs.insert(Name); -          O << TAI->getPrivateGlobalPrefix() << Name << "$non_lazy_ptr"; +          printSuffixedName(Name, "$non_lazy_ptr");          }        } else {          if (GV->hasDLLImportLinkage()) @@ -398,7 +398,7 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,      Name += MO.getSymbolName();      if (isCallOp && printStub(TM, Subtarget)) {        FnStubs.insert(Name); -      O << TAI->getPrivateGlobalPrefix() << Name << "$stub"; +      printSuffixedName(Name, "$stub");        return;      }      if (!isCallOp) diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index a99588b13b3..caccf52b075 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -385,8 +385,10 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {           i != e; ++i, ++j) {        SwitchToDataSection("\t.section __IMPORT,__jump_table,symbol_stubs,"                            "self_modifying_code+pure_instructions,5", 0); -      O << "L" << *i << "$stub:\n"; -      O << "\t.indirect_symbol " << *i << "\n"; +      std::string p = *i; +      printSuffixedName(p, "$stub"); +      O << ":\n"; +      O << "\t.indirect_symbol " << p << "\n";        O << "\thlt ; hlt ; hlt ; hlt ; hlt\n";      } @@ -408,8 +410,10 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {                      "\t.section __IMPORT,__pointers,non_lazy_symbol_pointers");      for (std::set<std::string>::iterator i = GVStubs.begin(), e = GVStubs.end();           i != e; ++i) { -      O << "L" << *i << "$non_lazy_ptr:\n"; -      O << "\t.indirect_symbol " << *i << "\n"; +      std::string p = *i; +      printSuffixedName(p, "$non_lazy_ptr"); +      O << ":\n"; +      O << "\t.indirect_symbol " << p << "\n";        O << "\t.long\t0\n";      } | 

