11 #ifndef __SRXFIXUP_INTERNAL_H__
12 #define __SRXFIXUP_INTERNAL_H__
20 typedef short unsigned int Elf32_Half;
21 typedef unsigned int Elf32_Addr;
22 typedef unsigned int Elf32_Off;
23 typedef unsigned int Elf32_Word;
24 typedef 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;
384 typedef enum OperandTag
388 OprTag_c0reg_iop = 2,
395 OprTag_regoffset = 9,
416 extern int analize_arguments(
const Opttable *dopttable,
int argc,
char **argv);
419 extern void print_elf(
const elf_file *elf,
unsigned int flag);
420 extern void print_elf_ehdr(
const elf_file *elf,
unsigned int flag);
421 extern void print_elf_phdr(
const elf_file *elf,
unsigned int flag);
422 extern void print_elf_sections(
const elf_file *elf,
unsigned int flag);
423 extern void print_elf_reloc(
const elf_section *scp,
unsigned int flag);
424 extern void print_elf_disasm(
const elf_file *elf,
const elf_section *scp,
unsigned int flag);
425 extern void print_elf_datadump(
const elf_file *elf,
const elf_section *scp,
unsigned int flag);
426 extern void print_elf_symtbl(
const elf_section *scp,
unsigned int flag);
430 extern elf_file *read_elf(
const char *filename);
431 extern int layout_elf_file(
elf_file *elf);
432 extern int write_elf(
elf_file *elf,
const char *filename);
438 extern unsigned int *get_section_data(
elf_file *elf,
unsigned int addr);
440 extern int is_defined_symbol(
const elf_syment *sym);
442 add_symbol(
elf_file *elf,
const char *name,
int bind,
int type,
int value,
elf_section *scp,
int st_shndx);
444 extern void reorder_symtab(
elf_file *elf);
445 extern unsigned int adjust_align(
unsigned int value,
unsigned int align);
446 extern void rebuild_section_name_strings(
elf_file *elf);
447 extern void rebuild_symbol_name_strings(
elf_file *elf);
455 extern void initdisasm(
int arch,
int regform0,
int regform1,
int regform2,
int regform3);
456 extern Disasm_result *disassemble(
unsigned int addr,
unsigned int data);
457 extern void shex(
char *buf,
unsigned int data);
458 extern void format_operand(
const Operand *opr,
char *buf);
462 extern Srx_gen_table *read_conf(
const char *indata,
const char *infile,
int dumpopt);
471 extern void usage(
const char *myname);
472 extern void stripusage(
const char *myname);
475 extern int convert_rel2srx(
elf_file *elf,
const char *entrysym,
int needoutput,
int cause_irx1);
476 extern int layout_srx_file(
elf_file *elf);
477 extern void strip_elf(
elf_file *elf);
479 extern void fixlocation_elf(
elf_file *elf,
unsigned int startaddr);
480 extern int relocation_is_version2(
elf_section *relsect);
484 extern void swapmemory(
void *aaddr,
const char *format,
unsigned int times);
487 extern const char *ee_defaultconf;
490 extern const char *iop_defaultconf;
492 enum Ei_class_name_enum
499 #define XEACH_Ei_class_name_enum() \
504 enum E_type_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) \
528 enum Ei_data_name_enum
535 #define XEACH_Ei_data_name_enum() \
540 enum E_version_name_enum
546 #define XEACH_E_version_name_enum() \
550 enum E_machine_name_enum
568 #define XEACH_E_machine_name_enum() \
584 enum P_type_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() \
612 enum S_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) \
658 enum R_MIPS_Type_enum
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) \
710 enum SymbolBinding_enum
717 #define XEACH_SymbolBinding_enum() \
731 #define XEACH_SymbolType_enum() \
738 enum 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) \
762 enum SymbolTypes_enum
792 #define XEACH_SymbolTypes_enum() \
820 enum StorageClasse_enum
855 #define XEACH_StorageClasse_enum() \
888 enum elf_header_flags
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,
899 enum elf_program_header_flags
906 enum elf_section_header_flags
911 SHF_MIPS_GPREL = 0x10000000,
914 enum 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,
923 enum 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,
940 enum srx_program_header_type
943 SRX_PH_TYPE_TEXT = 2,