]>
Commit | Line | Data |
---|---|---|
1c33bb05 CB |
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.) |