マシンアーキテクチャを指定するマクロを定義するヘッダーは何ですか?

マシンアーキテクチャを指定するマクロを定義するヘッダーは何ですか?

問題の簡単なバージョン:

システムの機械アーキテクチャに対応するマクロ(例えば、、、__x86_64____ia64____mips__を含むCヘッダファイルは何ですか?

質問のより長いバージョン:

走りたい神経節モニタリングツールティレラLinuxを実行しているシステムに基づいています。

Gangliaは現在Tileraをサポートしていません。機能するには、次のファイルを変更する必要があります。マシンタイプ機能マシンアーキテクチャを返します。関数の本文は、コンパイル時に次のように決定されます。

g_val_t
machine_type_func ( void )
{
   g_val_t val;

#ifdef __i386__
   snprintf(val.str, MAX_G_STRING_SIZE, "x86");
#endif
#ifdef __x86_64__
   snprintf(val.str, MAX_G_STRING_SIZE, "x86_64");
#endif
...
   return val;
}

Tileraに適切な行を追加する必要がありますが、Tileraベースのシステムを指定するマクロ名がわかりません。このマクロは標準のLinuxヘッダファイルの1つで定義されているようですが、どのファイルを見るべきかわかりません。

答え1

ヘッダーファイルはそれを定義しません。これらのマクロはコンパイラによって事前定義されています。事前定義されたマクロの完全なリストを見つけるには、次のようにします。

echo | gcc -E -dM -

次に、可能なマクロの結果を確認します。

答え2

__x86_64__より正確には、これが定義があるところだと思います。たとえば、次のようになります。https://github.com/gcc-mirror/gcc/blob/releases%2Fgcc-10.2.0/gcc/config/i386/i386-cc#L688

 cpp_define (parse_in, "__x86_64__");

しかし、ソースコードを修正、再コンパイル、テストするための忍耐力はありません。良い検索方法は次のとおりです。

git grep '"__aarch64__'

関連情報