ファイルがあるのにexecがENOENTになる問題

ファイルが確かに存在していてファイルの形式がELFで正しいターゲットアーキなのにも関わらずexecするとENOENT(file not found)で失敗してしまうという問題にはまった。アクセス権がないとか実行ビットが立ってないとかならEPERM(permission denied)になるはずなのでそっち系ではない。straceしてもそれっぽい原因が見つからない。Linux kernelのコードを追おうかと思ったけど、さすがに思いとどまってググってるとドンピシャで見つかった。

https://github.com/hiboma/hiboma/blob/master/execve%E3%81%8B%E3%82%99ENOENT%E3%82%92%E8%BF%94%E3%81%99%E3%82%B1%E3%83%BC%E3%82%B9.md
ローダが無い場合に do_execve -> search_binary_handler で ENOENT 返すケースがある

readelf -e してまさにこのパターンであること確認。/lib64/ld-linux-aarch64.so を向いていた。ln -s /lib64 /lib して解決。先にググってよかった。

このブログ記事について

このページは、らるるが2016年9月 9日 00:17に書いたブログ記事です。

ひとつ前のブログ記事は「Yoctoビルドでパッチ当てる方法」です。

次のブログ記事は「Linuxスケジューラ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.5.0