mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
.. 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.)
|
|
|