hello-driver中的error arguments
hello.o
这些错误消息都是因为 c2rust
不认识 GCC 编译器的一些特定选项。让我们逐一解释每个选项:
-mpreferred-stack-boundary=3
:这是一个 GCC 选项,用于控制在函数入口处栈的对齐。数字3
表示 2 的 3 次方,即 8 字节对齐。这对于某些 CPU(如 Intel x86)的性能优化很重要。-mindirect-branch=thunk-extern
,-mindirect-branch-register
,-mindirect-branch-cs-prefix
:这些选项是为了应对 Intel CPU 的 Indirect Branch Predictor 中的一些漏洞(如 Spectre 漏洞)而添加的。-mfunction-return=thunk-extern
:这也是一项针对 Spectre 漏洞的防护措施。-fno-allow-store-data-races
:这是一个 GCC 选项,用于禁止编译器在某些情况下生成可能引起数据竞争的代码。-fzero-call-used-regs=used-gpr
:这个选项告诉 GCC 在函数调用后将所有使用过的通用寄存器清零。-fconserve-stack
:这个选项告诉 GCC 生成的代码应尽可能减少栈的使用。-mrecord-mcount
:这个选项是为了 ftrace(Linux 的一个内核跟踪系统)功能,用于记录每个函数调用。
c2rust
不认识这些选项,是因为它们是关于优化和特定硬件特性的,这超出了 c2rust
的责任范围。c2rust
的目标是正确地将 C 语言语法翻译成 Rust,而不是复制底层硬件行为或特定的编译器优化。如果这些选项对你的 C 代码至关重要,那么在 c2rust
转换后,你可能需要手动进行一些额外的优化,或者使用特定于 Rust 的方法来达到类似的效果。
hello.c
Makefile
obj-m += hello.o
all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
error: unknown argument: '-mpreferred-stack-boundary=3'
error: unknown argument: '-mindirect-branch=thunk-extern'
error: unknown argument: '-mindirect-branch-register'
error: unknown argument: '-mindirect-branch-cs-prefix'
error: unknown argument: '-mfunction-return=thunk-extern'
error: unknown argument: '-fno-allow-store-data-races'
error: unknown argument: '-fzero-call-used-regs=used-gpr'
error: unknown argument: '-fconserve-stack'
warning: optimization flag '-falign-jumps=1' is not supported [-Wignored-optimization-argument]
error: unsupported option '-mrecord-mcount' for target 'x86_64-pc-linux-gnu'