1*2ae585d7SNikos Nikoleris /* SPDX-License-Identifier: LGPL-2.0-or-later */ 2*2ae585d7SNikos Nikoleris /* 3*2ae585d7SNikos Nikoleris * Relevant definitions from uapi/linux/elf.h and asm/elf.h 4*2ae585d7SNikos Nikoleris */ 5*2ae585d7SNikos Nikoleris 6*2ae585d7SNikos Nikoleris #ifndef _ELF_H_ 7*2ae585d7SNikos Nikoleris #define _ELF_H_ 8*2ae585d7SNikos Nikoleris 9*2ae585d7SNikos Nikoleris #include <libcflat.h> 10*2ae585d7SNikos Nikoleris 11*2ae585d7SNikos Nikoleris /* 64-bit ELF base types. */ 12*2ae585d7SNikos Nikoleris typedef u64 Elf64_Addr; 13*2ae585d7SNikos Nikoleris typedef u64 Elf64_Xword; 14*2ae585d7SNikos Nikoleris typedef s64 Elf64_Sxword; 15*2ae585d7SNikos Nikoleris 16*2ae585d7SNikos Nikoleris typedef struct { 17*2ae585d7SNikos Nikoleris Elf64_Sxword d_tag; /* entry tag value */ 18*2ae585d7SNikos Nikoleris union { 19*2ae585d7SNikos Nikoleris Elf64_Xword d_val; 20*2ae585d7SNikos Nikoleris Elf64_Addr d_ptr; 21*2ae585d7SNikos Nikoleris } d_un; 22*2ae585d7SNikos Nikoleris } Elf64_Dyn; 23*2ae585d7SNikos Nikoleris 24*2ae585d7SNikos Nikoleris typedef struct elf64_rel { 25*2ae585d7SNikos Nikoleris Elf64_Addr r_offset; /* Location at which to apply the action */ 26*2ae585d7SNikos Nikoleris Elf64_Xword r_info; /* index and type of relocation */ 27*2ae585d7SNikos Nikoleris } Elf64_Rel; 28*2ae585d7SNikos Nikoleris 29*2ae585d7SNikos Nikoleris typedef struct elf64_rela { 30*2ae585d7SNikos Nikoleris Elf64_Addr r_offset; /* Location at which to apply the action */ 31*2ae585d7SNikos Nikoleris Elf64_Xword r_info; /* index and type of relocation */ 32*2ae585d7SNikos Nikoleris Elf64_Sxword r_addend; /* Constant addend used to compute value */ 33*2ae585d7SNikos Nikoleris } Elf64_Rela; 34*2ae585d7SNikos Nikoleris 35*2ae585d7SNikos Nikoleris /* This is the info that is needed to parse the dynamic section of the file */ 36*2ae585d7SNikos Nikoleris #define DT_NULL 0 37*2ae585d7SNikos Nikoleris #define DT_RELA 7 38*2ae585d7SNikos Nikoleris #define DT_RELASZ 8 39*2ae585d7SNikos Nikoleris #define DT_RELAENT 9 40*2ae585d7SNikos Nikoleris 41*2ae585d7SNikos Nikoleris /* x86 relocation types. */ 42*2ae585d7SNikos Nikoleris #define R_X86_64_NONE 0 /* No reloc */ 43*2ae585d7SNikos Nikoleris #define R_X86_64_RELATIVE 8 /* Adjust by program base */ 44*2ae585d7SNikos Nikoleris 45*2ae585d7SNikos Nikoleris 46*2ae585d7SNikos Nikoleris /* 47*2ae585d7SNikos Nikoleris * AArch64 static relocation types. 48*2ae585d7SNikos Nikoleris */ 49*2ae585d7SNikos Nikoleris 50*2ae585d7SNikos Nikoleris /* Miscellaneous. */ 51*2ae585d7SNikos Nikoleris #define R_AARCH64_NONE 256 52*2ae585d7SNikos Nikoleris #define R_AARCH64_RELATIVE 1027 53*2ae585d7SNikos Nikoleris 54*2ae585d7SNikos Nikoleris /* The following are used with relocations */ 55*2ae585d7SNikos Nikoleris #define ELF64_R_TYPE(i) ((i) & 0xffffffff) 56*2ae585d7SNikos Nikoleris 57*2ae585d7SNikos Nikoleris #endif /* _ELF_H_ */ 58