12ae585d7SNikos Nikoleris /* SPDX-License-Identifier: LGPL-2.0-or-later */ 22ae585d7SNikos Nikoleris /* 32ae585d7SNikos Nikoleris * Relevant definitions from uapi/linux/elf.h and asm/elf.h 42ae585d7SNikos Nikoleris */ 52ae585d7SNikos Nikoleris 62ae585d7SNikos Nikoleris #ifndef _ELF_H_ 72ae585d7SNikos Nikoleris #define _ELF_H_ 82ae585d7SNikos Nikoleris 92ae585d7SNikos Nikoleris #include <libcflat.h> 102ae585d7SNikos Nikoleris 113b10c7e2SAndrew Jones /* 32-bit ELF base types. */ 123b10c7e2SAndrew Jones typedef u32 Elf32_Addr; 133b10c7e2SAndrew Jones typedef u32 Elf32_Xword; 143b10c7e2SAndrew Jones typedef s32 Elf32_Sxword; 153b10c7e2SAndrew Jones 162ae585d7SNikos Nikoleris /* 64-bit ELF base types. */ 172ae585d7SNikos Nikoleris typedef u64 Elf64_Addr; 182ae585d7SNikos Nikoleris typedef u64 Elf64_Xword; 192ae585d7SNikos Nikoleris typedef s64 Elf64_Sxword; 202ae585d7SNikos Nikoleris 212ae585d7SNikos Nikoleris typedef struct { 222ae585d7SNikos Nikoleris Elf64_Sxword d_tag; /* entry tag value */ 232ae585d7SNikos Nikoleris union { 242ae585d7SNikos Nikoleris Elf64_Xword d_val; 252ae585d7SNikos Nikoleris Elf64_Addr d_ptr; 262ae585d7SNikos Nikoleris } d_un; 272ae585d7SNikos Nikoleris } Elf64_Dyn; 282ae585d7SNikos Nikoleris 292ae585d7SNikos Nikoleris typedef struct elf64_rel { 302ae585d7SNikos Nikoleris Elf64_Addr r_offset; /* Location at which to apply the action */ 312ae585d7SNikos Nikoleris Elf64_Xword r_info; /* index and type of relocation */ 322ae585d7SNikos Nikoleris } Elf64_Rel; 332ae585d7SNikos Nikoleris 343b10c7e2SAndrew Jones typedef struct elf32_rela { 353b10c7e2SAndrew Jones Elf32_Addr r_offset; /* Location at which to apply the action */ 363b10c7e2SAndrew Jones Elf32_Xword r_info; /* index and type of relocation */ 373b10c7e2SAndrew Jones Elf32_Sxword r_addend; /* Constant addend used to compute value */ 383b10c7e2SAndrew Jones } Elf32_Rela; 393b10c7e2SAndrew Jones 402ae585d7SNikos Nikoleris typedef struct elf64_rela { 412ae585d7SNikos Nikoleris Elf64_Addr r_offset; /* Location at which to apply the action */ 422ae585d7SNikos Nikoleris Elf64_Xword r_info; /* index and type of relocation */ 432ae585d7SNikos Nikoleris Elf64_Sxword r_addend; /* Constant addend used to compute value */ 442ae585d7SNikos Nikoleris } Elf64_Rela; 452ae585d7SNikos Nikoleris 462ae585d7SNikos Nikoleris /* This is the info that is needed to parse the dynamic section of the file */ 472ae585d7SNikos Nikoleris #define DT_NULL 0 482ae585d7SNikos Nikoleris #define DT_RELA 7 492ae585d7SNikos Nikoleris #define DT_RELASZ 8 502ae585d7SNikos Nikoleris #define DT_RELAENT 9 512ae585d7SNikos Nikoleris 522ae585d7SNikos Nikoleris /* x86 relocation types. */ 532ae585d7SNikos Nikoleris #define R_X86_64_NONE 0 /* No reloc */ 542ae585d7SNikos Nikoleris #define R_X86_64_RELATIVE 8 /* Adjust by program base */ 552ae585d7SNikos Nikoleris 562ae585d7SNikos Nikoleris 572ae585d7SNikos Nikoleris /* 582ae585d7SNikos Nikoleris * AArch64 static relocation types. 592ae585d7SNikos Nikoleris */ 602ae585d7SNikos Nikoleris 612ae585d7SNikos Nikoleris /* Miscellaneous. */ 622ae585d7SNikos Nikoleris #define R_AARCH64_NONE 256 632ae585d7SNikos Nikoleris #define R_AARCH64_RELATIVE 1027 642ae585d7SNikos Nikoleris 652ae585d7SNikos Nikoleris /* The following are used with relocations */ 662ae585d7SNikos Nikoleris #define ELF64_R_TYPE(i) ((i) & 0xffffffff) 672ae585d7SNikos Nikoleris 68*a403033cSAndrew Jones /* 69*a403033cSAndrew Jones * riscv static relocation types. 70*a403033cSAndrew Jones */ 71*a403033cSAndrew Jones #define R_RISCV_RELATIVE 3 72*a403033cSAndrew Jones 732ae585d7SNikos Nikoleris #endif /* _ELF_H_ */ 74