elf_auxvec.rst (1484B)
1.. 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.)