¿Por qué el comando de archivo dice que los binarios ELF son para Linux 2.6.9?

18

Cada vez que ejecuto un archivo en un binario ELF obtengo esta salida:

[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

¿Me pregunto qué cambió en Linux 2.6.9 que este binario no podría ejecutarse en 2.6.8? ¿No se agregó el soporte ELF en Linux 2.0?

jonescb
fuente

Respuestas:

23

glibctiene una opción de configuración llamada --enable-kernelque le permite especificar la versión mínima admitida del núcleo. Cuando los archivos de objeto están vinculados con esa compilación glibc, el vinculador agrega una sección SHT_NOTE al ejecutable resultante llamado .note.ABI-tagque incluye esa versión mínima del núcleo. El formato exacto se define en el LSB , y filesabe buscar esa sección y cómo interpretarla.

La razón por la cual su glibc en particular fue construido para requerir 2.6.9 depende de quién lo construyó. Es lo mismo en mi sistema (Gentoo); un comentario en glibc ebuild dice que especifica 2.6.9 porque es el mínimo requerido para el NPTL , por lo que es probable que sea una opción común. Otro que parece aparecer es 2.4.1, porque era el mínimo requerido para LinuxThreads , el paquete utilizado antes de NPTL

Michael Mrozek
fuente
¿Obtiene mejoras de rendimiento al aumentar la versión mínima requerida del núcleo? ¿Cuáles son los beneficios de hacerlo?
Aaron Franke
Aquí (Fedora 31, x86_64) /lib/libc-2.30.so requiere el kernel 3.20 (la versión actual del kernel es 5.3.12-300)
vonbrand