Write :: write_fmt不能在裸机上正常工作

时间:2015-06-04 09:04:40

标签: rust osdev

在x86_64体系结构上,write!宏按预期使用字符串参数,但不能使用整数。当使用整数参数时,我得到一个奇怪的循环(例如write!(writer, "Hello {}!", 123)产生无限" Hello Hello Hello ...")。在aarch64上,write!宏根本不起作用。

我使用以下命令构建libcore:

rustc -C opt-level=3 -Z no-landing-pads -C no-stack-check \
  --crate-type rlib --target {arch}-unknown-linux-gnu lib.rs

其中{arch}分别为x86_64aarch64

我的代码是使用相同的代码生成选项构建的。 libcore版本对应于我的编译器。有问题的代码是here。你能说出问题的可能原因吗?

重要更新:

Here是更精简的代码。 libcore是在项目中构建的,因此一切都在掌控之中。上面的循环来自机器重启。代码完全适用于aarch64,但奇怪的是在x86_64上的Write :: write_fmt内崩溃。仔细检查我的启动装配 - 似乎没有错误。

1 个答案:

答案 0 :(得分:0)

write!(writer, "format {}", "1").unwrap();

我认为这不会帮助您解决问题,但是当我遇到类似问题时,write! 只会打印 str 参数。如果您能找到将 i32 转换为 str 的 #![no_std] 函数,那么这可能会帮助您完成您要执行的操作。