hello-driver中的error arguments

·

1 min read

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'