基本的に、mach オブジェクト ファイルから Linux カーネルにオブジェクト コードを読み込んでリンクする作業をいじってprintk
います。3 つ (4 つ以上) を超える引数 ( printk("%d,%d,%d \n", 1, 1, 1)
) を指定して printk を呼び出すと、システムはロックしますが、後である時点で (システム コールから戻らず、代わりにロックするだけです)。実際の印刷は機能し、すべての場合に期待される値を印刷します。
さて、奇妙なことに、これは Clang+LLVM を使用してビルドした場合にのみ発生します。犯人コードは次のとおりです。
一方、これを LLVM GCC を使用してビルドすると、問題なく動作します。
これは、GNU GCC でビルドされた場合にも機能します。
誰かがclangバージョンがシステムをロックアップさせる理由を提案できますか? 基本的に、コードの最初のスニペットに何か問題があり、他のコードには存在しないロックアップを引き起こします。何が悪いのかよくわかりません。