Skip to content

Commit

Permalink
auto merge of #11879 : thestinger/rust/frame-pointer, r=alexcrichton
Browse files Browse the repository at this point in the history
This is still used for Rust code (`Options.NoFramePointerElim = true`).
  • Loading branch information
bors committed Jan 29, 2014
2 parents dfb6116 + cb263e8 commit 1e23c5c
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 14 deletions.
7 changes: 0 additions & 7 deletions mk/platform.mk
Expand Up @@ -26,11 +26,6 @@ endef
$(foreach t,$(CFG_TARGET),$(eval $(call DEF_OSTYPE_VAR,$(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
# up in the right place. On other platforms, it automatically gets
# embedded into the executable, so use a no-op command.
Expand Down Expand Up @@ -160,7 +155,6 @@ CFG_DEF_SUFFIX_x86_64-unknown-linux-gnu := .linux.def
CFG_LLC_FLAGS_x86_64-unknown-linux-gnu :=
CFG_INSTALL_NAME_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_WINDOWSY_x86_64-unknown-linux-gnu :=
CFG_UNIXY_x86_64-unknown-linux-gnu := 1
Expand Down Expand Up @@ -188,7 +182,6 @@ CFG_DEF_SUFFIX_i686-unknown-linux-gnu := .linux.def
CFG_LLC_FLAGS_i686-unknown-linux-gnu :=
CFG_INSTALL_NAME_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_WINDOWSY_i686-unknown-linux-gnu :=
CFG_UNIXY_i686-unknown-linux-gnu := 1
Expand Down
6 changes: 5 additions & 1 deletion src/librustc/back/link.rs
Expand Up @@ -128,6 +128,9 @@ pub mod write {
};
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| {
Expand All @@ -137,7 +140,8 @@ pub mod write {
lib::llvm::RelocPIC,
OptLevel,
true,
use_softfp
use_softfp,
no_fp_elim
)
})
})
Expand Down
3 changes: 2 additions & 1 deletion src/librustc/lib/llvm.rs
Expand Up @@ -1733,7 +1733,8 @@ pub mod llvm {
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,
Expand Down
5 changes: 3 additions & 2 deletions src/rustllvm/PassWrapper.cpp
Expand Up @@ -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(),
Expand All @@ -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;
Expand Down
Expand Up @@ -244,6 +244,3 @@ fn main() {
while_expr(40, 41, 42);
loop_expr(43, 44, 45);
}



0 comments on commit 1e23c5c

Please sign in to comment.