7 #define ELF_HEADER_IDENT 16
8 #define ELF_PRX_TYPE 0xFFA0
9 #define ELF_MACHINE_MIPS 8
10 #define ELF_VERSION_CURRENT 1
11 #define ELF_FLAGS_MACH_ALLEGREX 0x00A20000
12 #define ELF_FLAGS_ABI_EABI32 0x00003000
13 #define ELF_FLAGS_MIPS_ARCH2 0x10000000
16 /* Structure to hold prx header data */
19 uint8 ident
[ELF_HEADER_IDENT
];
37 struct elf_section
*sections
;
39 struct elf_program
*programs
;
42 struct prx_reloc
*relocs
;
43 struct prx_reloc
*relocsbyaddr
;
45 struct prx_modinfo
*modinfo
;
49 #define SHT_PROGBITS 1
52 #define SHT_LOPROC 0x70000000
53 #define SHT_HIPROC 0x7fffffff
54 #define SHT_LOUSER 0x80000000
55 #define SHT_HIUSER 0xffffffff
57 #define SHT_PRXRELOC (SHT_LOPROC | 0xA0)
61 #define SHF_EXECINSTR 4
63 /* Structure defining a single elf section */
84 #define PT_LOPROC 0x70000000
85 #define PT_HIPROC 0x7fffffff
86 #define PT_PRXRELOC (PT_LOPROC | 0xA0)
87 #define PT_PRXRELOC2 (PT_LOPROC | 0xA1)
108 /* MIPS Reloc Entry Types */
109 #define R_MIPS_NONE 0
113 #define R_MIPS_HI16 5
114 #define R_MIPS_LO16 6
115 #define R_MIPSX_HI16 13
116 #define R_MIPSX_J26 14
117 #define R_MIPSX_JAL26 15
144 struct prx_import
*imports
;
145 struct prx_export
*exports
;
161 struct prx_function
*funcs
;
162 struct prx_variable
*vars
;
176 struct prx_function
*funcs
;
177 struct prx_variable
*vars
;
182 struct prx_function
{
191 struct prx_variable
{
198 uint32
read_uint32_le (const uint8
*bytes
);
199 uint16
read_uint16_le (const uint8
*bytes
);
200 void write_uint32_le (uint8
*bytes
, uint32 val
);
202 struct prx
*prx_load (const char *path
);
203 void prx_free (struct prx
*p
);
204 void prx_print (struct prx
*p
, int prtrelocs
);
206 void prx_resolve_nids (struct prx
*p
, struct nidstable
*nids
);
208 uint32
prx_translate (struct prx
*p
, uint32 vaddr
);
210 int prx_inside_prx (struct prx
*p
, uint32 offset
, uint32 size
);
211 int prx_inside_progfile (struct elf_program
*program
, uint32 vaddr
, uint32 size
);
212 int prx_inside_progmem (struct elf_program
*program
, uint32 vaddr
, uint32 size
);
213 int prx_inside_strprogfile (struct elf_program
*program
, uint32 vaddr
);
215 uint32
prx_findreloc (struct prx
*p
, uint32 target
);
216 uint32
prx_findrelocbyaddr (struct prx
*p
, uint32 vaddr
);