仮想マシンをNet Bsd 7.0 (amd64)に移植しようとしています。すでに Linux から Free BSD や Open BSD などに移植され、成功しています。Net BSD の新規および標準インストールに関して、いくつかの問題があります。
コードは gcc と次のフラグでコンパイルされます。ポインター -g -I"/usr/local"/include -I"$(UAS_SRC)"
LD_OPTIONS=-shared-libgcc -L"/usr/lib" -L"/usr/local/lib" -L"$( UAS_HOME)vtm/lib"pthread_create () でスレッドを作成しようとすると、プロセスは libc ランタイムからSIGABRTを受け取ります: gdb backtrace:
- /usr/lib/libc.so.12 の _lwp_kill() で
- /usr/lib/libc.so.12 の __lwd_thr_create_stub() で
- /usr/libpthread.so.1 の _pthread_create() で
- /home/../syspsx_nt.cpp の CreerThread2() で
スピン ロックを使用しようとすると、セグメント違反が発生します。テストケースは次のとおりです。
typedef struct typmttsysnatsynchronisationdirect
{
ユニオン-
{
pthread_spinlock_t HandleSpinLock;
} 選択;
TypMttSysNatSynchronisationDirect SynchronisationCourant;
int 応答;
SynchronisationCourant=(TypMttSysNatSynchronisationDirect)malloc(sizeof(struct typmttsysnatsynchronisationdirect));
if (SynchronisationCourant==NULL)
-
リターン (0);
Reponse=pthread_spin_init(&(SynchronisationCourant->Selection.HandleSpinLock), PTHREAD_PROCESS_SHARED);
if (応答!=0)
-
リターン (0);
if (応答!=0)
-
リターン (0);
pthread_spin_init() と pthread_spin_lock() のコードを逆アセンブルすると、pthread_spinlock() で NULL に設定され、pthread_spinlock() によって呼び出される pthread_spintrylock() に間接的に呼び出される関数ポインタが pthread_spinlock 内にあるようです。
助けてくれてありがとう。