/usr/src/linux-headers-5.15.0-181/arch/x86/include/asm
NameSizeModeActions
e820/-0755rm
fpu/-0755rm
numachip/-0755rm
trace/-0755rm
uv/-0755rm
vdso/-0755rm
xen/-0755rm
acenv.h14500644editdlrm
acpi.h48040644editdlrm
acrn.h18340644editdlrm
agp.h10730644editdlrm
alternative.h135740644editdlrm
amd-ibs.h42470644editdlrm
amd_nb.h31360644editdlrm
apic.h136460644editdlrm
apicdef.h115630644editdlrm
apm.h18420644editdlrm
archrandom.h23470644editdlrm
arch_hweight.h10830644editdlrm
asm-offsets.h350644editdlrm
asm-prototypes.h4310644editdlrm
asm.h60600644editdlrm
atomic.h67660644editdlrm
atomic64_32.h83670644editdlrm
atomic64_64.h64100644editdlrm
audit.h1700644editdlrm
barrier.h23680644editdlrm
bios_ebda.h9140644editdlrm
bitops.h101490644editdlrm
boot.h23970644editdlrm
bootparam_utils.h28660644editdlrm
bug.h23920644editdlrm
bugs.h3440644editdlrm
cache.h6220644editdlrm
cacheflush.h3290644editdlrm
cacheinfo.h2630644editdlrm
ce4100.h1210644editdlrm
checksum.h2400644editdlrm
checksum_32.h46820644editdlrm
checksum_64.h51640644editdlrm
clocksource.h4800644editdlrm
cmdline.h3020644editdlrm
cmpxchg.h79370644editdlrm
cmpxchg_32.h32430644editdlrm
cmpxchg_64.h5610644editdlrm
compat.h41020644editdlrm
cpu.h20990644editdlrm
cpufeature.h84280644editdlrm
cpufeatures.h333830644editdlrm
cpuidle_haltpoll.h1890644editdlrm
cpumask.h8290644editdlrm
cpu_device_id.h109450644editdlrm
cpu_entry_area.h41960644editdlrm
crash.h3000644editdlrm
current.h4430644editdlrm
debugreg.h36410644editdlrm
delay.h2750644editdlrm
desc.h115240644editdlrm
desc_defs.h33960644editdlrm
device.h1760644editdlrm
disabled-features.h31730644editdlrm
div64.h23350644editdlrm
dma-mapping.h5190644editdlrm
dma.h98110644editdlrm
dmi.h5560644editdlrm
doublefault.h2710644editdlrm
dwarf2.h13250644editdlrm
edac.h4740644editdlrm
efi.h123070644editdlrm
elf.h126230644editdlrm
elfcore-compat.h8900644editdlrm
emergency-restart.h2020644editdlrm
emulate_prefix.h4840644editdlrm
enclu.h1810644editdlrm
entry-common.h33220644editdlrm
espfix.h4260644editdlrm
exec.h370644editdlrm
extable.h18710644editdlrm
extable_fixup_types.h18750644editdlrm
fb.h5400644editdlrm
fixmap.h60940644editdlrm
floppy.h68600644editdlrm
frame.h25550644editdlrm
fsgsbase.h20720644editdlrm
ftrace.h32340644editdlrm
futex.h25530644editdlrm
gart.h27040644editdlrm
GEN-for-each-reg.h3450644editdlrm
genapic.h220644editdlrm
geode.h6930644editdlrm
hardirq.h23420644editdlrm
highmem.h24660644editdlrm
hpet.h30020644editdlrm
hugetlb.h2430644editdlrm
hw_breakpoint.h21120644editdlrm
hw_irq.h30700644editdlrm
hyperv-tlfs.h175550644editdlrm
hypervisor.h23600644editdlrm
i8259.h20610644editdlrm
ia32.h17910644editdlrm
ia32_unistd.h3130644editdlrm
idtentry.h241970644editdlrm
imr.h16840644editdlrm
inat.h60920644editdlrm
inat_types.h3410644editdlrm
init.h6320644editdlrm
insn-eval.h13790644editdlrm
insn.h78670644editdlrm
inst.h20660644editdlrm
intel-family.h57750644editdlrm
intel-mid.h11320644editdlrm
intel_ds.h8490644editdlrm
intel_pconfig.h15450644editdlrm
intel_pt.h12350644editdlrm
intel_punit_ipc.h46660644editdlrm
intel_scu_ipc.h22340644editdlrm
intel_telemetry.h37230644editdlrm
invpcid.h14870644editdlrm
io.h126900644editdlrm
iomap.h5360644editdlrm
iommu.h7800644editdlrm
iommu_table.h39100644editdlrm
iosf_mbi.h73840644editdlrm
io_apic.h52040644editdlrm
io_bitmap.h13700644editdlrm
irq.h12800644editdlrm
irqdomain.h19150644editdlrm
irqflags.h29760644editdlrm
irq_remapping.h20610644editdlrm
irq_stack.h75360644editdlrm
irq_vectors.h42960644editdlrm
irq_work.h3580644editdlrm
ist.h2940644editdlrm
jailhouse_para.h4490644editdlrm
jump_label.h14060644editdlrm
kasan.h12910644editdlrm
kaslr.h3980644editdlrm
kbdleds.h4540644editdlrm
Kbuild3000644editdlrm
kdebug.h10870644editdlrm
kexec-bzimage64.h1950644editdlrm
kexec.h60110644editdlrm
kfence.h20650644editdlrm
kgdb.h21430644editdlrm
kprobes.h34630644editdlrm
kvm-x86-ops.h39210644editdlrm
kvmclock.h5060644editdlrm
kvm_host.h600660644editdlrm
kvm_page_track.h25040644editdlrm
kvm_para.h34670644editdlrm
kvm_types.h1780644editdlrm
kvm_vcpu_regs.h6060644editdlrm
linkage.h11390644editdlrm
livepatch.h4720644editdlrm
local.h39250644editdlrm
mach_timer.h15900644editdlrm
mach_traps.h10130644editdlrm
math_emu.h3950644editdlrm
mc146818rtc.h28350644editdlrm
mce.h131250644editdlrm
memtype.h8990644editdlrm
mem_encrypt.h34270644editdlrm
microcode.h38650644editdlrm
microcode_amd.h15730644editdlrm
microcode_intel.h25210644editdlrm
misc.h1430644editdlrm
mmconfig.h3740644editdlrm
mmu.h17400644editdlrm
mmu_context.h60740644editdlrm
mmx.h3370644editdlrm
mmzone.h1290644editdlrm
mmzone_32.h3430644editdlrm
mmzone_64.h4300644editdlrm
module.h3240644editdlrm
mpspec.h36520644editdlrm
mpspec_def.h42560644editdlrm
mshyperv.h56040644editdlrm
msi.h15490644editdlrm
msr-index.h401060644editdlrm
msr-trace.h13870644editdlrm
msr.h110610644editdlrm
mtrr.h47530644editdlrm
mwait.h44570644editdlrm
nmi.h14440644editdlrm
nops.h19050644editdlrm
nospec-branch.h130730644editdlrm
numa.h21930644editdlrm
numa_32.h2560644editdlrm
olpc.h23820644editdlrm
olpc_ofw.h11280644editdlrm
orc_lookup.h10650644editdlrm
orc_types.h20250644editdlrm
page.h25100644editdlrm
page_32.h10430644editdlrm
page_32_types.h23990644editdlrm
page_64.h27370644editdlrm
page_64_types.h31390644editdlrm
page_types.h22620644editdlrm
paravirt.h188130644editdlrm
paravirt_types.h196710644editdlrm
parport.h3140644editdlrm
pc-conf-reg.h7230644editdlrm
pci-direct.h8500644editdlrm
pci-functions.h6540644editdlrm
pci.h31910644editdlrm
pci_x86.h64770644editdlrm
percpu.h169920644editdlrm
perf_event.h160790644editdlrm
perf_event_p4.h267310644editdlrm
pgalloc.h53060644editdlrm
pgtable-2level.h28150644editdlrm
pgtable-2level_types.h9210644editdlrm
pgtable-3level.h89630644editdlrm
pgtable-3level_types.h10300644editdlrm
pgtable-invert.h10910644editdlrm
pgtable.h334640644editdlrm
pgtable_32.h23460644editdlrm
pgtable_32_areas.h15820644editdlrm
pgtable_32_types.h6340644editdlrm
pgtable_64.h72570644editdlrm
pgtable_64_types.h44680644editdlrm
pgtable_areas.h6230644editdlrm
pgtable_types.h175800644editdlrm
pkeys.h35130644editdlrm
pkru.h13460644editdlrm
platform_sst_audio.h31010644editdlrm
pm-trace.h6110644editdlrm
posix_types.h1440644editdlrm
preempt.h40510644editdlrm
probe_roms.h2730644editdlrm
processor-cyrix.h3830644editdlrm
processor-flags.h17500644editdlrm
processor.h224710644editdlrm
prom.h8210644editdlrm
proto.h9520644editdlrm
pti.h3720644editdlrm
ptrace.h104910644editdlrm
purgatory.h2350644editdlrm
pvclock-abi.h15300644editdlrm
pvclock.h27020644editdlrm
qrwlock.h1990644editdlrm
qspinlock.h31320644editdlrm
qspinlock_paravirt.h19080644editdlrm
realmode.h20990644editdlrm
reboot.h9480644editdlrm
reboot_fixups.h1830644editdlrm
required-features.h28390644editdlrm
resctrl.h28470644editdlrm
rmwcc.h22770644editdlrm
seccomp.h12050644editdlrm
sections.h8950644editdlrm
segment.h105790644editdlrm
serial.h11370644editdlrm
setup.h36330644editdlrm
setup_arch.h770644editdlrm
set_memory.h53880644editdlrm
sev-common.h30530644editdlrm
sev.h24430644editdlrm
sgx.h113890644editdlrm
shmparam.h1930644editdlrm
sigcontext.h2610644editdlrm
sigframe.h21410644editdlrm
sighandling.h5260644editdlrm
signal.h24280644editdlrm
simd.h2870644editdlrm
smap.h20380644editdlrm
smp.h50670644editdlrm
softirq_stack.h2160644editdlrm
sparsemem.h11020644editdlrm
spec-ctrl.h28750644editdlrm
special_insns.h71700644editdlrm
spinlock.h12140644editdlrm
spinlock_types.h2530644editdlrm
sta2x11.h3520644editdlrm
stackprotector.h30950644editdlrm
stacktrace.h28500644editdlrm
static_call.h28680644editdlrm
string.h1290644editdlrm
string_32.h61110644editdlrm
string_64.h28520644editdlrm
suspend.h4960644editdlrm
suspend_32.h8760644editdlrm
suspend_64.h18330644editdlrm
svm.h107910644editdlrm
swiotlb.h6450644editdlrm
switch_to.h23300644editdlrm
sync_bitops.h33360644editdlrm
sync_core.h33150644editdlrm
syscall.h43100644editdlrm
syscalls.h3740644editdlrm
syscall_wrapper.h99980644editdlrm
text-patching.h56460644editdlrm
thermal.h4280644editdlrm
thread_info.h79950644editdlrm
time.h3310644editdlrm
timer.h10270644editdlrm
timex.h5460644editdlrm
tlb.h12000644editdlrm
tlbbatch.h3320644editdlrm
tlbflush.h77100644editdlrm
topology.h64820644editdlrm
trace_clock.h4060644editdlrm
trapnr.h13160644editdlrm
traps.h12600644editdlrm
trap_pf.h7090644editdlrm
tsc.h20160644editdlrm
uaccess.h222100644editdlrm
uaccess_32.h10060644editdlrm
uaccess_64.h24400644editdlrm
umip.h3170644editdlrm
unistd.h16300644editdlrm
unwind.h32200644editdlrm
unwind_hints.h14610644editdlrm
uprobes.h10170644editdlrm
user.h22570644editdlrm
user32.h21560644editdlrm
user_32.h50420644editdlrm
user_64.h53390644editdlrm
vdso.h13910644editdlrm
vermagic.h19930644editdlrm
vga.h7400644editdlrm
vgtod.h5180644editdlrm
virtext.h34600644editdlrm
vm86.h21820644editdlrm
vmalloc.h5600644editdlrm
vmware.h19420644editdlrm
vmx.h261410644editdlrm
vmxfeatures.h60490644editdlrm
vsyscall.h9880644editdlrm
vvar.h15910644editdlrm
word-at-a-time.h25960644editdlrm
x86_init.h101760644editdlrm
xor.h101070644editdlrm
xor_32.h143470644editdlrm
xor_64.h7160644editdlrm
xor_avx.h43440644editdlrm
Edit: /usr/src/linux-headers-5.15.0-181/arch/x86/include/asm/elf.h (12623B)
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_X86_ELF_H #define _ASM_X86_ELF_H /* * ELF register definitions.. */ #include #include #include #include #include typedef unsigned long elf_greg_t; #define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) typedef elf_greg_t elf_gregset_t[ELF_NGREG]; typedef struct user_i387_struct elf_fpregset_t; #ifdef __i386__ #define R_386_NONE 0 #define R_386_32 1 #define R_386_PC32 2 #define R_386_GOT32 3 #define R_386_PLT32 4 #define R_386_COPY 5 #define R_386_GLOB_DAT 6 #define R_386_JMP_SLOT 7 #define R_386_RELATIVE 8 #define R_386_GOTOFF 9 #define R_386_GOTPC 10 #define R_386_NUM 11 /* * These are used to set parameters in the core dumps. */ #define ELF_CLASS ELFCLASS32 #define ELF_DATA ELFDATA2LSB #define ELF_ARCH EM_386 #else /* x86-64 relocation types */ #define R_X86_64_NONE 0 /* No reloc */ #define R_X86_64_64 1 /* Direct 64 bit */ #define R_X86_64_PC32 2 /* PC relative 32 bit signed */ #define R_X86_64_GOT32 3 /* 32 bit GOT entry */ #define R_X86_64_PLT32 4 /* 32 bit PLT address */ #define R_X86_64_COPY 5 /* Copy symbol at runtime */ #define R_X86_64_GLOB_DAT 6 /* Create GOT entry */ #define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */ #define R_X86_64_RELATIVE 8 /* Adjust by program base */ #define R_X86_64_GOTPCREL 9 /* 32 bit signed pc relative offset to GOT */ #define R_X86_64_32 10 /* Direct 32 bit zero extended */ #define R_X86_64_32S 11 /* Direct 32 bit sign extended */ #define R_X86_64_16 12 /* Direct 16 bit zero extended */ #define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */ #define R_X86_64_8 14 /* Direct 8 bit sign extended */ #define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */ #define R_X86_64_PC64 24 /* Place relative 64-bit signed */ /* * These are used to set parameters in the core dumps. */ #define ELF_CLASS ELFCLASS64 #define ELF_DATA ELFDATA2LSB #define ELF_ARCH EM_X86_64 #endif #include #ifdef CONFIG_X86_64 extern unsigned int vdso64_enabled; #endif #if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION) extern unsigned int vdso32_enabled; #endif /* * This is used to ensure we don't load something for the wrong architecture. */ #define elf_check_arch_ia32(x) \ (((x)->e_machine == EM_386) || ((x)->e_machine == EM_486)) #include #ifdef CONFIG_X86_32 #include #define elf_check_arch(x) elf_check_arch_ia32(x) /* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program starts %edx contains a pointer to a function which might be registered using `atexit'. This provides a mean for the dynamic linker to call DT_FINI functions for shared libraries that have been loaded before the code runs. A value of 0 tells we have no such handler. We might as well make sure everything else is cleared too (except for %esp), just to make things more deterministic. */ #define ELF_PLAT_INIT(_r, load_addr) \ do { \ _r->bx = 0; _r->cx = 0; _r->dx = 0; \ _r->si = 0; _r->di = 0; _r->bp = 0; \ _r->ax = 0; \ } while (0) /* * regs is struct pt_regs, pr_reg is elf_gregset_t (which is * now struct_user_regs, they are different) */ #define ELF_CORE_COPY_REGS_COMMON(pr_reg, regs) \ do { \ pr_reg[0] = regs->bx; \ pr_reg[1] = regs->cx; \ pr_reg[2] = regs->dx; \ pr_reg[3] = regs->si; \ pr_reg[4] = regs->di; \ pr_reg[5] = regs->bp; \ pr_reg[6] = regs->ax; \ pr_reg[7] = regs->ds; \ pr_reg[8] = regs->es; \ pr_reg[9] = regs->fs; \ pr_reg[11] = regs->orig_ax; \ pr_reg[12] = regs->ip; \ pr_reg[13] = regs->cs; \ pr_reg[14] = regs->flags; \ pr_reg[15] = regs->sp; \ pr_reg[16] = regs->ss; \ } while (0); #define ELF_CORE_COPY_REGS(pr_reg, regs) \ do { \ ELF_CORE_COPY_REGS_COMMON(pr_reg, regs);\ pr_reg[10] = get_user_gs(regs); \ } while (0); #define ELF_CORE_COPY_KERNEL_REGS(pr_reg, regs) \ do { \ ELF_CORE_COPY_REGS_COMMON(pr_reg, regs);\ savesegment(gs, pr_reg[10]); \ } while (0); #define ELF_PLATFORM (utsname()->machine) #define set_personality_64bit() do { } while (0) #else /* CONFIG_X86_32 */ /* * This is used to ensure we don't load something for the wrong architecture. */ #define elf_check_arch(x) \ ((x)->e_machine == EM_X86_64) #define compat_elf_check_arch(x) \ (elf_check_arch_ia32(x) || \ (IS_ENABLED(CONFIG_X86_X32_ABI) && (x)->e_machine == EM_X86_64)) #if __USER32_DS != __USER_DS # error "The following code assumes __USER32_DS == __USER_DS" #endif static inline void elf_common_init(struct thread_struct *t, struct pt_regs *regs, const u16 ds) { /* ax gets execve's return value. */ /*regs->ax = */ regs->bx = regs->cx = regs->dx = 0; regs->si = regs->di = regs->bp = 0; regs->r8 = regs->r9 = regs->r10 = regs->r11 = 0; regs->r12 = regs->r13 = regs->r14 = regs->r15 = 0; t->fsbase = t->gsbase = 0; t->fsindex = t->gsindex = 0; t->ds = t->es = ds; } #define ELF_PLAT_INIT(_r, load_addr) \ elf_common_init(¤t->thread, _r, 0) #define COMPAT_ELF_PLAT_INIT(regs, load_addr) \ elf_common_init(¤t->thread, regs, __USER_DS) void compat_start_thread(struct pt_regs *regs, u32 new_ip, u32 new_sp, bool x32); #define COMPAT_START_THREAD(ex, regs, new_ip, new_sp) \ compat_start_thread(regs, new_ip, new_sp, ex->e_machine == EM_X86_64) void set_personality_ia32(bool); #define COMPAT_SET_PERSONALITY(ex) \ set_personality_ia32((ex).e_machine == EM_X86_64) #define COMPAT_ELF_PLATFORM ("i686") /* * regs is struct pt_regs, pr_reg is elf_gregset_t (which is * now struct_user_regs, they are different). Assumes current is the process * getting dumped. */ #define ELF_CORE_COPY_REGS(pr_reg, regs) \ do { \ unsigned v; \ (pr_reg)[0] = (regs)->r15; \ (pr_reg)[1] = (regs)->r14; \ (pr_reg)[2] = (regs)->r13; \ (pr_reg)[3] = (regs)->r12; \ (pr_reg)[4] = (regs)->bp; \ (pr_reg)[5] = (regs)->bx; \ (pr_reg)[6] = (regs)->r11; \ (pr_reg)[7] = (regs)->r10; \ (pr_reg)[8] = (regs)->r9; \ (pr_reg)[9] = (regs)->r8; \ (pr_reg)[10] = (regs)->ax; \ (pr_reg)[11] = (regs)->cx; \ (pr_reg)[12] = (regs)->dx; \ (pr_reg)[13] = (regs)->si; \ (pr_reg)[14] = (regs)->di; \ (pr_reg)[15] = (regs)->orig_ax; \ (pr_reg)[16] = (regs)->ip; \ (pr_reg)[17] = (regs)->cs; \ (pr_reg)[18] = (regs)->flags; \ (pr_reg)[19] = (regs)->sp; \ (pr_reg)[20] = (regs)->ss; \ (pr_reg)[21] = x86_fsbase_read_cpu(); \ (pr_reg)[22] = x86_gsbase_read_cpu_inactive(); \ asm("movl %%ds,%0" : "=r" (v)); (pr_reg)[23] = v; \ asm("movl %%es,%0" : "=r" (v)); (pr_reg)[24] = v; \ asm("movl %%fs,%0" : "=r" (v)); (pr_reg)[25] = v; \ asm("movl %%gs,%0" : "=r" (v)); (pr_reg)[26] = v; \ } while (0); /* I'm not sure if we can use '-' here */ #define ELF_PLATFORM ("x86_64") extern void set_personality_64bit(void); extern unsigned int sysctl_vsyscall32; extern int force_personality32; #endif /* !CONFIG_X86_32 */ #define CORE_DUMP_USE_REGSET #define ELF_EXEC_PAGESIZE 4096 /* * This is the base location for PIE (ET_DYN with INTERP) loads. On * 64-bit, this is above 4GB to leave the entire 32-bit address * space open for things that want to use the area for 32-bit pointers. */ #define ELF_ET_DYN_BASE (mmap_is_ia32() ? 0x000400000UL : \ (DEFAULT_MAP_WINDOW / 3 * 2)) /* This yields a mask that user programs can use to figure out what instruction set this CPU supports. This could be done in user space, but it's not easy, and we've already done it here. */ #define ELF_HWCAP (boot_cpu_data.x86_capability[CPUID_1_EDX]) extern u32 elf_hwcap2; /* * HWCAP2 supplies mask with kernel enabled CPU features, so that * the application can discover that it can safely use them. * The bits are defined in uapi/asm/hwcap2.h. */ #define ELF_HWCAP2 (elf_hwcap2) /* This yields a string that ld.so will use to load implementation specific libraries for optimization. This is more specific in intent than poking at uname or /proc/cpuinfo. For the moment, we have only optimizations for the Intel generations, but that could change... */ #define SET_PERSONALITY(ex) set_personality_64bit() /* * An executable for which elf_read_implies_exec() returns TRUE will * have the READ_IMPLIES_EXEC personality flag set automatically. * * The decision process for determining the results are: * * CPU: | lacks NX* | has NX, ia32 | has NX, x86_64 | * ELF: | | | | * ---------------------|------------|------------------|----------------| * missing PT_GNU_STACK | exec-all | exec-all | exec-none | * PT_GNU_STACK == RWX | exec-stack | exec-stack | exec-stack | * PT_GNU_STACK == RW | exec-none | exec-none | exec-none | * * exec-all : all PROT_READ user mappings are executable, except when * backed by files on a noexec-filesystem. * exec-none : only PROT_EXEC user mappings are executable. * exec-stack: only the stack and PROT_EXEC user mappings are executable. * * *this column has no architectural effect: NX markings are ignored by * hardware, but may have behavioral effects when "wants X" collides with * "cannot be X" constraints in memory permission flags, as in * https://lkml.kernel.org/r/20190418055759.GA3155@mellanox.com * */ #define elf_read_implies_exec(ex, executable_stack) \ (mmap_is_ia32() && executable_stack == EXSTACK_DEFAULT) struct task_struct; #define ARCH_DLINFO_IA32 \ do { \ if (VDSO_CURRENT_BASE) { \ NEW_AUX_ENT(AT_SYSINFO, VDSO_ENTRY); \ NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE); \ } \ NEW_AUX_ENT(AT_MINSIGSTKSZ, get_sigframe_size()); \ } while (0) /* * True on X86_32 or when emulating IA32 on X86_64 */ static inline int mmap_is_ia32(void) { return IS_ENABLED(CONFIG_X86_32) || (IS_ENABLED(CONFIG_COMPAT) && test_thread_flag(TIF_ADDR32)); } extern unsigned long task_size_32bit(void); extern unsigned long task_size_64bit(int full_addr_space); extern unsigned long get_mmap_base(int is_legacy); extern bool mmap_address_hint_valid(unsigned long addr, unsigned long len); extern unsigned long get_sigframe_size(void); #ifdef CONFIG_X86_32 #define __STACK_RND_MASK(is32bit) (0x7ff) #define STACK_RND_MASK (0x7ff) #define ARCH_DLINFO ARCH_DLINFO_IA32 /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */ #else /* CONFIG_X86_32 */ /* 1GB for 64bit, 8MB for 32bit */ #define __STACK_RND_MASK(is32bit) ((is32bit) ? 0x7ff : 0x3fffff) #define STACK_RND_MASK __STACK_RND_MASK(mmap_is_ia32()) #define ARCH_DLINFO \ do { \ if (vdso64_enabled) \ NEW_AUX_ENT(AT_SYSINFO_EHDR, \ (unsigned long __force)current->mm->context.vdso); \ NEW_AUX_ENT(AT_MINSIGSTKSZ, get_sigframe_size()); \ } while (0) /* As a historical oddity, the x32 and x86_64 vDSOs are controlled together. */ #define ARCH_DLINFO_X32 \ do { \ if (vdso64_enabled) \ NEW_AUX_ENT(AT_SYSINFO_EHDR, \ (unsigned long __force)current->mm->context.vdso); \ NEW_AUX_ENT(AT_MINSIGSTKSZ, get_sigframe_size()); \ } while (0) #define AT_SYSINFO 32 #define COMPAT_ARCH_DLINFO \ if (exec->e_machine == EM_X86_64) \ ARCH_DLINFO_X32; \ else if (IS_ENABLED(CONFIG_IA32_EMULATION)) \ ARCH_DLINFO_IA32 #define COMPAT_ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000) #endif /* !CONFIG_X86_32 */ #define VDSO_CURRENT_BASE ((unsigned long)current->mm->context.vdso) #define VDSO_ENTRY \ ((unsigned long)current->mm->context.vdso + \ vdso_image_32.sym___kernel_vsyscall) struct linux_binprm; #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 extern int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp); extern int compat_arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp, bool x32); #define COMPAT_ARCH_SETUP_ADDITIONAL_PAGES(bprm, ex, interpreter) \ compat_arch_setup_additional_pages(bprm, interpreter, \ (ex->e_machine == EM_X86_64)) extern bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs); /* Do not change the values. See get_align_mask() */ enum align_flags { ALIGN_VA_32 = BIT(0), ALIGN_VA_64 = BIT(1), }; struct va_alignment { int flags; unsigned long mask; unsigned long bits; } ____cacheline_aligned; extern struct va_alignment va_align; extern unsigned long align_vdso_addr(unsigned long); #endif /* _ASM_X86_ELF_H */