aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTianhao Wang <shrik3@mailbox.org>2024-06-04 22:33:00 +0200
committerTianhao Wang <shrik3@mailbox.org>2024-06-11 15:17:12 +0200
commit32edde868c1e7a37f9aa11e32c16cd3adce43c33 (patch)
tree69142a0beb0e25f9c3aec07d34fa338ce668e310
parent1cb3c007fb5bcd74f39e735bd531c17d6fbcd575 (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.ld12
-rw-r--r--src/arch/x86_64/interrupt/mod.rs1
-rw-r--r--src/lib.rs1
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,
diff --git a/src/lib.rs b/src/lib.rs
index 0d2fb02..f1499c4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,5 +1,6 @@
#![allow(dead_code)]
#![allow(unused_imports)]
+#![allow(unexpected_cfgs)]
#![no_std]
#![no_main]
#![feature(const_option)]