1
2
3
4
5
6 #include <stdint.h>
7
8 typedef struct filehdr {
9 uint16_t f_magic;
10 uint16_t f_nscns;
11 int32_t f_timdat;
12 int32_t f_symptr;
13 int32_t f_nsyms;
14 uint16_t f_opthdr;
15 uint16_t f_flags;
16 } FILHDR;
17 #define FILHSZ sizeof(FILHDR)
18
19 #define MIPSEBMAGIC 0x160
20 #define MIPSELMAGIC 0x162
21
22 typedef struct scnhdr {
23 char s_name[8];
24 int32_t s_paddr;
25 int32_t s_vaddr;
26 int32_t s_size;
27 int32_t s_scnptr;
28 int32_t s_relptr;
29 int32_t s_lnnoptr;
30 uint16_t s_nreloc;
31 uint16_t s_nlnno;
32 int32_t s_flags;
33 } SCNHDR;
34 #define SCNHSZ sizeof(SCNHDR)
35 #define SCNROUND ((int32_t)16)
36
37 typedef struct aouthdr {
38 int16_t magic;
39 int16_t vstamp;
40 int32_t tsize;
41 int32_t dsize;
42 int32_t bsize;
43 int32_t entry;
44 int32_t text_start;
45 int32_t data_start;
46 int32_t bss_start;
47 int32_t gprmask;
48 int32_t cprmask[4];
49 int32_t gp_value;
50 } AOUTHDR;
51 #define AOUTHSZ sizeof(AOUTHDR)
52
53 #define OMAGIC 0407
54 #define NMAGIC 0410
55 #define ZMAGIC 0413
56 #define SMAGIC 0411
57 #define LIBMAGIC 0443
58
59 #define N_TXTOFF(f, a) \
60 ((a).magic == ZMAGIC || (a).magic == LIBMAGIC ? 0 : \
61 ((a).vstamp < 23 ? \
62 ((FILHSZ + AOUTHSZ + (f).f_nscns * SCNHSZ + 7) & 0xfffffff8) : \
63 ((FILHSZ + AOUTHSZ + (f).f_nscns * SCNHSZ + SCNROUND-1) & ~(SCNROUND-1)) ) )
64 #define N_DATOFF(f, a) \
65 N_TXTOFF(f, a) + (a).tsize;