printk
基本上,我在将目标代码从 mach 目标文件加载和链接到 Linux 内核时搞砸了,当我从该对象内部执行操作时,我注意到了一些奇怪的事情。如果我用超过 3 个(4 个或更多)参数 ( ) 调用 printk printk("%d,%d,%d \n", 1, 1, 1)
,系统将锁定,但稍后会锁定(它不会从系统调用返回,而是锁定)。实际打印工作并在所有情况下打印预期值。
现在,奇怪的是,这只发生在我使用 Clang+LLVM 构建它时。这是罪魁祸首代码:
另一方面,当它使用 LLVM GCC 构建时,它工作得很好:
这在使用 GNU GCC 构建时也有效:
任何人都可以提出为什么 clang 版本会导致系统锁定的原因吗?所以基本上,第一段代码有问题,导致它被锁定,而其他代码段中不存在。我真的不知道出了什么问题。