about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-01-31 11:18:22 +0000
committerbors <bors@rust-lang.org>2017-01-31 11:18:22 +0000
commit24055d0f2aa8dce5caed7544e6006aa48dceaea5 (patch)
tree1eda8a99b0c452b5dc3bbc0c3992ce2f66b4449c /src
parentcd692cc7ece5cbabddf7798df238791d3681a490 (diff)
parent3f1d3948d6d434b34dd47f132c126a6cb6b8a4ab (diff)
downloadrust-24055d0f2aa8dce5caed7544e6006aa48dceaea5.tar.gz
rust-24055d0f2aa8dce5caed7544e6006aa48dceaea5.zip
Auto merge of #39379 - segevfiner:fix-backtraces-on-i686-pc-windows-gnu, r=alexcrichton
Fix backtraces on i686-pc-windows-gnu by disabling FPO

This might have performance implications. But do note that MSVC
disables FPO by default nowadays and it's use is limited in exception
heavy languages like C++.

See discussion in: #39234
Closes: #28218
Diffstat (limited to 'src')
-rw-r--r--src/librustc_back/target/i686_pc_windows_gnu.rs1
-rw-r--r--src/test/run-pass/backtrace-debuginfo.rs1
-rw-r--r--src/test/run-pass/backtrace.rs4
3 files changed, 1 insertions, 5 deletions
diff --git a/src/librustc_back/target/i686_pc_windows_gnu.rs b/src/librustc_back/target/i686_pc_windows_gnu.rs
index 0c2c5433e6c..29477261392 100644
--- a/src/librustc_back/target/i686_pc_windows_gnu.rs
+++ b/src/librustc_back/target/i686_pc_windows_gnu.rs
@@ -14,6 +14,7 @@ pub fn target() -> TargetResult {
     let mut base = super::windows_base::opts();
     base.cpu = "pentium4".to_string();
     base.max_atomic_width = Some(64);
+    base.eliminate_frame_pointer = false; // Required for backtraces
 
     // Mark all dynamic libraries and executables as compatible with the larger 4GiB address
     // space available to x86 Windows binaries on x86_64.
diff --git a/src/test/run-pass/backtrace-debuginfo.rs b/src/test/run-pass/backtrace-debuginfo.rs
index 015ba75d432..626eccfc9ec 100644
--- a/src/test/run-pass/backtrace-debuginfo.rs
+++ b/src/test/run-pass/backtrace-debuginfo.rs
@@ -37,7 +37,6 @@ macro_rules! dump_and_die {
                     target_os = "ios",
                     target_os = "android",
                     all(target_os = "linux", target_arch = "arm"),
-                    all(target_os = "windows", target_pointer_width = "32"),
                     target_os = "freebsd",
                     target_os = "dragonfly",
                     target_os = "bitrig",
diff --git a/src/test/run-pass/backtrace.rs b/src/test/run-pass/backtrace.rs
index e892f5e7728..834ce984e66 100644
--- a/src/test/run-pass/backtrace.rs
+++ b/src/test/run-pass/backtrace.rs
@@ -104,10 +104,6 @@ fn runtest(me: &str) {
 }
 
 fn main() {
-    if cfg!(windows) && cfg!(target_env = "gnu") && cfg!(target_pointer_width = "32") {
-        return
-    }
-
     let args: Vec<String> = env::args().collect();
     if args.len() >= 2 && args[1] == "fail" {
         foo();