source: trunk/binutils/include/coff/rs6000.h@ 2532

Last change on this file since 2532 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 7.1 KB
Line 
1/* IBM RS/6000 "XCOFF" file definitions for BFD.
2 Copyright (C) 1990, 1991 Free Software Foundation, Inc.
3 FIXME: Can someone provide a transliteration of this name into ASCII?
4 Using the following chars caused a compiler warning on HIUX (so I replaced
5 them with octal escapes), and isn't useful without an understanding of what
6 character set it is.
7 Written by Mimi Ph\373\364ng-Th\345o V\365 of IBM
8 and John Gilmore of Cygnus Support. */
9
10/********************** FILE HEADER **********************/
11
12struct external_filehdr {
13 char f_magic[2]; /* magic number */
14 char f_nscns[2]; /* number of sections */
15 char f_timdat[4]; /* time & date stamp */
16 char f_symptr[4]; /* file pointer to symtab */
17 char f_nsyms[4]; /* number of symtab entries */
18 char f_opthdr[2]; /* sizeof(optional hdr) */
19 char f_flags[2]; /* flags */
20};
21
22 /* IBM RS/6000 */
23#define U802WRMAGIC 0730 /* writeable text segments **chh** */
24#define U802ROMAGIC 0735 /* readonly sharable text segments */
25#define U802TOCMAGIC 0737 /* readonly text segments and TOC */
26
27#define BADMAG(x) \
28 ((x).f_magic != U802ROMAGIC && (x).f_magic != U802WRMAGIC && \
29 (x).f_magic != U802TOCMAGIC)
30
31#define FILHDR struct external_filehdr
32#define FILHSZ 20
33
34
35/********************** AOUT "OPTIONAL HEADER" **********************/
36
37
38typedef struct
39{
40 unsigned char magic[2]; /* type of file */
41 unsigned char vstamp[2]; /* version stamp */
42 unsigned char tsize[4]; /* text size in bytes, padded to FW bdry */
43 unsigned char dsize[4]; /* initialized data " " */
44 unsigned char bsize[4]; /* uninitialized data " " */
45 unsigned char entry[4]; /* entry pt. */
46 unsigned char text_start[4]; /* base of text used for this file */
47 unsigned char data_start[4]; /* base of data used for this file */
48 unsigned char o_toc[4]; /* address of TOC */
49 unsigned char o_snentry[2]; /* section number of entry point */
50 unsigned char o_sntext[2]; /* section number of .text section */
51 unsigned char o_sndata[2]; /* section number of .data section */
52 unsigned char o_sntoc[2]; /* section number of TOC */
53 unsigned char o_snloader[2]; /* section number of .loader section */
54 unsigned char o_snbss[2]; /* section number of .bss section */
55 unsigned char o_algntext[2]; /* .text alignment */
56 unsigned char o_algndata[2]; /* .data alignment */
57 unsigned char o_modtype[2]; /* module type (??) */
58 unsigned char o_cputype[2]; /* cpu type */
59 unsigned char o_maxstack[4]; /* max stack size (??) */
60 unsigned char o_maxdata[4]; /* max data size (??) */
61 unsigned char o_resv2[12]; /* reserved */
62}
63AOUTHDR;
64
65#define AOUTSZ 72
66#define SMALL_AOUTSZ (28)
67#define AOUTHDRSZ 72
68
69/********************** SECTION HEADER **********************/
70
71
72struct external_scnhdr {
73 char s_name[8]; /* section name */
74 char s_paddr[4]; /* physical address, aliased s_nlib */
75 char s_vaddr[4]; /* virtual address */
76 char s_size[4]; /* section size */
77 char s_scnptr[4]; /* file ptr to raw data for section */
78 char s_relptr[4]; /* file ptr to relocation */
79 char s_lnnoptr[4]; /* file ptr to line numbers */
80 char s_nreloc[2]; /* number of relocation entries */
81 char s_nlnno[2]; /* number of line number entries*/
82 char s_flags[4]; /* flags */
83};
84
85#define SCNHDR struct external_scnhdr
86#define SCNHSZ 40
87
88/********************** LINE NUMBERS **********************/
89
90/* 1 line number entry for every "breakpointable" source line in a section.
91 * Line numbers are grouped on a per function basis; first entry in a function
92 * grouping will have l_lnno = 0 and in place of physical address will be the
93 * symbol table index of the function name.
94 */
95struct external_lineno {
96 union {
97 char l_symndx[4]; /* function name symbol index, iff l_lnno == 0*/
98 char l_paddr[4]; /* (physical) address of line number */
99 } l_addr;
100 char l_lnno[2]; /* line number */
101};
102
103
104#define LINENO struct external_lineno
105#define LINESZ 6
106
107
108/********************** SYMBOLS **********************/
109
110#define E_SYMNMLEN 8 /* # characters in a symbol name */
111#define E_FILNMLEN 14 /* # characters in a file name */
112#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */
113
114struct external_syment
115{
116 union {
117 char e_name[E_SYMNMLEN];
118 struct {
119 char e_zeroes[4];
120 char e_offset[4];
121 } e;
122 } e;
123 char e_value[4];
124 char e_scnum[2];
125 char e_type[2];
126 char e_sclass[1];
127 char e_numaux[1];
128};
129
130
131
132#define N_BTMASK (017)
133#define N_TMASK (060)
134#define N_BTSHFT (4)
135#define N_TSHIFT (2)
136
137
138union external_auxent {
139 struct {
140 char x_tagndx[4]; /* str, un, or enum tag indx */
141 union {
142 struct {
143 char x_lnno[2]; /* declaration line number */
144 char x_size[2]; /* str/union/array size */
145 } x_lnsz;
146 char x_fsize[4]; /* size of function */
147 } x_misc;
148 union {
149 struct { /* if ISFCN, tag, or .bb */
150 char x_lnnoptr[4]; /* ptr to fcn line # */
151 char x_endndx[4]; /* entry ndx past block end */
152 } x_fcn;
153 struct { /* if ISARY, up to 4 dimen. */
154 char x_dimen[E_DIMNUM][2];
155 } x_ary;
156 } x_fcnary;
157 char x_tvndx[2]; /* tv index */
158 } x_sym;
159
160 union {
161 char x_fname[E_FILNMLEN];
162 struct {
163 char x_zeroes[4];
164 char x_offset[4];
165 } x_n;
166 } x_file;
167
168 struct {
169 char x_scnlen[4]; /* section length */
170 char x_nreloc[2]; /* # relocation entries */
171 char x_nlinno[2]; /* # line numbers */
172 } x_scn;
173
174 struct {
175 char x_tvfill[4]; /* tv fill value */
176 char x_tvlen[2]; /* length of .tv */
177 char x_tvran[2][2]; /* tv range */
178 } x_tv; /* info about .tv section (in auxent of symbol .tv)) */
179
180 struct {
181 unsigned char x_scnlen[4];
182 unsigned char x_parmhash[4];
183 unsigned char x_snhash[2];
184 unsigned char x_smtyp[1];
185 unsigned char x_smclas[1];
186 unsigned char x_stab[4];
187 unsigned char x_snstab[2];
188 } x_csect;
189
190};
191
192#define SYMENT struct external_syment
193#define SYMESZ 18
194#define AUXENT union external_auxent
195#define AUXESZ 18
196#define DBXMASK 0x80 /* for dbx storage mask */
197#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
198
199
200
201/********************** RELOCATION DIRECTIVES **********************/
202
203
204struct external_reloc {
205 char r_vaddr[4];
206 char r_symndx[4];
207 char r_size[1];
208 char r_type[1];
209};
210
211
212#define RELOC struct external_reloc
213#define RELSZ 10
214
215#define DEFAULT_DATA_SECTION_ALIGNMENT 4
216#define DEFAULT_BSS_SECTION_ALIGNMENT 4
217#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
218/* For new sections we havn't heard of before */
219#define DEFAULT_SECTION_ALIGNMENT 4
220
221/* The ldhdr structure. This appears at the start of the .loader
222 section. */
223
224struct external_ldhdr
225{
226 bfd_byte l_version[4];
227 bfd_byte l_nsyms[4];
228 bfd_byte l_nreloc[4];
229 bfd_byte l_istlen[4];
230 bfd_byte l_nimpid[4];
231 bfd_byte l_impoff[4];
232 bfd_byte l_stlen[4];
233 bfd_byte l_stoff[4];
234};
235
236#define LDHDRSZ (8 * 4)
237
238struct external_ldsym
239{
240 union
241 {
242 bfd_byte _l_name[SYMNMLEN];
243 struct
244 {
245 bfd_byte _l_zeroes[4];
246 bfd_byte _l_offset[4];
247 } _l_l;
248 } _l;
249 bfd_byte l_value[4];
250 bfd_byte l_scnum[2];
251 bfd_byte l_smtype[1];
252 bfd_byte l_smclas[1];
253 bfd_byte l_ifile[4];
254 bfd_byte l_parm[4];
255};
256
257#define LDSYMSZ (8 + 3 * 4 + 2 + 2)
258
259struct external_ldrel
260{
261 bfd_byte l_vaddr[4];
262 bfd_byte l_symndx[4];
263 bfd_byte l_rtype[2];
264 bfd_byte l_rsecnm[2];
265};
266
267#define LDRELSZ (2 * 4 + 2 * 2)
Note: See TracBrowser for help on using the repository browser.