2016-10-13 7 views
-2

仮想マシンを移植しようとしましたNet Bsd 7.0(amd64)。すでにLinuxからFree BSDやOpen BSDに移植されています。 NetBSDの新しく標準的なインストールにはいくつかの問題があります。netbsd pthread_create SIGABRT

  1. コードをgccでコンパイルされている以下のフラグ: CC_OPTIONS = -pedantic -Wall -Wno-トリグラフ-Wno-長い長い-Wno-可変長-マクロ-fshort-はwc​​har -x C++ -fPIC -/usr/local "/ include -I" $(UAS_SRC) "
    LD_OPTIONS = -shared-libgcc -L"/usr/lib "-L"/usr/usr/local// local/libの」-L "$(UAS_HOME)VTM/libに"

  2. のpthread_create()、プロセスが受信libcの実行時からSIGABRTでスレッドを作成しようとすると: GDBバックトレース:_lwp_killで

    • ()__lwd_thr_create_stub()で/usr/lib/libc.so.12
    • から_pthread_createで/usr/lib/libc.so.12
    • から() /home/../syspsx_nt.cpp
  3. で)CreerThread2(中/usr/libpthread.so.1

  4. からスピンロックを使用しようと、我々はセグメントVIを受信するとオレイド。ここでテストケースである:構造体typmttsysnatsynchronisationdirect
    {
    組合
      {
      pthread_spinlock_tのHandleSpinLockのtypedef


      }選択;

    } * TypMttSysNatSynchronisationDirect;

    TypMttSysNatSynchronisationDirect SynchronisationCourant;
    int Reponse;

    SynchronisationCourant =(TypMttSysNatSynchronisationDirect)malloc(sizeof(struct typmttsysnatsynchronisationdirect));
    IF(SynchronisationCourant == NULL)
      リターン(0)。
    memset(SynchronisationCourant、0x0、sizeof(struct typmttsysnatsynchronisationdirect));
    応答= pthread_spin_init(&(SynchronisationCourant-> Selection.HandleSpinLock)、PTHREAD_PROCESS_SHARED);
    場合(!REPONSE = 0)
      リターン(0);
    応答= pthread_spin_lock(&(SynchronisationCourant-> Selection.HandleSpinLock));
    if(Reponse!= 0)
      return(0);

pthread_spin_initのコードをdisassemblying()とpthread_spin_lock())、pthread_spin_init(にNULLに設定されているpthread_spinlock内部関数へのポインタがあると思われる)、その間接的(pthread_spintrylockに呼ばれていますpthread_spinlock()によって呼び出されます。

ありがとうございました。

+0

インデント済み。ごめんなさい。 –

答えて

0

各モジュールは、マルチスレッドかに適合するようにコンパイラ(GCC)によってタグ付けされ、コード生成がslighty accordignly変更されると思われます。また、2種類のモジュールを1つの実行可能ファイルに混在させることはできません。特に、dlopen()を使用していくつかの共有オブジェクトを動的にロードする場合。

msvcには/ Mtオプションがあるため、threreはgccの-pthreadですが、Net BSDでは使用できません。それは他のプラットフォームでは役に立たない。

回避策は、にlibpthread.soを体系的にリンクするためのです。各モジュールはタグ付きで互換性のあるマルチスレッドを持っています。 2つの問題は終了しました。