[mips] Add '-mrelax-pic-calls', '-mno-relax-pic-calls'
These two options enable/disable emission of R_{MICRO}MIPS_JALR fixups along with PIC calls. The linker may then try to turn PIC calls into direct jumps. By default, these fixups do get emitted by the backend, use '-mno-relax-pic-calls' to omit them. Differential revision: https://reviews.llvm.org/D56878 llvm-svn: 351579
This commit is contained in:
parent
eaa421d1f9
commit
99113a0ccf
|
@ -2418,6 +2418,14 @@ def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_mips_Features_Group>,
|
|||
def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_mips_Features_Group>,
|
||||
HelpText<"Disable odd single-precision floating point registers">,
|
||||
Flags<[HelpHidden]>;
|
||||
def mrelax_pic_calls : Flag<["-"], "mrelax-pic-calls">,
|
||||
Group<m_mips_Features_Group>,
|
||||
HelpText<"Try turning PIC calls (j{al}r{c} $25) into direct calls "
|
||||
"(MIPS only)">, Flags<[HelpHidden]>;
|
||||
def mno_relax_pic_calls : Flag<["-"], "mno-relax-pic-calls">,
|
||||
Group<m_mips_Features_Group>,
|
||||
HelpText<"Do not try turning PIC calls (j{al}r{c} $25) into direct calls "
|
||||
"(MIPS only)">, Flags<[HelpHidden]>;
|
||||
def mglibc : Flag<["-"], "mglibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
|
||||
def muclibc : Flag<["-"], "muclibc">, Group<m_libc_Group>, Flags<[HelpHidden]>;
|
||||
def module_file_info : Flag<["-"], "module-file-info">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
|
||||
|
|
|
@ -1716,6 +1716,14 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
|
|||
} else
|
||||
D.Diag(diag::warn_target_unsupported_compact_branches) << CPUName;
|
||||
}
|
||||
|
||||
if (Arg *A = Args.getLastArg(options::OPT_mrelax_pic_calls,
|
||||
options::OPT_mno_relax_pic_calls)) {
|
||||
if (A->getOption().matches(options::OPT_mno_relax_pic_calls)) {
|
||||
CmdArgs.push_back("-mllvm");
|
||||
CmdArgs.push_back("-mips-jalr-reloc=0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Clang::AddPPCTargetArgs(const ArgList &Args,
|
||||
|
|
|
@ -444,3 +444,15 @@
|
|||
// RUN: -mginv -mno-ginv 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-NO-GINV %s
|
||||
// CHECK-NO-GINV: "-target-feature" "-ginv"
|
||||
//
|
||||
// -mrelax-pic-calls
|
||||
// RUN: %clang -target mips-unknown-linux-gnu -### -c %s \
|
||||
// RUN: -mno-relax-pic-calls -mrelax-pic-calls 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-RELAX-PIC-CALLS %s
|
||||
// CHECK-RELAX-PIC-CALLS-NOT: "-mllvm" "-mips-jalr-reloc=0"
|
||||
//
|
||||
// -mno-relax-pic-calls
|
||||
// RUN: %clang -target mips-unknown-linux-gnu -### -c %s \
|
||||
// RUN: -mrelax-pic-calls -mno-relax-pic-calls 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-NO-RELAX-PIC-CALLS %s
|
||||
// CHECK-NO-RELAX-PIC-CALLS: "-mllvm" "-mips-jalr-reloc=0"
|
||||
|
|
Loading…
Reference in New Issue