rs6000.h revision 1.1.1.6.2.1 1 1.1 skrll /* IBM RS/6000 "XCOFF" file definitions for BFD.
2 1.1.1.6.2.1 martin Copyright (C) 1990-2020 Free Software Foundation, Inc.
3 1.1 skrll Written by Mimi Phuong-Thao Vo of IBM
4 1.1.1.2 christos and John Gilmore of Cygnus Support.
5 1.1.1.2 christos
6 1.1.1.2 christos This program is free software; you can redistribute it and/or modify
7 1.1.1.2 christos it under the terms of the GNU General Public License as published by
8 1.1.1.2 christos the Free Software Foundation; either version 3 of the License, or
9 1.1.1.2 christos (at your option) any later version.
10 1.1.1.2 christos
11 1.1.1.2 christos This program is distributed in the hope that it will be useful,
12 1.1.1.2 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
13 1.1.1.2 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 1.1.1.2 christos GNU General Public License for more details.
15 1.1.1.2 christos
16 1.1.1.2 christos You should have received a copy of the GNU General Public License
17 1.1.1.2 christos along with this program; if not, write to the Free Software
18 1.1.1.2 christos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 1.1.1.2 christos MA 02110-1301, USA. */
20 1.1 skrll
21 1.1 skrll /********************** FILE HEADER **********************/
22 1.1 skrll
23 1.1 skrll struct external_filehdr {
24 1.1 skrll char f_magic[2]; /* magic number */
25 1.1 skrll char f_nscns[2]; /* number of sections */
26 1.1 skrll char f_timdat[4]; /* time & date stamp */
27 1.1 skrll char f_symptr[4]; /* file pointer to symtab */
28 1.1 skrll char f_nsyms[4]; /* number of symtab entries */
29 1.1 skrll char f_opthdr[2]; /* sizeof(optional hdr) */
30 1.1 skrll char f_flags[2]; /* flags */
31 1.1 skrll };
32 1.1 skrll
33 1.1 skrll /* IBM RS/6000 */
34 1.1 skrll #define U802WRMAGIC 0730 /* writeable text segments **chh** */
35 1.1 skrll #define U802ROMAGIC 0735 /* readonly sharable text segments */
36 1.1 skrll #define U802TOCMAGIC 0737 /* readonly text segments and TOC */
37 1.1 skrll
38 1.1 skrll #define BADMAG(x) \
39 1.1 skrll ((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
40 1.1 skrll (x).f_magic != U802TOCMAGIC)
41 1.1 skrll
42 1.1 skrll #define FILHDR struct external_filehdr
43 1.1 skrll #define FILHSZ 20
44 1.1 skrll
45 1.1 skrll
46 1.1 skrll /********************** AOUT "OPTIONAL HEADER" **********************/
47 1.1 skrll
48 1.1 skrll
49 1.1.1.4 christos typedef struct
50 1.1 skrll {
51 1.1 skrll unsigned char magic[2]; /* type of file */
52 1.1 skrll unsigned char vstamp[2]; /* version stamp */
53 1.1 skrll unsigned char tsize[4]; /* text size in bytes, padded to FW bdry */
54 1.1 skrll unsigned char dsize[4]; /* initialized data " " */
55 1.1 skrll unsigned char bsize[4]; /* uninitialized data " " */
56 1.1 skrll unsigned char entry[4]; /* entry pt. */
57 1.1 skrll unsigned char text_start[4]; /* base of text used for this file */
58 1.1 skrll unsigned char data_start[4]; /* base of data used for this file */
59 1.1 skrll unsigned char o_toc[4]; /* address of TOC */
60 1.1 skrll unsigned char o_snentry[2]; /* section number of entry point */
61 1.1 skrll unsigned char o_sntext[2]; /* section number of .text section */
62 1.1 skrll unsigned char o_sndata[2]; /* section number of .data section */
63 1.1 skrll unsigned char o_sntoc[2]; /* section number of TOC */
64 1.1 skrll unsigned char o_snloader[2]; /* section number of .loader section */
65 1.1 skrll unsigned char o_snbss[2]; /* section number of .bss section */
66 1.1 skrll unsigned char o_algntext[2]; /* .text alignment */
67 1.1 skrll unsigned char o_algndata[2]; /* .data alignment */
68 1.1 skrll unsigned char o_modtype[2]; /* module type (??) */
69 1.1 skrll unsigned char o_cputype[2]; /* cpu type */
70 1.1 skrll unsigned char o_maxstack[4]; /* max stack size (??) */
71 1.1 skrll unsigned char o_maxdata[4]; /* max data size (??) */
72 1.1 skrll unsigned char o_resv2[12]; /* reserved */
73 1.1 skrll }
74 1.1 skrll AOUTHDR;
75 1.1 skrll
76 1.1 skrll #define AOUTSZ 72
77 1.1 skrll #define SMALL_AOUTSZ (28)
78 1.1 skrll #define AOUTHDRSZ 72
79 1.1 skrll
80 1.1 skrll /********************** SECTION HEADER **********************/
81 1.1 skrll
82 1.1 skrll
83 1.1 skrll struct external_scnhdr {
84 1.1 skrll char s_name[8]; /* section name */
85 1.1 skrll char s_paddr[4]; /* physical address, aliased s_nlib */
86 1.1 skrll char s_vaddr[4]; /* virtual address */
87 1.1 skrll char s_size[4]; /* section size */
88 1.1 skrll char s_scnptr[4]; /* file ptr to raw data for section */
89 1.1 skrll char s_relptr[4]; /* file ptr to relocation */
90 1.1 skrll char s_lnnoptr[4]; /* file ptr to line numbers */
91 1.1 skrll char s_nreloc[2]; /* number of relocation entries */
92 1.1 skrll char s_nlnno[2]; /* number of line number entries*/
93 1.1 skrll char s_flags[4]; /* flags */
94 1.1 skrll };
95 1.1 skrll
96 1.1 skrll #define SCNHDR struct external_scnhdr
97 1.1 skrll #define SCNHSZ 40
98 1.1 skrll
99 1.1 skrll /********************** LINE NUMBERS **********************/
100 1.1 skrll
101 1.1 skrll /* 1 line number entry for every "breakpointable" source line in a section.
102 1.1 skrll * Line numbers are grouped on a per function basis; first entry in a function
103 1.1 skrll * grouping will have l_lnno = 0 and in place of physical address will be the
104 1.1 skrll * symbol table index of the function name.
105 1.1 skrll */
106 1.1 skrll struct external_lineno {
107 1.1 skrll union {
108 1.1 skrll char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
109 1.1 skrll char l_paddr[4]; /* (physical) address of line number */
110 1.1 skrll } l_addr;
111 1.1 skrll char l_lnno[2]; /* line number */
112 1.1 skrll };
113 1.1 skrll
114 1.1 skrll
115 1.1 skrll #define LINENO struct external_lineno
116 1.1 skrll #define LINESZ 6
117 1.1 skrll
118 1.1 skrll
119 1.1 skrll /********************** SYMBOLS **********************/
120 1.1 skrll
121 1.1 skrll #define E_SYMNMLEN 8 /* # characters in a symbol name */
122 1.1 skrll #define E_FILNMLEN 14 /* # characters in a file name */
123 1.1 skrll #define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
124 1.1 skrll
125 1.1 skrll struct external_syment
126 1.1 skrll {
127 1.1 skrll union {
128 1.1 skrll char e_name[E_SYMNMLEN];
129 1.1 skrll struct {
130 1.1 skrll char e_zeroes[4];
131 1.1 skrll char e_offset[4];
132 1.1 skrll } e;
133 1.1 skrll } e;
134 1.1 skrll char e_value[4];
135 1.1 skrll char e_scnum[2];
136 1.1 skrll char e_type[2];
137 1.1 skrll char e_sclass[1];
138 1.1 skrll char e_numaux[1];
139 1.1 skrll };
140 1.1 skrll
141 1.1 skrll
142 1.1 skrll
143 1.1 skrll #define N_BTMASK (017)
144 1.1 skrll #define N_TMASK (060)
145 1.1 skrll #define N_BTSHFT (4)
146 1.1 skrll #define N_TSHIFT (2)
147 1.1 skrll
148 1.1 skrll
149 1.1 skrll union external_auxent {
150 1.1 skrll struct {
151 1.1 skrll char x_tagndx[4]; /* str, un, or enum tag indx */
152 1.1 skrll union {
153 1.1 skrll struct {
154 1.1 skrll char x_lnno[2]; /* declaration line number */
155 1.1 skrll char x_size[2]; /* str/union/array size */
156 1.1 skrll } x_lnsz;
157 1.1 skrll char x_fsize[4]; /* size of function */
158 1.1 skrll } x_misc;
159 1.1 skrll union {
160 1.1 skrll struct { /* if ISFCN, tag, or .bb */
161 1.1 skrll char x_lnnoptr[4]; /* ptr to fcn line # */
162 1.1 skrll char x_endndx[4]; /* entry ndx past block end */
163 1.1 skrll } x_fcn;
164 1.1 skrll struct { /* if ISARY, up to 4 dimen. */
165 1.1 skrll char x_dimen[E_DIMNUM][2];
166 1.1 skrll } x_ary;
167 1.1 skrll } x_fcnary;
168 1.1 skrll char x_tvndx[2]; /* tv index */
169 1.1 skrll } x_sym;
170 1.1 skrll
171 1.1.1.3 christos struct {
172 1.1.1.3 christos union {
173 1.1.1.3 christos char x_fname[E_FILNMLEN];
174 1.1.1.3 christos struct {
175 1.1.1.3 christos char x_zeroes[4];
176 1.1.1.3 christos char x_offset[4];
177 1.1.1.3 christos } x_n;
178 1.1.1.3 christos } x_n;
179 1.1.1.3 christos char x_ftype[1];
180 1.1.1.3 christos } x_file;
181 1.1 skrll
182 1.1 skrll struct {
183 1.1 skrll char x_scnlen[4]; /* section length */
184 1.1 skrll char x_nreloc[2]; /* # relocation entries */
185 1.1 skrll char x_nlinno[2]; /* # line numbers */
186 1.1 skrll } x_scn;
187 1.1 skrll
188 1.1 skrll struct {
189 1.1 skrll char x_tvfill[4]; /* tv fill value */
190 1.1 skrll char x_tvlen[2]; /* length of .tv */
191 1.1 skrll char x_tvran[2][2]; /* tv range */
192 1.1 skrll } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
193 1.1 skrll
194 1.1 skrll struct {
195 1.1 skrll unsigned char x_scnlen[4];
196 1.1 skrll unsigned char x_parmhash[4];
197 1.1 skrll unsigned char x_snhash[2];
198 1.1 skrll unsigned char x_smtyp[1];
199 1.1 skrll unsigned char x_smclas[1];
200 1.1 skrll unsigned char x_stab[4];
201 1.1 skrll unsigned char x_snstab[2];
202 1.1 skrll } x_csect;
203 1.1 skrll
204 1.1 skrll };
205 1.1 skrll
206 1.1 skrll #define SYMENT struct external_syment
207 1.1.1.4 christos #define SYMESZ 18
208 1.1 skrll #define AUXENT union external_auxent
209 1.1 skrll #define AUXESZ 18
210 1.1 skrll #define DBXMASK 0x80 /* for dbx storage mask */
211 1.1 skrll #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
212 1.1 skrll
213 1.1 skrll
214 1.1 skrll
215 1.1 skrll /********************** RELOCATION DIRECTIVES **********************/
216 1.1 skrll
217 1.1 skrll
218 1.1 skrll struct external_reloc {
219 1.1 skrll char r_vaddr[4];
220 1.1 skrll char r_symndx[4];
221 1.1 skrll char r_size[1];
222 1.1 skrll char r_type[1];
223 1.1 skrll };
224 1.1 skrll
225 1.1 skrll
226 1.1 skrll #define RELOC struct external_reloc
227 1.1 skrll #define RELSZ 10
228 1.1 skrll
229 1.1 skrll #define DEFAULT_DATA_SECTION_ALIGNMENT 4
230 1.1 skrll #define DEFAULT_BSS_SECTION_ALIGNMENT 4
231 1.1 skrll #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
232 1.1 skrll /* For new sections we havn't heard of before */
233 1.1 skrll #define DEFAULT_SECTION_ALIGNMENT 4
234 1.1 skrll
235 1.1 skrll /* The ldhdr structure. This appears at the start of the .loader
236 1.1 skrll section. */
237 1.1 skrll
238 1.1 skrll struct external_ldhdr
239 1.1 skrll {
240 1.1 skrll bfd_byte l_version[4];
241 1.1 skrll bfd_byte l_nsyms[4];
242 1.1 skrll bfd_byte l_nreloc[4];
243 1.1 skrll bfd_byte l_istlen[4];
244 1.1 skrll bfd_byte l_nimpid[4];
245 1.1 skrll bfd_byte l_impoff[4];
246 1.1 skrll bfd_byte l_stlen[4];
247 1.1 skrll bfd_byte l_stoff[4];
248 1.1 skrll };
249 1.1 skrll
250 1.1 skrll #define LDHDRSZ (8 * 4)
251 1.1 skrll
252 1.1 skrll struct external_ldsym
253 1.1 skrll {
254 1.1 skrll union
255 1.1 skrll {
256 1.1.1.3 christos bfd_byte _l_name[E_SYMNMLEN];
257 1.1 skrll struct
258 1.1 skrll {
259 1.1 skrll bfd_byte _l_zeroes[4];
260 1.1 skrll bfd_byte _l_offset[4];
261 1.1 skrll } _l_l;
262 1.1 skrll } _l;
263 1.1 skrll bfd_byte l_value[4];
264 1.1 skrll bfd_byte l_scnum[2];
265 1.1 skrll bfd_byte l_smtype[1];
266 1.1 skrll bfd_byte l_smclas[1];
267 1.1 skrll bfd_byte l_ifile[4];
268 1.1 skrll bfd_byte l_parm[4];
269 1.1 skrll };
270 1.1 skrll
271 1.1 skrll #define LDSYMSZ (8 + 3 * 4 + 2 + 2)
272 1.1 skrll
273 1.1 skrll struct external_ldrel
274 1.1 skrll {
275 1.1 skrll bfd_byte l_vaddr[4];
276 1.1 skrll bfd_byte l_symndx[4];
277 1.1 skrll bfd_byte l_rtype[2];
278 1.1 skrll bfd_byte l_rsecnm[2];
279 1.1 skrll };
280 1.1 skrll
281 1.1 skrll #define LDRELSZ (2 * 4 + 2 * 2)
282 1.1.1.3 christos
283 1.1.1.3 christos struct external_exceptab
284 1.1.1.3 christos {
285 1.1.1.3 christos union {
286 1.1.1.3 christos bfd_byte e_symndx[4];
287 1.1.1.3 christos bfd_byte e_paddr[4];
288 1.1.1.3 christos } e_addr;
289 1.1.1.3 christos bfd_byte e_lang[1];
290 1.1.1.3 christos bfd_byte e_reason[1];
291 1.1.1.3 christos };
292 1.1.1.3 christos
293 1.1.1.3 christos #define EXCEPTSZ (4 + 2)
294 1.1.1.4 christos
295 1.1.1.4 christos /******************** Core files *************************/
296 1.1.1.4 christos
297 1.1.1.4 christos struct external_core_dumpx
298 1.1.1.4 christos {
299 1.1.1.4 christos unsigned char c_signo[1];
300 1.1.1.4 christos unsigned char c_flag[1];
301 1.1.1.4 christos unsigned char c_entries[2];
302 1.1.1.4 christos
303 1.1.1.4 christos unsigned char c_version[4];
304 1.1.1.4 christos
305 1.1.1.4 christos unsigned char c_fdsinfox[8];
306 1.1.1.4 christos unsigned char c_loader[8];
307 1.1.1.4 christos unsigned char c_lsize[8];
308 1.1.1.4 christos
309 1.1.1.4 christos unsigned char c_n_thr[4];
310 1.1.1.4 christos unsigned char c_reserved0[4];
311 1.1.1.4 christos unsigned char c_thr[8];
312 1.1.1.4 christos
313 1.1.1.4 christos unsigned char c_segs[8];
314 1.1.1.4 christos unsigned char c_segregion[8];
315 1.1.1.4 christos
316 1.1.1.4 christos unsigned char c_stack[8];
317 1.1.1.4 christos unsigned char c_stackorg[8];
318 1.1.1.4 christos unsigned char c_size[8];
319 1.1.1.4 christos
320 1.1.1.4 christos unsigned char c_data[8];
321 1.1.1.4 christos unsigned char c_dataorg[8];
322 1.1.1.4 christos unsigned char c_datasize[8];
323 1.1.1.4 christos unsigned char c_sdorg[8];
324 1.1.1.4 christos unsigned char c_sdsize[8];
325 1.1.1.4 christos
326 1.1.1.4 christos unsigned char c_vmmregions[8];
327 1.1.1.4 christos unsigned char c_vmm[8];
328 1.1.1.4 christos
329 1.1.1.4 christos unsigned char c_impl[4];
330 1.1.1.4 christos unsigned char c_pad[4];
331 1.1.1.4 christos unsigned char c_cprs[8];
332 1.1.1.4 christos unsigned char c_reserved[7 * 8];
333 1.1.1.4 christos
334 1.1.1.4 christos /* Followed by:
335 1.1.1.4 christos - context of the faulting thread.
336 1.1.1.4 christos - user structure. */
337 1.1.1.4 christos };
338 1.1.1.4 christos
339 1.1.1.4 christos
340 1.1.1.4 christos /* Core file verion. */
341 1.1.1.4 christos #define CORE_DUMPX_VERSION 0x0feeddb1
342 1.1.1.4 christos #define CORE_DUMPXX_VERSION 0x0feeddb2
343 1.1.1.4 christos
344 1.1.1.4 christos struct external_ld_info32
345 1.1.1.4 christos {
346 1.1.1.4 christos unsigned char ldinfo_next[4];
347 1.1.1.4 christos unsigned char core_offset[4];
348 1.1.1.4 christos unsigned char ldinfo_textorg[4];
349 1.1.1.4 christos unsigned char ldinfo_textsize[4];
350 1.1.1.4 christos unsigned char ldinfo_dataorg[4];
351 1.1.1.4 christos unsigned char ldinfo_datasize[4];
352 1.1.1.4 christos unsigned char ldinfo_filename[2];
353 1.1.1.4 christos };
354