54 строки
1.4 KiB
ReStructuredText
54 строки
1.4 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
==================================
|
||
|
x86-specific ELF Auxiliary Vectors
|
||
|
==================================
|
||
|
|
||
|
This document describes the semantics of the x86 auxiliary vectors.
|
||
|
|
||
|
Introduction
|
||
|
============
|
||
|
|
||
|
ELF Auxiliary vectors enable the kernel to efficiently provide
|
||
|
configuration-specific parameters to userspace. In this example, a program
|
||
|
allocates an alternate stack based on the kernel-provided size::
|
||
|
|
||
|
#include <sys/auxv.h>
|
||
|
#include <elf.h>
|
||
|
#include <signal.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <assert.h>
|
||
|
#include <err.h>
|
||
|
|
||
|
#ifndef AT_MINSIGSTKSZ
|
||
|
#define AT_MINSIGSTKSZ 51
|
||
|
#endif
|
||
|
|
||
|
....
|
||
|
stack_t ss;
|
||
|
|
||
|
ss.ss_sp = malloc(ss.ss_size);
|
||
|
assert(ss.ss_sp);
|
||
|
|
||
|
ss.ss_size = getauxval(AT_MINSIGSTKSZ) + SIGSTKSZ;
|
||
|
ss.ss_flags = 0;
|
||
|
|
||
|
if (sigaltstack(&ss, NULL))
|
||
|
err(1, "sigaltstack");
|
||
|
|
||
|
|
||
|
The exposed auxiliary vectors
|
||
|
=============================
|
||
|
|
||
|
AT_SYSINFO is used for locating the vsyscall entry point. It is not
|
||
|
exported on 64-bit mode.
|
||
|
|
||
|
AT_SYSINFO_EHDR is the start address of the page containing the vDSO.
|
||
|
|
||
|
AT_MINSIGSTKSZ denotes the minimum stack size required by the kernel to
|
||
|
deliver a signal to user-space. AT_MINSIGSTKSZ comprehends the space
|
||
|
consumed by the kernel to accommodate the user context for the current
|
||
|
hardware configuration. It does not comprehend subsequent user-space stack
|
||
|
consumption, which must be added by the user. (e.g. Above, user-space adds
|
||
|
SIGSTKSZ to AT_MINSIGSTKSZ.)
|