OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [branches/] [oc/] [gdb-5.0/] [include/] [coff/] [rs6000.h] - Blame information for rev 106

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 106 markom
/* 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
 
12
struct 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
 
38
typedef 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
}
63
AOUTHDR;
64
 
65
#define AOUTSZ 72
66
#define SMALL_AOUTSZ (28)
67
#define AOUTHDRSZ 72
68
 
69
#define RS6K_AOUTHDR_OMAGIC     0x0107  /* old: text & data writeable */
70
#define RS6K_AOUTHDR_NMAGIC     0x0108  /* new: text r/o, data r/w */
71
#define RS6K_AOUTHDR_ZMAGIC     0x010B  /* paged: text r/o, both page-aligned */
72
 
73
 
74
/********************** SECTION HEADER **********************/
75
 
76
 
77
struct external_scnhdr {
78
        char            s_name[8];      /* section name                 */
79
        char            s_paddr[4];     /* physical address, aliased s_nlib */
80
        char            s_vaddr[4];     /* virtual address              */
81
        char            s_size[4];      /* section size                 */
82
        char            s_scnptr[4];    /* file ptr to raw data for section */
83
        char            s_relptr[4];    /* file ptr to relocation       */
84
        char            s_lnnoptr[4];   /* file ptr to line numbers     */
85
        char            s_nreloc[2];    /* number of relocation entries */
86
        char            s_nlnno[2];     /* number of line number entries*/
87
        char            s_flags[4];     /* flags                        */
88
};
89
 
90
/*
91
 * names of "special" sections
92
 */
93
#define _TEXT   ".text"
94
#define _DATA   ".data"
95
#define _BSS    ".bss"
96
#define _PAD    ".pad"
97
#define _LOADER ".loader"
98
 
99
#define SCNHDR  struct external_scnhdr
100
#define SCNHSZ  40
101
 
102
/* XCOFF uses a special .loader section with type STYP_LOADER.  */
103
#define STYP_LOADER 0x1000
104
 
105
/* XCOFF uses a special .debug section with type STYP_DEBUG.  */
106
#define STYP_DEBUG 0x2000
107
 
108
/* XCOFF handles line number or relocation overflow by creating
109
   another section header with STYP_OVRFLO set.  */
110
#define STYP_OVRFLO 0x8000
111
 
112
/********************** LINE NUMBERS **********************/
113
 
114
/* 1 line number entry for every "breakpointable" source line in a section.
115
 * Line numbers are grouped on a per function basis; first entry in a function
116
 * grouping will have l_lnno = 0 and in place of physical address will be the
117
 * symbol table index of the function name.
118
 */
119
struct external_lineno {
120
        union {
121
                char l_symndx[4];       /* function name symbol index, iff l_lnno == 0*/
122
                char l_paddr[4];        /* (physical) address of line number    */
123
        } l_addr;
124
        char l_lnno[2]; /* line number          */
125
};
126
 
127
 
128
#define LINENO  struct external_lineno
129
#define LINESZ  6
130
 
131
 
132
/********************** SYMBOLS **********************/
133
 
134
#define E_SYMNMLEN      8       /* # characters in a symbol name        */
135
#define E_FILNMLEN      14      /* # characters in a file name          */
136
#define E_DIMNUM        4       /* # array dimensions in auxiliary entry */
137
 
138
struct external_syment
139
{
140
  union {
141
    char e_name[E_SYMNMLEN];
142
    struct {
143
      char e_zeroes[4];
144
      char e_offset[4];
145
    } e;
146
  } e;
147
  char e_value[4];
148
  char e_scnum[2];
149
  char e_type[2];
150
  char e_sclass[1];
151
  char e_numaux[1];
152
};
153
 
154
 
155
 
156
#define N_BTMASK        (017)
157
#define N_TMASK         (060)
158
#define N_BTSHFT        (4)
159
#define N_TSHIFT        (2)
160
 
161
 
162
union external_auxent {
163
        struct {
164
                char x_tagndx[4];       /* str, un, or enum tag indx */
165
                union {
166
                        struct {
167
                            char  x_lnno[2]; /* declaration line number */
168
                            char  x_size[2]; /* str/union/array size */
169
                        } x_lnsz;
170
                        char x_fsize[4];        /* size of function */
171
                } x_misc;
172
                union {
173
                        struct {                /* if ISFCN, tag, or .bb */
174
                            char x_lnnoptr[4];  /* ptr to fcn line # */
175
                            char x_endndx[4];   /* entry ndx past block end */
176
                        } x_fcn;
177
                        struct {                /* if ISARY, up to 4 dimen. */
178
                            char x_dimen[E_DIMNUM][2];
179
                        } x_ary;
180
                } x_fcnary;
181
                char x_tvndx[2];                /* tv index */
182
        } x_sym;
183
 
184
        union {
185
                char x_fname[E_FILNMLEN];
186
                struct {
187
                        char x_zeroes[4];
188
                        char x_offset[4];
189
                } x_n;
190
        } x_file;
191
 
192
        struct {
193
                char x_scnlen[4];                       /* section length */
194
                char x_nreloc[2];       /* # relocation entries */
195
                char x_nlinno[2];       /* # line numbers */
196
        } x_scn;
197
 
198
        struct {
199
                char x_tvfill[4];       /* tv fill value */
200
                char x_tvlen[2];        /* length of .tv */
201
                char x_tvran[2][2];     /* tv range */
202
        } x_tv;         /* info about .tv section (in auxent of symbol .tv)) */
203
 
204
        struct {
205
                unsigned char x_scnlen[4];
206
                unsigned char x_parmhash[4];
207
                unsigned char x_snhash[2];
208
                unsigned char x_smtyp[1];
209
                unsigned char x_smclas[1];
210
                unsigned char x_stab[4];
211
                unsigned char x_snstab[2];
212
        } x_csect;
213
 
214
};
215
 
216
#define SYMENT  struct external_syment
217
#define SYMESZ  18      
218
#define AUXENT  union external_auxent
219
#define AUXESZ  18
220
#define DBXMASK 0x80            /* for dbx storage mask */
221
#define SYMNAME_IN_DEBUG(symptr) ((symptr)->n_sclass & DBXMASK)
222
 
223
 
224
 
225
/********************** RELOCATION DIRECTIVES **********************/
226
 
227
 
228
struct external_reloc {
229
  char r_vaddr[4];
230
  char r_symndx[4];
231
  char r_size[1];
232
  char r_type[1];
233
};
234
 
235
 
236
#define RELOC struct external_reloc
237
#define RELSZ 10
238
 
239
#define DEFAULT_DATA_SECTION_ALIGNMENT 4
240
#define DEFAULT_BSS_SECTION_ALIGNMENT 4
241
#define DEFAULT_TEXT_SECTION_ALIGNMENT 4
242
/* For new sections we havn't heard of before */
243
#define DEFAULT_SECTION_ALIGNMENT 4

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.