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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [include/] [coff/] [external.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/* external.h  -- External COFF structures
2
 
3
   Copyright 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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
  }
54
AOUTHDR;
55
 
56
#define AOUTHDRSZ 28
57
#define AOUTSZ 28
58
#endif
59
 
60
#ifndef DO_NOT_DEFINE_SCNHDR
61
/********************** SECTION HEADER **********************/
62
 
63
struct external_scnhdr
64
  {
65
    char s_name[8];     /* section name                         */
66
    char s_paddr[4];    /* physical address, aliased s_nlib     */
67
    char s_vaddr[4];    /* virtual address                      */
68
    char s_size[4];     /* section size                         */
69
    char s_scnptr[4];   /* file ptr to raw data for section     */
70
    char s_relptr[4];   /* file ptr to relocation               */
71
    char s_lnnoptr[4];  /* file ptr to line numbers             */
72
    char s_nreloc[2];   /* number of relocation entries         */
73
    char s_nlnno[2];    /* number of line number entries        */
74
    char s_flags[4];    /* flags                                */
75
  };
76
 
77
#define SCNHDR  struct external_scnhdr
78
#define SCNHSZ  40
79
 
80
/* Names of "special" sections.  */
81
 
82
#define _TEXT    ".text"
83
#define _DATA    ".data"
84
#define _BSS     ".bss"
85
#define _COMMENT ".comment"
86
#define _LIB     ".lib"
87
#endif /* not DO_NOT_DEFINE_SCNHDR */
88
 
89
#ifndef DO_NOT_DEFINE_LINENO
90
 
91
/********************** LINE NUMBERS **********************/
92
 
93
#ifndef L_LNNO_SIZE
94
#error  L_LNNO_SIZE needs to be defined
95
#endif
96
 
97
/* 1 line number entry for every "breakpointable" source line in a section.
98
   Line numbers are grouped on a per function basis; first entry in a function
99
   grouping will have l_lnno = 0 and in place of physical address will be the
100
   symbol table index of the function name.  */
101
struct external_lineno
102
{
103
  union
104
  {
105
    char l_symndx[4];   /* function name symbol index, iff l_lnno == 0*/
106
    char l_paddr[4];    /* (physical) address of line number    */
107
  } l_addr;
108
 
109
  char l_lnno[L_LNNO_SIZE];     /* line number          */
110
};
111
 
112
#define LINENO  struct external_lineno
113
#define LINESZ  (4 + L_LNNO_SIZE)
114
 
115
#if L_LNNO_SIZE == 4
116
#define GET_LINENO_LNNO(abfd, ext)      bfd_h_get_32 (abfd,      (bfd_byte *) (ext->l_lnno));
117
#define PUT_LINENO_LNNO(abfd, val, ext) bfd_h_put_32 (abfd, val, (bfd_byte *) (ext->l_lnno));
118
#endif
119
#if L_LNNO_SIZE == 2
120
#define GET_LINENO_LNNO(abfd, ext)     bfd_h_get_16 (abfd, (bfd_byte *) (ext->l_lnno));
121
#define PUT_LINENO_LNNO(abfd,val, ext) bfd_h_put_16 (abfd,val,  (bfd_byte *) (ext->l_lnno));
122
#endif
123
 
124
#endif /* not DO_NOT_DEFINE_LINENO */
125
 
126
#ifndef DO_NOT_DEFINE_SYMENT
127
/********************** SYMBOLS **********************/
128
 
129
#define E_SYMNMLEN      8       /* # characters in a symbol name        */
130
#ifndef E_FILNMLEN
131
#define E_FILNMLEN      14
132
#endif
133
#define E_DIMNUM        4       /* # array dimensions in auxiliary entry */
134
 
135
struct external_syment
136
{
137
  union
138
  {
139
    char e_name[E_SYMNMLEN];
140
 
141
    struct
142
    {
143
      char e_zeroes[4];
144
      char e_offset[4];
145
    } e;
146
  } e;
147
 
148
  char e_value[4];
149
  char e_scnum[2];
150
  char e_type[2];
151
  char e_sclass[1];
152
  char e_numaux[1];
153
};
154
 
155
#define SYMENT  struct external_syment
156
#define SYMESZ  18      
157
 
158
#ifndef N_BTMASK
159
#define N_BTMASK        0xf
160
#endif
161
 
162
#ifndef N_TMASK
163
#define N_TMASK         0x30
164
#endif
165
 
166
#ifndef N_BTSHFT
167
#define N_BTSHFT        4
168
#endif
169
 
170
#ifndef N_TSHIFT
171
#define N_TSHIFT        2
172
#endif
173
 
174
#endif /* not DO_NOT_DEFINE_SYMENT */
175
 
176
#ifndef DO_NOT_DEFINE_AUXENT
177
 
178
union external_auxent
179
{
180
  struct
181
  {
182
    char x_tagndx[4];           /* str, un, or enum tag indx */
183
 
184
    union
185
    {
186
      struct
187
      {
188
        char  x_lnno[2]; /* declaration line number */
189
        char  x_size[2]; /* str/union/array size */
190
      } x_lnsz;
191
 
192
      char x_fsize[4];  /* size of function */
193
 
194
    } x_misc;
195
 
196
    union
197
    {
198
      struct            /* if ISFCN, tag, or .bb */
199
      {
200
        char x_lnnoptr[4];      /* ptr to fcn line # */
201
        char x_endndx[4];       /* entry ndx past block end */
202
      } x_fcn;
203
 
204
      struct            /* if ISARY, up to 4 dimen. */
205
      {
206
        char x_dimen[E_DIMNUM][2];
207
      } x_ary;
208
 
209
    } x_fcnary;
210
 
211
    char x_tvndx[2];    /* tv index */
212
 
213
  } x_sym;
214
 
215
  union
216
  {
217
    char x_fname[E_FILNMLEN];
218
 
219
    struct
220
    {
221
      char x_zeroes[4];
222
      char x_offset[4];
223
    } x_n;
224
 
225
  } x_file;
226
 
227
  struct
228
  {
229
    char x_scnlen[4];   /* section length */
230
    char x_nreloc[2];   /* # relocation entries */
231
    char x_nlinno[2];   /* # line numbers */
232
#ifdef INCLUDE_COMDAT_FIELDS_IN_AUXENT
233
    char x_checksum[4];            /* section COMDAT checksum         */
234
    char x_associated[2];          /* COMDAT associated section index */
235
    char x_comdat[1];              /* COMDAT selection number         */
236
#endif    
237
  } x_scn;
238
 
239
  struct
240
  {
241
    char x_tvfill[4];   /* tv fill value */
242
    char x_tvlen[2];    /* length of .tv */
243
    char x_tvran[2][2]; /* tv range */
244
  } x_tv;               /* info about .tv section (in auxent of symbol .tv)) */
245
};
246
 
247
#define AUXENT  union external_auxent
248
#define AUXESZ  18
249
 
250
#define _ETEXT  "etext"
251
 
252
#endif /* not DO_NOT_DEFINE_AUXENT */
253
 
254
#endif /* COFF_EXTERNAL_H */

powered by: WebSVN 2.1.0

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