2017-04-11 23 views
2

Linuxカーネルをデバッグしています。最適化された値を避けるためにLinuxカーネルを非最適化する方法

-O1最適化レベルでカーネルをコンパイルします。 (Linuxカーネルは-O0でコンパイルできないことに注意してください)。
gdbを使ってデバッグするとき、いくつかの値が最適化されていることがわかりました。次の図に示すとおりです。 len,フラグおよびadd_len引数はすべて最適化されています。
これらの変数を最適化しないようにLinuxカーネルをどのように最適化できますか?

enter image description

答えて

1

-Ogの構築は、これらの問題を解消することになっています。

Linuxカーネルをコンパイルできるかどうかわかりません。

スタックの上または下に移動することで、 "最適化された"値が見つかることがよくあります。呼び出し側がこのように見える場合:

udp_recvmsg(sk, foo->msg, foo->msglen, ...); 

呼び出し元に*fooを見ると、それがudp_recvmsg自体でアウトに最適化されているにもかかわらず、あなたにlenを教えてくれます。

+1

ご返信ありがとうございます。 -Og最適化レベルを使用します。しかし、これらの変数は依然として最適化されています。 "volatile"を使ってこれらの変数を宣言しようとすると、最適化されません。 –

関連する問題