The no_mangle attribute is unsafe since Rust 2024

This commit is contained in:
Philipp Oppermann
2025-03-27 15:39:15 +01:00
parent 9345886d44
commit 9753695744
47 changed files with 149 additions and 149 deletions

View File

@@ -40,7 +40,7 @@ rtl = true
```rust
// in src/main.rs
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -176,7 +176,7 @@ extern "x86-interrupt" fn double_fault_handler(
```rust
// in src/main.rs
#[no_mangle] // don't mangle the name of this function
#[unsafe(no_mangle)] // don't mangle the name of this function
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -440,7 +440,7 @@ lazy_static! {
use core::panic::PanicInfo;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
unimplemented!();
}
@@ -474,7 +474,7 @@ harness = false
use blog_os::serial_print;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
serial_print!("stack_overflow::stack_overflow...\t");

View File

@@ -36,7 +36,7 @@ translators = ["garasubo"]
```rust
// in src/main.rs
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -169,7 +169,7 @@ CPUはダブルフォルトハンドラを呼べるようになったので、
```rust
// in src/main.rs
#[no_mangle] // この関数の名前修飾をしない
#[unsafe(no_mangle)] // この関数の名前修飾をしない
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -429,7 +429,7 @@ lazy_static! {
use core::panic::PanicInfo;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
unimplemented!();
}
@@ -463,7 +463,7 @@ harness = false
use blog_os::serial_print;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
serial_print!("stack_overflow::stack_overflow...\t");

View File

@@ -39,7 +39,7 @@ translation_contributors = ["dalinaum"]
```rust
// in src/main.rs
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -172,7 +172,7 @@ CPU는 이제 _더블 폴트 처리 함수_ 를 호출하려고 시도합니다.
```rust
// in src/main.rs
#[no_mangle] // 이 함수의 이름을 mangle하지 않습니다
#[unsafe(no_mangle)] // 이 함수의 이름을 mangle하지 않습니다
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -429,7 +429,7 @@ lazy_static! {
use core::panic::PanicInfo;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
unimplemented!();
}
@@ -463,7 +463,7 @@ harness = false
use blog_os::serial_print;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
serial_print!("stack_overflow::stack_overflow...\t");

View File

@@ -34,7 +34,7 @@ Let's provoke a double fault by triggering an exception for which we didn't defi
```rust
// in src/main.rs
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -167,7 +167,7 @@ Let's try it ourselves! We can easily provoke a kernel stack overflow by calling
```rust
// in src/main.rs
#[no_mangle] // don't mangle the name of this function
#[unsafe(no_mangle)] // don't mangle the name of this function
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -422,7 +422,7 @@ Let's start with a minimal skeleton:
use core::panic::PanicInfo;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
unimplemented!();
}
@@ -456,7 +456,7 @@ The implementation of the `_start` function looks like this:
use blog_os::serial_print;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
serial_print!("stack_overflow::stack_overflow...\t");

View File

@@ -39,7 +39,7 @@ double fault 的行为和普通异常十分相似我们可以通过在IDT中
```rust
// in src/main.rs
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -175,7 +175,7 @@ guard page 是一类位于栈底部的特殊内存页,所以如果发生了栈
```rust
// in src/main.rs
#[no_mangle] // 禁止函数名自动修改
#[unsafe(no_mangle)] // 禁止函数名自动修改
pub extern "C" fn _start() -> ! {
println!("Hello World{}", "!");
@@ -435,7 +435,7 @@ lazy_static! {
use core::panic::PanicInfo;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
unimplemented!();
}
@@ -469,7 +469,7 @@ harness = false
use blog_os::serial_print;
#[no_mangle]
#[unsafe(no_mangle)]
pub extern "C" fn _start() -> ! {
serial_print!("stack_overflow::stack_overflow...\t");