Il mio codice sperimentale si arresta in modo anomalo quando è in esecuzione su x86_64-metal (errore di pagina quando IDT non è ancora impostato), ma funziona perfettamente su aarch64.Write :: write_fmt causa un errore di pagina su un metallo nudo
Tramite un'accurata analisi ho scoperto che la causa di questo errore di pagina è costituita da indirizzo danneggiato (molto più alto di 0x200_000, mentre solo la prima pagina 2M è ancora mappata come 1: 1) della funzione "f" passata come argomento al core :: FMT :: ArgumentV1 :: nuovo) funzione (:
#[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 questo valore è codificato dal compilatore rustc essendo risultato dell'elaborazione fase di compilazione format_args! argomenti variadici.
Forse avete suggerimenti su cosa non va in questo caso. Grazie.
Questo suona come un bug di ruggine; prova [aprendo un problema] (https://github.com/rust-lang/rust/issues) su GitHub. – thirtythreeforty