rs6000.h revision 1.1.1.8 1 1.1 skrll /* IBM RS/6000 "XCOFF" file definitions for BFD.
2 1.1.1.8 christos Copyright (C) 1990-2022 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.1.8 christos unsigned char magic[2]; /* type of file */
52 1.1.1.8 christos unsigned char vstamp[2]; /* version stamp */
53 1.1.1.8 christos unsigned char tsize[4]; /* text size in bytes, padded to FW bdry */
54 1.1.1.8 christos unsigned char dsize[4]; /* initialized data " " */
55 1.1.1.8 christos unsigned char bsize[4]; /* uninitialized data " " */
56 1.1.1.8 christos unsigned char entry[4]; /* entry pt. */
57 1.1.1.8 christos unsigned char text_start[4]; /* base of text used for this file */
58 1.1.1.8 christos unsigned char data_start[4]; /* base of data used for this file */
59 1.1.1.8 christos unsigned char o_toc[4]; /* address of TOC */
60 1.1.1.8 christos unsigned char o_snentry[2]; /* section number of entry point */
61 1.1.1.8 christos unsigned char o_sntext[2]; /* section number of .text section */
62 1.1.1.8 christos unsigned char o_sndata[2]; /* section number of .data section */
63 1.1.1.8 christos unsigned char o_sntoc[2]; /* section number of TOC */
64 1.1.1.8 christos unsigned char o_snloader[2]; /* section number of .loader section */
65 1.1.1.8 christos unsigned char o_snbss[2]; /* section number of .bss section */
66 1.1.1.8 christos unsigned char o_algntext[2]; /* .text alignment */
67 1.1.1.8 christos unsigned char o_algndata[2]; /* .data alignment */
68 1.1.1.8 christos unsigned char o_modtype[2]; /* module type (??) */
69 1.1.1.8 christos unsigned char o_cputype[2]; /* cpu type */
70 1.1.1.8 christos unsigned char o_maxstack[4]; /* max stack size (??) */
71 1.1.1.8 christos unsigned char o_maxdata[4]; /* max data size (??) */
72 1.1.1.8 christos unsigned char o_debugger[4]; /* reserved */
73 1.1.1.8 christos unsigned char o_textpsize[1]; /* text page size */
74 1.1.1.8 christos unsigned char o_datapsize[1]; /* data page size */
75 1.1.1.8 christos unsigned char o_stackpsize[1]; /* stack page size */
76 1.1.1.8 christos unsigned char o_flags[1]; /* Flags and TLS alignment */
77 1.1.1.8 christos unsigned char o_sntdata[2]; /* section number of .tdata section */
78 1.1.1.8 christos unsigned char o_sntbss[2]; /* section number of .tbss section */
79 1.1 skrll }
80 1.1 skrll AOUTHDR;
81 1.1 skrll
82 1.1 skrll #define AOUTSZ 72
83 1.1 skrll #define SMALL_AOUTSZ (28)
84 1.1 skrll #define AOUTHDRSZ 72
85 1.1 skrll
86 1.1 skrll /********************** SECTION HEADER **********************/
87 1.1 skrll
88 1.1 skrll
89 1.1 skrll struct external_scnhdr {
90 1.1 skrll char s_name[8]; /* section name */
91 1.1 skrll char s_paddr[4]; /* physical address, aliased s_nlib */
92 1.1 skrll char s_vaddr[4]; /* virtual address */
93 1.1 skrll char s_size[4]; /* section size */
94 1.1 skrll char s_scnptr[4]; /* file ptr to raw data for section */
95 1.1 skrll char s_relptr[4]; /* file ptr to relocation */
96 1.1 skrll char s_lnnoptr[4]; /* file ptr to line numbers */
97 1.1 skrll char s_nreloc[2]; /* number of relocation entries */
98 1.1 skrll char s_nlnno[2]; /* number of line number entries*/
99 1.1 skrll char s_flags[4]; /* flags */
100 1.1 skrll };
101 1.1 skrll
102 1.1 skrll #define SCNHDR struct external_scnhdr
103 1.1 skrll #define SCNHSZ 40
104 1.1 skrll
105 1.1 skrll /********************** LINE NUMBERS **********************/
106 1.1 skrll
107 1.1 skrll /* 1 line number entry for every "breakpointable" source line in a section.
108 1.1 skrll * Line numbers are grouped on a per function basis; first entry in a function
109 1.1 skrll * grouping will have l_lnno = 0 and in place of physical address will be the
110 1.1 skrll * symbol table index of the function name.
111 1.1 skrll */
112 1.1 skrll struct external_lineno {
113 1.1 skrll union {
114 1.1 skrll char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
115 1.1 skrll char l_paddr[4]; /* (physical) address of line number */
116 1.1 skrll } l_addr;
117 1.1 skrll char l_lnno[2]; /* line number */
118 1.1 skrll };
119 1.1 skrll
120 1.1 skrll
121 1.1 skrll #define LINENO struct external_lineno
122 1.1 skrll #define LINESZ 6
123 1.1 skrll
124 1.1 skrll
125 1.1 skrll /********************** SYMBOLS **********************/
126 1.1 skrll
127 1.1 skrll #define E_SYMNMLEN 8 /* # characters in a symbol name */
128 1.1 skrll #define E_FILNMLEN 14 /* # characters in a file name */
129 1.1 skrll #define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
130 1.1 skrll
131 1.1 skrll struct external_syment
132 1.1 skrll {
133 1.1 skrll union {
134 1.1 skrll char e_name[E_SYMNMLEN];
135 1.1 skrll struct {
136 1.1 skrll char e_zeroes[4];
137 1.1 skrll char e_offset[4];
138 1.1 skrll } e;
139 1.1 skrll } e;
140 1.1 skrll char e_value[4];
141 1.1 skrll char e_scnum[2];
142 1.1 skrll char e_type[2];
143 1.1 skrll char e_sclass[1];
144 1.1 skrll char e_numaux[1];
145 1.1 skrll };
146 1.1 skrll
147 1.1 skrll
148 1.1 skrll
149 1.1 skrll #define N_BTMASK (017)
150 1.1 skrll #define N_TMASK (060)
151 1.1 skrll #define N_BTSHFT (4)
152 1.1 skrll #define N_TSHIFT (2)
153 1.1 skrll
154 1.1 skrll
155 1.1 skrll union external_auxent {
156 1.1.1.8 christos struct {
157 1.1.1.8 christos char x_pad1[2];
158 1.1.1.8 christos char x_lnno[4]; /* Source line number */
159 1.1.1.8 christos char x_pad[12];
160 1.1.1.8 christos } x_sym;
161 1.1.1.8 christos
162 1.1.1.8 christos struct {
163 1.1.1.8 christos char x_exptr[4];
164 1.1.1.8 christos char x_fsize[4];
165 1.1.1.8 christos char x_lnnoptr[4];
166 1.1.1.8 christos char x_endndx[4];
167 1.1.1.8 christos char x_pad[1];
168 1.1.1.8 christos } x_fcn;
169 1.1.1.8 christos
170 1.1.1.8 christos struct {
171 1.1.1.8 christos union {
172 1.1.1.8 christos char x_fname[E_FILNMLEN];
173 1.1.1.8 christos struct {
174 1.1.1.8 christos char x_zeroes[4];
175 1.1.1.8 christos char x_offset[4];
176 1.1.1.8 christos } x_n;
177 1.1.1.8 christos } x_n;
178 1.1.1.8 christos char x_ftype[1];
179 1.1.1.8 christos char x_resv[3];
180 1.1.1.8 christos } x_file;
181 1.1.1.8 christos
182 1.1.1.8 christos struct {
183 1.1.1.8 christos char x_scnlen[4]; /* section length */
184 1.1.1.8 christos char x_nreloc[2]; /* # relocation entries */
185 1.1.1.8 christos char x_nlinno[2]; /* # line numbers */
186 1.1.1.8 christos char x_pad[10];
187 1.1.1.8 christos } x_scn;
188 1.1.1.8 christos
189 1.1.1.8 christos struct {
190 1.1.1.8 christos char x_scnlen[4];
191 1.1.1.8 christos char x_parmhash[4];
192 1.1.1.8 christos char x_snhash[2];
193 1.1.1.8 christos char x_smtyp[1];
194 1.1.1.8 christos char x_smclas[1];
195 1.1.1.8 christos char x_stab[4];
196 1.1.1.8 christos char x_snstab[2];
197 1.1.1.8 christos } x_csect;
198 1.1.1.8 christos
199 1.1.1.8 christos struct {
200 1.1.1.8 christos char x_scnlen[4];
201 1.1.1.8 christos char x_pad1[4];
202 1.1.1.8 christos char x_nreloc[4];
203 1.1.1.8 christos char x_pad2[6];
204 1.1.1.8 christos } x_sect;
205 1.1 skrll
206 1.1 skrll };
207 1.1 skrll
208 1.1 skrll #define SYMENT struct external_syment
209 1.1.1.4 christos #define SYMESZ 18
210 1.1 skrll #define AUXENT union external_auxent
211 1.1 skrll #define AUXESZ 18
212 1.1 skrll #define DBXMASK 0x80 /* for dbx storage mask */
213 1.1 skrll #define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
214 1.1 skrll
215 1.1 skrll
216 1.1 skrll
217 1.1 skrll /********************** RELOCATION DIRECTIVES **********************/
218 1.1 skrll
219 1.1 skrll
220 1.1 skrll struct external_reloc {
221 1.1 skrll char r_vaddr[4];
222 1.1 skrll char r_symndx[4];
223 1.1 skrll char r_size[1];
224 1.1 skrll char r_type[1];
225 1.1 skrll };
226 1.1 skrll
227 1.1 skrll
228 1.1 skrll #define RELOC struct external_reloc
229 1.1 skrll #define RELSZ 10
230 1.1 skrll
231 1.1 skrll #define DEFAULT_DATA_SECTION_ALIGNMENT 4
232 1.1 skrll #define DEFAULT_BSS_SECTION_ALIGNMENT 4
233 1.1 skrll #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
234 1.1 skrll /* For new sections we havn't heard of before */
235 1.1 skrll #define DEFAULT_SECTION_ALIGNMENT 4
236 1.1 skrll
237 1.1 skrll /* The ldhdr structure. This appears at the start of the .loader
238 1.1 skrll section. */
239 1.1 skrll
240 1.1 skrll struct external_ldhdr
241 1.1 skrll {
242 1.1 skrll bfd_byte l_version[4];
243 1.1 skrll bfd_byte l_nsyms[4];
244 1.1 skrll bfd_byte l_nreloc[4];
245 1.1 skrll bfd_byte l_istlen[4];
246 1.1 skrll bfd_byte l_nimpid[4];
247 1.1 skrll bfd_byte l_impoff[4];
248 1.1 skrll bfd_byte l_stlen[4];
249 1.1 skrll bfd_byte l_stoff[4];
250 1.1 skrll };
251 1.1 skrll
252 1.1 skrll #define LDHDRSZ (8 * 4)
253 1.1 skrll
254 1.1 skrll struct external_ldsym
255 1.1 skrll {
256 1.1 skrll union
257 1.1 skrll {
258 1.1.1.3 christos bfd_byte _l_name[E_SYMNMLEN];
259 1.1 skrll struct
260 1.1 skrll {
261 1.1 skrll bfd_byte _l_zeroes[4];
262 1.1 skrll bfd_byte _l_offset[4];
263 1.1 skrll } _l_l;
264 1.1 skrll } _l;
265 1.1 skrll bfd_byte l_value[4];
266 1.1 skrll bfd_byte l_scnum[2];
267 1.1 skrll bfd_byte l_smtype[1];
268 1.1 skrll bfd_byte l_smclas[1];
269 1.1 skrll bfd_byte l_ifile[4];
270 1.1 skrll bfd_byte l_parm[4];
271 1.1 skrll };
272 1.1 skrll
273 1.1 skrll #define LDSYMSZ (8 + 3 * 4 + 2 + 2)
274 1.1 skrll
275 1.1 skrll struct external_ldrel
276 1.1 skrll {
277 1.1 skrll bfd_byte l_vaddr[4];
278 1.1 skrll bfd_byte l_symndx[4];
279 1.1 skrll bfd_byte l_rtype[2];
280 1.1 skrll bfd_byte l_rsecnm[2];
281 1.1 skrll };
282 1.1 skrll
283 1.1 skrll #define LDRELSZ (2 * 4 + 2 * 2)
284 1.1.1.3 christos
285 1.1.1.3 christos struct external_exceptab
286 1.1.1.3 christos {
287 1.1.1.3 christos union {
288 1.1.1.3 christos bfd_byte e_symndx[4];
289 1.1.1.3 christos bfd_byte e_paddr[4];
290 1.1.1.3 christos } e_addr;
291 1.1.1.3 christos bfd_byte e_lang[1];
292 1.1.1.3 christos bfd_byte e_reason[1];
293 1.1.1.3 christos };
294 1.1.1.3 christos
295 1.1.1.3 christos #define EXCEPTSZ (4 + 2)
296 1.1.1.4 christos
297 1.1.1.4 christos /******************** Core files *************************/
298 1.1.1.4 christos
299 1.1.1.4 christos struct external_core_dumpx
300 1.1.1.4 christos {
301 1.1.1.4 christos unsigned char c_signo[1];
302 1.1.1.4 christos unsigned char c_flag[1];
303 1.1.1.4 christos unsigned char c_entries[2];
304 1.1.1.4 christos
305 1.1.1.4 christos unsigned char c_version[4];
306 1.1.1.4 christos
307 1.1.1.4 christos unsigned char c_fdsinfox[8];
308 1.1.1.4 christos unsigned char c_loader[8];
309 1.1.1.4 christos unsigned char c_lsize[8];
310 1.1.1.4 christos
311 1.1.1.4 christos unsigned char c_n_thr[4];
312 1.1.1.4 christos unsigned char c_reserved0[4];
313 1.1.1.4 christos unsigned char c_thr[8];
314 1.1.1.4 christos
315 1.1.1.4 christos unsigned char c_segs[8];
316 1.1.1.4 christos unsigned char c_segregion[8];
317 1.1.1.4 christos
318 1.1.1.4 christos unsigned char c_stack[8];
319 1.1.1.4 christos unsigned char c_stackorg[8];
320 1.1.1.4 christos unsigned char c_size[8];
321 1.1.1.4 christos
322 1.1.1.4 christos unsigned char c_data[8];
323 1.1.1.4 christos unsigned char c_dataorg[8];
324 1.1.1.4 christos unsigned char c_datasize[8];
325 1.1.1.4 christos unsigned char c_sdorg[8];
326 1.1.1.4 christos unsigned char c_sdsize[8];
327 1.1.1.4 christos
328 1.1.1.4 christos unsigned char c_vmmregions[8];
329 1.1.1.4 christos unsigned char c_vmm[8];
330 1.1.1.4 christos
331 1.1.1.4 christos unsigned char c_impl[4];
332 1.1.1.4 christos unsigned char c_pad[4];
333 1.1.1.4 christos unsigned char c_cprs[8];
334 1.1.1.4 christos unsigned char c_reserved[7 * 8];
335 1.1.1.4 christos
336 1.1.1.4 christos /* Followed by:
337 1.1.1.4 christos - context of the faulting thread.
338 1.1.1.4 christos - user structure. */
339 1.1.1.4 christos };
340 1.1.1.4 christos
341 1.1.1.4 christos
342 1.1.1.4 christos /* Core file verion. */
343 1.1.1.4 christos #define CORE_DUMPX_VERSION 0x0feeddb1
344 1.1.1.4 christos #define CORE_DUMPXX_VERSION 0x0feeddb2
345 1.1.1.4 christos
346 1.1.1.4 christos struct external_ld_info32
347 1.1.1.4 christos {
348 1.1.1.4 christos unsigned char ldinfo_next[4];
349 1.1.1.4 christos unsigned char core_offset[4];
350 1.1.1.4 christos unsigned char ldinfo_textorg[4];
351 1.1.1.4 christos unsigned char ldinfo_textsize[4];
352 1.1.1.4 christos unsigned char ldinfo_dataorg[4];
353 1.1.1.4 christos unsigned char ldinfo_datasize[4];
354 1.1.1.4 christos unsigned char ldinfo_filename[2];
355 1.1.1.4 christos };
356