auto merge of #11879 : thestinger/rust/frame-pointer, r=alexcrichton
This is still used for Rust code (`Options.NoFramePointerElim = true`).
This commit is contained in:
commit
1e23c5c051
5 changed files with 10 additions and 14 deletions
|
@ -26,11 +26,6 @@ endef
|
||||||
$(foreach t,$(CFG_TARGET),$(eval $(call DEF_OSTYPE_VAR,$(t))))
|
$(foreach t,$(CFG_TARGET),$(eval $(call DEF_OSTYPE_VAR,$(t))))
|
||||||
$(foreach t,$(CFG_TARGET),$(info cfg: os for $(t) is $(OSTYPE_$(t))))
|
$(foreach t,$(CFG_TARGET),$(info cfg: os for $(t) is $(OSTYPE_$(t))))
|
||||||
|
|
||||||
# FIXME: no-omit-frame-pointer is just so that task_start_wrapper
|
|
||||||
# has a frame pointer and the stack walker can understand it. Turning off
|
|
||||||
# frame pointers everywhere is overkill
|
|
||||||
CFG_GCCISH_CFLAGS += -fno-omit-frame-pointer
|
|
||||||
|
|
||||||
# On Darwin, we need to run dsymutil so the debugging information ends
|
# On Darwin, we need to run dsymutil so the debugging information ends
|
||||||
# up in the right place. On other platforms, it automatically gets
|
# up in the right place. On other platforms, it automatically gets
|
||||||
# embedded into the executable, so use a no-op command.
|
# embedded into the executable, so use a no-op command.
|
||||||
|
@ -160,7 +155,6 @@ CFG_DEF_SUFFIX_x86_64-unknown-linux-gnu := .linux.def
|
||||||
CFG_LLC_FLAGS_x86_64-unknown-linux-gnu :=
|
CFG_LLC_FLAGS_x86_64-unknown-linux-gnu :=
|
||||||
CFG_INSTALL_NAME_x86_64-unknown-linux-gnu =
|
CFG_INSTALL_NAME_x86_64-unknown-linux-gnu =
|
||||||
CFG_LIBUV_LINK_FLAGS_x86_64-unknown-linux-gnu =
|
CFG_LIBUV_LINK_FLAGS_x86_64-unknown-linux-gnu =
|
||||||
CFG_LLVM_BUILD_ENV_x86_64-unknown-linux-gnu="CXXFLAGS=-fno-omit-frame-pointer"
|
|
||||||
CFG_EXE_SUFFIX_x86_64-unknown-linux-gnu =
|
CFG_EXE_SUFFIX_x86_64-unknown-linux-gnu =
|
||||||
CFG_WINDOWSY_x86_64-unknown-linux-gnu :=
|
CFG_WINDOWSY_x86_64-unknown-linux-gnu :=
|
||||||
CFG_UNIXY_x86_64-unknown-linux-gnu := 1
|
CFG_UNIXY_x86_64-unknown-linux-gnu := 1
|
||||||
|
@ -188,7 +182,6 @@ CFG_DEF_SUFFIX_i686-unknown-linux-gnu := .linux.def
|
||||||
CFG_LLC_FLAGS_i686-unknown-linux-gnu :=
|
CFG_LLC_FLAGS_i686-unknown-linux-gnu :=
|
||||||
CFG_INSTALL_NAME_i686-unknown-linux-gnu =
|
CFG_INSTALL_NAME_i686-unknown-linux-gnu =
|
||||||
CFG_LIBUV_LINK_FLAGS_i686-unknown-linux-gnu =
|
CFG_LIBUV_LINK_FLAGS_i686-unknown-linux-gnu =
|
||||||
CFG_LLVM_BUILD_ENV_i686-unknown-linux-gnu="CXXFLAGS=-fno-omit-frame-pointer"
|
|
||||||
CFG_EXE_SUFFIX_i686-unknown-linux-gnu =
|
CFG_EXE_SUFFIX_i686-unknown-linux-gnu =
|
||||||
CFG_WINDOWSY_i686-unknown-linux-gnu :=
|
CFG_WINDOWSY_i686-unknown-linux-gnu :=
|
||||||
CFG_UNIXY_i686-unknown-linux-gnu := 1
|
CFG_UNIXY_i686-unknown-linux-gnu := 1
|
||||||
|
|
|
@ -128,6 +128,9 @@ pub mod write {
|
||||||
};
|
};
|
||||||
let use_softfp = sess.opts.debugging_opts & session::USE_SOFTFP != 0;
|
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| {
|
let tm = sess.targ_cfg.target_strs.target_triple.with_c_str(|T| {
|
||||||
sess.opts.target_cpu.with_c_str(|CPU| {
|
sess.opts.target_cpu.with_c_str(|CPU| {
|
||||||
sess.opts.target_feature.with_c_str(|Features| {
|
sess.opts.target_feature.with_c_str(|Features| {
|
||||||
|
@ -137,7 +140,8 @@ pub mod write {
|
||||||
lib::llvm::RelocPIC,
|
lib::llvm::RelocPIC,
|
||||||
OptLevel,
|
OptLevel,
|
||||||
true,
|
true,
|
||||||
use_softfp
|
use_softfp,
|
||||||
|
no_fp_elim
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1733,7 +1733,8 @@ pub mod llvm {
|
||||||
Reloc: RelocMode,
|
Reloc: RelocMode,
|
||||||
Level: CodeGenOptLevel,
|
Level: CodeGenOptLevel,
|
||||||
EnableSegstk: bool,
|
EnableSegstk: bool,
|
||||||
UseSoftFP: bool) -> TargetMachineRef;
|
UseSoftFP: bool,
|
||||||
|
NoFramePointerElim: bool) -> TargetMachineRef;
|
||||||
pub fn LLVMRustDisposeTargetMachine(T: TargetMachineRef);
|
pub fn LLVMRustDisposeTargetMachine(T: TargetMachineRef);
|
||||||
pub fn LLVMRustAddAnalysisPasses(T: TargetMachineRef,
|
pub fn LLVMRustAddAnalysisPasses(T: TargetMachineRef,
|
||||||
PM: PassManagerRef,
|
PM: PassManagerRef,
|
||||||
|
|
|
@ -68,7 +68,8 @@ LLVMRustCreateTargetMachine(const char *triple,
|
||||||
Reloc::Model RM,
|
Reloc::Model RM,
|
||||||
CodeGenOpt::Level OptLevel,
|
CodeGenOpt::Level OptLevel,
|
||||||
bool EnableSegmentedStacks,
|
bool EnableSegmentedStacks,
|
||||||
bool UseSoftFloat) {
|
bool UseSoftFloat,
|
||||||
|
bool NoFramePointerElim) {
|
||||||
std::string Error;
|
std::string Error;
|
||||||
Triple Trip(Triple::normalize(triple));
|
Triple Trip(Triple::normalize(triple));
|
||||||
const llvm::Target *TheTarget = TargetRegistry::lookupTarget(Trip.getTriple(),
|
const llvm::Target *TheTarget = TargetRegistry::lookupTarget(Trip.getTriple(),
|
||||||
|
@ -79,7 +80,7 @@ LLVMRustCreateTargetMachine(const char *triple,
|
||||||
}
|
}
|
||||||
|
|
||||||
TargetOptions Options;
|
TargetOptions Options;
|
||||||
Options.NoFramePointerElim = true;
|
Options.NoFramePointerElim = NoFramePointerElim;
|
||||||
Options.EnableSegmentedStacks = EnableSegmentedStacks;
|
Options.EnableSegmentedStacks = EnableSegmentedStacks;
|
||||||
Options.FloatABIType = FloatABI::Default;
|
Options.FloatABIType = FloatABI::Default;
|
||||||
Options.UseSoftFloat = UseSoftFloat;
|
Options.UseSoftFloat = UseSoftFloat;
|
||||||
|
|
|
@ -244,6 +244,3 @@ fn main() {
|
||||||
while_expr(40, 41, 42);
|
while_expr(40, 41, 42);
|
||||||
loop_expr(43, 44, 45);
|
loop_expr(43, 44, 45);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue