前提・実現したいこと
syscallがarm(EABI)でどこに定義されているか知りたいです。
長々と失礼します。
発生している問題・エラーメッセージ
arch/arm/include/asm/unistd.hより、arm(EABI)ではsyscallが廃止されているらしいです。
実際にarch/arm/include/generated/calls-eabi.Sを確認してもありませんでした。
ただ、arch/arm/include/generated/calls-eabi.Sでは、システムコールが以下のように定義され、
NATIVE(5, sys_open)
NATIVEはkernel/entry-common.Sで以下のように定義されていることから、
#define NATIVE(nr, func) syscall nr, func
syscallの定義がどこかにあるのかと考えています。
確認したこと
syscallのmanからarmではglibcのsyscall関数は使用していないことを知りました。
manより、armの場合は64ビット値は偶数番地のレジスターのペアに境界があっていなければならないことが理由のようでした。
(armしかcpuの勉強をあまりしたことないですが、ほかのcpuは違うんでしょうか・・・)
また、言葉としては以下のようにして、システムコールを行っているようです。
システムコールの番号をr7に設定し、引数をr0-r6に設定した後、swi+0x0命令を行う
arch/arm/kernel/entry-common.Sにエントリポイントして存在するかと思いましたが、どうも無いようでした。
→エントリポイントはありませんでしたが、システムコールの番号取得とかはここでやっていました。
実際にglibcを確認しましたが、ありませんでした。
(armではそもそもsyscall.h自体が見つかりませんでした)
https://github.com/lattera/glibc/blob/master/sysdeps/generic/sys/syscall.h
補足情報(FW/ツールのバージョンなど)
linux4.1.0で確認していますが、バージョンにはそこまでこだわりません。
以下がarmのシステムコールのコード対応表みたいです。
arch/arm/kernel/entry-common.Sの502行目となっていましたが、確認できませんでした。
https://syscalls.w3challs.com/?arch=arm_strong
https://syscalls.w3challs.com/?arch=arm_thumb
kernelのビルドは以下のようにして行っています。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。