Mein experimenteller Code stürzt ab, wenn er auf blankem x86_64-metal läuft (Seitenfehler, wenn IDT noch nicht gesetzt ist), funktioniert aber perfekt auf aarch64.Write :: write_fmt verursacht Seitenfehler auf einem Bare-Metal
Durch sorgfältiges Tracing habe ich herausgefunden, dass die Ursache dieses Seitenfehlers aus beschädigter Adresse (viel höher als 0x200_000, während nur die erste 2M Seite noch als 1: 1 gemappt wurde) der Funktion "f" als Argument übergeben wurde zu core :: fmt :: ArgumentV1 :: neu() Funktion:
#[doc(hidden)]
#[unstable(feature = "fmt_internals", reason = "internal to format_args!")]
pub fn new<'b, T>(x: &'b T,
f: fn(&T, &mut Formatter) -> Result) -> ArgumentV1<'b> {
unsafe {
ArgumentV1 {
formatter: mem::transmute(f),
value: mem::transmute(x)
}
}
}
AFAIK ist dieser Wert hartcodiert durch rustc Compiler Ergebnis der Kompilierung-Verarbeitung von format_args zu sein! variadische Argumente.
Vielleicht haben Sie Vorschläge, was mit diesem Fall nicht stimmt. Vielen Dank.
Das klingt wie ein Rost-Käfer; probiere [ein Problem] (https://github.com/rust-lang/rust/issues) auf GitHub. – thirtythreeforty