[Ubuntu-BR] Um pequeno "bug" no Edgy

Andre Cavalcante andre.d.cavalcante em gmail.com
Quarta Janeiro 17 13:46:58 UTC 2007


Não sei onde reportar isso, então estou colocando aqui. Por favor repassem
adequadamente...

É o seguinte:
Cadeia de includes na compilação pelo gcc: começa na pasta local, depois
diretórios da chave -I, depois a pasta do sistema, que no caso é
/usr/include.
Se você fizer:
   #include <errno.h>
   ....
no seu código, e usar a constante EAGAIN (retorno de erro do system call
read) dá um erro que o símbolo é desconhecido!
Também aparece a seguinte mensagem vez em quando durante a compilação:
      warning This machine appears to be neither x86_64 nor i386.
Eu pensei, como, se é do sistema?
Vasculhei a cadeia de includes do sistema e me deparei com o seguinte.
/usr/include/errno.h faz include em /usr/include/bits/errno.h que faz
include em /usr/include/linux/errno.h que faz include em
/usr/include/asm/errno.h. Este último tem o seguinte código:

/* File autogenerated by 'make headers_install' */
#ifndef __ASM_STUB_ERRNO_H
#define __ASM_STUB_ERRNO_H
# if defined __x86_64__
#  include <asm-x86_64/errno.h>
# elif defined __i386__
#  include <asm-i386/errno.h>
# else
#  warning This machine appears to be neither x86_64 nor i386.
# endif
#endif /* __ASM_STUB_ERRNO_H */

Ou seja, achei de onde vinha o warning e o porque do erro: o errno.h não
estava de fato sendo incluído e a constante EAGAIN não é definida em nenhum
dos includes acima.
Bem, busquei pela constante (EAGAIN) e descobri que ela está em
/usr/include/asm-generic/errno.h. Detalhe, generic é a versão do kernel do
Ubuntu 6.10.

Agora o bug: se o arquivo /usr/include/asm/errno.h é autogerado, e a versão
da compilação do kernel é generic, deveria haver uma entrada na lista de
#ifdef...#elif...#else...#endif para a pasta generic. As outras pastas são
igualmente válidas.

Agora minha dúvida: posso alterar este arquivo, na mão, sem grandes
repercurssões e, principalmente sem a necessidade de estar de tempos em
tempos alterando-o, pelo menos até a cadeia de includes vir correta? Penso
que sim, pois o arquivo deve ser gerado na compilação do Kernel, e não
pretendo re-compilá-lo.

PS: máquina IBM ThingCentre P4 2,8G, 512M Ram, Ubuntu 6.10, gcc
4.1.2instalado globalmente e arm-elf-gcc
3.4.3 instalado no diretório do usuário.

André Cavalcante
Manaus, AM.



More information about the ubuntu-br mailing list