GETAUXVAL(3) Руководство программиста Linux GETAUXVAL(3)

ИМЯ

getauxval - возвращает значение из вспомогательного вектора

ОБЗОР

#include <sys/auxv.h>
unsigned long getauxval(unsigned long type);

ОПИСАНИЕ

Функция getauxval() возвращает значения из вспомогательного вектора — механизма, с помощью которого ядерный загрузчик двоичных файлов ELF передаёт информацию в пользовательское пространство при выполнении программы.

Каждая запись в вспомогательном векторе состоит из пары значений: типа — которым определяется смысл записи и значением этого типа. Согласно аргументу type, getauxval() возвращает соответствующее значение.

Значения для типов для type представлены в списке далее. Не все значения type есть для всех архитектур.

Основной (base) адрес программного интерпретатора (обычно, динамического компоновщика).
Строка, определяющая реальную платформу; может отличаться от AT_PLATFORM (только для PowerPC).
Частота, с которой считает times(2). Это значение также может быть получено с помощью sysconf(_SC_CLK_TCK).
Размер блока кэша данных.
Эффективный идентификатор группы нити.
Адрес точки старта (entry address) исполняемого файла.
Эффективный идентификатор пользователя нити.
Файловый дескриптор программы.
Путь, использованный для запуска программы.
Флаги (не используется).
Используемое слово управления FPU (только для SuperH). Оно даёт некоторую информацию о нагрузке FPU, выполняемой ядром.
Реальный идентификатор группы нити.
Битовая маска, зависящая от архитектуры и двоичного программного интерфейса, подробно описывает возможности процессора. Содержимое битовой маски зависит от аппаратуры (например, в файле исходного кода ядра arch/x86/include/asm/cpufeature.h описана маска для архитектуры Intel x86; возвращаемое значение — первое 32-битное слово описываемого здесь массива). Эта же информация в формате, понятном человеку, доступна в файле /proc/cpuinfo.
Дополнительные упоминания о возможностях процессора.
Размер блока кэша инструкций.
Размер системной страницы (это же значение возвращается sysconf(_SC_PAGESIZE)).
Адрес заголовков программы исполняемого файла.
Размер элемента заголовка программы.
Количество заголовков программы.
Указатель на строку, описывающую аппаратную платформу, на которой выполняется программа. Динамический компоновщик использует её при рассмотрении значений rpath.
Адрес 16 байт, содержащих произвольное значение.
Содержит ненулевое значение, если исполняемый файл должен считаться безопасным. Чаще всего, ненулевое значение означает, что процесс выполняет программу с установленным set-user-ID или set-group-ID битом (то есть его реальный и эффективный UID или GID отличаются от начального) или же он получает мандаты, запуская двоичный файл с другими мандатами (смотрите capabilities(7)). Также ненулевое значение может выставляться Linux Security Module. Если значение не ноль, то динамический компоновщик прекращает использовать определённые переменные окружения (смотрите ld-linux.so(8)) и изменяется некоторое поведение glibc (также смотрите secure_getenv(3)).
Точка входа в функцию системного вызова в vDSO. Отсутствует/не нужна для всех архитектур (например, отсутствует на x86-64).
Адрес страницы, содержащий виртуальный Динамический Общий Объект (Dynamic Shared Object, vDSO), который ядро создаёт для предоставления более быстрой реализации некоторых системных вызовов.
Размер блока универсального кэша.
Реальный идентификатор пользователя нити.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении getauxval() возвращает значение, соответствующее type.Если type не найден, то возвращается 0.

ОШИБКИ

В вспомогательном векторе не найдено значение, соответствующее type.

ВЕРСИИ

Функция getauxval() впервые появилась в glibc 2.16.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
getauxval() Безвредность в нитях MT-Safe

СООТВЕТСТВИЕ СТАНДАРТАМ

Эта функция является нестандартным расширением glibc.

ЗАМЕЧАНИЯ

Основным пользователем информации из вспомогательного вектора является динамический компоновщик ld-linux.so(8). Вспомогательный вектор удобное и эффективное средство для предоставления ядром некоторого набора стандартной информации, которая обычно или всегда требуется динамическому компоновщику. В некоторых случаях эта информация может быть получена через системные вызовы, но использование вспомогательного вектора экономичней.

Вспомогательный вектор располагается выше списка аргументов и окружения в адресном пространстве процесса. Переданный программе вектор можно просмотреть установив переменную окружения LD_SHOW_AUXV и запустив программу:

$ LD_SHOW_AUXV=1 sleep 1

Вспомогательный вектор любого процесса может быть получен (при наличии прав доступа) через /proc/[pid]/auxv; подробней смотрите в proc(5).

ДЕФЕКТЫ

До того как ошибка ENOENT не была добавлена в glibc 2.19, не было способа достоверно определить, что type не найден, если значение type равно нулю.

СМОТРИТЕ ТАКЖЕ

secure_getenv(3), vdso(7), ld-linux.so(8)

2017-09-15 GNU