mruby 3.2ベースでビルドしたモジュールでSimpleHttpすると落ちるようになってしまいました。
Hello Bear Metal mruby on BCM/mips
10.0.1.128
simple http 1
**Exception 32: EPC=80035240, Cause=9080002C (CoProcUnu)
RA=8003523C, VAddr=00000000
0 ($ 0) = 00000000 AT ($ 1) = A0000000
v0 ($ 2) = 00000000 v1 ($ 3) = 00000000
a0 ($ 4) = 00000000 a1 ($ 5) = 800AE4D0
a2 ($ 6) = 0000002B a3 ($ 7) = 00000001
t0 ($ 8) = 0000003F t1 ($ 9) = 00000026
t2 ($10) = 0000007C t3 ($11) = 0000002A
t4 ($12) = 0000003A t5 ($13) = 00000021
t6 ($14) = 000000BF t7 ($15) = 0000002C
s0 ($16) = 00000005 s1 ($17) = 80FFFDC8
s2 ($18) = 800CC5E0 s3 ($19) = 00000000
s4 ($20) = 800D64A8 s5 ($21) = 0000002F
s6 ($22) = 800CC5E0 s7 ($23) = 800B53AC
t8 ($24) = 000002E0 t9 ($25) = 800D77F0
k0 ($26) = 80FFFDC8 k1 ($27) = 800D1AA0
gp ($28) = 8043BDC0 sp ($29) = 80FFFD00
fp ($30) = 800B292A ra ($31) = 8003523C
Decompressing..........done
>0x80FFFFFF>complite
ヘッダーの連想配列のsortで落ちていました。
レジスタの中身から16Mのメインメモリの前後1Mくらいしか使ってないので、メモリ不足ではないようです。
Exceptionの理由はコプロセッサー関係ですが、明示的にアクセスしてるところはないので、直接的な原因ではないと考えられます。
なぜかadmbm-mrubyでは問題が起きません。
build_config.rbを見比べたところ、bcmbmには-march=mips32あり、admbmにはなかったので外してみました。
なんとこれで問題が解決しました。
BCMはmips32なので付けてもよさそうなのですが、ダメみたいです。
admbmはbcmbmから作ったのですが、なぜ外したかは覚えていません。
mrubyみたいな複雑なプログラムはコンパイル時のオプションがシビアなのかもしれません。