mirror of
https://github.com/AuxXxilium/eudev.git
synced 2025-01-25 16:40:31 +07:00
116 lines
2.3 KiB
C
116 lines
2.3 KiB
C
/*
|
|
* sys/elf64.h
|
|
*/
|
|
|
|
#ifndef _SYS_ELF64_H
|
|
#define _SYS_ELF64_H
|
|
|
|
#include <sys/elfcommon.h>
|
|
|
|
/* ELF standard typedefs (yet more proof that <stdint.h> was way overdue) */
|
|
typedef uint16_t Elf64_Half;
|
|
typedef int16_t Elf64_SHalf;
|
|
typedef uint32_t Elf64_Word;
|
|
typedef int32_t Elf64_Sword;
|
|
typedef uint64_t Elf64_Xword;
|
|
typedef int64_t Elf64_Sxword;
|
|
|
|
typedef uint64_t Elf64_Off;
|
|
typedef uint64_t Elf64_Addr;
|
|
typedef uint16_t Elf64_Section;
|
|
|
|
/* Dynamic header */
|
|
|
|
typedef struct elf64_dyn {
|
|
Elf64_Sxword d_tag;
|
|
union{
|
|
Elf64_Xword d_val;
|
|
Elf64_Addr d_ptr;
|
|
} d_un;
|
|
} Elf64_Dyn;
|
|
|
|
/* Relocations */
|
|
|
|
#define ELF64_R_SYM(x) ((x) >> 32)
|
|
#define ELF64_R_TYPE(x) ((x) & 0xffffffff)
|
|
|
|
typedef struct elf64_rel {
|
|
Elf64_Addr r_offset;
|
|
Elf64_Xword r_info;
|
|
} Elf64_Rel;
|
|
|
|
typedef struct elf64_rela {
|
|
Elf64_Addr r_offset;
|
|
Elf64_Xword r_info;
|
|
Elf64_Sxword r_addend;
|
|
} Elf64_Rela;
|
|
|
|
/* Symbol */
|
|
|
|
typedef struct elf64_sym {
|
|
Elf64_Word st_name;
|
|
unsigned char st_info;
|
|
unsigned char st_other;
|
|
Elf64_Half st_shndx;
|
|
Elf64_Addr st_value;
|
|
Elf64_Xword st_size;
|
|
} Elf64_Sym;
|
|
|
|
/* Main file header */
|
|
|
|
typedef struct elf64_hdr {
|
|
unsigned char e_ident[EI_NIDENT];
|
|
Elf64_Half e_type;
|
|
Elf64_Half e_machine;
|
|
Elf64_Word e_version;
|
|
Elf64_Addr e_entry;
|
|
Elf64_Off e_phoff;
|
|
Elf64_Off e_shoff;
|
|
Elf64_Word e_flags;
|
|
Elf64_Half e_ehsize;
|
|
Elf64_Half e_phentsize;
|
|
Elf64_Half e_phnum;
|
|
Elf64_Half e_shentsize;
|
|
Elf64_Half e_shnum;
|
|
Elf64_Half e_shstrndx;
|
|
} Elf64_Ehdr;
|
|
|
|
/* Program header */
|
|
|
|
typedef struct elf64_phdr {
|
|
Elf64_Word p_type;
|
|
Elf64_Word p_flags;
|
|
Elf64_Off p_offset;
|
|
Elf64_Addr p_vaddr;
|
|
Elf64_Addr p_paddr;
|
|
Elf64_Xword p_filesz;
|
|
Elf64_Xword p_memsz;
|
|
Elf64_Xword p_align;
|
|
} Elf64_Phdr;
|
|
|
|
|
|
/* Section header */
|
|
|
|
typedef struct elf64_shdr {
|
|
Elf64_Word sh_name;
|
|
Elf64_Word sh_type;
|
|
Elf64_Xword sh_flags;
|
|
Elf64_Addr sh_addr;
|
|
Elf64_Off sh_offset;
|
|
Elf64_Xword sh_size;
|
|
Elf64_Word sh_link;
|
|
Elf64_Word sh_info;
|
|
Elf64_Xword sh_addralign;
|
|
Elf64_Xword sh_entsize;
|
|
} Elf64_Shdr;
|
|
|
|
/* Note header */
|
|
typedef struct elf64_note {
|
|
Elf64_Word n_namesz; /* Name size */
|
|
Elf64_Word n_descsz; /* Content size */
|
|
Elf64_Word n_type; /* Content type */
|
|
} Elf64_Nhdr;
|
|
|
|
#endif /* _SYS_ELF64_H */
|
|
|