forked from OSchip/llvm-project
Use shouldAssumeDSOLocal.
With this it handle -fPIE. llvm-svn: 273499
This commit is contained in:
parent
45bb5c69a0
commit
928a95d0b0
|
@ -23,6 +23,7 @@
|
|||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/CodeGen/Analysis.h"
|
||||
#include "llvm/CodeGen/CallingConvLower.h"
|
||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
|
@ -4287,11 +4288,10 @@ PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag, SDValue &Chain,
|
|||
Reloc::Model RM = DAG.getTarget().getRelocationModel();
|
||||
const Triple &TargetTriple = Subtarget.getTargetTriple();
|
||||
const GlobalValue *GV = G->getGlobal();
|
||||
if ((RM != Reloc::Static &&
|
||||
(TargetTriple.isMacOSX() && TargetTriple.isMacOSXVersionLT(10, 5)) &&
|
||||
!GV->isStrongDefinitionForLinker()) ||
|
||||
(Subtarget.isTargetELF() && !isPPC64 && !GV->hasLocalLinkage() &&
|
||||
RM == Reloc::PIC_)) {
|
||||
bool OldMachOLinker =
|
||||
TargetTriple.isMacOSX() && TargetTriple.isMacOSXVersionLT(10, 5);
|
||||
if (!shouldAssumeDSOLocal(RM, TargetTriple, *GV->getParent(), GV) &&
|
||||
(OldMachOLinker || (Subtarget.isTargetELF() && !isPPC64))) {
|
||||
// PC-relative references to external symbols should go through $stub,
|
||||
// unless we're building with the leopard linker or later, which
|
||||
// automatically synthesizes these stubs.
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: llc < %s -mtriple=powerpc-pc-linux -relocation-model=pic | FileCheck %s
|
||||
|
||||
|
||||
define void @f() {
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @g() {
|
||||
; CHECK: g:
|
||||
; CHECK: bl f{{$}}
|
||||
call void @f()
|
||||
ret void
|
||||
}
|
||||
|
||||
!llvm.module.flags = !{!0}
|
||||
!0 = !{i32 1, !"PIE Level", i32 1}
|
Loading…
Reference in New Issue