176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * sys/elf32.h 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _SYS_ELF32_H 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _SYS_ELF32_H 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <sys/elfcommon.h> 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ELF standard typedefs (yet more proof that <stdint.h> was way overdue) */ 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint16_t Elf32_Half; 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef int16_t Elf32_SHalf; 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t Elf32_Word; 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef int32_t Elf32_Sword; 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint64_t Elf32_Xword; 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef int64_t Elf32_Sxword; 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t Elf32_Off; 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t Elf32_Addr; 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint16_t Elf32_Section; 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Dynamic header */ 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_dyn { 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Sword d_tag; 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman union { 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Sword d_val; 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr d_ptr; 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } d_un; 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Dyn; 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Relocations */ 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF32_R_SYM(x) ((x) >> 8) 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF32_R_TYPE(x) ((x) & 0xff) 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_rel { 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr r_offset; 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word r_info; 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Rel; 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_rela { 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr r_offset; 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word r_info; 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Sword r_addend; 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Rela; 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Symbol */ 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_sym { 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word st_name; 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr st_value; 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word st_size; 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned char st_info; 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned char st_other; 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half st_shndx; 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Sym; 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Main file header */ 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_hdr { 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned char e_ident[EI_NIDENT]; 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_type; 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_machine; 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word e_version; 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr e_entry; 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Off e_phoff; 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Off e_shoff; 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word e_flags; 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_ehsize; 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_phentsize; 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_phnum; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_shentsize; 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_shnum; 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Half e_shstrndx; 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Ehdr; 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Program header */ 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_phdr { 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word p_type; 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Off p_offset; 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr p_vaddr; 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr p_paddr; 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word p_filesz; 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word p_memsz; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word p_flags; 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word p_align; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Phdr; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Section header */ 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_shdr { 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_name; 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_type; 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_flags; 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Addr sh_addr; 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Off sh_offset; 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_size; 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_link; 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_info; 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_addralign; 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word sh_entsize; 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Shdr; 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Note header */ 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct elf32_note { 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word n_namesz; /* Name size */ 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word n_descsz; /* Content size */ 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Elf32_Word n_type; /* Content type */ 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Nhdr; 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* _SYS_ELF32_H */ 114