Merge tag 'block-5.14-2021-08-07' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / Documentation / x86 / elf_auxvec.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ==================================
4 x86-specific ELF Auxiliary Vectors
5 ==================================
6
7 This document describes the semantics of the x86 auxiliary vectors.
8
9 Introduction
10 ============
11
12 ELF Auxiliary vectors enable the kernel to efficiently provide
13 configuration-specific parameters to userspace. In this example, a program
14 allocates an alternate stack based on the kernel-provided size::
15
16    #include <sys/auxv.h>
17    #include <elf.h>
18    #include <signal.h>
19    #include <stdlib.h>
20    #include <assert.h>
21    #include <err.h>
22
23    #ifndef AT_MINSIGSTKSZ
24    #define AT_MINSIGSTKSZ       51
25    #endif
26
27    ....
28    stack_t ss;
29
30    ss.ss_sp = malloc(ss.ss_size);
31    assert(ss.ss_sp);
32
33    ss.ss_size = getauxval(AT_MINSIGSTKSZ) + SIGSTKSZ;
34    ss.ss_flags = 0;
35
36    if (sigaltstack(&ss, NULL))
37         err(1, "sigaltstack");
38
39
40 The exposed auxiliary vectors
41 =============================
42
43 AT_SYSINFO is used for locating the vsyscall entry point.  It is not
44 exported on 64-bit mode.
45
46 AT_SYSINFO_EHDR is the start address of the page containing the vDSO.
47
48 AT_MINSIGSTKSZ denotes the minimum stack size required by the kernel to
49 deliver a signal to user-space.  AT_MINSIGSTKSZ comprehends the space
50 consumed by the kernel to accommodate the user context for the current
51 hardware configuration.  It does not comprehend subsequent user-space stack
52 consumption, which must be added by the user.  (e.g. Above, user-space adds
53 SIGSTKSZ to AT_MINSIGSTKSZ.)