[Lua][ARM][ARM64] LuaJITのarm64対応がまだだったのにKnot resolverは動作してた。

2017-08-21 19:46:04AIX、UNIX、Linux, ARMAarch64, arm, arm64, gdb, kernel, knot, knot resolver, lua, luajit, Segmentation fault

70785e1b-7af1-4a8e-b3ac-afcc133376c7.png

過去に何度かKnot resolverを取り上げていますが、実は殆どのテスト環境はarm64(aarch64)上で行っていました。

で、最近、knot resolverが1.3.3になった際に、一部の環境でSegmentation faultが発生するようになってしまいました。

追記アリ:

で、公式のGithubにissueを上げたところ、

「関連ライブラリのLuaJITはarm64(aarch64)には対応していないから、そうなるね」

とご連絡頂きました。

マジかよ~と思って確認したところ、過去にThe LuaJIT Projectから発表された資料の中にLuaJITの開発ロードマップがありまして、そちらによると当初は2016年末までにVer2.1で対応を進めるということになっていたようですが、いま確認できる資料だと2017年中、2.1正式版での対応を予定しているそうです。現在は2.1.0 beta 3なので、もう少しという状況なのでしょうか。Githubを確認してみましたが、対応状況についてはよく分かりませんでした。

で、ソースからのbuildも試してみたのですが、これでも状況は改善せずでした。

ただ、knot resolverの開発陣からはarm64(aarch64)環境でも、LuaJITは32bit?に切り替わって動作する、みたいなコメントを頂いたので、別のARMボード(やはりarm64)で試したところ確かに動作する場合もありました(少なくとも起動時からSegmentation faultは発生しませんでした)。

どちらもKernelは4.4だったのですが、詳細については不明です。なんとなくstraceとgdbも使用したのですが、原因を追求できずでした。

追記:

POINT

LuaJITが32/64 bitを切り替えてるのではなく、CPUがA64な命令セットを実行中のときはaarch64状態、A32な命令セットを実行中のときはaarch32状態で動作する。しかし、aarch64状態のときは、64 ビットレジスタと 32 ビットレジスタの両方にアクセスできるということらしいですね。

さすがにARMのアーキテクチャ周りは勉強したことがないので、よく分かりません。