SIGSEGV si_trapno on ARM

私はarmhf DebianにSIGSEGV用のシグナルハンドラを書いています。 siginfo_t
si_trapno メンバーは、ARM(eglibcの
/usr/include/asm-generic/siginfo.h )では利用できないようです):

[...]
#ifdef __ARCH_SI_TRAPNO
                    int _trapno;    /* TRAP # which caused the signal */
#endif

私の質問はなぜですか?なぜこのマクロはARM用に定義されていないのですか?この種の情報を渡すにはMMUがあまりにも愚かですか?

ベストアンサー

ARMだけではありません。 sigaction(2)

               int      si_trapno;   /* Trap number that caused
                                        hardware-generated signal
                                        (unused on most architectures) */

カーネルソースコードを見てみると、Alpha、Sparc、およびTileにしか存在しないことがわかります。
(見ているヘッダーは、/usr/include/asm
/usr/include/asm-generic
のすべてのファイルと同様にLinuxカーネルから来ます/usr/include/linux )。

したがって、このフィールドがARM上に存在しない理由は問題ではありません。あなたが見ることができるように、そのデフォルト状態は存在しないので、なぜそれがARM上に存在するのでしょうか?私は、AlphaとSparcの両方で、同じハードウェア上の古いUnixとの互換性のために追加されたと思います。なぜタイルがそれを追加することにしたのか、私は考えていません。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です