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
{
190 struct prx_variable
{
199 struct prx
*prx_load (const char *path
);
200 void prx_free (struct prx
*p
);
201 void prx_print (struct prx
*p
, int prtrelocs
);
202 void prx_resolve_nids (struct prx
*p
, struct nidstable
*nids
);
203 uint32
prx_translate (struct prx
*p
, uint32 vaddr
);
205 uint32
prx_findreloc (struct prx
*p
, uint32 target
);
206 uint32
prx_findrelocbyaddr (struct prx
*p
, uint32 vaddr
);