summaryrefslogtreecommitdiff
path: root/user/rust/0029-Work-around-libbacktrace-built-with-fstack-protector.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/rust/0029-Work-around-libbacktrace-built-with-fstack-protector.patch')
-rw-r--r--user/rust/0029-Work-around-libbacktrace-built-with-fstack-protector.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/user/rust/0029-Work-around-libbacktrace-built-with-fstack-protector.patch b/user/rust/0029-Work-around-libbacktrace-built-with-fstack-protector.patch
new file mode 100644
index 000000000..29a31508d
--- /dev/null
+++ b/user/rust/0029-Work-around-libbacktrace-built-with-fstack-protector.patch
@@ -0,0 +1,47 @@
+From 22bb29c2b807180ed0522d9c930e14c327582571 Mon Sep 17 00:00:00 2001
+From: Samuel Holland <samuel@sholland.org>
+Date: Sat, 6 Oct 2018 04:17:14 +0000
+Subject: [PATCH 29/29] Work around libbacktrace built with -fstack-protector
+
+On 32-bit x86 and ppc, gcc generates calls to __stack_chk_fail_local,
+which must be a hidden function in every DSO. gcc provides the
+implementation in libssp_nonshared. libbacktrace is built in hosted
+mode, where Adelie's compiler enables -fstack-protector by default.
+However, rustc passes -nodefaultlibs, inhibiting gcc from linking
+libssp_nonshared.
+---
+ src/libpanic_unwind/Cargo.toml | 1 +
+ src/libpanic_unwind/build.rs | 10 ++++++++++
+ 2 files changed, 11 insertions(+)
+ create mode 100644 src/libpanic_unwind/build.rs
+
+diff --git a/src/libpanic_unwind/Cargo.toml b/src/libpanic_unwind/Cargo.toml
+index 74aaa4d5ae..c1b66aeefe 100644
+--- a/src/libpanic_unwind/Cargo.toml
++++ b/src/libpanic_unwind/Cargo.toml
+@@ -1,5 +1,6 @@
+ [package]
+ authors = ["The Rust Project Developers"]
++build = "build.rs"
+ name = "panic_unwind"
+ version = "0.0.0"
+
+diff --git a/src/libpanic_unwind/build.rs b/src/libpanic_unwind/build.rs
+new file mode 100644
+index 0000000000..0d9a14b64c
+--- /dev/null
++++ b/src/libpanic_unwind/build.rs
+@@ -0,0 +1,10 @@
++use std::env;
++
++fn main() {
++ let target = env::var("TARGET").unwrap();
++ match target.as_ref() {
++ "i586-foxkit-linux-musl" => println!("cargo:rustc-link-lib=ssp_nonshared"),
++ "powerpc-foxkit-linux-musl" => println!("cargo:rustc-link-lib=ssp_nonshared"),
++ _ => {},
++ };
++}
+--
+2.18.0
+