Subversion Repositories Kolibri OS

Rev

Rev 5191 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5191 Rev 6324
1
/* ECOFF support on Alpha machines.
1
/* ECOFF support on Alpha machines.
2
   coff/ecoff.h must be included before this file.
2
   coff/ecoff.h must be included before this file.
3
 
3
 
4
   Copyright 2001, 2005, 2010 Free Software Foundation, Inc.
4
   Copyright (C) 2001-2015 Free Software Foundation, Inc.
5
 
5
 
6
   This program is free software; you can redistribute it and/or modify
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 3 of the License, or
8
   the Free Software Foundation; either version 3 of the License, or
9
   (at your option) any later version.
9
   (at your option) any later version.
10
   
10
   
11
   This program is distributed in the hope that it will be useful,
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
14
   GNU General Public License for more details.
15
   
15
   
16
   You should have received a copy of the GNU General Public License
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
18
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19
   MA 02110-1301, USA.  */
19
   MA 02110-1301, USA.  */
20
   
20
   
21
/********************** FILE HEADER **********************/
21
/********************** FILE HEADER **********************/
22
 
22
 
23
struct external_filehdr
23
struct external_filehdr
24
{
24
{
25
  unsigned char f_magic[2];	/* magic number			*/
25
  unsigned char f_magic[2];	/* magic number			*/
26
  unsigned char f_nscns[2];	/* number of sections		*/
26
  unsigned char f_nscns[2];	/* number of sections		*/
27
  unsigned char f_timdat[4];	/* time & date stamp		*/
27
  unsigned char f_timdat[4];	/* time & date stamp		*/
28
  unsigned char f_symptr[8];	/* file pointer to symtab	*/
28
  unsigned char f_symptr[8];	/* file pointer to symtab	*/
29
  unsigned char f_nsyms[4];	/* number of symtab entries	*/
29
  unsigned char f_nsyms[4];	/* number of symtab entries	*/
30
  unsigned char f_opthdr[2];	/* sizeof(optional hdr)		*/
30
  unsigned char f_opthdr[2];	/* sizeof(optional hdr)		*/
31
  unsigned char f_flags[2];	/* flags			*/
31
  unsigned char f_flags[2];	/* flags			*/
32
};
32
};
33
 
33
 
34
/* Magic numbers are defined in coff/ecoff.h.  */
34
/* Magic numbers are defined in coff/ecoff.h.  */
35
#define ALPHA_ECOFF_BADMAG(x) \
35
#define ALPHA_ECOFF_BADMAG(x) \
36
  ((x).f_magic != ALPHA_MAGIC && (x).f_magic != ALPHA_MAGIC_BSD)
36
  ((x).f_magic != ALPHA_MAGIC && (x).f_magic != ALPHA_MAGIC_BSD)
37
 
37
 
38
#define ALPHA_ECOFF_COMPRESSEDMAG(x) \
38
#define ALPHA_ECOFF_COMPRESSEDMAG(x) \
39
  ((x).f_magic == ALPHA_MAGIC_COMPRESSED)
39
  ((x).f_magic == ALPHA_MAGIC_COMPRESSED)
40
 
40
 
41
/* The object type is encoded in the f_flags.  */
41
/* The object type is encoded in the f_flags.  */
42
#define F_ALPHA_OBJECT_TYPE_MASK	0x3000
42
#define F_ALPHA_OBJECT_TYPE_MASK	0x3000
43
#define F_ALPHA_NO_SHARED		0x1000
43
#define F_ALPHA_NO_SHARED		0x1000
44
#define F_ALPHA_SHARABLE		0x2000
44
#define F_ALPHA_SHARABLE		0x2000
45
#define F_ALPHA_CALL_SHARED		0x3000
45
#define F_ALPHA_CALL_SHARED		0x3000
46
 
46
 
47
#define	FILHDR	struct external_filehdr
47
#define	FILHDR	struct external_filehdr
48
#define	FILHSZ	24
48
#define	FILHSZ	24
49
 
49
 
50
/********************** AOUT "OPTIONAL HEADER" **********************/
50
/********************** AOUT "OPTIONAL HEADER" **********************/
51
 
51
 
52
typedef struct external_aouthdr
52
typedef struct external_aouthdr
53
{
53
{
54
  unsigned char magic[2];	/* type of file				*/
54
  unsigned char magic[2];	/* type of file				*/
55
  unsigned char	vstamp[2];	/* version stamp			*/
55
  unsigned char	vstamp[2];	/* version stamp			*/
56
  unsigned char bldrev[2];	/* ?? */
56
  unsigned char bldrev[2];	/* ?? */
57
  unsigned char padding[2];	/* pad to quadword boundary		*/
57
  unsigned char padding[2];	/* pad to quadword boundary		*/
58
  unsigned char	tsize[8];	/* text size in bytes			*/
58
  unsigned char	tsize[8];	/* text size in bytes			*/
59
  unsigned char	dsize[8];	/* initialized data "  "		*/
59
  unsigned char	dsize[8];	/* initialized data "  "		*/
60
  unsigned char	bsize[8];	/* uninitialized data "   "		*/
60
  unsigned char	bsize[8];	/* uninitialized data "   "		*/
61
  unsigned char	entry[8];	/* entry pt.				*/
61
  unsigned char	entry[8];	/* entry pt.				*/
62
  unsigned char text_start[8];	/* base of text used for this file */
62
  unsigned char text_start[8];	/* base of text used for this file */
63
  unsigned char data_start[8];	/* base of data used for this file */
63
  unsigned char data_start[8];	/* base of data used for this file */
64
  unsigned char bss_start[8];	/* base of bss used for this file */
64
  unsigned char bss_start[8];	/* base of bss used for this file */
65
  unsigned char gprmask[4];	/* bitmask of general registers used */
65
  unsigned char gprmask[4];	/* bitmask of general registers used */
66
  unsigned char fprmask[4];	/* bitmask of floating point registers used */
66
  unsigned char fprmask[4];	/* bitmask of floating point registers used */
67
  unsigned char gp_value[8];	/* value for gp register */
67
  unsigned char gp_value[8];	/* value for gp register */
68
} AOUTHDR;
68
} AOUTHDR;
69
 
69
 
70
/* compute size of a header */
70
/* compute size of a header */
71
 
71
 
72
#define AOUTSZ 80
72
#define AOUTSZ 80
73
#define AOUTHDRSZ 80
73
#define AOUTHDRSZ 80
74
 
74
 
75
/********************** SECTION HEADER **********************/
75
/********************** SECTION HEADER **********************/
76
 
76
 
77
struct external_scnhdr
77
struct external_scnhdr
78
{
78
{
79
  unsigned char	s_name[8];	/* section name			*/
79
  unsigned char	s_name[8];	/* section name			*/
80
  unsigned char	s_paddr[8];	/* physical address, aliased s_nlib */
80
  unsigned char	s_paddr[8];	/* physical address, aliased s_nlib */
81
  unsigned char	s_vaddr[8];	/* virtual address		*/
81
  unsigned char	s_vaddr[8];	/* virtual address		*/
82
  unsigned char	s_size[8];	/* section size			*/
82
  unsigned char	s_size[8];	/* section size			*/
83
  unsigned char	s_scnptr[8];	/* file ptr to raw data for section */
83
  unsigned char	s_scnptr[8];	/* file ptr to raw data for section */
84
  unsigned char	s_relptr[8];	/* file ptr to relocation	*/
84
  unsigned char	s_relptr[8];	/* file ptr to relocation	*/
85
  unsigned char	s_lnnoptr[8];	/* file ptr to line numbers	*/
85
  unsigned char	s_lnnoptr[8];	/* file ptr to line numbers	*/
86
  unsigned char	s_nreloc[2];	/* number of relocation entries	*/
86
  unsigned char	s_nreloc[2];	/* number of relocation entries	*/
87
  unsigned char	s_nlnno[2];	/* number of line number entries*/
87
  unsigned char	s_nlnno[2];	/* number of line number entries*/
88
  unsigned char	s_flags[4];	/* flags			*/
88
  unsigned char	s_flags[4];	/* flags			*/
89
};
89
};
90
 
90
 
91
#define	SCNHDR	struct external_scnhdr
91
#define	SCNHDR	struct external_scnhdr
92
#define	SCNHSZ	64
92
#define	SCNHSZ	64
93
 
93
 
94
/********************** RELOCATION DIRECTIVES **********************/
94
/********************** RELOCATION DIRECTIVES **********************/
95
 
95
 
96
struct external_reloc 
96
struct external_reloc 
97
{
97
{
98
  unsigned char r_vaddr[8];
98
  unsigned char r_vaddr[8];
99
  unsigned char r_symndx[4];
99
  unsigned char r_symndx[4];
100
  unsigned char r_bits[4];
100
  unsigned char r_bits[4];
101
};
101
};
102
 
102
 
103
#define RELOC struct external_reloc
103
#define RELOC struct external_reloc
104
#define RELSZ 16
104
#define RELSZ 16
105
 
105
 
106
/* Constants to unpack the r_bits field.  The Alpha seems to always be
106
/* Constants to unpack the r_bits field.  The Alpha seems to always be
107
   little endian, so I haven't bothered to define big endian variants
107
   little endian, so I haven't bothered to define big endian variants
108
   of these.  */
108
   of these.  */
109
 
109
 
110
#define RELOC_BITS0_TYPE_LITTLE			0xff
110
#define RELOC_BITS0_TYPE_LITTLE			0xff
111
#define RELOC_BITS0_TYPE_SH_LITTLE		0
111
#define RELOC_BITS0_TYPE_SH_LITTLE		0
112
 
112
 
113
#define RELOC_BITS1_EXTERN_LITTLE		0x01
113
#define RELOC_BITS1_EXTERN_LITTLE		0x01
114
 
114
 
115
#define RELOC_BITS1_OFFSET_LITTLE		0x7e
115
#define RELOC_BITS1_OFFSET_LITTLE		0x7e
116
#define RELOC_BITS1_OFFSET_SH_LITTLE		1
116
#define RELOC_BITS1_OFFSET_SH_LITTLE		1
117
 
117
 
118
#define RELOC_BITS1_RESERVED_LITTLE		0x80
118
#define RELOC_BITS1_RESERVED_LITTLE		0x80
119
#define RELOC_BITS1_RESERVED_SH_LITTLE		7
119
#define RELOC_BITS1_RESERVED_SH_LITTLE		7
120
#define RELOC_BITS2_RESERVED_LITTLE		0xff
120
#define RELOC_BITS2_RESERVED_LITTLE		0xff
121
#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE	1
121
#define RELOC_BITS2_RESERVED_SH_LEFT_LITTLE	1
122
#define RELOC_BITS3_RESERVED_LITTLE		0x03
122
#define RELOC_BITS3_RESERVED_LITTLE		0x03
123
#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE	9
123
#define RELOC_BITS3_RESERVED_SH_LEFT_LITTLE	9
124
 
124
 
125
#define RELOC_BITS3_SIZE_LITTLE			0xfc
125
#define RELOC_BITS3_SIZE_LITTLE			0xfc
126
#define RELOC_BITS3_SIZE_SH_LITTLE		2
126
#define RELOC_BITS3_SIZE_SH_LITTLE		2
127
 
127
 
128
/* The r_type field in a reloc is one of the following values.  */
128
/* The r_type field in a reloc is one of the following values.  */
129
#define ALPHA_R_IGNORE		0
129
#define ALPHA_R_IGNORE		0
130
#define ALPHA_R_REFLONG		1
130
#define ALPHA_R_REFLONG		1
131
#define ALPHA_R_REFQUAD		2
131
#define ALPHA_R_REFQUAD		2
132
#define ALPHA_R_GPREL32		3
132
#define ALPHA_R_GPREL32		3
133
#define ALPHA_R_LITERAL		4
133
#define ALPHA_R_LITERAL		4
134
#define ALPHA_R_LITUSE		5
134
#define ALPHA_R_LITUSE		5
135
#define ALPHA_R_GPDISP		6
135
#define ALPHA_R_GPDISP		6
136
#define ALPHA_R_BRADDR		7
136
#define ALPHA_R_BRADDR		7
137
#define ALPHA_R_HINT		8
137
#define ALPHA_R_HINT		8
138
#define ALPHA_R_SREL16		9
138
#define ALPHA_R_SREL16		9
139
#define ALPHA_R_SREL32	       10
139
#define ALPHA_R_SREL32	       10
140
#define ALPHA_R_SREL64	       11
140
#define ALPHA_R_SREL64	       11
141
#define ALPHA_R_OP_PUSH	       12
141
#define ALPHA_R_OP_PUSH	       12
142
#define ALPHA_R_OP_STORE       13
142
#define ALPHA_R_OP_STORE       13
143
#define ALPHA_R_OP_PSUB	       14
143
#define ALPHA_R_OP_PSUB	       14
144
#define ALPHA_R_OP_PRSHIFT     15
144
#define ALPHA_R_OP_PRSHIFT     15
145
#define ALPHA_R_GPVALUE	       16
145
#define ALPHA_R_GPVALUE	       16
146
#define ALPHA_R_GPRELHIGH      17
146
#define ALPHA_R_GPRELHIGH      17
147
#define ALPHA_R_GPRELLOW       18
147
#define ALPHA_R_GPRELLOW       18
148
#define ALPHA_R_IMMED          19
148
#define ALPHA_R_IMMED          19
149
 
149
 
150
/* Overloaded reloc value used by Net- and OpenBSD.  */
150
/* Overloaded reloc value used by Net- and OpenBSD.  */
151
#define ALPHA_R_LITERALSLEAZY  17
151
#define ALPHA_R_LITERALSLEAZY  17
152
 
152
 
153
/* With ALPHA_R_LITUSE, the r_size field is one of the following values.  */
153
/* With ALPHA_R_LITUSE, the r_size field is one of the following values.  */
154
#define ALPHA_R_LU_BASE         1
154
#define ALPHA_R_LU_BASE         1
155
#define ALPHA_R_LU_BYTOFF       2
155
#define ALPHA_R_LU_BYTOFF       2
156
#define ALPHA_R_LU_JSR          3
156
#define ALPHA_R_LU_JSR          3
157
 
157
 
158
/* With ALPHA_R_IMMED, the r_size field is one of the following values.  */
158
/* With ALPHA_R_IMMED, the r_size field is one of the following values.  */
159
#define ALPHA_R_IMMED_GP_16     1
159
#define ALPHA_R_IMMED_GP_16     1
160
#define ALPHA_R_IMMED_GP_HI32   2
160
#define ALPHA_R_IMMED_GP_HI32   2
161
#define ALPHA_R_IMMED_SCN_HI32  3
161
#define ALPHA_R_IMMED_SCN_HI32  3
162
#define ALPHA_R_IMMED_BR_HI32   4
162
#define ALPHA_R_IMMED_BR_HI32   4
163
#define ALPHA_R_IMMED_LO32      5
163
#define ALPHA_R_IMMED_LO32      5
164
 
164
 
165
/********************** SYMBOLIC INFORMATION **********************/
165
/********************** SYMBOLIC INFORMATION **********************/
166
 
166
 
167
/* Written by John Gilmore.  */
167
/* Written by John Gilmore.  */
168
 
168
 
169
/* ECOFF uses COFF-like section structures, but its own symbol format.
169
/* ECOFF uses COFF-like section structures, but its own symbol format.
170
   This file defines the symbol format in fields whose size and alignment
170
   This file defines the symbol format in fields whose size and alignment
171
   will not vary on different host systems.  */
171
   will not vary on different host systems.  */
172
 
172
 
173
/* File header as a set of bytes */
173
/* File header as a set of bytes */
174
 
174
 
175
struct hdr_ext
175
struct hdr_ext
176
{
176
{
177
	unsigned char 	h_magic[2];
177
	unsigned char 	h_magic[2];
178
	unsigned char	h_vstamp[2];
178
	unsigned char	h_vstamp[2];
179
	unsigned char	h_ilineMax[4];
179
	unsigned char	h_ilineMax[4];
180
	unsigned char	h_idnMax[4];
180
	unsigned char	h_idnMax[4];
181
	unsigned char	h_ipdMax[4];
181
	unsigned char	h_ipdMax[4];
182
	unsigned char	h_isymMax[4];
182
	unsigned char	h_isymMax[4];
183
	unsigned char	h_ioptMax[4];
183
	unsigned char	h_ioptMax[4];
184
	unsigned char	h_iauxMax[4];
184
	unsigned char	h_iauxMax[4];
185
	unsigned char	h_issMax[4];
185
	unsigned char	h_issMax[4];
186
	unsigned char	h_issExtMax[4];
186
	unsigned char	h_issExtMax[4];
187
	unsigned char	h_ifdMax[4];
187
	unsigned char	h_ifdMax[4];
188
	unsigned char	h_crfd[4];
188
	unsigned char	h_crfd[4];
189
	unsigned char	h_iextMax[4];
189
	unsigned char	h_iextMax[4];
190
	unsigned char	h_cbLine[8];
190
	unsigned char	h_cbLine[8];
191
	unsigned char	h_cbLineOffset[8];
191
	unsigned char	h_cbLineOffset[8];
192
	unsigned char	h_cbDnOffset[8];
192
	unsigned char	h_cbDnOffset[8];
193
	unsigned char	h_cbPdOffset[8];
193
	unsigned char	h_cbPdOffset[8];
194
	unsigned char	h_cbSymOffset[8];
194
	unsigned char	h_cbSymOffset[8];
195
	unsigned char	h_cbOptOffset[8];
195
	unsigned char	h_cbOptOffset[8];
196
	unsigned char	h_cbAuxOffset[8];
196
	unsigned char	h_cbAuxOffset[8];
197
	unsigned char	h_cbSsOffset[8];
197
	unsigned char	h_cbSsOffset[8];
198
	unsigned char	h_cbSsExtOffset[8];
198
	unsigned char	h_cbSsExtOffset[8];
199
	unsigned char	h_cbFdOffset[8];
199
	unsigned char	h_cbFdOffset[8];
200
	unsigned char	h_cbRfdOffset[8];
200
	unsigned char	h_cbRfdOffset[8];
201
	unsigned char	h_cbExtOffset[8];
201
	unsigned char	h_cbExtOffset[8];
202
};
202
};
203
 
203
 
204
/* File descriptor external record */
204
/* File descriptor external record */
205
 
205
 
206
struct fdr_ext
206
struct fdr_ext
207
{
207
{
208
	unsigned char	f_adr[8];
208
	unsigned char	f_adr[8];
209
	unsigned char	f_cbLineOffset[8];
209
	unsigned char	f_cbLineOffset[8];
210
	unsigned char	f_cbLine[8];
210
	unsigned char	f_cbLine[8];
211
	unsigned char	f_cbSs[8];
211
	unsigned char	f_cbSs[8];
212
	unsigned char	f_rss[4];
212
	unsigned char	f_rss[4];
213
	unsigned char	f_issBase[4];
213
	unsigned char	f_issBase[4];
214
	unsigned char	f_isymBase[4];
214
	unsigned char	f_isymBase[4];
215
	unsigned char	f_csym[4];
215
	unsigned char	f_csym[4];
216
	unsigned char	f_ilineBase[4];
216
	unsigned char	f_ilineBase[4];
217
	unsigned char	f_cline[4];
217
	unsigned char	f_cline[4];
218
	unsigned char	f_ioptBase[4];
218
	unsigned char	f_ioptBase[4];
219
	unsigned char	f_copt[4];
219
	unsigned char	f_copt[4];
220
	unsigned char	f_ipdFirst[4];
220
	unsigned char	f_ipdFirst[4];
221
	unsigned char	f_cpd[4];
221
	unsigned char	f_cpd[4];
222
	unsigned char	f_iauxBase[4];
222
	unsigned char	f_iauxBase[4];
223
	unsigned char	f_caux[4];
223
	unsigned char	f_caux[4];
224
	unsigned char	f_rfdBase[4];
224
	unsigned char	f_rfdBase[4];
225
	unsigned char	f_crfd[4];
225
	unsigned char	f_crfd[4];
226
	unsigned char	f_bits1[1];
226
	unsigned char	f_bits1[1];
227
	unsigned char	f_bits2[3];
227
	unsigned char	f_bits2[3];
228
	unsigned char	f_padding[4];
228
	unsigned char	f_padding[4];
229
};
229
};
230
 
230
 
231
#define	FDR_BITS1_LANG_BIG		0xF8
231
#define	FDR_BITS1_LANG_BIG		0xF8
232
#define	FDR_BITS1_LANG_SH_BIG		3
232
#define	FDR_BITS1_LANG_SH_BIG		3
233
#define	FDR_BITS1_LANG_LITTLE		0x1F
233
#define	FDR_BITS1_LANG_LITTLE		0x1F
234
#define	FDR_BITS1_LANG_SH_LITTLE	0
234
#define	FDR_BITS1_LANG_SH_LITTLE	0
235
 
235
 
236
#define	FDR_BITS1_FMERGE_BIG		0x04
236
#define	FDR_BITS1_FMERGE_BIG		0x04
237
#define	FDR_BITS1_FMERGE_LITTLE		0x20
237
#define	FDR_BITS1_FMERGE_LITTLE		0x20
238
 
238
 
239
#define	FDR_BITS1_FREADIN_BIG		0x02
239
#define	FDR_BITS1_FREADIN_BIG		0x02
240
#define	FDR_BITS1_FREADIN_LITTLE	0x40
240
#define	FDR_BITS1_FREADIN_LITTLE	0x40
241
 
241
 
242
#define	FDR_BITS1_FBIGENDIAN_BIG	0x01
242
#define	FDR_BITS1_FBIGENDIAN_BIG	0x01
243
#define	FDR_BITS1_FBIGENDIAN_LITTLE	0x80
243
#define	FDR_BITS1_FBIGENDIAN_LITTLE	0x80
244
 
244
 
245
#define	FDR_BITS2_GLEVEL_BIG		0xC0
245
#define	FDR_BITS2_GLEVEL_BIG		0xC0
246
#define	FDR_BITS2_GLEVEL_SH_BIG		6
246
#define	FDR_BITS2_GLEVEL_SH_BIG		6
247
#define	FDR_BITS2_GLEVEL_LITTLE		0x03
247
#define	FDR_BITS2_GLEVEL_LITTLE		0x03
248
#define	FDR_BITS2_GLEVEL_SH_LITTLE	0
248
#define	FDR_BITS2_GLEVEL_SH_LITTLE	0
249
 
249
 
250
/* We ignore the `reserved' field in bits2. */
250
/* We ignore the `reserved' field in bits2. */
251
 
251
 
252
/* Procedure descriptor external record */
252
/* Procedure descriptor external record */
253
 
253
 
254
struct pdr_ext {
254
struct pdr_ext {
255
	unsigned char	p_adr[8];
255
	unsigned char	p_adr[8];
256
	unsigned char	p_cbLineOffset[8];
256
	unsigned char	p_cbLineOffset[8];
257
	unsigned char	p_isym[4];
257
	unsigned char	p_isym[4];
258
	unsigned char	p_iline[4];
258
	unsigned char	p_iline[4];
259
	unsigned char	p_regmask[4];
259
	unsigned char	p_regmask[4];
260
	unsigned char	p_regoffset[4];
260
	unsigned char	p_regoffset[4];
261
	unsigned char	p_iopt[4];
261
	unsigned char	p_iopt[4];
262
	unsigned char	p_fregmask[4];
262
	unsigned char	p_fregmask[4];
263
	unsigned char	p_fregoffset[4];
263
	unsigned char	p_fregoffset[4];
264
	unsigned char	p_frameoffset[4];
264
	unsigned char	p_frameoffset[4];
265
	unsigned char	p_lnLow[4];
265
	unsigned char	p_lnLow[4];
266
	unsigned char	p_lnHigh[4];
266
	unsigned char	p_lnHigh[4];
267
	unsigned char	p_gp_prologue[1];
267
	unsigned char	p_gp_prologue[1];
268
	unsigned char	p_bits1[1];
268
	unsigned char	p_bits1[1];
269
	unsigned char	p_bits2[1];
269
	unsigned char	p_bits2[1];
270
	unsigned char	p_localoff[1];
270
	unsigned char	p_localoff[1];
271
	unsigned char	p_framereg[2];
271
	unsigned char	p_framereg[2];
272
	unsigned char	p_pcreg[2];
272
	unsigned char	p_pcreg[2];
273
};
273
};
274
 
274
 
275
#define PDR_BITS1_GP_USED_BIG		0x80
275
#define PDR_BITS1_GP_USED_BIG		0x80
276
#define PDR_BITS1_REG_FRAME_BIG		0x40
276
#define PDR_BITS1_REG_FRAME_BIG		0x40
277
#define PDR_BITS1_PROF_BIG		0x20
277
#define PDR_BITS1_PROF_BIG		0x20
278
#define PDR_BITS1_RESERVED_BIG		0x1f
278
#define PDR_BITS1_RESERVED_BIG		0x1f
279
#define PDR_BITS1_RESERVED_SH_LEFT_BIG	8
279
#define PDR_BITS1_RESERVED_SH_LEFT_BIG	8
280
#define PDR_BITS2_RESERVED_BIG		0xff
280
#define PDR_BITS2_RESERVED_BIG		0xff
281
#define PDR_BITS2_RESERVED_SH_BIG	0
281
#define PDR_BITS2_RESERVED_SH_BIG	0
282
 
282
 
283
#define PDR_BITS1_GP_USED_LITTLE	0x01
283
#define PDR_BITS1_GP_USED_LITTLE	0x01
284
#define PDR_BITS1_REG_FRAME_LITTLE	0x02
284
#define PDR_BITS1_REG_FRAME_LITTLE	0x02
285
#define PDR_BITS1_PROF_LITTLE		0x04
285
#define PDR_BITS1_PROF_LITTLE		0x04
286
#define PDR_BITS1_RESERVED_LITTLE	0xf8
286
#define PDR_BITS1_RESERVED_LITTLE	0xf8
287
#define PDR_BITS1_RESERVED_SH_LITTLE	3
287
#define PDR_BITS1_RESERVED_SH_LITTLE	3
288
#define PDR_BITS2_RESERVED_LITTLE	0xff
288
#define PDR_BITS2_RESERVED_LITTLE	0xff
289
#define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 5
289
#define PDR_BITS2_RESERVED_SH_LEFT_LITTLE 5
290
 
290
 
291
/* Line numbers */
291
/* Line numbers */
292
 
292
 
293
struct line_ext {
293
struct line_ext {
294
	unsigned char	l_line[4];
294
	unsigned char	l_line[4];
295
};
295
};
296
 
296
 
297
/* Symbol external record */
297
/* Symbol external record */
298
 
298
 
299
struct sym_ext {
299
struct sym_ext {
300
	unsigned char	s_value[8];
300
	unsigned char	s_value[8];
301
	unsigned char	s_iss[4];
301
	unsigned char	s_iss[4];
302
	unsigned char	s_bits1[1];
302
	unsigned char	s_bits1[1];
303
	unsigned char	s_bits2[1];
303
	unsigned char	s_bits2[1];
304
	unsigned char	s_bits3[1];
304
	unsigned char	s_bits3[1];
305
	unsigned char	s_bits4[1];
305
	unsigned char	s_bits4[1];
306
};
306
};
307
 
307
 
308
#define	SYM_BITS1_ST_BIG		0xFC
308
#define	SYM_BITS1_ST_BIG		0xFC
309
#define	SYM_BITS1_ST_SH_BIG		2
309
#define	SYM_BITS1_ST_SH_BIG		2
310
#define	SYM_BITS1_ST_LITTLE		0x3F
310
#define	SYM_BITS1_ST_LITTLE		0x3F
311
#define	SYM_BITS1_ST_SH_LITTLE		0
311
#define	SYM_BITS1_ST_SH_LITTLE		0
312
 
312
 
313
#define	SYM_BITS1_SC_BIG		0x03
313
#define	SYM_BITS1_SC_BIG		0x03
314
#define	SYM_BITS1_SC_SH_LEFT_BIG	3
314
#define	SYM_BITS1_SC_SH_LEFT_BIG	3
315
#define	SYM_BITS1_SC_LITTLE		0xC0
315
#define	SYM_BITS1_SC_LITTLE		0xC0
316
#define	SYM_BITS1_SC_SH_LITTLE		6
316
#define	SYM_BITS1_SC_SH_LITTLE		6
317
 
317
 
318
#define	SYM_BITS2_SC_BIG		0xE0
318
#define	SYM_BITS2_SC_BIG		0xE0
319
#define	SYM_BITS2_SC_SH_BIG		5
319
#define	SYM_BITS2_SC_SH_BIG		5
320
#define	SYM_BITS2_SC_LITTLE		0x07
320
#define	SYM_BITS2_SC_LITTLE		0x07
321
#define	SYM_BITS2_SC_SH_LEFT_LITTLE	2
321
#define	SYM_BITS2_SC_SH_LEFT_LITTLE	2
322
 
322
 
323
#define	SYM_BITS2_RESERVED_BIG		0x10
323
#define	SYM_BITS2_RESERVED_BIG		0x10
324
#define	SYM_BITS2_RESERVED_LITTLE	0x08
324
#define	SYM_BITS2_RESERVED_LITTLE	0x08
325
 
325
 
326
#define	SYM_BITS2_INDEX_BIG		0x0F
326
#define	SYM_BITS2_INDEX_BIG		0x0F
327
#define	SYM_BITS2_INDEX_SH_LEFT_BIG	16
327
#define	SYM_BITS2_INDEX_SH_LEFT_BIG	16
328
#define	SYM_BITS2_INDEX_LITTLE		0xF0
328
#define	SYM_BITS2_INDEX_LITTLE		0xF0
329
#define	SYM_BITS2_INDEX_SH_LITTLE	4
329
#define	SYM_BITS2_INDEX_SH_LITTLE	4
330
 
330
 
331
#define	SYM_BITS3_INDEX_SH_LEFT_BIG	8
331
#define	SYM_BITS3_INDEX_SH_LEFT_BIG	8
332
#define	SYM_BITS3_INDEX_SH_LEFT_LITTLE	4
332
#define	SYM_BITS3_INDEX_SH_LEFT_LITTLE	4
333
 
333
 
334
#define	SYM_BITS4_INDEX_SH_LEFT_BIG	0
334
#define	SYM_BITS4_INDEX_SH_LEFT_BIG	0
335
#define	SYM_BITS4_INDEX_SH_LEFT_LITTLE	12
335
#define	SYM_BITS4_INDEX_SH_LEFT_LITTLE	12
336
 
336
 
337
/* External symbol external record */
337
/* External symbol external record */
338
 
338
 
339
struct ext_ext {
339
struct ext_ext {
340
	struct	sym_ext es_asym;
340
	struct	sym_ext es_asym;
341
	unsigned char	es_bits1[1];
341
	unsigned char	es_bits1[1];
342
	unsigned char	es_bits2[3];
342
	unsigned char	es_bits2[3];
343
	unsigned char	es_ifd[4];
343
	unsigned char	es_ifd[4];
344
};
344
};
345
 
345
 
346
#define	EXT_BITS1_JMPTBL_BIG		0x80
346
#define	EXT_BITS1_JMPTBL_BIG		0x80
347
#define	EXT_BITS1_JMPTBL_LITTLE		0x01
347
#define	EXT_BITS1_JMPTBL_LITTLE		0x01
348
 
348
 
349
#define	EXT_BITS1_COBOL_MAIN_BIG	0x40
349
#define	EXT_BITS1_COBOL_MAIN_BIG	0x40
350
#define	EXT_BITS1_COBOL_MAIN_LITTLE	0x02
350
#define	EXT_BITS1_COBOL_MAIN_LITTLE	0x02
351
 
351
 
352
#define	EXT_BITS1_WEAKEXT_BIG		0x20
352
#define	EXT_BITS1_WEAKEXT_BIG		0x20
353
#define	EXT_BITS1_WEAKEXT_LITTLE	0x04
353
#define	EXT_BITS1_WEAKEXT_LITTLE	0x04
354
 
354
 
355
/* Dense numbers external record */
355
/* Dense numbers external record */
356
 
356
 
357
struct dnr_ext {
357
struct dnr_ext {
358
	unsigned char	d_rfd[4];
358
	unsigned char	d_rfd[4];
359
	unsigned char	d_index[4];
359
	unsigned char	d_index[4];
360
};
360
};
361
 
361
 
362
/* Relative file descriptor */
362
/* Relative file descriptor */
363
 
363
 
364
struct rfd_ext {
364
struct rfd_ext {
365
  unsigned char	rfd[4];
365
  unsigned char	rfd[4];
366
};
366
};
367
 
367
 
368
/* Optimizer symbol external record */
368
/* Optimizer symbol external record */
369
 
369
 
370
struct opt_ext {
370
struct opt_ext {
371
  unsigned char o_bits1[1];
371
  unsigned char o_bits1[1];
372
  unsigned char o_bits2[1];
372
  unsigned char o_bits2[1];
373
  unsigned char o_bits3[1];
373
  unsigned char o_bits3[1];
374
  unsigned char o_bits4[1];
374
  unsigned char o_bits4[1];
375
  struct rndx_ext o_rndx;
375
  struct rndx_ext o_rndx;
376
  unsigned char o_offset[4];
376
  unsigned char o_offset[4];
377
};
377
};
378
 
378
 
379
#define OPT_BITS2_VALUE_SH_LEFT_BIG	16
379
#define OPT_BITS2_VALUE_SH_LEFT_BIG	16
380
#define OPT_BITS2_VALUE_SH_LEFT_LITTLE	0
380
#define OPT_BITS2_VALUE_SH_LEFT_LITTLE	0
381
 
381
 
382
#define OPT_BITS3_VALUE_SH_LEFT_BIG	8
382
#define OPT_BITS3_VALUE_SH_LEFT_BIG	8
383
#define OPT_BITS3_VALUE_SH_LEFT_LITTLE	8
383
#define OPT_BITS3_VALUE_SH_LEFT_LITTLE	8
384
 
384
 
385
#define OPT_BITS4_VALUE_SH_LEFT_BIG	0
385
#define OPT_BITS4_VALUE_SH_LEFT_BIG	0
386
#define OPT_BITS4_VALUE_SH_LEFT_LITTLE	16
386
#define OPT_BITS4_VALUE_SH_LEFT_LITTLE	16