Codesourcery arm-linux-eabi クロスコンパイラを使用すると、コンパイラが特定のコードを実行しないという問題が発生します。これは、特にシステムコールでは、使用されていないと見なされるためです。これを回避する方法はありますか?
たとえば、次のコードは変数を初期化しません。
unsigned int temp = 42;
asm volatile("mov R1, %0 :: "r" (temp));
asm volatile("swi 1");
この場合、temp は値 42 に初期化されることはありません。ただし、初期化後に printk を追加すると、正しい値 42 に初期化されます。
unsigned int temp __attribute__ ((used)) = 42;
まだ動作しませんが、警告メッセージが表示されます:
「使用済み」属性は無視されます [-Wattributes]
これは Linux カーネル コードにあります。
任意のヒント?