1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

Make all darwin ppc stubs local.

This fixes pr15763.
Patch by David Fang.

llvm-svn: 180657
This commit is contained in:
Rafael Espindola 2013-04-27 00:43:16 +00:00
parent c576d690b0
commit ef355ff0c1
2 changed files with 14 additions and 6 deletions

View File

@ -14,6 +14,7 @@
#include "PPC.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/Twine.h"
#include "llvm/CodeGen/AsmPrinter.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
@ -51,7 +52,14 @@ static MCSymbol *GetSymbolFromOperand(const MachineOperand &MO, AsmPrinter &AP){
// before we return the symbol.
if (MO.getTargetFlags() == PPCII::MO_DARWIN_STUB) {
Name += "$stub";
MCSymbol *Sym = Ctx.GetOrCreateSymbol(Name.str());
const char *PGP = AP.MAI->getPrivateGlobalPrefix();
const char *Prefix = "";
if (!Name.startswith(PGP)) {
// http://llvm.org/bugs/show_bug.cgi?id=15763
// all stubs and lazy_ptrs should be local symbols, which need leading 'L'
Prefix = PGP;
}
MCSymbol *Sym = Ctx.GetOrCreateSymbol(Twine(Prefix) + Twine(Name));
MachineModuleInfoImpl::StubValueTy &StubSym =
getMachOMMI(AP).getFnStubEntry(Sym);
if (StubSym.getPointer())

View File

@ -6,16 +6,16 @@ entry:
}
; CHECK: _test1:
; CHECK: bl ___floatditf$stub
; CHECK: bl L___floatditf$stub
; CHECK: .section __TEXT,__symbol_stub1,symbol_stubs,pure_instructions,16
; CHECK: ___floatditf$stub:
; CHECK: L___floatditf$stub:
; CHECK: .indirect_symbol ___floatditf
; CHECK: lis r11, ha16(___floatditf$lazy_ptr)
; CHECK: lwzu r12, lo16(___floatditf$lazy_ptr)(r11)
; CHECK: lis r11, ha16(L___floatditf$lazy_ptr)
; CHECK: lwzu r12, lo16(L___floatditf$lazy_ptr)(r11)
; CHECK: mtctr r12
; CHECK: bctr
; CHECK: .section __DATA,__la_symbol_ptr,lazy_symbol_pointers
; CHECK: ___floatditf$lazy_ptr:
; CHECK: L___floatditf$lazy_ptr:
; CHECK: .indirect_symbol ___floatditf
; CHECK: .long dyld_stub_binding_helper