diff options
| author | Tianhao Wang <shrik3@mailbox.org> | 2024-06-04 22:33:00 +0200 |
|---|---|---|
| committer | Tianhao Wang <shrik3@mailbox.org> | 2024-06-11 15:17:12 +0200 |
| commit | 32edde868c1e7a37f9aa11e32c16cd3adce43c33 (patch) | |
| tree | 69142a0beb0e25f9c3aec07d34fa338ce668e310 | |
| parent | 1cb3c007fb5bcd74f39e735bd531c17d6fbcd575 (diff) | |
toolchain: bump rust toolchain version
1. allow unexpected cfgs in lib.rs, in this case
"no_global_oom_handling" is cause warnings [1]
2. for large code models the compiler (rust linkers) now put code and
data in `.ltext`, `.ldata`, `.lbss`, `.lrodata` instead of the
same `.text` , `.data` ... etc. We are adjusting accordingly in the
linker script.
3. unsafe assertions identified undefined behaviours, in this case a repr(C)
struct was not mared as repr(packed), therefore having an unexpected
size. The unsafe assertions was not enabled by default in debug
builds so the idt setup code with from_raw_parts_mut() has been
working on UB. Glad we can catch this....
related: [1] https://github.com/rust-lang/rust/pull/123501
related: [2] https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#asserting-unsafe-preconditions
| -rw-r--r-- | defs/x86_64-hm-linker.ld | 12 | ||||
| -rw-r--r-- | src/arch/x86_64/interrupt/mod.rs | 1 | ||||
| -rw-r--r-- | src/lib.rs | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/defs/x86_64-hm-linker.ld b/defs/x86_64-hm-linker.ld index 563940e..c8a213c 100644 --- a/defs/x86_64-hm-linker.ld +++ b/defs/x86_64-hm-linker.ld @@ -82,6 +82,9 @@ SECTIONS *(".text") *(".text.*") *(".text$") + *(".ltext") + *(".ltext.*") + *(".ltext$") } .data : AT(ADDR(.data) - KERNEL_OFFSET) @@ -89,13 +92,19 @@ SECTIONS *(".data") *(".data.*") *(".data$") + *(".ldata") + *(".ldata.*") + *(".ldata$") } .bss : AT(ADDR(.bss) - KERNEL_OFFSET) { PROVIDE (___BSS_START__ = .); *(".bss") + *(".lbss") *(".bss.*") + *(".lbss.*") + *(".lbss$") PROVIDE (___BSS_END__ = .); } @@ -104,6 +113,9 @@ SECTIONS *(".rodata") *(".rodata$") *(".rodata.*") + *(".lrodata") + *(".lrodata$") + *(".lrodata.*") } PROVIDE (___KERNEL_PM_END__ = . - KERNEL_OFFSET); diff --git a/src/arch/x86_64/interrupt/mod.rs b/src/arch/x86_64/interrupt/mod.rs index 6591bde..9273ef7 100644 --- a/src/arch/x86_64/interrupt/mod.rs +++ b/src/arch/x86_64/interrupt/mod.rs @@ -27,6 +27,7 @@ extern "C" { // [48:63] - addr[16:31] // [64:95] - addr[32:63] #[repr(C)] +#[repr(packed)] pub struct GateDescriptor64 { pub offset_1: u16, pub selector: u16, @@ -1,5 +1,6 @@ #![allow(dead_code)] #![allow(unused_imports)] +#![allow(unexpected_cfgs)] #![no_std] #![no_main] #![feature(const_option)] |
