質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

790閲覧

arm(EABI)のsyscallのエントリポイントの場所を教えていただけないでしょうか

noman1777

総合スコア6

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/04/25 09:23

編集2020/04/25 13:25

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://code.woboq.org/userspace/glibc/sysdeps/unix/sysv/linux/arm/syscall.S.html
manの読み間違え?
glibcで定義されていました。。。

投稿2020/04/25 13:54

noman1777

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問