Por que o comando file diz que os binários ELF são para Linux 2.6.9?

18

Sempre que executo arquivo em um binário ELF, recebo esta saída:

[jonescb@localhost ~]$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, 
not stripped

Só estou me perguntando o que mudou no Linux 2.6.9 que este binário não pode ser executado no 2.6.8? O suporte a ELF não foi adicionado no Linux 2.0?

jonescb
fonte

Respostas:

23

glibcpossui uma opção de configuração chamada --enable-kernelque permite especificar a versão mínima suportada do kernel. Quando os arquivos de objetos são vinculados a essa compilação glibc, o vinculador adiciona uma seção SHT_NOTE ao executável resultante nomeado .note.ABI-tagque inclui a versão mínima do kernel. O formato exato é definido no LSB e filesabe procurar por essa seção e como interpretá-la.

A razão pela qual sua glibc específica foi criada para exigir o 2.6.9 depende de quem a criou. É o mesmo no meu sistema (Gentoo); um comentário no glibc ebuild diz que especifica 2.6.9 porque é o mínimo necessário para o NPTL , portanto, é provavelmente uma escolha comum. Outro que parece surgir é o 2.4.1, porque era o mínimo necessário para o LinuxThreads , o pacote usado antes do NPTL

Michael Mrozek
fonte
Você obtém melhorias de desempenho ao aumentar a versão mínima necessária do kernel? Quais são os benefícios de fazer isso?
Aaron Franke
Aqui (Fedora 31, x86_64) /lib/libc-2.30.so requer o kernel 3.20 (a versão atual do kernel é 5.3.12-300)
vonbrand 29/11