From a88ec09131046233d8b4b61dbb232edb9ffeda07 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Wed, 27 Mar 2019 20:56:23 -0600
Subject: [PATCH] Prevent override of panic from relibc

---
 src/crt0/src/lib.rs | 12 +++---------
 src/crti/src/lib.rs | 11 +++--------
 src/crtn/src/lib.rs | 11 +++--------
 3 files changed, 9 insertions(+), 25 deletions(-)

diff --git a/src/crt0/src/lib.rs b/src/crt0/src/lib.rs
index 1b64be4e..6b8c2552 100644
--- a/src/crt0/src/lib.rs
+++ b/src/crt0/src/lib.rs
@@ -2,7 +2,7 @@
 
 #![no_std]
 #![feature(asm)]
-#![feature(lang_items)]
+#![feature(core_intrinsics)]
 #![feature(linkage)]
 #![feature(naked_functions)]
 
@@ -29,12 +29,6 @@ pub unsafe extern "C" fn _start() {
 }
 
 #[panic_handler]
-#[linkage = "weak"]
-#[no_mangle]
-pub extern "C" fn rust_begin_unwind(_pi: &::core::panic::PanicInfo) -> ! {
-    extern "C" {
-        fn exit(status: i32) -> !;
-    }
-
-    unsafe { exit(1) }
+unsafe fn panic(_pi: &::core::panic::PanicInfo) -> ! {
+    ::core::intrinsics::abort();
 }
diff --git a/src/crti/src/lib.rs b/src/crti/src/lib.rs
index eb80c7c5..4f1d7a6e 100644
--- a/src/crti/src/lib.rs
+++ b/src/crti/src/lib.rs
@@ -1,6 +1,7 @@
 //! crti
 
 #![no_std]
+#![feature(core_intrinsics)]
 #![feature(global_asm)]
 #![feature(linkage)]
 
@@ -46,12 +47,6 @@ global_asm!(r#"
 "#);
 
 #[panic_handler]
-#[linkage = "weak"]
-#[no_mangle]
-pub extern "C" fn rust_begin_unwind(_pi: &::core::panic::PanicInfo) -> ! {
-    extern "C" {
-        fn exit(status: i32) -> !;
-    }
-
-    unsafe { exit(1) }
+unsafe fn panic(_pi: &::core::panic::PanicInfo) -> ! {
+    ::core::intrinsics::abort();
 }
diff --git a/src/crtn/src/lib.rs b/src/crtn/src/lib.rs
index b0ae7584..e62acc65 100644
--- a/src/crtn/src/lib.rs
+++ b/src/crtn/src/lib.rs
@@ -1,6 +1,7 @@
 //! crti
 
 #![no_std]
+#![feature(core_intrinsics)]
 #![feature(global_asm)]
 #![feature(linkage)]
 
@@ -36,12 +37,6 @@ global_asm!(r#"
 "#);
 
 #[panic_handler]
-#[linkage = "weak"]
-#[no_mangle]
-pub extern "C" fn rust_begin_unwind(_pi: &::core::panic::PanicInfo) -> ! {
-    extern "C" {
-        fn exit(status: i32) -> !;
-    }
-
-    unsafe { exit(1) }
+unsafe fn panic(_pi: &::core::panic::PanicInfo) -> ! {
+    ::core::intrinsics::abort();
 }
-- 
GitLab