Qual cabeçalho define a macro que especifica a arquitetura da máquina?

7

Versão mais curta da pergunta:

Qual cabeçalho C contém a macro que corresponde à arquitetura da máquina do sistema (por exemplo, __x86_64__ , __ia64__ , __mips__ ?)

Versão mais longa da pergunta:

Gostaria de executar as ferramentas de monitoramento ganglia em um Tilera - sistema baseado em Linux.

O Ganglia atualmente não tem suporte para o Tilera. Para fazer isso funcionar, eu precisava modificar uma função C chamada machine_type_func que retorna a arquitetura da máquina. O corpo desta função é determinado em tempo de compilação, é assim:

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;
}

Eu preciso adicionar a linha apropriada para o Tilera, mas não sei o nome da macro que especifica um sistema baseado no Tilera. Eu estou supondo que esta macro é definida em um dos cabeçalhos padrão do Linux, mas eu não sei qual deles procurar.

    
por Lorin Hochstein 29.08.2011 / 03:04

2 respostas

8

Nenhum arquivo de cabeçalho define isso - essas macros são predefinidas pelo compilador. Para descobrir a lista completa de macros predefinidas, faça o seguinte:

echo | gcc -E -dM -

Em seguida, analise os resultados para macros prováveis.

    
por 29.08.2011 / 09:06
1

Mais precisamente, acho que é aqui que o __x86_64__ é definido, por exemplo: link

 cpp_define (parse_in, "__x86_64__");

mas não tive paciência para modificar a fonte, recompilar e testar ainda. Uma boa maneira de pesquisar é:

git grep '"__aarch64__'
    
por 20.04.2018 / 00:43