/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __ASMPARISC_ELF_H
#define __ASMPARISC_ELF_H
/*
* ELF register definitions . .
*/
#include <linux/types.h>
#define EM_PARISC 15
/* HPPA specific definitions. */
/* Legal values for e_flags field of Elf32_Ehdr. */
#define EF_PARISC_TRAPNIL 0 x00010000 /* Trap nil pointer dereference. */
#define EF_PARISC_EXT 0 x00020000 /* Program uses arch. extensions. */
#define EF_PARISC_LSB 0 x00040000 /* Program expects little endian. */
#define EF_PARISC_WIDE 0 x00080000 /* Program expects wide mode. */
#define EF_PARISC_NO_KABP 0 x00100000 /* No kernel assisted branch
prediction. */
#define EF_PARISC_LAZYSWAP 0 x00400000 /* Allow lazy swapping. */
#define EF_PARISC_ARCH 0 x0000ffff /* Architecture version. */
/* Defined values for `e_flags & EF_PARISC_ARCH' are: */
#define EFA_PARISC_1_0 0 x020b /* PA-RISC 1.0 big-endian. */
#define EFA_PARISC_1_1 0 x0210 /* PA-RISC 1.1 big-endian. */
#define EFA_PARISC_2_0 0 x0214 /* PA-RISC 2.0 big-endian. */
/* Additional section indices. */
#define SHN_PARISC_ANSI_COMMON 0 xff00 /* Section for tenatively declared
symbols in ANSI C. */
#define SHN_PARISC_HUGE_COMMON 0 xff01 /* Common blocks in huge model. */
/* Legal values for sh_type field of Elf32_Shdr. */
#define SHT_PARISC_EXT 0 x70000000 /* Contains product specific ext. */
#define SHT_PARISC_UNWIND 0 x70000001 /* Unwind information. */
#define SHT_PARISC_DOC 0 x70000002 /* Debug info for optimized code. */
/* Legal values for sh_flags field of Elf32_Shdr. */
#define SHF_PARISC_SHORT 0 x20000000 /* Section with short addressing. */
#define SHF_PARISC_HUGE 0 x40000000 /* Section far from gp. */
#define SHF_PARISC_SBP 0 x80000000 /* Static branch prediction code. */
/* Legal values for ST_TYPE subfield of st_info (symbol type). */
#define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */
#define STT_HP_OPAQUE (STT_LOOS + 0 x1)
#define STT_HP_STUB (STT_LOOS + 0 x2)
/* HPPA relocs. */
#define R_PARISC_NONE 0 /* No reloc. */
#define R_PARISC_DIR32 1 /* Direct 32-bit reference. */
#define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */
#define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */
#define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */
#define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */
#define R_PARISC_PCREL32 9 /* 32-bit rel. address. */
#define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */
#define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */
#define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */
#define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */
#define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */
#define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */
#define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */
#define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */
#define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */
#define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */
#define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */
#define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */
#define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */
#define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */
#define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */
#define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */
#define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */
#define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */
#define R_PARISC_FPTR64 64 /* 64 bits function address. */
#define R_PARISC_PLABEL32 65 /* 32 bits function address. */
#define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */
#define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */
#define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */
#define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */
#define R_PARISC_PCREL16F 77 /* 16 bits PC-rel. address. */
#define R_PARISC_PCREL16WF 78 /* 16 bits PC-rel. address. */
#define R_PARISC_PCREL16DF 79 /* 16 bits PC-rel. address. */
#define R_PARISC_DIR64 80 /* 64 bits of eff. address. */
#define R_PARISC_DIR14WR 83 /* 14 bits of eff. address. */
#define R_PARISC_DIR14DR 84 /* 14 bits of eff. address. */
#define R_PARISC_DIR16F 85 /* 16 bits of eff. address. */
#define R_PARISC_DIR16WF 86 /* 16 bits of eff. address. */
#define R_PARISC_DIR16DF 87 /* 16 bits of eff. address. */
#define R_PARISC_GPREL64 88 /* 64 bits of GP-rel. address. */
#define R_PARISC_GPREL14WR 91 /* GP-rel. address, right 14 bits. */
#define R_PARISC_GPREL14DR 92 /* GP-rel. address, right 14 bits. */
#define R_PARISC_GPREL16F 93 /* 16 bits GP-rel. address. */
#define R_PARISC_GPREL16WF 94 /* 16 bits GP-rel. address. */
#define R_PARISC_GPREL16DF 95 /* 16 bits GP-rel. address. */
#define R_PARISC_LTOFF64 96 /* 64 bits LT-rel. address. */
#define R_PARISC_LTOFF14WR 99 /* LT-rel. address, right 14 bits. */
#define R_PARISC_LTOFF14DR 100 /* LT-rel. address, right 14 bits. */
#define R_PARISC_LTOFF16F 101 /* 16 bits LT-rel. address. */
#define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */
#define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */
#define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */
#define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */
#define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */
#define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */
#define R_PARISC_PLTOFF16F 117 /* 16 bits LT-rel. address. */
#define R_PARISC_PLTOFF16WF 118 /* 16 bits PLT-rel. address. */
#define R_PARISC_PLTOFF16DF 119 /* 16 bits PLT-rel. address. */
#define R_PARISC_LTOFF_FPTR64 120 /* 64 bits LT-rel. function ptr. */
#define R_PARISC_LTOFF_FPTR14WR 123 /* LT-rel. fct. ptr., right 14 bits. */
#define R_PARISC_LTOFF_FPTR14DR 124 /* LT-rel. fct. ptr., right 14 bits. */
#define R_PARISC_LTOFF_FPTR16F 125 /* 16 bits LT-rel. function ptr. */
#define R_PARISC_LTOFF_FPTR16WF 126 /* 16 bits LT-rel. function ptr. */
#define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */
#define R_PARISC_LORESERVE 128
#define R_PARISC_COPY 128 /* Copy relocation. */
#define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */
#define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */
#define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */
#define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */
#define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */
#define R_PARISC_LTOFF_TP21L 162 /* LT-TP-rel. address, left 21 bits. */
#define R_PARISC_LTOFF_TP14R 166 /* LT-TP-rel. address, right 14 bits.*/
#define R_PARISC_LTOFF_TP14F 167 /* 14 bits LT-TP-rel. address. */
#define R_PARISC_TPREL64 216 /* 64 bits TP-rel. address. */
#define R_PARISC_TPREL14WR 219 /* TP-rel. address, right 14 bits. */
#define R_PARISC_TPREL14DR 220 /* TP-rel. address, right 14 bits. */
#define R_PARISC_TPREL16F 221 /* 16 bits TP-rel. address. */
#define R_PARISC_TPREL16WF 222 /* 16 bits TP-rel. address. */
#define R_PARISC_TPREL16DF 223 /* 16 bits TP-rel. address. */
#define R_PARISC_LTOFF_TP64 224 /* 64 bits LT-TP-rel. address. */
#define R_PARISC_LTOFF_TP14WR 227 /* LT-TP-rel. address, right 14 bits.*/
#define R_PARISC_LTOFF_TP14DR 228 /* LT-TP-rel. address, right 14 bits.*/
#define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */
#define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */
#define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */
#define R_PARISC_HIRESERVE 255
#define PA_PLABEL_FDESC 0 x02 /* bit set if PLABEL points to
* a function descriptor , not
* an address */
/* The following are PA function descriptors
*
* addr : the absolute address of the function
* gp : either the data pointer ( r27 ) for non - PIC code or
* the PLT pointer (r19) for PIC code */
/* Format for the Elf32 Function descriptor */
typedef struct elf32_fdesc {
__u32 addr;
__u32 gp;
} Elf32_Fdesc;
/* Format for the Elf64 Function descriptor */
typedef struct elf64_fdesc {
__u64 dummy[2 ]; /* used by 64-bit eBPF and tracing functions */
__u64 addr;
__u64 gp;
} Elf64_Fdesc;
#ifdef CONFIG_64BIT
#define Elf_Fdesc Elf64_Fdesc
#else
#define Elf_Fdesc Elf32_Fdesc
#endif /*CONFIG_64BIT*/
/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */
#define PT_HP_TLS (PT_LOOS + 0 x0)
#define PT_HP_CORE_NONE (PT_LOOS + 0 x1)
#define PT_HP_CORE_VERSION (PT_LOOS + 0 x2)
#define PT_HP_CORE_KERNEL (PT_LOOS + 0 x3)
#define PT_HP_CORE_COMM (PT_LOOS + 0 x4)
#define PT_HP_CORE_PROC (PT_LOOS + 0 x5)
#define PT_HP_CORE_LOADABLE (PT_LOOS + 0 x6)
#define PT_HP_CORE_STACK (PT_LOOS + 0 x7)
#define PT_HP_CORE_SHM (PT_LOOS + 0 x8)
#define PT_HP_CORE_MMF (PT_LOOS + 0 x9)
#define PT_HP_PARALLEL (PT_LOOS + 0 x10)
#define PT_HP_FASTBIND (PT_LOOS + 0 x11)
#define PT_HP_OPT_ANNOT (PT_LOOS + 0 x12)
#define PT_HP_HSL_ANNOT (PT_LOOS + 0 x13)
#define PT_HP_STACK (PT_LOOS + 0 x14)
#define PT_PARISC_ARCHEXT 0 x70000000
#define PT_PARISC_UNWIND 0 x70000001
/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */
#define PF_PARISC_SBP 0 x08000000
#define PF_HP_PAGE_SIZE 0 x00100000
#define PF_HP_FAR_SHARED 0 x00200000
#define PF_HP_NEAR_SHARED 0 x00400000
#define PF_HP_CODE 0 x01000000
#define PF_HP_MODIFY 0 x02000000
#define PF_HP_LAZYSWAP 0 x04000000
#define PF_HP_SBP 0 x08000000
/*
* 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 .
*/
#define ELF_PLATFORM ("PARISC" )
/*
* The following definitions are those for 32 - bit ELF binaries on a 32 - bit
* kernel and for 64 - bit binaries on a 64 - bit kernel . To run 32 - bit binaries
* on a 64 - bit kernel , fs / compat_binfmt_elf . c defines ELF_CLASS and then
* # includes binfmt_elf . c , which then includes this file .
*/
#ifndef ELF_CLASS
#ifdef CONFIG_64BIT
#define ELF_CLASS ELFCLASS64
#else
#define ELF_CLASS ELFCLASS32
#endif
typedef unsigned long elf_greg_t;
#define SET_PERSONALITY(ex) \
({ \
set_personality((current->personality & ~PER_MASK) | PER_LINUX); \
clear_thread_flag(TIF_32BIT); \
current->thread.map_base = DEFAULT_MAP_BASE; \
current->thread.task_size = DEFAULT_TASK_SIZE; \
})
#endif /* ! ELF_CLASS */
#define COMPAT_SET_PERSONALITY(ex) \
({ \
if ((ex).e_ident[EI_CLASS] == ELFCLASS32) { \
set_thread_flag(TIF_32BIT); \
current->thread.map_base = DEFAULT_MAP_BASE32; \
current->thread.task_size = DEFAULT_TASK_SIZE32; \
} else clear_thread_flag(TIF_32BIT); \
})
/*
* Fill in general registers in a core dump . This saves pretty
* much the same registers as hp - ux , although in a different order .
* Registers marked # below are not currently saved in pt_regs , so
* we use their current values here .
*
* gr0 . . gr31
* sr0 . . sr7
* iaoq0 . . iaoq1
* iasq0 . . iasq1
* cr11 ( sar )
* cr19 ( iir )
* cr20 ( isr )
* cr21 ( ior )
* # cr22 ( ipsw )
* # cr0 ( recovery counter )
* # cr24 . . cr31 ( temporary registers )
* # cr8 , 9 , 12 , 13 ( protection IDs )
* # cr10 ( scr / ccr )
* # cr15 ( ext int enable mask )
*
*/
#define ELF_CORE_COPY_REGS(dst, pt) \
memset(dst, 0 , sizeof (dst)); /* don't leak any "random" bits */ \
{ int i; \
for (i = 0 ; i < 32 ; i++) dst[i] = pt->gr[i]; \
for (i = 0 ; i < 8 ; i++) dst[32 + i] = pt->sr[i]; \
} \
dst[40 ] = pt->iaoq[0 ]; dst[41 ] = pt->iaoq[1 ]; \
dst[42 ] = pt->iasq[0 ]; dst[43 ] = pt->iasq[1 ]; \
dst[44 ] = pt->sar; dst[45 ] = pt->iir; \
dst[46 ] = pt->isr; dst[47 ] = pt->ior; \
dst[48 ] = mfctl(22 ); dst[49 ] = mfctl(0 ); \
dst[50 ] = mfctl(24 ); dst[51 ] = mfctl(25 ); \
dst[52 ] = mfctl(26 ); dst[53 ] = mfctl(27 ); \
dst[54 ] = mfctl(28 ); dst[55 ] = mfctl(29 ); \
dst[56 ] = mfctl(30 ); dst[57 ] = mfctl(31 ); \
dst[58 ] = mfctl( 8 ); dst[59 ] = mfctl( 9 ); \
dst[60 ] = mfctl(12 ); dst[61 ] = mfctl(13 ); \
dst[62 ] = mfctl(10 ); dst[63 ] = mfctl(15 );
#define CORE_DUMP_USE_REGSET
#define ELF_NGREG 80 /* We only need 64 at present, but leave space
for expansion. */
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
#define ELF_NFPREG 32
typedef double elf_fpreg_t;
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
struct task_struct;
struct pt_regs; /* forward declaration... */
#define elf_check_arch(x) \
((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELF_CLASS)
#define compat_elf_check_arch(x) \
((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELFCLASS32)
/*
* These are used to set parameters in the core dumps .
*/
#define ELF_DATA ELFDATA2MSB
#define ELF_ARCH EM_PARISC
#define ELF_OSABI ELFOSABI_LINUX
/* %r23 is set by ld.so to a pointer to a function which might be
registered using atexit . This provides a means for the dynamic
linker to call DT_FINI functions for shared libraries that have
been loaded before the code runs .
So that we can use the same startup file with static executables ,
we start programs with a value of 0 to indicate that there is no
such function. */
#define ELF_PLAT_INIT(_r, load_addr) _r->gr[23 ] = 0
#define ELF_EXEC_PAGESIZE 4096
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
use of this is to invoke " . / ld . so someprog " to test out a new version of
the loader . We need to make sure that it is out of the way of the program
that it will " exec " , and that there is sufficient room for the brk .
( 2 * TASK_SIZE / 3 ) turns into something undefined when run through a
32 bit preprocessor and in some cases results in the kernel trying to map
ld . so to the kernel virtual base . Use a sane value instead . / Jes
*/
#define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0 x01000000)
/* 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 0
#define STACK_RND_MASK 0 x7ff /* 8MB of VA */
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
struct linux_binprm;
extern int arch_setup_additional_pages(struct linux_binprm *bprm,
int executable_stack);
#define VDSO_AUX_ENT(a, b) NEW_AUX_ENT(a, b)
#define VDSO_CURRENT_BASE current->mm->context.vdso_base
#define ARCH_DLINFO \
do { \
if (VDSO_CURRENT_BASE) { \
NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE);\
} \
} while (0 )
#endif
Messung V0.5 in Prozent C=65 H=71 G=67
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-10-01)
¤
*© Formatika GbR, Deutschland