mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
Make all darwin ppc stubs local.
This fixes pr15763. Patch by David Fang. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180657 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "PPC.h"
|
#include "PPC.h"
|
||||||
#include "llvm/ADT/SmallString.h"
|
#include "llvm/ADT/SmallString.h"
|
||||||
|
#include "llvm/ADT/Twine.h"
|
||||||
#include "llvm/CodeGen/AsmPrinter.h"
|
#include "llvm/CodeGen/AsmPrinter.h"
|
||||||
#include "llvm/CodeGen/MachineFunction.h"
|
#include "llvm/CodeGen/MachineFunction.h"
|
||||||
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
|
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
|
||||||
@@ -51,7 +52,14 @@ static MCSymbol *GetSymbolFromOperand(const MachineOperand &MO, AsmPrinter &AP){
|
|||||||
// before we return the symbol.
|
// before we return the symbol.
|
||||||
if (MO.getTargetFlags() == PPCII::MO_DARWIN_STUB) {
|
if (MO.getTargetFlags() == PPCII::MO_DARWIN_STUB) {
|
||||||
Name += "$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 =
|
MachineModuleInfoImpl::StubValueTy &StubSym =
|
||||||
getMachOMMI(AP).getFnStubEntry(Sym);
|
getMachOMMI(AP).getFnStubEntry(Sym);
|
||||||
if (StubSym.getPointer())
|
if (StubSym.getPointer())
|
||||||
|
@@ -6,16 +6,16 @@ entry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
; CHECK: _test1:
|
; CHECK: _test1:
|
||||||
; CHECK: bl ___floatditf$stub
|
; CHECK: bl L___floatditf$stub
|
||||||
; CHECK: .section __TEXT,__symbol_stub1,symbol_stubs,pure_instructions,16
|
; CHECK: .section __TEXT,__symbol_stub1,symbol_stubs,pure_instructions,16
|
||||||
; CHECK: ___floatditf$stub:
|
; CHECK: L___floatditf$stub:
|
||||||
; CHECK: .indirect_symbol ___floatditf
|
; CHECK: .indirect_symbol ___floatditf
|
||||||
; CHECK: lis r11, ha16(___floatditf$lazy_ptr)
|
; CHECK: lis r11, ha16(L___floatditf$lazy_ptr)
|
||||||
; CHECK: lwzu r12, lo16(___floatditf$lazy_ptr)(r11)
|
; CHECK: lwzu r12, lo16(L___floatditf$lazy_ptr)(r11)
|
||||||
; CHECK: mtctr r12
|
; CHECK: mtctr r12
|
||||||
; CHECK: bctr
|
; CHECK: bctr
|
||||||
; CHECK: .section __DATA,__la_symbol_ptr,lazy_symbol_pointers
|
; CHECK: .section __DATA,__la_symbol_ptr,lazy_symbol_pointers
|
||||||
; CHECK: ___floatditf$lazy_ptr:
|
; CHECK: L___floatditf$lazy_ptr:
|
||||||
; CHECK: .indirect_symbol ___floatditf
|
; CHECK: .indirect_symbol ___floatditf
|
||||||
; CHECK: .long dyld_stub_binding_helper
|
; CHECK: .long dyld_stub_binding_helper
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user