ukontainer / frankenlibc

Tools for running rump unikernels in userspace
Other
4 stars 5 forks source link

Aarch64 fixes #8

Closed thehajime closed 4 years ago

thehajime commented 4 years ago

これも track しやすいように PR します。

thehajime commented 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) 

もう少し見てみます。何か思いあたる事ありましたら、教えてもらえると助かります〜

retrage commented 4 years ago

ちょっと気になったのが,

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
thehajime commented 4 years ago
```c
#if defined(__ARMEL__)
/* snip */
#endif

で囲われており,ARMELが定義されていると有効になるものです

aarch64 では、ARMELの定義もないので、gcc builtin? な atomic 関数が利用できているようでした。

thehajime commented 4 years ago

https://github.com/ukontainer/frankenlibc/commit/79e5f81b4859faf34f9d4368e332ad369d5024e0

この commit を追加してあげると、ちゃんと register が期待された形になるようでした (glibc aarch64 の makecontext 等を参考にしました)。

thehajime commented 4 years ago

f6b8f9f27ef7ac1d769ffb55a639224ee77fdeb0 辺りで commit/push しました。