web-dev-qa-db-ja.com

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

質問の短いバージョン:

システムのマシンアーキテクチャに対応するマクロが含まれているCヘッダー(例:__x86_64____ia64____mips__?)

質問の長いバージョン:

Linuxを実行する Tilera ベースのシステムで ganglia 監視ツールを実行したいと思います。

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

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つで定義されていると思いますが、どれを調べるべきかわかりません。

7
Lorin Hochstein

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

echo | gcc -E -dM -

次に、結果を調べて、可能性のあるマクロを探します。

8
TomH

もっと正確に言えば、これが__x86_64__は次のように定義されます: https://github.com/gcc-mirror/gcc/blob/gcc-7_3_0-release/gcc/config/i386/i386-c.c#L568

 cpp_define (parse_in, "__x86_64__");

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

git grep '"__aarch64__'