2010-11-25 5 views
0

RH 6.2からC++ RHEL 5.4アプリケーションを移行し、アプリケーションが壊れていることが判明しました。我々の調査の1つは、5.4ボックスのコードが「futex」を参照するという結果につながる。アウトに注意してくださいアプリは32ビットのコンパイラオプションを使用してコンパイルされた -Linux futex 5.4 OSカーネルバージョン2.6.9に問題がある

 
grep futex tool_strace.txt 

futex(0xff8ea454, FUTEX_WAKE_PRIVATE, 1) = 0 
futex(0xf6d1f4fc, FUTEX_WAKE_PRIVATE, 2147483647) = 0 
futex(0xf6c10a4c, FUTEX_WAKE_PRIVATE, 2147483647) = 0 

As per http://www.akkadia.org/drepper/assumekernel.html I added the code on 5.4 build - 

setenv("LD_ASSUME_KERNEL" , "2.4.1" , 1); // to use Linux Threads 

しかし、straceのダンプはまだ呼び出されている「のfutex」私を示しています。

すべてのアドレスff8ea454、f6d1f4fcおよびf6c10a4cは32ビットのアドレスです。だから私の前提が正しければ、どのようにして 'futex'呼び出しを抑制するか、まったく呼び出さないようにすることができます。

futexコールに関する既知の問題はありますか?

答えて

1

私は、次が本当であると信じる:

  1. LD_ASSUME_KERNELは、あなたのプログラムがどんな効果を持って開始する前に設定する必要があります。
  2. futexはあらゆるタイプのロックを実装するために使用されるため、回避することはできません。
  3. 独自のコードをコンパイルするときには、LD_ASSUME_KERNELは必要ありません。 は、必要に応じて新しいインターフェイスを使用する必要があります。
  4. 2.4.1は古くからのカーネルバージョンです。 32ビットコンパイルについて言及すると、AMD64アーキテクチャのマシン上にあることが示唆されています。以下は
+0

システムの設定である - 私は、私たちがすることができます教えてください のLinuxボックス2.6.18-164.el5#1 SMP火8月18日夜03時51分48秒EDT 2009 x86_64のx86_64でのx86_64のGNU/Linuxの その問題を避けるためにそれ以外のことをしますか? – Prakash

+1

LD_ASSUME_KERNELを削除し、コードを再コンパイルし、動作しないバグを修正します。 –

+1

実際にはAMD64アーキテクチャを使用しているので、その形式でコードをコンパイルすることをお勧めします。 –

関連する問題