100 lines
2.1 KiB
C
100 lines
2.1 KiB
C
#ifndef ELF_H
|
|
#define ELF_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#define EI_DATA 5
|
|
#define EI_NIDENT 16
|
|
#define SHT_SYMTAB 2
|
|
#define SHT_DYNAMIC 6
|
|
#define SHT_REL 9
|
|
#define SHT_DYNSYM 11
|
|
#define SHT_MIPS_REGINFO 0x70000006
|
|
#define STN_UNDEF 0
|
|
#define STT_OBJECT 1
|
|
#define STT_FUNC 2
|
|
#define DT_PLTGOT 3
|
|
#define DT_MIPS_LOCAL_GOTNO 0x7000000a
|
|
#define DT_MIPS_SYMTABNO 0x70000011
|
|
#define DT_MIPS_GOTSYM 0x70000013
|
|
|
|
#define ELF32_R_SYM(info) ((info) >> 8)
|
|
#define ELF32_R_TYPE(info) ((info) & 0xff)
|
|
|
|
#define ELF32_ST_TYPE(info) ((info) & 0xf)
|
|
|
|
#define R_MIPS_26 4
|
|
#define R_MIPS_HI16 5
|
|
#define R_MIPS_LO16 6
|
|
|
|
#define SHN_UNDEF 0
|
|
#define SHN_COMMON 0xfff2
|
|
#define SHN_MIPS_ACOMMON 0xff00
|
|
#define SHN_MIPS_TEXT 0xff01
|
|
#define SHN_MIPS_DATA 0xff02
|
|
|
|
typedef uint32_t Elf32_Addr;
|
|
typedef uint32_t Elf32_Off;
|
|
|
|
typedef struct {
|
|
uint8_t e_ident[EI_NIDENT];
|
|
uint16_t e_type;
|
|
uint16_t e_machine;
|
|
uint32_t e_version;
|
|
Elf32_Addr e_entry;
|
|
Elf32_Off e_phoff;
|
|
Elf32_Off e_shoff;
|
|
uint32_t e_flags;
|
|
uint16_t e_ehsize;
|
|
uint16_t e_phentsize;
|
|
uint16_t e_phnum;
|
|
uint16_t e_shentsize;
|
|
uint16_t e_shnum;
|
|
uint16_t e_shstrndx;
|
|
} Elf32_Ehdr;
|
|
|
|
typedef struct {
|
|
uint32_t sh_name;
|
|
uint32_t sh_type;
|
|
uint32_t sh_flags;
|
|
Elf32_Addr sh_addr;
|
|
Elf32_Off sh_offset;
|
|
uint32_t sh_size;
|
|
uint32_t sh_link;
|
|
uint32_t sh_info;
|
|
uint32_t sh_addralign;
|
|
uint32_t sh_entsize;
|
|
} Elf32_Shdr;
|
|
|
|
typedef struct {
|
|
uint32_t st_name;
|
|
Elf32_Addr st_value;
|
|
uint32_t st_size;
|
|
uint8_t st_info;
|
|
uint8_t st_other;
|
|
uint16_t st_shndx;
|
|
} Elf32_Sym;
|
|
|
|
typedef struct {
|
|
Elf32_Addr r_offset;
|
|
uint32_t r_info;
|
|
} Elf32_Rel;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t ri_gprmask; /* General registers used. */
|
|
uint32_t ri_cprmask[4]; /* Coprocessor registers used. */
|
|
int32_t ri_gp_value; /* $gp register value. */
|
|
} Elf32_RegInfo;
|
|
|
|
typedef struct
|
|
{
|
|
int32_t d_tag; /* Dynamic entry type */
|
|
union {
|
|
uint32_t d_val; /* Integer value */
|
|
Elf32_Addr d_ptr; /* Address value */
|
|
} d_un;
|
|
} Elf32_Dyn;
|
|
|
|
#endif
|