Почему команда file говорит, что двоичные файлы ELF предназначены для Linux 2.6.9?

18

Всякий раз, когда я запускаю файл в двоичном файле ELF, я получаю такой вывод:

[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

Мне просто интересно, что изменилось в Linux 2.6.9, что этот двоичный файл не может работать на 2.6.8? Не была ли добавлена ​​поддержка ELF в Linux 2.0?

jonescb
источник

Ответы:

23

glibcимеет параметр конфигурации, --enable-kernelкоторый позволяет указать минимальную поддерживаемую версию ядра. Когда объектные файлы связаны с этой сборкой glibc, компоновщик добавляет секцию SHT_NOTE в результирующий исполняемый файл с именем .note.ABI-tag, включающим эту минимальную версию ядра. Точный формат определен в LSB , и он fileзнает, как искать этот раздел и как его интерпретировать.

Причина, по которой ваш конкретный glibc требует 2.6.9, зависит от того, кто его создал. То же самое в моей системе (Gentoo); комментарий в glibc ebuild говорит, что он указывает 2.6.9, потому что это минимум, необходимый для NPTL , так что это, вероятно, общий выбор. Еще один , который , кажется, придумать является 2.4.1, потому что это был минимум , необходимый для LinuxThreads , пакет используется до NPTL

Михаил Мрозек
источник
Получаете ли вы улучшения производительности при увеличении минимально необходимой версии ядра? Каковы преимущества для этого?
Аарон Франке
Здесь (Fedora 31, x86_64) /lib/libc-2.30.so требуется ядро ​​3.20 (текущая версия ядра 5.3.12-300)
vonbrand