11#ifndef __SRXFIXUP_INTERNAL_H__
12#define __SRXFIXUP_INTERNAL_H__
20typedef short unsigned int Elf32_Half;
21typedef unsigned int Elf32_Addr;
22typedef unsigned int Elf32_Off;
23typedef unsigned int Elf32_Word;
24typedef int Elf32_SWord;
27 unsigned char e_ident[16];
36 Elf32_Half e_phentsize;
38 Elf32_Half e_shentsize;
40 Elf32_Half e_shstrndx;
63 Elf32_Word sh_addralign;
64 Elf32_Word sh_entsize;
71 unsigned char st_info;
72 unsigned char st_other;
89 Elf32_Word ri_gprmask;
90 Elf32_Word ri_cprmask[4];
91 Elf32_SWord ri_gp_value;
95 Elf32_Word moduleinfo;
101 Elf32_Half moduleversion;
106 Elf32_Word moduleinfo;
109 Elf32_Word text_size;
110 Elf32_Word data_size;
112 Elf32_Addr erx_lib_addr;
113 Elf32_Word erx_lib_size;
114 Elf32_Addr erx_stub_addr;
115 Elf32_Word erx_stub_size;
116 Elf32_Half moduleversion;
123 unsigned int ilineMax;
125 unsigned int cbLineOffset;
127 unsigned int cbDnOffset;
129 unsigned int cbPdOffset;
130 unsigned int isymMax;
131 unsigned int cbSymOffset;
132 unsigned int ioptMax;
133 unsigned int cbOptOffset;
134 unsigned int iauxMax;
135 unsigned int cbAuxOffset;
137 unsigned int cbSsOffset;
138 unsigned int issExtMax;
139 unsigned int cbSsExtOffset;
141 unsigned int cbFdOffset;
143 unsigned int cbRfdOffset;
144 unsigned int iextMax;
145 unsigned int cbExtOffset;
159 short unsigned int ipdFirst;
165 unsigned int fdr_bits;
173 unsigned int sy_bits;
184 unsigned int d_index;
201 unsigned int cbLineOffset;
205 unsigned int fBitfield;
206 unsigned int continued;
233 unsigned int optr_bits;
315 const char **sect_name_patterns;
327 const char *section_name;
333 const char *sect_name_pattern;
344 const char *sectname;
355 const char **removesection_list;
356 const char **section_table_order;
357 const char **file_layout_order;
384typedef enum OperandTag
388 OprTag_c0reg_iop = 2,
395 OprTag_regoffset = 9,
416extern int analize_arguments(
const Opttable *dopttable,
int argc,
char **argv);
419extern void print_elf(
const elf_file *elf,
unsigned int flag);
420extern void print_elf_ehdr(
const elf_file *elf,
unsigned int flag);
421extern void print_elf_phdr(
const elf_file *elf,
unsigned int flag);
422extern void print_elf_sections(
const elf_file *elf,
unsigned int flag);
423extern void print_elf_reloc(
const elf_section *scp,
unsigned int flag);
424extern void print_elf_disasm(
const elf_file *elf,
const elf_section *scp,
unsigned int flag);
425extern void print_elf_datadump(
const elf_file *elf,
const elf_section *scp,
unsigned int flag);
426extern void print_elf_symtbl(
const elf_section *scp,
unsigned int flag);
430extern elf_file *read_elf(
const char *filename);
431extern int layout_elf_file(
elf_file *elf);
432extern int write_elf(
elf_file *elf,
const char *filename);
438extern unsigned int *get_section_data(
elf_file *elf,
unsigned int addr);
440extern int is_defined_symbol(
const elf_syment *sym);
442add_symbol(
elf_file *elf,
const char *name,
int bind,
int type,
int value,
elf_section *scp,
int st_shndx);
444extern void reorder_symtab(
elf_file *elf);
445extern unsigned int adjust_align(
unsigned int value,
unsigned int align);
446extern void rebuild_section_name_strings(
elf_file *elf);
447extern void rebuild_symbol_name_strings(
elf_file *elf);
455extern void initdisasm(
int arch,
int regform0,
int regform1,
int regform2,
int regform3);
456extern Disasm_result *disassemble(
unsigned int addr,
unsigned int data);
457extern void shex(
char *buf,
unsigned int data);
458extern void format_operand(
const Operand *opr,
char *buf);
462extern Srx_gen_table *read_conf(
const char *indata,
const char *infile,
int dumpopt);
471extern void usage(
const char *myname);
472extern void stripusage(
const char *myname);
475extern int convert_rel2srx(
elf_file *elf,
const char *entrysym,
int needoutput,
int cause_irx1);
476extern int layout_srx_file(
elf_file *elf);
477extern void strip_elf(
elf_file *elf);
479extern void fixlocation_elf(
elf_file *elf,
unsigned int startaddr);
480extern int relocation_is_version2(
elf_section *relsect);
484extern void swapmemory(
void *aaddr,
const char *format,
unsigned int times);
487extern const char *ee_defaultconf;
490extern const char *iop_defaultconf;
492enum Ei_class_name_enum
499#define XEACH_Ei_class_name_enum() \
511 ET_SCE_IOPRELEXEC = 0xFF80,
512 ET_SCE_IOPRELEXEC2 = 0xFF81,
513 ET_SCE_EERELEXEC = 0xFF90,
514 ET_SCE_EERELEXEC2 = 0xFF91,
517#define XEACH_E_type_name_enum() \
523 X(ET_SCE_IOPRELEXEC) \
524 X(ET_SCE_IOPRELEXEC2) \
525 X(ET_SCE_EERELEXEC) \
528enum Ei_data_name_enum
535#define XEACH_Ei_data_name_enum() \
540enum E_version_name_enum
546#define XEACH_E_version_name_enum() \
550enum E_machine_name_enum
568#define XEACH_E_machine_name_enum() \
593 PT_MIPS_REGINFO = 0x70000000,
594 PT_MIPS_RTPROC = 0x70000001,
595 PT_SCE_IOPMOD = 0x70000080,
596 PT_SCE_EEMOD = 0x70000090,
599#define XEACH_P_type_name_enum() \
626 SHT_MIPS_LIBLIST = 0x70000000,
627 SHT_MIPS_CONFLICT = 0x70000002,
628 SHT_MIPS_GPTAB = 0x70000003,
629 SHT_MIPS_UCODE = 0x70000004,
630 SHT_MIPS_DEBUG = 0x70000005,
631 SHT_MIPS_REGINFO = 0x70000006,
632 SHT_SCE_IOPMOD = 0x70000080,
633 SHT_SCE_EEMOD = 0x70000090,
636#define XEACH_S_type_name_enum() \
649 X(SHT_MIPS_LIBLIST) \
650 X(SHT_MIPS_CONFLICT) \
654 X(SHT_MIPS_REGINFO) \
675 R_MIPS_CALLHI16 = 30,
676 R_MIPS_CALLLO16 = 31,
677 R_MIPS_DVP_11_PCREL = 120,
678 R_MIPS_DVP_27_S4 = 121,
679 R_MIPS_DVP_11_S4 = 122,
680 R_MIPS_DVP_U15_S3 = 123,
681 R_MIPSSCE_MHI16 = 250,
682 R_MIPSSCE_ADDEND = 251,
685#define XEACH_R_MIPS_Type_enum() \
703 X(R_MIPS_DVP_11_PCREL) \
704 X(R_MIPS_DVP_27_S4) \
705 X(R_MIPS_DVP_11_S4) \
706 X(R_MIPS_DVP_U15_S3) \
710enum SymbolBinding_enum
717#define XEACH_SymbolBinding_enum() \
731#define XEACH_SymbolType_enum() \
738enum SymbolSpSection_enum
741 SHN_MIPS_ACOMMON = 0xFF00,
742 SHN_MIPS_TEXT = 0xFF01,
743 SHN_MIPS_DATA = 0xFF02,
744 SHN_MIPS_SCOMMON = 0xFF03,
745 SHN_MIPS_SUNDEFINED = 0xFF04,
751#define XEACH_SymbolSpSection_enum() \
753 X(SHN_MIPS_ACOMMON) \
756 X(SHN_MIPS_SCOMMON) \
757 X(SHN_MIPS_SUNDEFINED) \
792#define XEACH_SymbolTypes_enum() \
820enum StorageClasse_enum
855#define XEACH_StorageClasse_enum() \
890 EF_MIPS_NOREORDER = 1,
893 EF_MIPS_MACH = 0x00FF0000,
894 EF_MIPS_MACH_5900 = 0x00920000,
895 EF_MIPS_ARCH_3 = 0x20000000,
896 EF_MIPS_ARCH = 0xF0000000,
899enum elf_program_header_flags
906enum elf_section_header_flags
911 SHF_MIPS_GPREL = 0x10000000,
914enum anaarg_havearg_param
916 ARG_HAVEARG_NONE = 0,
917 ARG_HAVEARG_UNK1 = 1,
918 ARG_HAVEARG_REQUIRED = 2,
919 ARG_HAVEARG_UNK3 = 3,
920 ARG_HAVEARG_UNK4 = 4,
923enum elf_file_slot_type
926 EFS_TYPE_ELF_HEADER = 1,
927 EFS_TYPE_PROGRAM_HEADER_TABLE = 2,
928 EFS_TYPE_PROGRAM_HEADER_ENTRY = 3,
929 EFS_TYPE_SECTION_HEADER_TABLE = 4,
930 EFS_TYPE_SECTION_DATA = 5,
940enum srx_program_header_type
943 SRX_PH_TYPE_TEXT = 2,