PS2SDK
PS2 Homebrew Libraries
srxfixup_internal.h
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # Copyright ps2dev - http://www.ps2dev.org
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
9 */
10 
11 #ifndef __SRXFIXUP_INTERNAL_H__
12 #define __SRXFIXUP_INTERNAL_H__
13 
14 #include <stdint.h>
15 
16 // Type definitions
17 
18 // srxfixup.c, elflib.c, elfdump.c, srxgen.c, readconf.c
19 
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;
25 typedef struct _Elf32_ehdr
26 {
27  unsigned char e_ident[16];
28  Elf32_Half e_type;
29  Elf32_Half e_machine;
30  Elf32_Word e_version;
31  Elf32_Addr e_entry;
32  Elf32_Off e_phoff;
33  Elf32_Off e_shoff;
34  Elf32_Word e_flags;
35  Elf32_Half e_ehsize;
36  Elf32_Half e_phentsize;
37  Elf32_Half e_phnum;
38  Elf32_Half e_shentsize;
39  Elf32_Half e_shnum;
40  Elf32_Half e_shstrndx;
41 } Elf32_Ehdr;
42 typedef struct _Elf32_Phdr
43 {
44  Elf32_Word p_type;
45  Elf32_Off p_offset;
46  Elf32_Addr p_vaddr;
47  Elf32_Addr p_paddr;
48  Elf32_Word p_filesz;
49  Elf32_Word p_memsz;
50  Elf32_Word p_flags;
51  Elf32_Word p_align;
52 } Elf32_Phdr;
53 typedef struct _Elf32_Shdr
54 {
55  Elf32_Word sh_name;
56  Elf32_Word sh_type;
57  Elf32_Word sh_flags;
58  Elf32_Addr sh_addr;
59  Elf32_Off sh_offset;
60  Elf32_Word sh_size;
61  Elf32_Word sh_link;
62  Elf32_Word sh_info;
63  Elf32_Word sh_addralign;
64  Elf32_Word sh_entsize;
65 } Elf32_Shdr;
66 typedef struct _Elf32_Sym
67 {
68  Elf32_Word st_name;
69  Elf32_Addr st_value;
70  Elf32_Word st_size;
71  unsigned char st_info;
72  unsigned char st_other;
73  Elf32_Half st_shndx;
74 } Elf32_Sym;
75 typedef struct _Elf_Note
76 {
77  Elf32_Word namesz;
78  Elf32_Word descsz;
79  Elf32_Word type;
80  char name[];
81 } Elf_Note;
82 typedef struct _Elf32_Rel
83 {
84  Elf32_Addr r_offset;
85  Elf32_Word r_info;
86 } Elf32_Rel;
87 typedef struct _Elf32_RegInfo
88 {
89  Elf32_Word ri_gprmask;
90  Elf32_Word ri_cprmask[4];
91  Elf32_SWord ri_gp_value;
93 typedef struct _Elf32_IopMod
94 {
95  Elf32_Word moduleinfo;
96  Elf32_Addr entry;
97  Elf32_Addr gp_value;
98  Elf32_Word text_size;
99  Elf32_Word data_size;
100  Elf32_Word bss_size;
101  Elf32_Half moduleversion;
102  char modulename[];
103 } Elf32_IopMod;
104 typedef struct _Elf32_EeMod
105 {
106  Elf32_Word moduleinfo;
107  Elf32_Addr entry;
108  Elf32_Addr gp_value;
109  Elf32_Word text_size;
110  Elf32_Word data_size;
111  Elf32_Word bss_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;
117  char modulename[];
118 } Elf32_EeMod;
119 typedef struct _hdrr
120 {
121  short int magic;
122  short int vstamp;
123  unsigned int ilineMax;
124  unsigned int cbLine;
125  unsigned int cbLineOffset;
126  unsigned int idnMax;
127  unsigned int cbDnOffset;
128  unsigned int ipdMax;
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;
136  unsigned int issMax;
137  unsigned int cbSsOffset;
138  unsigned int issExtMax;
139  unsigned int cbSsExtOffset;
140  unsigned int ifdMax;
141  unsigned int cbFdOffset;
142  unsigned int crfd;
143  unsigned int cbRfdOffset;
144  unsigned int iextMax;
145  unsigned int cbExtOffset;
146 } hdrr;
147 typedef struct _fdr
148 {
149  unsigned int adr;
150  int rss;
151  int issBase;
152  int cbSs;
153  int isymBase;
154  int csym;
155  int ilineBase;
156  int cline;
157  int ioptBase;
158  int copt;
159  short unsigned int ipdFirst;
160  short int cpd;
161  int iauxBase;
162  int caux;
163  int rfdBase;
164  int crfd;
165  unsigned int fdr_bits;
166  int cbLineOffset;
167  int cbLine;
168 } fdr;
169 typedef struct _symr
170 {
171  int iss;
172  int value;
173  unsigned int sy_bits;
174 } symr;
175 typedef struct _extr
176 {
177  short int reserved;
178  short int ifd;
179  symr asym;
180 } extr;
181 typedef struct _dnr
182 {
183  unsigned int d_rfd;
184  unsigned int d_index;
185 } dnr;
186 typedef struct _pdr
187 {
188  unsigned int adr;
189  int isym;
190  int iline;
191  int regmask;
192  int regoffset;
193  int iopt;
194  int fregmask;
195  int fregoffset;
196  int frameoffset;
197  short int framereg;
198  short int pcreg;
199  int lnLow;
200  int lnHigh;
201  unsigned int cbLineOffset;
202 } pdr;
203 typedef struct _tir
204 {
205  unsigned int fBitfield;
206  unsigned int continued;
207  unsigned int bt;
208  unsigned int tq4;
209  unsigned int tq5;
210  unsigned int tq0;
211  unsigned int tq1;
212  unsigned int tq2;
213  unsigned int tq3;
214 } tir;
215 typedef struct _rndxr
216 {
217  unsigned int rfd;
218  unsigned int index;
219 } rndxr;
220 typedef union _auxu
221 {
222  tir ti;
223  rndxr rndx;
224  int dnLow;
225  int dnHigh;
226  int isym;
227  int iss;
228  int width;
229  int count;
230 } auxu;
231 typedef struct _optr
232 {
233  unsigned int optr_bits;
234  rndxr rndx;
235  unsigned int offset;
236 } optr;
237 typedef int rfdt;
238 typedef struct _elf_mips_symbolic
239 {
240  hdrr head;
241  char *cbLine_Ptr;
242  char *cbDn_Ptr;
243  char *cbPd_Ptr;
244  char *cbSym_Ptr;
245  char *cbOpt_Ptr;
246  char *cbAux_Ptr;
247  char *cbSs_Ptr;
248  char *cbSsExt_Ptr;
249  char *cbFd_Ptr;
250  char *cbRfd_Ptr;
251  char *cbExt_Ptr;
253 typedef struct _elf_section
254 {
255  Elf32_Shdr shr;
256  uint8_t *data;
257  const char *name;
258  unsigned int number;
259  struct _elf_section *link;
260  struct _elf_section *info;
261  void *optdata;
262 } elf_section;
263 typedef struct _syment
264 {
265  Elf32_Sym sym;
266  const char *name;
267  unsigned int number;
268  int bind;
269  unsigned int type;
270  elf_section *shptr;
271  int refcount;
272 } elf_syment;
273 typedef struct _rel
274 {
275  Elf32_Rel rel;
276  elf_syment *symptr;
277  unsigned int type;
278 } elf_rel;
279 typedef struct _elf_proghead
280 {
281  Elf32_Phdr phdr;
282  elf_section **scp;
283  void *optdata; // Not used
284 } elf_proghead;
285 typedef struct _elffile
286 {
287  Elf32_Ehdr *ehp;
288  elf_section *shstrptr;
289  elf_proghead *php;
290  elf_section **scp;
291  void *optdata;
292 } elf_file;
293 
294 // elflib.c, elfdump.c, srxgen.c
295 
296 typedef struct _elf_file_slot
297 {
298  unsigned int offset;
299  unsigned int size;
300  unsigned int align;
301  int type;
303  {
304  elf_proghead *php;
305  elf_section *scp;
306  } d;
307 } Elf_file_slot;
308 
309 // readconf.c, srxfixup.c, srxgen.c
310 
311 typedef struct _segconf
312 {
313  const char *name;
314  int bitid;
315  const char **sect_name_patterns;
316  elf_section *empty_section;
317  int nsect;
318  elf_section **scp;
319  unsigned int addr;
320  unsigned int size;
321 } SegConf;
322 typedef struct _pheader_info
323 {
324  int sw;
326  {
327  const char *section_name;
328  SegConf **segment_list;
329  } d;
330 } PheaderInfo;
331 typedef struct _sectconf
332 {
333  const char *sect_name_pattern;
334  unsigned int flag;
335  int secttype;
336  int sectflag;
337 } SectConf;
338 typedef struct _crtsymconf
339 {
340  const char *name;
341  int bind;
342  int type;
343  SegConf *segment;
344  const char *sectname;
345  int shindex;
346  int seflag;
348 typedef struct _srx_gen_table
349 {
350  int target;
351  SegConf *segment_list;
352  CreateSymbolConf *create_symbols;
353  PheaderInfo *program_header_order;
354  SectConf *section_list;
355  const char **removesection_list;
356  const char **section_table_order;
357  const char **file_layout_order;
358 } Srx_gen_table;
359 
360 // anaarg.c, srxfixup.c
361 
362 typedef struct _opt_strings
363 {
364  struct _opt_strings *next;
365  const char *string;
366 } Opt_strings;
367 typedef struct _opttable
368 {
369  const char *option;
370  int havearg;
371  char vartype;
372  void *var;
373 } Opttable;
374 
375 // ring.c, anaarg.c, srxfixup.c
376 
377 typedef struct _slink
378 {
379  struct _slink *next;
380 } SLink;
381 
382 // mipsdis.c, elfdump.c
383 
384 typedef enum OperandTag
385 {
386  OprTag_none = 0,
387  OprTag_reg = 1,
388  OprTag_c0reg_iop = 2,
389  OprTag_c0reg_ee = 3,
390  OprTag_czreg = 4,
391  OprTag_c1reg = 5,
392  OprTag_imm = 6,
393  OprTag_shamt = 7,
394  OprTag_jtarget = 8,
395  OprTag_regoffset = 9,
396  OprTag_code20 = 10,
397  OprTag_code25 = 11
398 } OperandTag;
399 typedef struct operand
400 {
401  enum OperandTag tag;
402  unsigned char reg;
403  unsigned int data;
404 } Operand;
405 typedef struct disasm_result
406 {
407  unsigned int addr;
408  unsigned int data;
409  char mnemonic[16];
410  Operand operands[4];
411 } Disasm_result;
412 
413 // Function definitions
414 
415 // anaarg.c
416 extern int analize_arguments(const Opttable *dopttable, int argc, char **argv);
417 
418 // elfdump.c
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);
427 extern void print_elf_mips_symbols(const elf_mips_symbolic_data *symbol, unsigned int flag);
428 
429 // elflib.c
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);
433 extern void add_section(elf_file *elf, elf_section *scp);
434 extern elf_section *remove_section(elf_file *elf, Elf32_Word shtype);
435 extern elf_section *remove_section_by_name(elf_file *elf, const char *secname);
436 extern elf_section *search_section(elf_file *elf, Elf32_Word stype);
437 extern elf_section *search_section_by_name(elf_file *elf, const char *secname);
438 extern unsigned int *get_section_data(elf_file *elf, unsigned int addr);
439 extern elf_syment *search_global_symbol(const char *name, elf_file *elf);
440 extern int is_defined_symbol(const elf_syment *sym);
441 extern elf_syment *
442 add_symbol(elf_file *elf, const char *name, int bind, int type, int value, elf_section *scp, int st_shndx);
443 extern unsigned int get_symbol_value(const elf_syment *sym, const elf_file *elf);
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);
448 extern Elf_file_slot *build_file_order_list(const elf_file *elf);
449 extern void shrink_file_order_list(Elf_file_slot *efs);
450 extern void writeback_file_order_list(elf_file *elf, Elf_file_slot *efs);
451 extern void dump_file_order_list(const elf_file *elf, const Elf_file_slot *efs);
452 
453 // mipsdis.c
454 extern void gen_asmmacro(Disasm_result *result);
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);
459 extern void format_disasm(Disasm_result *dis, char *buf);
460 
461 // readconf.c
462 extern Srx_gen_table *read_conf(const char *indata, const char *infile, int dumpopt);
463 
464 // ring.c
465 extern SLink *add_ring_top(SLink *tailp, SLink *elementp);
466 extern SLink *add_ring_tail(SLink *tailp, SLink *elementp);
467 extern SLink *joint_ring(SLink *tailp, SLink *otherring);
468 extern SLink *ring_to_liner(SLink *tailp);
469 
470 // srxfixup.c
471 extern void usage(const char *myname);
472 extern void stripusage(const char *myname);
473 
474 // srxgen.c
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);
478 extern SegConf *lookup_segment(Srx_gen_table *conf, const char *segname, int msgsw);
479 extern void fixlocation_elf(elf_file *elf, unsigned int startaddr);
480 extern int relocation_is_version2(elf_section *relsect);
481 extern void dump_srx_gen_table(Srx_gen_table *tp);
482 
483 // swapmem.c
484 extern void swapmemory(void *aaddr, const char *format, unsigned int times);
485 
486 // eefixconf.c
487 extern const char *ee_defaultconf;
488 
489 // iopfixconf.c
490 extern const char *iop_defaultconf;
491 
492 enum Ei_class_name_enum
493 {
494  ELFCLASSNONE = 0,
495  ELFCLASS32 = 1,
496  ELFCLASS64 = 2,
497 };
498 
499 #define XEACH_Ei_class_name_enum() \
500  X(ELFCLASSNONE) \
501  X(ELFCLASS32) \
502  X(ELFCLASS64)
503 
504 enum E_type_name_enum
505 {
506  ET_NONE = 0,
507  ET_REL = 1,
508  ET_EXEC = 2,
509  ET_DYN = 3,
510  ET_CORE = 4,
511  ET_SCE_IOPRELEXEC = 0xFF80,
512  ET_SCE_IOPRELEXEC2 = 0xFF81,
513  ET_SCE_EERELEXEC = 0xFF90,
514  ET_SCE_EERELEXEC2 = 0xFF91,
515 };
516 
517 #define XEACH_E_type_name_enum() \
518  X(ET_NONE) \
519  X(ET_REL) \
520  X(ET_EXEC) \
521  X(ET_DYN) \
522  X(ET_CORE) \
523  X(ET_SCE_IOPRELEXEC) \
524  X(ET_SCE_IOPRELEXEC2) \
525  X(ET_SCE_EERELEXEC) \
526  X(ET_SCE_EERELEXEC2)
527 
528 enum Ei_data_name_enum
529 {
530  ELFDATANONE = 0,
531  ELFDATA2LSB = 1,
532  ELFDATA2MSB = 2,
533 };
534 
535 #define XEACH_Ei_data_name_enum() \
536  X(ELFDATANONE) \
537  X(ELFDATA2LSB) \
538  X(ELFDATA2MSB)
539 
540 enum E_version_name_enum
541 {
542  EV_NONE = 0,
543  EV_CURRENT = 1,
544 };
545 
546 #define XEACH_E_version_name_enum() \
547  X(EV_NONE) \
548  X(EV_CURRENT)
549 
550 enum E_machine_name_enum
551 {
552  EM_NONE = 0,
553  EM_M32 = 1,
554  EM_SPARC = 2,
555  EM_386 = 3,
556  EM_68K = 4,
557  EM_88K = 5,
558  EM_860 = 7,
559  EM_MIPS = 8,
560  EM_MIPS_RS4_BE = 10,
561  EM_SPARC64 = 11,
562  EM_PARISC = 15,
563  EM_SPARC32PLUS = 18,
564  EM_PPC = 20,
565  EM_SH = 42,
566 };
567 
568 #define XEACH_E_machine_name_enum() \
569  X(EM_NONE) \
570  X(EM_M32) \
571  X(EM_SPARC) \
572  X(EM_386) \
573  X(EM_68K) \
574  X(EM_88K) \
575  X(EM_860) \
576  X(EM_MIPS) \
577  X(EM_MIPS_RS4_BE) \
578  X(EM_SPARC64) \
579  X(EM_PARISC) \
580  X(EM_SPARC32PLUS) \
581  X(EM_PPC) \
582  X(EM_SH)
583 
584 enum P_type_name_enum
585 {
586  PT_NULL = 0,
587  PT_LOAD = 1,
588  PT_DYNAMIC = 2,
589  PT_INTERP = 3,
590  PT_NOTE = 4,
591  PT_SHLIB = 5,
592  PT_PHDR = 6,
593  PT_MIPS_REGINFO = 0x70000000,
594  PT_MIPS_RTPROC = 0x70000001,
595  PT_SCE_IOPMOD = 0x70000080,
596  PT_SCE_EEMOD = 0x70000090,
597 };
598 
599 #define XEACH_P_type_name_enum() \
600  X(PT_NULL) \
601  X(PT_LOAD) \
602  X(PT_DYNAMIC) \
603  X(PT_INTERP) \
604  X(PT_NOTE) \
605  X(PT_SHLIB) \
606  X(PT_PHDR) \
607  X(PT_MIPS_REGINFO) \
608  X(PT_MIPS_RTPROC) \
609  X(PT_SCE_IOPMOD) \
610  X(PT_SCE_EEMOD)
611 
612 enum S_type_name_enum
613 {
614  SHT_NULL = 0,
615  SHT_PROGBITS = 1,
616  SHT_SYMTAB = 2,
617  SHT_STRTAB = 3,
618  SHT_RELA = 4,
619  SHT_HASH = 5,
620  SHT_DYNAMIC = 6,
621  SHT_NOTE = 7,
622  SHT_NOBITS = 8,
623  SHT_REL = 9,
624  SHT_SHLIB = 10,
625  SHT_DYNSYM = 11,
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,
634 };
635 
636 #define XEACH_S_type_name_enum() \
637  X(SHT_NULL) \
638  X(SHT_PROGBITS) \
639  X(SHT_SYMTAB) \
640  X(SHT_STRTAB) \
641  X(SHT_RELA) \
642  X(SHT_HASH) \
643  X(SHT_DYNAMIC) \
644  X(SHT_NOTE) \
645  X(SHT_NOBITS) \
646  X(SHT_REL) \
647  X(SHT_SHLIB) \
648  X(SHT_DYNSYM) \
649  X(SHT_MIPS_LIBLIST) \
650  X(SHT_MIPS_CONFLICT) \
651  X(SHT_MIPS_GPTAB) \
652  X(SHT_MIPS_UCODE) \
653  X(SHT_MIPS_DEBUG) \
654  X(SHT_MIPS_REGINFO) \
655  X(SHT_SCE_IOPMOD) \
656  X(SHT_SCE_EEMOD)
657 
658 enum R_MIPS_Type_enum
659 {
660  R_MIPS_NONE = 0,
661  R_MIPS_16 = 1,
662  R_MIPS_32 = 2,
663  R_MIPS_REL32 = 3,
664  R_MIPS_26 = 4,
665  R_MIPS_HI16 = 5,
666  R_MIPS_LO16 = 6,
667  R_MIPS_GPREL16 = 7,
668  R_MIPS_LITERAL = 8,
669  R_MIPS_GOT16 = 9,
670  R_MIPS_PC16 = 10,
671  R_MIPS_CALL16 = 11,
672  R_MIPS_GPREL32 = 12,
673  R_MIPS_GOTHI16 = 21,
674  R_MIPS_GOTLO16 = 22,
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,
683 };
684 
685 #define XEACH_R_MIPS_Type_enum() \
686  X(R_MIPS_NONE) \
687  X(R_MIPS_16) \
688  X(R_MIPS_32) \
689  X(R_MIPS_REL32) \
690  X(R_MIPS_26) \
691  X(R_MIPS_HI16) \
692  X(R_MIPS_LO16) \
693  X(R_MIPS_GPREL16) \
694  X(R_MIPS_LITERAL) \
695  X(R_MIPS_GOT16) \
696  X(R_MIPS_PC16) \
697  X(R_MIPS_CALL16) \
698  X(R_MIPS_GPREL32) \
699  X(R_MIPS_GOTHI16) \
700  X(R_MIPS_GOTLO16) \
701  X(R_MIPS_CALLHI16) \
702  X(R_MIPS_CALLLO16) \
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) \
707  X(R_MIPSSCE_MHI16) \
708  X(R_MIPSSCE_ADDEND)
709 
710 enum SymbolBinding_enum
711 {
712  STB_LOCAL = 0,
713  STB_GLOBAL = 1,
714  STB_WEAK = 2,
715 };
716 
717 #define XEACH_SymbolBinding_enum() \
718  X(STB_LOCAL) \
719  X(STB_GLOBAL) \
720  X(STB_WEAK)
721 
722 enum SymbolType_enum
723 {
724  STT_NOTYPE = 0,
725  STT_OBJECT = 1,
726  STT_FUNC = 2,
727  STT_SECTION = 3,
728  STT_FILE = 4,
729 };
730 
731 #define XEACH_SymbolType_enum() \
732  X(STT_NOTYPE) \
733  X(STT_OBJECT) \
734  X(STT_FUNC) \
735  X(STT_SECTION) \
736  X(STT_FILE)
737 
738 enum SymbolSpSection_enum
739 {
740  SHN_UNDEF = 0,
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,
746  SHN_RADDR = 0xFF1F,
747  SHN_ABS = 0xFFF1,
748  SHN_COMMON = 0xFFF2,
749 };
750 
751 #define XEACH_SymbolSpSection_enum() \
752  X(SHN_UNDEF) \
753  X(SHN_MIPS_ACOMMON) \
754  X(SHN_MIPS_TEXT) \
755  X(SHN_MIPS_DATA) \
756  X(SHN_MIPS_SCOMMON) \
757  X(SHN_MIPS_SUNDEFINED) \
758  X(SHN_RADDR) \
759  X(SHN_ABS) \
760  X(SHN_COMMON)
761 
762 enum SymbolTypes_enum
763 {
764  stNil = 0,
765  stGlobal = 1,
766  stStatic = 2,
767  stParam = 3,
768  stLocal = 4,
769  stLabel = 5,
770  stProc = 6,
771  stBlock = 7,
772  stEnd = 8,
773  stMember = 9,
774  stTypedef = 10,
775  stFile = 11,
776  stRegReloc = 12,
777  stForward = 13,
778  stStaticProc = 14,
779  stConstant = 15,
780  stStaParam = 16,
781  stStruct = 26,
782  stUnion = 27,
783  stEnum = 28,
784  stIndirect = 34,
785  stStr = 60,
786  stNumber = 61,
787  stExpr = 62,
788  stType = 63,
789  stMax = 64,
790 };
791 
792 #define XEACH_SymbolTypes_enum() \
793  X(stNil) \
794  X(stGlobal) \
795  X(stStatic) \
796  X(stParam) \
797  X(stLocal) \
798  X(stLabel) \
799  X(stProc) \
800  X(stBlock) \
801  X(stEnd) \
802  X(stMember) \
803  X(stTypedef) \
804  X(stFile) \
805  X(stRegReloc) \
806  X(stForward) \
807  X(stStaticProc) \
808  X(stConstant) \
809  X(stStaParam) \
810  X(stStruct) \
811  X(stUnion) \
812  X(stEnum) \
813  X(stIndirect) \
814  X(stStr) \
815  X(stNumber) \
816  X(stExpr) \
817  X(stType) \
818  X(stMax)
819 
820 enum StorageClasse_enum
821 {
822  scNil = 0,
823  scText = 1,
824  scData = 2,
825  scBss = 3,
826  scRegister = 4,
827  scAbs = 5,
828  scUndef = 6,
829  scUndefined = 6,
830  scCdbLocal = 7,
831  scBits = 8,
832  scCdbSystem = 9,
833  scDbx = 9,
834  scRegImage = 10,
835  scInfo = 11,
836  scUserStruct = 12,
837  scSData = 13,
838  scSBss = 14,
839  scRData = 15,
840  scVar = 16,
841  scCommon = 17,
842  scSCommon = 18,
843  scVarRegister = 19,
844  scVariant = 20,
845  scSUndefined = 21,
846  scInit = 22,
847  scBasedVar = 23,
848  scXData = 24,
849  scPData = 25,
850  scFini = 26,
851  scRConst = 27,
852  scMax = 32,
853 };
854 
855 #define XEACH_StorageClasse_enum() \
856  X(scNil) \
857  X(scText) \
858  X(scData) \
859  X(scBss) \
860  X(scRegister) \
861  X(scAbs) \
862  X(scUndef) \
863  X(scUndefined) \
864  X(scCdbLocal) \
865  X(scBits) \
866  X(scCdbSystem) \
867  X(scDbx) \
868  X(scRegImage) \
869  X(scInfo) \
870  X(scUserStruct) \
871  X(scSData) \
872  X(scSBss) \
873  X(scRData) \
874  X(scVar) \
875  X(scCommon) \
876  X(scSCommon) \
877  X(scVarRegister) \
878  X(scVariant) \
879  X(scSUndefined) \
880  X(scInit) \
881  X(scBasedVar) \
882  X(scXData) \
883  X(scPData) \
884  X(scFini) \
885  X(scRConst) \
886  X(scMax)
887 
888 enum elf_header_flags
889 {
890  EF_MIPS_NOREORDER = 1,
891  EF_MIPS_PIC = 2,
892  EF_MIPS_CPIC = 4,
893  EF_MIPS_MACH = 0x00FF0000,
894  EF_MIPS_MACH_5900 = 0x00920000,
895  EF_MIPS_ARCH_3 = 0x20000000,
896  EF_MIPS_ARCH = 0xF0000000,
897 };
898 
899 enum elf_program_header_flags
900 {
901  PF_X = 1,
902  PF_W = 2,
903  PF_R = 4,
904 };
905 
906 enum elf_section_header_flags
907 {
908  SHF_WRITE = 1,
909  SHF_ALLOC = 2,
910  SHF_EXECINSTR = 4,
911  SHF_MIPS_GPREL = 0x10000000,
912 };
913 
914 enum anaarg_havearg_param
915 {
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,
921 };
922 
923 enum elf_file_slot_type
924 {
925  EFS_TYPE_NONE = 0,
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,
931  EFS_TYPE_END = 100,
932 };
933 
934 enum srx_target_enum
935 {
936  SRX_TARGET_IOP = 1,
937  SRX_TARGET_EE = 2,
938 };
939 
940 enum srx_program_header_type
941 {
942  SRX_PH_TYPE_MOD = 1,
943  SRX_PH_TYPE_TEXT = 2,
944 };
945 
946 #endif
_segconf
Definition: srxfixup_internal.h:311
_rndxr
Definition: srxfixup_internal.h:215
_dnr
Definition: srxfixup_internal.h:181
_Elf32_Phdr
Definition: srxfixup_internal.h:42
_Elf32_EeMod
Definition: srxfixup_internal.h:104
s_info
Definition: xprintf.c:78
_Elf32_ehdr
Definition: srxfixup_internal.h:25
_Elf32_Shdr
Definition: srxfixup_internal.h:53
_auxu
Definition: srxfixup_internal.h:220
_optr
Definition: srxfixup_internal.h:231
Elf32_Rel
Definition: elftypes.h:221
elf_rel
Definition: loadcore.c:71
_elffile
Definition: srxfixup_internal.h:285
operand
Definition: srxfixup_internal.h:399
_Elf32_RegInfo
Definition: srxfixup_internal.h:87
_elf_section
Definition: srxfixup_internal.h:253
_fdr
Definition: srxfixup_internal.h:147
Elf32_Phdr
Definition: elftypes.h:207
_elf_mips_symbolic
Definition: srxfixup_internal.h:238
_Elf32_Sym
Definition: srxfixup_internal.h:66
_pheader_info::_pheader_info_d
Definition: srxfixup_internal.h:325
_pdr
Definition: srxfixup_internal.h:186
_sectconf
Definition: srxfixup_internal.h:331
_tir
Definition: srxfixup_internal.h:203
_elf_proghead
Definition: srxfixup_internal.h:279
_elf_file_slot::_elf_file_slot_d
Definition: srxfixup_internal.h:302
_rel
Definition: srxfixup_internal.h:273
_Elf32_IopMod
Definition: srxfixup_internal.h:93
_Elf_Note
Definition: srxfixup_internal.h:75
_symr
Definition: srxfixup_internal.h:169
_opttable
Definition: srxfixup_internal.h:367
_srx_gen_table
Definition: srxfixup_internal.h:348
symbol
Definition: main.c:241
_hdrr
Definition: srxfixup_internal.h:119
_elf_file_slot
Definition: srxfixup_internal.h:296
_extr
Definition: srxfixup_internal.h:175
_crtsymconf
Definition: srxfixup_internal.h:338
_Elf32_Rel
Definition: srxfixup_internal.h:82
_pheader_info
Definition: srxfixup_internal.h:322
_opt_strings
Definition: srxfixup_internal.h:362
_syment
Definition: srxfixup_internal.h:263
disasm_result
Definition: srxfixup_internal.h:405