mirror of
				https://github.com/coop-deluxe/sm64coopdx.git
				synced 2025-10-30 08:01:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			99 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
 |