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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [include/] [coff/] [external.h] - Blame information for rev 854

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

Line No. Rev Author Line
1 205 julius
/* external.h  -- External COFF structures
2
 
3
   Copyright 2001, 2006 Free Software Foundation, Inc.
4
 
5
   This program is free software; you can redistribute it and/or modify
6
   it under the terms of the GNU General Public License as published by
7
   the Free Software Foundation; either version 2 of the License, or
8
   (at your option) any later version.
9
 
10
   This program is distributed in the hope that it will be useful,
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
   GNU General Public License for more details.
14
 
15
   You should have received a copy of the GNU General Public License
16
   along with this program; if not, write to the Free Software
17
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
18
 
19
#ifndef COFF_EXTERNAL_H
20
#define COFF_EXTERNAL_H
21
 
22
#ifndef DO_NOT_DEFINE_FILHDR
23
/********************** FILE HEADER **********************/
24
 
25
struct external_filehdr
26
  {
27
    char f_magic[2];    /* magic number                 */
28
    char f_nscns[2];    /* number of sections           */
29
    char f_timdat[4];   /* time & date stamp            */
30
    char f_symptr[4];   /* file pointer to symtab       */
31
    char f_nsyms[4];    /* number of symtab entries     */
32
    char f_opthdr[2];   /* sizeof(optional hdr)         */
33
    char f_flags[2];    /* flags                        */
34
  };
35
 
36
#define FILHDR  struct external_filehdr
37
#define FILHSZ  20
38
#endif
39
 
40
#ifndef DO_NOT_DEFINE_AOUTHDR
41
/********************** AOUT "OPTIONAL HEADER" **********************/
42
 
43
typedef struct external_aouthdr
44
  {
45
    char magic[2];      /* type of file                         */
46
    char vstamp[2];     /* version stamp                        */
47
    char tsize[4];      /* text size in bytes, padded to FW bdry*/
48
    char dsize[4];      /* initialized data "  "                */
49
    char bsize[4];      /* uninitialized data "   "             */
50
    char entry[4];      /* entry pt.                            */
51
    char text_start[4]; /* base of text used for this file      */
52
    char data_start[4]; /* base of data used for this file      */
53
  } ATTRIBUTE_PACKED
54
AOUTHDR;
55
 
56
#define AOUTHDRSZ 28
57
#define AOUTSZ 28
58
 
59
typedef struct external_aouthdr64
60
{
61
  char magic[2];        /* Type of file.                        */
62
  char vstamp[2];       /* Version stamp.                       */
63
  char tsize[4];        /* Text size in bytes, padded to FW bdry*/
64
  char dsize[4];        /* Initialized data "  ".               */
65
  char bsize[4];        /* Uninitialized data "   ".            */
66
  char entry[4];        /* Entry pt.                            */
67
  char text_start[4];   /* Base of text used for this file.     */
68
}
69
AOUTHDR64;
70
#define AOUTHDRSZ64     24
71
 
72
#endif /* not DO_NOT_DEFINE_AOUTHDR */
73
 
74
#ifndef DO_NOT_DEFINE_SCNHDR
75
/********************** SECTION HEADER **********************/
76
 
77
struct external_scnhdr
78
  {
79
    char s_name[8];     /* section name                         */
80
    char s_paddr[4];    /* physical address, aliased s_nlib     */
81
    char s_vaddr[4];    /* virtual address                      */
82
    char s_size[4];     /* section size                         */
83
    char s_scnptr[4];   /* file ptr to raw data for section     */
84
    char s_relptr[4];   /* file ptr to relocation               */
85
    char s_lnnoptr[4];  /* file ptr to line numbers             */
86
    char s_nreloc[2];   /* number of relocation entries         */
87
    char s_nlnno[2];    /* number of line number entries        */
88
    char s_flags[4];    /* flags                                */
89
  };
90
 
91
#define SCNHDR  struct external_scnhdr
92
#define SCNHSZ  40
93
 
94
/* Names of "special" sections.  */
95
 
96
#define _TEXT    ".text"
97
#define _DATA    ".data"
98
#define _BSS     ".bss"
99
#define _COMMENT ".comment"
100
#define _LIB     ".lib"
101
#endif /* not DO_NOT_DEFINE_SCNHDR */
102
 
103
#ifndef DO_NOT_DEFINE_LINENO
104
 
105
/********************** LINE NUMBERS **********************/
106
 
107
#ifndef L_LNNO_SIZE
108
#error  L_LNNO_SIZE needs to be defined
109
#endif
110
 
111
/* 1 line number entry for every "breakpointable" source line in a section.
112
   Line numbers are grouped on a per function basis; first entry in a function
113
   grouping will have l_lnno = 0 and in place of physical address will be the
114
   symbol table index of the function name.  */
115
struct external_lineno
116
{
117
  union
118
  {
119
    char l_symndx[4];   /* function name symbol index, iff l_lnno == 0*/
120
    char l_paddr[4];    /* (physical) address of line number    */
121
  } l_addr;
122
 
123
  char l_lnno[L_LNNO_SIZE];     /* line number          */
124
};
125
 
126
#define LINENO  struct external_lineno
127
#define LINESZ  (4 + L_LNNO_SIZE)
128
 
129
#if L_LNNO_SIZE == 4
130
#define GET_LINENO_LNNO(abfd, ext)      H_GET_32 (abfd,      (ext->l_lnno))
131
#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_32 (abfd, val, (ext->l_lnno))
132
#endif
133
#if L_LNNO_SIZE == 2
134
#define GET_LINENO_LNNO(abfd, ext)      H_GET_16 (abfd,      (ext->l_lnno))
135
#define PUT_LINENO_LNNO(abfd, val, ext) H_PUT_16 (abfd, val, (ext->l_lnno))
136
#endif
137
 
138
#endif /* not DO_NOT_DEFINE_LINENO */
139
 
140
#ifndef DO_NOT_DEFINE_SYMENT
141
/********************** SYMBOLS **********************/
142
 
143
#define E_SYMNMLEN      8       /* # characters in a symbol name        */
144
#ifndef E_FILNMLEN
145
#define E_FILNMLEN      14
146
#endif
147
#define E_DIMNUM        4       /* # array dimensions in auxiliary entry */
148
 
149
struct external_syment
150
{
151
  union
152
  {
153
    char e_name[E_SYMNMLEN];
154
 
155
    struct
156
    {
157
      char e_zeroes[4];
158
      char e_offset[4];
159
    } e;
160
  } e;
161
 
162
  char e_value[4];
163
  char e_scnum[2];
164
  char e_type[2];
165
  char e_sclass[1];
166
  char e_numaux[1];
167
} ATTRIBUTE_PACKED ;
168
 
169
#define SYMENT  struct external_syment
170
#define SYMESZ  18      
171
 
172
#ifndef N_BTMASK
173
#define N_BTMASK        0xf
174
#endif
175
 
176
#ifndef N_TMASK
177
#define N_TMASK         0x30
178
#endif
179
 
180
#ifndef N_BTSHFT
181
#define N_BTSHFT        4
182
#endif
183
 
184
#ifndef N_TSHIFT
185
#define N_TSHIFT        2
186
#endif
187
 
188
#endif /* not DO_NOT_DEFINE_SYMENT */
189
 
190
#ifndef DO_NOT_DEFINE_AUXENT
191
 
192
union external_auxent
193
{
194
  struct
195
  {
196
    char x_tagndx[4];           /* str, un, or enum tag indx */
197
 
198
    union
199
    {
200
      struct
201
      {
202
        char  x_lnno[2]; /* declaration line number */
203
        char  x_size[2]; /* str/union/array size */
204
      } x_lnsz;
205
 
206
      char x_fsize[4];  /* size of function */
207
 
208
    } x_misc;
209
 
210
    union
211
    {
212
      struct            /* if ISFCN, tag, or .bb */
213
      {
214
        char x_lnnoptr[4];      /* ptr to fcn line # */
215
        char x_endndx[4];       /* entry ndx past block end */
216
      } x_fcn;
217
 
218
      struct            /* if ISARY, up to 4 dimen. */
219
      {
220
        char x_dimen[E_DIMNUM][2];
221
      } x_ary;
222
 
223
    } x_fcnary;
224
 
225
    char x_tvndx[2];    /* tv index */
226
 
227
  } x_sym;
228
 
229
  union
230
  {
231
    char x_fname[E_FILNMLEN];
232
 
233
    struct
234
    {
235
      char x_zeroes[4];
236
      char x_offset[4];
237
    } x_n;
238
 
239
  } x_file;
240
 
241
  struct
242
  {
243
    char x_scnlen[4];   /* section length */
244
    char x_nreloc[2];   /* # relocation entries */
245
    char x_nlinno[2];   /* # line numbers */
246
#ifdef INCLUDE_COMDAT_FIELDS_IN_AUXENT
247
    char x_checksum[4];            /* section COMDAT checksum         */
248
    char x_associated[2];          /* COMDAT associated section index */
249
    char x_comdat[1];              /* COMDAT selection number         */
250
#endif    
251
  } x_scn;
252
 
253
  struct
254
  {
255
    char x_tvfill[4];   /* tv fill value */
256
    char x_tvlen[2];    /* length of .tv */
257
    char x_tvran[2][2]; /* tv range */
258
  } x_tv;               /* info about .tv section (in auxent of symbol .tv)) */
259
} ATTRIBUTE_PACKED ;
260
 
261
#define AUXENT  union external_auxent
262
#define AUXESZ  18
263
 
264
#define _ETEXT  "etext"
265
 
266
#endif /* not DO_NOT_DEFINE_AUXENT */
267
 
268
#endif /* COFF_EXTERNAL_H */

powered by: WebSVN 2.1.0

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