00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #define DO_NOT_DEFINE_AOUTHDR
00025 #define L_LNNO_SIZE 4
00026 #include "coff/external.h"
00027
00028
00029 #define MIPS_ECOFF_BADMAG(x) (((x).f_magic!=MIPS_MAGIC_1) && \
00030 ((x).f_magic!=MIPS_MAGIC_LITTLE) &&\
00031 ((x).f_magic!=MIPS_MAGIC_BIG) && \
00032 ((x).f_magic!=MIPS_MAGIC_LITTLE2) && \
00033 ((x).f_magic!=MIPS_MAGIC_BIG2) && \
00034 ((x).f_magic!=MIPS_MAGIC_LITTLE3) && \
00035 ((x).f_magic!=MIPS_MAGIC_BIG3))
00036
00037
00038
00039
00040 typedef struct external_aouthdr
00041 {
00042 unsigned char magic[2];
00043 unsigned char vstamp[2];
00044 unsigned char tsize[4];
00045 unsigned char dsize[4];
00046 unsigned char bsize[4];
00047 unsigned char entry[4];
00048 unsigned char text_start[4];
00049 unsigned char data_start[4];
00050 unsigned char bss_start[4];
00051 unsigned char gprmask[4];
00052 unsigned char cprmask[4][4];
00053 unsigned char gp_value[4];
00054 } AOUTHDR;
00055
00056
00057
00058 #define AOUTSZ 56
00059 #define AOUTHDRSZ 56
00060
00061
00062
00063 struct external_reloc
00064 {
00065 unsigned char r_vaddr[4];
00066 unsigned char r_bits[4];
00067 };
00068
00069 #define RELOC struct external_reloc
00070 #define RELSZ 8
00071
00072
00073
00074
00075 #define RELOC_BITS0_SYMNDX_SH_LEFT_BIG 16
00076 #define RELOC_BITS0_SYMNDX_SH_LEFT_LITTLE 0
00077
00078 #define RELOC_BITS1_SYMNDX_SH_LEFT_BIG 8
00079 #define RELOC_BITS1_SYMNDX_SH_LEFT_LITTLE 8
00080
00081 #define RELOC_BITS2_SYMNDX_SH_LEFT_BIG 0
00082 #define RELOC_BITS2_SYMNDX_SH_LEFT_LITTLE 16
00083
00084
00085
00086
00087
00088
00089
00090 #define RELOC_BITS3_TYPE_BIG 0x3E
00091 #define RELOC_BITS3_TYPE_SH_BIG 1
00092 #define RELOC_BITS3_TYPE_LITTLE 0x78
00093 #define RELOC_BITS3_TYPE_SH_LITTLE 3
00094 #define RELOC_BITS3_TYPEHI_LITTLE 0x04
00095 #define RELOC_BITS3_TYPEHI_SH_LITTLE 2
00096
00097 #define RELOC_BITS3_EXTERN_BIG 0x01
00098 #define RELOC_BITS3_EXTERN_LITTLE 0x80
00099
00100
00101
00102
00103 #define MIPS_R_IGNORE 0
00104 #define MIPS_R_REFHALF 1
00105 #define MIPS_R_REFWORD 2
00106 #define MIPS_R_JMPADDR 3
00107 #define MIPS_R_REFHI 4
00108 #define MIPS_R_REFLO 5
00109 #define MIPS_R_GPREL 6
00110 #define MIPS_R_LITERAL 7
00111
00112
00113
00114
00115 #define MIPS_R_PCREL16 12
00116
00117
00118
00119 #define MIPS_IS_STAB ECOFF_IS_STAB
00120 #define MIPS_MARK_STAB ECOFF_MARK_STAB
00121 #define MIPS_UNMARK_STAB ECOFF_UNMARK_STAB
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133 struct hdr_ext
00134 {
00135 unsigned char h_magic[2];
00136 unsigned char h_vstamp[2];
00137 unsigned char h_ilineMax[4];
00138 unsigned char h_cbLine[4];
00139 unsigned char h_cbLineOffset[4];
00140 unsigned char h_idnMax[4];
00141 unsigned char h_cbDnOffset[4];
00142 unsigned char h_ipdMax[4];
00143 unsigned char h_cbPdOffset[4];
00144 unsigned char h_isymMax[4];
00145 unsigned char h_cbSymOffset[4];
00146 unsigned char h_ioptMax[4];
00147 unsigned char h_cbOptOffset[4];
00148 unsigned char h_iauxMax[4];
00149 unsigned char h_cbAuxOffset[4];
00150 unsigned char h_issMax[4];
00151 unsigned char h_cbSsOffset[4];
00152 unsigned char h_issExtMax[4];
00153 unsigned char h_cbSsExtOffset[4];
00154 unsigned char h_ifdMax[4];
00155 unsigned char h_cbFdOffset[4];
00156 unsigned char h_crfd[4];
00157 unsigned char h_cbRfdOffset[4];
00158 unsigned char h_iextMax[4];
00159 unsigned char h_cbExtOffset[4];
00160 };
00161
00162
00163
00164 struct fdr_ext
00165 {
00166 unsigned char f_adr[4];
00167 unsigned char f_rss[4];
00168 unsigned char f_issBase[4];
00169 unsigned char f_cbSs[4];
00170 unsigned char f_isymBase[4];
00171 unsigned char f_csym[4];
00172 unsigned char f_ilineBase[4];
00173 unsigned char f_cline[4];
00174 unsigned char f_ioptBase[4];
00175 unsigned char f_copt[4];
00176 unsigned char f_ipdFirst[2];
00177 unsigned char f_cpd[2];
00178 unsigned char f_iauxBase[4];
00179 unsigned char f_caux[4];
00180 unsigned char f_rfdBase[4];
00181 unsigned char f_crfd[4];
00182 unsigned char f_bits1[1];
00183 unsigned char f_bits2[3];
00184 unsigned char f_cbLineOffset[4];
00185 unsigned char f_cbLine[4];
00186 };
00187
00188 #define FDR_BITS1_LANG_BIG 0xF8
00189 #define FDR_BITS1_LANG_SH_BIG 3
00190 #define FDR_BITS1_LANG_LITTLE 0x1F
00191 #define FDR_BITS1_LANG_SH_LITTLE 0
00192
00193 #define FDR_BITS1_FMERGE_BIG 0x04
00194 #define FDR_BITS1_FMERGE_LITTLE 0x20
00195
00196 #define FDR_BITS1_FREADIN_BIG 0x02
00197 #define FDR_BITS1_FREADIN_LITTLE 0x40
00198
00199 #define FDR_BITS1_FBIGENDIAN_BIG 0x01
00200 #define FDR_BITS1_FBIGENDIAN_LITTLE 0x80
00201
00202 #define FDR_BITS2_GLEVEL_BIG 0xC0
00203 #define FDR_BITS2_GLEVEL_SH_BIG 6
00204 #define FDR_BITS2_GLEVEL_LITTLE 0x03
00205 #define FDR_BITS2_GLEVEL_SH_LITTLE 0
00206
00207
00208
00209
00210
00211 struct pdr_ext
00212 {
00213 unsigned char p_adr[4];
00214 unsigned char p_isym[4];
00215 unsigned char p_iline[4];
00216 unsigned char p_regmask[4];
00217 unsigned char p_regoffset[4];
00218 unsigned char p_iopt[4];
00219 unsigned char p_fregmask[4];
00220 unsigned char p_fregoffset[4];
00221 unsigned char p_frameoffset[4];
00222 unsigned char p_framereg[2];
00223 unsigned char p_pcreg[2];
00224 unsigned char p_lnLow[4];
00225 unsigned char p_lnHigh[4];
00226 unsigned char p_cbLineOffset[4];
00227 };
00228
00229
00230
00231 struct rpdr_ext
00232 {
00233 unsigned char p_adr[4];
00234 unsigned char p_regmask[4];
00235 unsigned char p_regoffset[4];
00236 unsigned char p_fregmask[4];
00237 unsigned char p_fregoffset[4];
00238 unsigned char p_frameoffset[4];
00239 unsigned char p_framereg[2];
00240 unsigned char p_pcreg[2];
00241 unsigned char p_irpss[4];
00242 unsigned char p_reserved[4];
00243 unsigned char p_exception_info[4];
00244 };
00245
00246
00247
00248 struct line_ext
00249 {
00250 unsigned char l_line[4];
00251 };
00252
00253
00254
00255 struct sym_ext
00256 {
00257 unsigned char s_iss[4];
00258 unsigned char s_value[4];
00259 unsigned char s_bits1[1];
00260 unsigned char s_bits2[1];
00261 unsigned char s_bits3[1];
00262 unsigned char s_bits4[1];
00263 };
00264
00265 #define SYM_BITS1_ST_BIG 0xFC
00266 #define SYM_BITS1_ST_SH_BIG 2
00267 #define SYM_BITS1_ST_LITTLE 0x3F
00268 #define SYM_BITS1_ST_SH_LITTLE 0
00269
00270 #define SYM_BITS1_SC_BIG 0x03
00271 #define SYM_BITS1_SC_SH_LEFT_BIG 3
00272 #define SYM_BITS1_SC_LITTLE 0xC0
00273 #define SYM_BITS1_SC_SH_LITTLE 6
00274
00275 #define SYM_BITS2_SC_BIG 0xE0
00276 #define SYM_BITS2_SC_SH_BIG 5
00277 #define SYM_BITS2_SC_LITTLE 0x07
00278 #define SYM_BITS2_SC_SH_LEFT_LITTLE 2
00279
00280 #define SYM_BITS2_RESERVED_BIG 0x10
00281 #define SYM_BITS2_RESERVED_LITTLE 0x08
00282
00283 #define SYM_BITS2_INDEX_BIG 0x0F
00284 #define SYM_BITS2_INDEX_SH_LEFT_BIG 16
00285 #define SYM_BITS2_INDEX_LITTLE 0xF0
00286 #define SYM_BITS2_INDEX_SH_LITTLE 4
00287
00288 #define SYM_BITS3_INDEX_SH_LEFT_BIG 8
00289 #define SYM_BITS3_INDEX_SH_LEFT_LITTLE 4
00290
00291 #define SYM_BITS4_INDEX_SH_LEFT_BIG 0
00292 #define SYM_BITS4_INDEX_SH_LEFT_LITTLE 12
00293
00294
00295
00296 struct ext_ext
00297 {
00298 unsigned char es_bits1[1];
00299 unsigned char es_bits2[1];
00300 unsigned char es_ifd[2];
00301 struct sym_ext es_asym;
00302 };
00303
00304 #define EXT_BITS1_JMPTBL_BIG 0x80
00305 #define EXT_BITS1_JMPTBL_LITTLE 0x01
00306
00307 #define EXT_BITS1_COBOL_MAIN_BIG 0x40
00308 #define EXT_BITS1_COBOL_MAIN_LITTLE 0x02
00309
00310 #define EXT_BITS1_WEAKEXT_BIG 0x20
00311 #define EXT_BITS1_WEAKEXT_LITTLE 0x04
00312
00313
00314
00315 struct dnr_ext
00316 {
00317 unsigned char d_rfd[4];
00318 unsigned char d_index[4];
00319 };
00320
00321
00322
00323 struct rfd_ext
00324 {
00325 unsigned char rfd[4];
00326 };
00327
00328
00329
00330 struct opt_ext
00331 {
00332 unsigned char o_bits1[1];
00333 unsigned char o_bits2[1];
00334 unsigned char o_bits3[1];
00335 unsigned char o_bits4[1];
00336 struct rndx_ext o_rndx;
00337 unsigned char o_offset[4];
00338 };
00339
00340 #define OPT_BITS2_VALUE_SH_LEFT_BIG 16
00341 #define OPT_BITS2_VALUE_SH_LEFT_LITTLE 0
00342
00343 #define OPT_BITS3_VALUE_SH_LEFT_BIG 8
00344 #define OPT_BITS3_VALUE_SH_LEFT_LITTLE 8
00345
00346 #define OPT_BITS4_VALUE_SH_LEFT_BIG 0
00347 #define OPT_BITS4_VALUE_SH_LEFT_LITTLE 16