Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ELF: document some de-facto PT_* ABI quirks

Turns out rules about PT_INTERP, PT_GNU_STACK and PT_GNU_PROPERTY
program headers are slightly different.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Link: https://lore.kernel.org/r/88d3f1bb-f4e0-4c40-9304-3843513a1262@p183
Signed-off-by: Jonathan Corbet <corbet@lwn.net>

authored by

Alexey Dobriyan and committed by
Jonathan Corbet
5c2c34a4 4de3790a

+35
+34
Documentation/userspace-api/ELF.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + ================================= 4 + Linux-specific ELF idiosyncrasies 5 + ================================= 6 + 7 + Definitions 8 + =========== 9 + 10 + "First" program header is the one with the smallest offset in the file: 11 + e_phoff. 12 + 13 + "Last" program header is the one with the biggest offset in the file: 14 + e_phoff + (e_phnum - 1) * sizeof(Elf_Phdr). 15 + 16 + PT_INTERP 17 + ========= 18 + 19 + First PT_INTERP program header is used to locate the filename of ELF 20 + interpreter. Other PT_INTERP headers are ignored (since Linux 2.4.11). 21 + 22 + PT_GNU_STACK 23 + ============ 24 + 25 + Last PT_GNU_STACK program header defines userspace stack executability 26 + (since Linux 2.6.6). Other PT_GNU_STACK headers are ignored. 27 + 28 + PT_GNU_PROPERTY 29 + =============== 30 + 31 + ELF interpreter's last PT_GNU_PROPERTY program header is used (since 32 + Linux 5.8). If interpreter doesn't have one, then the last PT_GNU_PROPERTY 33 + program header of an executable is used. Other PT_GNU_PROPERTY headers 34 + are ignored.
+1
Documentation/userspace-api/index.rst
··· 23 23 spec_ctrl 24 24 accelerators/ocxl 25 25 ebpf/index 26 + ELF 26 27 ioctl/index 27 28 iommu 28 29 iommufd