enable fp-elim when debug info is disabled

This can almost be fully disabled, as it no longer breaks retrieving a
backtrace on OS X as verified by @alexcrichton. However, it still
breaks retrieving the values of parameters. This should be fixable in
the future via a proper location list...

Closes #7477
This commit is contained in:
Daniel Micay 2014-01-28 14:59:28 -05:00
parent 17c42db6d1
commit cb263e875e
4 changed files with 10 additions and 7 deletions

View File

@ -128,6 +128,9 @@ pub fn run_passes(sess: Session,
};
let use_softfp = sess.opts.debugging_opts & session::USE_SOFTFP != 0;
// FIXME: #11906: Omitting frame pointers breaks retrieving the value of a parameter.
let no_fp_elim = sess.opts.debuginfo;
let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|T| {
sess.opts.target_cpu.with_c_str(|CPU| {
sess.opts.target_feature.with_c_str(|Features| {
@ -137,7 +140,8 @@ pub fn run_passes(sess: Session,
lib::llvm::RelocPIC,
OptLevel,
true,
use_softfp
use_softfp,
no_fp_elim
)
})
})

View File

@ -1728,7 +1728,8 @@ pub fn LLVMRustCreateTargetMachine(Triple: *c_char,
Reloc: RelocMode,
Level: CodeGenOptLevel,
EnableSegstk: bool,
UseSoftFP: bool) -> TargetMachineRef;
UseSoftFP: bool,
NoFramePointerElim: bool) -> TargetMachineRef;
pub fn LLVMRustDisposeTargetMachine(T: TargetMachineRef);
pub fn LLVMRustAddAnalysisPasses(T: TargetMachineRef,
PM: PassManagerRef,

View File

@ -68,7 +68,8 @@ LLVMRustCreateTargetMachine(const char *triple,
Reloc::Model RM,
CodeGenOpt::Level OptLevel,
bool EnableSegmentedStacks,
bool UseSoftFloat) {
bool UseSoftFloat,
bool NoFramePointerElim) {
std::string Error;
Triple Trip(Triple::normalize(triple));
const llvm::Target *TheTarget = TargetRegistry::lookupTarget(Trip.getTriple(),
@ -79,7 +80,7 @@ LLVMRustCreateTargetMachine(const char *triple,
}
TargetOptions Options;
Options.NoFramePointerElim = true;
Options.NoFramePointerElim = NoFramePointerElim;
Options.EnableSegmentedStacks = EnableSegmentedStacks;
Options.FloatABIType = FloatABI::Default;
Options.UseSoftFloat = UseSoftFloat;

View File

@ -244,6 +244,3 @@ fn main() {
while_expr(40, 41, 42);
loop_expr(43, 44, 45);
}