Pourquoi la commande file indique-t-elle que les binaires ELF sont pour Linux 2.6.9?

18

Chaque fois que je lance un fichier sur un binaire ELF, j'obtiens cette sortie:

[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

Je me demande simplement ce qui a changé dans Linux 2.6.9 que ce binaire ne pouvait pas fonctionner sur 2.6.8? Le support ELF n'a-t-il pas été ajouté dans Linux 2.0?

jonescb
la source

Réponses:

23

glibca une option de configuration appelée --enable-kernelqui vous permet de spécifier la version minimale du noyau prise en charge. Lorsque les fichiers objets sont liés à cette build glibc, l'éditeur de liens ajoute une section SHT_NOTE à l'exécutable résultant nommé .note.ABI-tagqui inclut cette version minimale du noyau. Le format exact est défini dans le LSB , et filesait rechercher cette section et comment l'interpréter.

La raison pour laquelle votre glibc particulière a été construite pour nécessiter 2.6.9 dépend de qui l'a construite. C'est la même chose sur mon système (Gentoo); un commentaire dans la glibc ebuild indique qu'il spécifie 2.6.9 car c'est le minimum requis pour le NPTL , c'est donc probablement un choix commun. Un autre qui semble arriver est le 2.4.1, car c'était le minimum requis pour LinuxThreads , le paquet utilisé avant NPTL

Michael Mrozek
la source
Améliorez-vous les performances en augmentant la version minimale requise du noyau? Quels en sont les avantages?
Aaron Franke
Ici (Fedora 31, x86_64) /lib/libc-2.30.so nécessite le noyau 3.20 (la version actuelle du noyau est 5.3.12-300)
vonbrand