forked from OSchip/llvm-project
[mips] Prevent PIC to be set to level 2
MIPS does not use PIC level 2 for historical reasons, even with -fPIC/-mxgot/multigot options. This patch prevents PIC to be set to level 2 for MIPS. Differential Revision: https://reviews.llvm.org/D44381 llvm-svn: 330118
This commit is contained in:
parent
2bee2022fb
commit
7ca42e890a
|
@ -1007,12 +1007,17 @@ tools::ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) {
|
|||
if ((ROPI || RWPI) && (PIC || PIE))
|
||||
ToolChain.getDriver().Diag(diag::err_drv_ropi_rwpi_incompatible_with_pic);
|
||||
|
||||
// When targettng MIPS64 with N64, the default is PIC, unless -mno-abicalls is
|
||||
// used.
|
||||
if ((Triple.getArch() == llvm::Triple::mips64 ||
|
||||
Triple.getArch() == llvm::Triple::mips64el) &&
|
||||
Args.hasArg(options::OPT_mno_abicalls))
|
||||
return std::make_tuple(llvm::Reloc::Static, 0U, false);
|
||||
if (Triple.getArch() == llvm::Triple::mips ||
|
||||
Triple.getArch() == llvm::Triple::mipsel ||
|
||||
Triple.getArch() == llvm::Triple::mips64 ||
|
||||
Triple.getArch() == llvm::Triple::mips64el) {
|
||||
// When targettng MIPS with -mno-abicalls, it's always static.
|
||||
if(Args.hasArg(options::OPT_mno_abicalls))
|
||||
return std::make_tuple(llvm::Reloc::Static, 0U, false);
|
||||
// Unlike other architectures, MIPS, even with -fPIC/-mxgot/multigot,
|
||||
// does not use PIC level 2 for historical reasons.
|
||||
IsPICLevelTwo = false;
|
||||
}
|
||||
|
||||
if (PIC)
|
||||
return std::make_tuple(llvm::Reloc::PIC_, IsPICLevelTwo ? 2U : 1U, PIE);
|
||||
|
|
|
@ -292,9 +292,9 @@
|
|||
// RUN: %clang -c %s -target mipsel-linux-android14 -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIC1
|
||||
// RUN: %clang -c %s -target mipsel-linux-android16 -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIE2
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIE1
|
||||
// RUN: %clang -c %s -target mipsel-linux-android24 -### 2>&1 \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIE2
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-PIE1
|
||||
//
|
||||
// 64-bit Android targets are always PIE.
|
||||
// RUN: %clang -c %s -target aarch64-linux-android -### 2>&1 \
|
||||
|
|
Loading…
Reference in New Issue