Przeglądaj źródła

Prevent override of panic from relibc

Jeremy Soller 6 lat temu
rodzic
commit
a88ec09131
3 zmienionych plików z 9 dodań i 25 usunięć
  1. 3 9
      src/crt0/src/lib.rs
  2. 3 8
      src/crti/src/lib.rs
  3. 3 8
      src/crtn/src/lib.rs

+ 3 - 9
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();
 }

+ 3 - 8
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();
 }

+ 3 - 8
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();
 }