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