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

标签 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 中奇怪地崩溃。仔细检查了我的启动程序集 - 那里似乎没有错误。

最佳答案

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

关于rust - Write::write_fmt 在裸机上不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639543/

相关文章:

generics - 实现不只是 impl Foo<T> 是否有技术原因?

return - 除了一种情况外,在所有情况下匹配返回直接输入

module - 使用嵌套模块中的项目时为 "unresolved import"

pci - 如何处理从 PCI 设备收集的信息

c - 如何在 x86 实模式非操作系统程序集中打印字符串

x86 - 监视器陷阱标志 VM 在当前指令后退出

rust - 从 Rocks 数据库中匹配模式的键获取值

visual-studio-code - 如何配置运行/调试栏任务?

rust - 安全地从流中读取结构的辅助函数

assembly - 如何为我的 Bootstrap 制作内核?