Rust Write::Write_fmt导致裸机出现页面错误

Rust Write::Write_fmt导致裸机出现页面错误,rust,osdev,Rust,Osdev,我的实验代码在裸机x86_64-metal上运行时崩溃(IDT尚未设置时出现页面错误),但在aarch64上运行非常好 通过仔细跟踪,我发现此页面错误的原因是函数“f”的地址损坏(远高于0x200_000,而只有前2M页面映射为1:1),该函数作为参数传递给core::fmt::ArgumentV1::new()函数: #[doc(hidden)] #[unstable(feature = "fmt_internals", reason = "internal to format_args!")

我的实验代码在裸机x86_64-metal上运行时崩溃(IDT尚未设置时出现页面错误),但在aarch64上运行非常好

通过仔细跟踪,我发现此页面错误的原因是函数“f”的地址损坏(远高于0x200_000,而只有前2M页面映射为1:1),该函数作为参数传递给core::fmt::ArgumentV1::new()函数:

#[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)
        }
    }
} 
#[doc(隐藏)]
#[不稳定(feature=“fmt\u internal”,reason=“internal to format\u args!”)]

pub fn新结果)->引自Rust项目的ArgumentV1:

fn
项目类型的大小为零,每个
fn
命名一个唯一的类型。这将中断转换
fn
s的代码,因此对
fn
类型调用
transmute
将生成几个周期的警告,然后将转换为错误


这是版本1.9.0(2016-05-26)发行说明的一部分,因此如果您使用此版本,它可能是std库中的一个错误,如果您使用此版本,听起来像是一个rustc错误;试试GitHub。