Closed thehajime closed 4 years ago
raspi4/arm64 (ubuntu 19.10) で試しています。build は問題なさそうなのですが、rumpobj/tests/hello が bus error となります。
Reading symbols from rumpobj/tests/hello-pthread...
(gdb) r
Starting program: /home/ubuntu/work/ukontainer/frankenlibc/rumpobj/tests/hello-pthread
Program received signal SIGBUS, Bus error.
lkl_run_kernel (arg=0x0) at /home/ubuntu/work/ukontainer/frankenlibc/linux/arch/lkl/kernel/setup.c:46
46 atomic_ops_init();
(gdb) bt
#0 lkl_run_kernel (arg=0x0) at /home/ubuntu/work/ukontainer/frankenlibc/linux/arch/lkl/kernel/setup.c:46
#1 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
もう少し見てみます。何か思いあたる事ありましたら、教えてもらえると助かります〜
ちょっと気になったのが,
Program received signal SIGBUS, Bus error.
lkl_run_kernel (arg=0x0) at /home/ubuntu/work/ukontainer/frankenlibc/linux/arch/lkl/kernel/setup.c:46
46 atomic_ops_init();
のところです.これは
#if defined(__ARMEL__)
/* snip */
#endif
で囲われており,__ARMEL__
が定義されていると有効になるものです.
手元にはx86_64ホストのaarch64クロスコンパイラしかないのですが,
$ aarch64-linux-gnu-gcc -dM -E - < /dev/null | grep __ARMEL__
とやっても出てこないため手元環境では使っていないようです. コンパイラのターゲットの設定が異なっている,というのはありそうです.
$ aarch64-linux-gnu-gcc -dumpmachine
aarch64-linux-gnu
```c #if defined(__ARMEL__) /* snip */ #endif
で囲われており,ARMELが定義されていると有効になるものです
aarch64 では、ARMELの定義もないので、gcc builtin? な atomic 関数が利用できているようでした。
https://github.com/ukontainer/frankenlibc/commit/79e5f81b4859faf34f9d4368e332ad369d5024e0
この commit を追加してあげると、ちゃんと register が期待された形になるようでした (glibc aarch64 の makecontext 等を参考にしました)。
f6b8f9f27ef7ac1d769ffb55a639224ee77fdeb0 辺りで commit/push しました。
これも track しやすいように PR します。