~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/include/coff/external.h

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

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