blob: 18e4744717f9e025e570299ca62fc9d8a78833d6 [file] [log] [blame]
Chang S. Bae1c33bb02021-05-18 13:03:17 -07001.. SPDX-License-Identifier: GPL-2.0
2
3==================================
4x86-specific ELF Auxiliary Vectors
5==================================
6
7This document describes the semantics of the x86 auxiliary vectors.
8
9Introduction
10============
11
12ELF Auxiliary vectors enable the kernel to efficiently provide
13configuration-specific parameters to userspace. In this example, a program
14allocates 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
40The exposed auxiliary vectors
41=============================
42
43AT_SYSINFO is used for locating the vsyscall entry point. It is not
44exported on 64-bit mode.
45
46AT_SYSINFO_EHDR is the start address of the page containing the vDSO.
47
48AT_MINSIGSTKSZ denotes the minimum stack size required by the kernel to
49deliver a signal to user-space. AT_MINSIGSTKSZ comprehends the space
50consumed by the kernel to accommodate the user context for the current
51hardware configuration. It does not comprehend subsequent user-space stack
52consumption, which must be added by the user. (e.g. Above, user-space adds
53SIGSTKSZ to AT_MINSIGSTKSZ.)