]> Git Repo - binutils.git/blob - gas/config/obj-coff.h
2000-09-12 Kazu Hirata <[email protected]>
[binutils.git] / gas / config / obj-coff.h
1 /* coff object file format
2    Copyright (C) 1989, 90, 91, 92, 94, 95, 96, 97, 98, 99, 2000
3    Free Software Foundation, Inc.
4
5    This file is part of GAS.
6
7    GAS is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    GAS is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GAS; see the file COPYING.  If not, write to the Free
19    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 #ifndef OBJ_FORMAT_H
23 #define OBJ_FORMAT_H
24
25 #define OBJ_COFF 1
26
27 #ifndef BFD_ASSEMBLER
28
29 #define WORKING_DOT_WORD
30 #define WARN_SIGNED_OVERFLOW_WORD
31 #define OBJ_COFF_OMIT_OPTIONAL_HEADER
32 #define BFD_HEADERS
33 #define BFD
34
35 #endif
36
37 #include "targ-cpu.h"
38
39 #include "bfd.h"
40
41 /* This internal_lineno crap is to stop namespace pollution from the
42    bfd internal coff headerfile.  */
43 #define internal_lineno bfd_internal_lineno
44 #include "coff/internal.h"
45 #undef internal_lineno
46
47 /* CPU-specific setup:  */
48
49 #ifdef TC_ARM
50 #include "coff/arm.h"
51 #ifndef TARGET_FORMAT
52 #define TARGET_FORMAT "coff-arm"
53 #endif
54 #endif
55
56 #ifdef TC_PPC
57 #ifdef TE_PE
58 #include "coff/powerpc.h"
59 #else
60 #include "coff/rs6000.h"
61 #endif
62 #endif
63
64 #ifdef TC_SPARC
65 #include "coff/sparc.h"
66 #endif
67
68 #ifdef TC_I386
69 #include "coff/i386.h"
70
71 #ifdef TE_PE
72 #define TARGET_FORMAT "pe-i386"
73 #endif
74
75 #ifndef TARGET_FORMAT
76 #define TARGET_FORMAT "coff-i386"
77 #endif
78 #endif
79
80 #ifdef TC_M68K
81 #include "coff/m68k.h"
82 #ifndef TARGET_FORMAT
83 #define TARGET_FORMAT "coff-m68k"
84 #endif
85 #endif
86
87 #ifdef TC_A29K
88 #include "coff/a29k.h"
89 #define TARGET_FORMAT "coff-a29k-big"
90 #endif
91
92 #ifdef TC_I960
93 #include "coff/i960.h"
94 #define TARGET_FORMAT "coff-Intel-little"
95 #endif
96
97 #ifdef TC_Z8K
98 #include "coff/z8k.h"
99 #define TARGET_FORMAT "coff-z8k"
100 #endif
101
102 #ifdef TC_H8300
103 #include "coff/h8300.h"
104 #define TARGET_FORMAT "coff-h8300"
105 #endif
106
107 #ifdef TC_H8500
108 #include "coff/h8500.h"
109 #define TARGET_FORMAT "coff-h8500"
110 #endif
111
112 #ifdef TC_SH
113
114 #ifdef TE_PE
115 #define COFF_WITH_PE
116 #endif
117
118 #include "coff/sh.h"
119
120 #ifdef TE_PE
121 #define TARGET_FORMAT "pe-shl"
122 #else
123 #define TARGET_FORMAT                                   \
124   (shl                                                  \
125    ? (sh_small ? "coff-shl-small" : "coff-shl")         \
126    : (sh_small ? "coff-sh-small" : "coff-sh"))
127 #endif
128 #endif
129
130 #ifdef TC_MIPS
131 #define COFF_WITH_PE
132 #include "coff/mipspe.h"
133 #undef  TARGET_FORMAT
134 #define TARGET_FORMAT "pe-mips"
135 #endif
136
137 #ifdef TC_M88K
138 #include "coff/m88k.h"
139 #define TARGET_FORMAT "coff-m88kbcs"
140 #endif
141
142 #ifdef TC_W65
143 #include "coff/w65.h"
144 #define TARGET_FORMAT "coff-w65"
145 #endif
146
147 #ifdef TC_TIC30
148 #include "coff/tic30.h"
149 #define TARGET_FORMAT "coff-tic30"
150 #endif
151
152 #ifdef TC_TIC54X
153 #include "coff/tic54x.h"
154 #define TARGET_FORMAT "coff1-c54x"
155 #endif
156
157 #ifdef TC_TIC80
158 #include "coff/tic80.h"
159 #define TARGET_FORMAT "coff-tic80"
160 #define ALIGNMENT_IN_S_FLAGS 1
161 #endif
162
163 #ifdef TC_MCORE
164 #include "coff/mcore.h"
165 #ifndef TARGET_FORMAT
166 #define TARGET_FORMAT "pe-mcore"
167 #endif
168 #endif
169
170 /* Targets may also set this.  Also, if BFD_ASSEMBLER is defined, this
171    will already have been defined.  */
172 #undef SYMBOLS_NEED_BACKPOINTERS
173 #define SYMBOLS_NEED_BACKPOINTERS 1
174
175 #ifndef OBJ_COFF_MAX_AUXENTRIES
176 #define OBJ_COFF_MAX_AUXENTRIES 1
177 #endif /* OBJ_COFF_MAX_AUXENTRIES */
178
179 extern void coff_obj_symbol_new_hook PARAMS ((symbolS *));
180 #define obj_symbol_new_hook coff_obj_symbol_new_hook
181
182 extern void coff_obj_read_begin_hook PARAMS ((void));
183 #define obj_read_begin_hook coff_obj_read_begin_hook
184
185 /* ***********************************************************************
186
187    This file really contains two implementations of the COFF back end.
188    They are in the process of being merged, but this is only a
189    preliminary, mechanical merging.  Many definitions that are
190    identical between the two are still found in both versions.
191
192    The first version, with BFD_ASSEMBLER defined, uses high-level BFD
193    interfaces and data structures.  The second version, with
194    BFD_ASSEMBLER not defined, also uses BFD, but mostly for swapping
195    data structures and for doing the actual I/O.  The latter defines
196    the preprocessor symbols BFD and BFD_HEADERS.  Try not to let this
197    confuse you.
198
199    These two are in the process of being merged, and eventually the
200    BFD_ASSEMBLER version should take over completely.  Release timing
201    issues and namespace problems convinced me to merge the two
202    together in this fashion, a little sooner than I would have liked.
203    The real merge should be much better done by the time the next
204    release comes out.
205
206    For now, the structure of this file is:
207         <common>
208         #ifdef BFD_ASSEMBLER
209         <one version>
210         #else
211         <other version>
212         #endif
213         <common>
214    Unfortunately, the common portions are very small at the moment,
215    and many declarations or definitions are duplicated.  The structure
216    of obj-coff.c is similar.
217
218    See doc/internals.texi for a brief discussion of the history, if
219    you care.
220
221    Ken Raeburn, 5 May 1994
222
223    *********************************************************************** */
224
225 #ifdef BFD_ASSEMBLER
226
227 #include "bfd/libcoff.h"
228
229 #define OUTPUT_FLAVOR bfd_target_coff_flavour
230
231 /* SYMBOL TABLE */
232
233 /* Alter the field names, for now, until we've fixed up the other
234    references to use the new name.  */
235 #ifdef TC_I960
236 #define TC_SYMFIELD_TYPE        symbolS *
237 #define sy_tc                   bal
238 #endif
239
240 #define OBJ_SYMFIELD_TYPE       unsigned long
241 #define sy_obj                  sy_flags
242
243 #define SYM_AUXENT(S) \
244   (&coffsymbol (symbol_get_bfdsym (S))->native[1].u.auxent)
245 #define SYM_AUXINFO(S) \
246   (&coffsymbol (symbol_get_bfdsym (S))->native[1])
247
248 #define DO_NOT_STRIP    0
249
250 extern void obj_coff_section PARAMS ((int));
251
252 /* The number of auxiliary entries */
253 #define S_GET_NUMBER_AUXILIARY(s) \
254   (coffsymbol (symbol_get_bfdsym (s))->native->u.syment.n_numaux)
255 /* The number of auxiliary entries */
256 #define S_SET_NUMBER_AUXILIARY(s,v)     (S_GET_NUMBER_AUXILIARY (s) = (v))
257
258 /* True if a symbol name is in the string table, i.e. its length is > 8.  */
259 #define S_IS_STRING(s)          (strlen(S_GET_NAME(s)) > 8 ? 1 : 0)
260
261 extern int S_SET_DATA_TYPE PARAMS ((symbolS *, int));
262 extern int S_SET_STORAGE_CLASS PARAMS ((symbolS *, int));
263 extern int S_GET_STORAGE_CLASS PARAMS ((symbolS *));
264 extern void SA_SET_SYM_ENDNDX PARAMS ((symbolS *, symbolS *));
265
266 /* Auxiliary entry macros. SA_ stands for symbol auxiliary */
267 /* Omit the tv related fields */
268 /* Accessors */
269
270 #define SA_GET_SYM_TAGNDX(s)    (SYM_AUXENT (s)->x_sym.x_tagndx.l)
271 #define SA_GET_SYM_LNNO(s)      (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno)
272 #define SA_GET_SYM_SIZE(s)      (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size)
273 #define SA_GET_SYM_FSIZE(s)     (SYM_AUXENT (s)->x_sym.x_misc.x_fsize)
274 #define SA_GET_SYM_LNNOPTR(s)   (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr)
275 #define SA_GET_SYM_ENDNDX(s)    (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx)
276 #define SA_GET_SYM_DIMEN(s,i)   (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)])
277 #define SA_GET_FILE_FNAME(s)    (SYM_AUXENT (s)->x_file.x_fname)
278 #define SA_GET_SCN_SCNLEN(s)    (SYM_AUXENT (s)->x_scn.x_scnlen)
279 #define SA_GET_SCN_NRELOC(s)    (SYM_AUXENT (s)->x_scn.x_nreloc)
280 #define SA_GET_SCN_NLINNO(s)    (SYM_AUXENT (s)->x_scn.x_nlinno)
281
282 #define SA_SET_SYM_LNNO(s,v)    (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno=(v))
283 #define SA_SET_SYM_SIZE(s,v)    (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size=(v))
284 #define SA_SET_SYM_FSIZE(s,v)   (SYM_AUXENT (s)->x_sym.x_misc.x_fsize=(v))
285 #define SA_SET_SYM_LNNOPTR(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr=(v))
286 #define SA_SET_SYM_DIMEN(s,i,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)]=(v))
287 #define SA_SET_FILE_FNAME(s,v)  strncpy(SYM_AUXENT (s)->x_file.x_fname,(v),FILNMLEN)
288 #define SA_SET_SCN_SCNLEN(s,v)  (SYM_AUXENT (s)->x_scn.x_scnlen=(v))
289 #define SA_SET_SCN_NRELOC(s,v)  (SYM_AUXENT (s)->x_scn.x_nreloc=(v))
290 #define SA_SET_SCN_NLINNO(s,v)  (SYM_AUXENT (s)->x_scn.x_nlinno=(v))
291
292 /*
293  * Internal use only definitions. SF_ stands for symbol flags.
294  *
295  * These values can be assigned to sy_symbol.ost_flags field of a symbolS.
296  *
297  * You'll break i960 if you shift the SYSPROC bits anywhere else.  for
298  * more on the balname/callname hack, see tc-i960.h.  b.out is done
299  * differently.
300  */
301
302 #define SF_I960_MASK    (0x000001ff)    /* Bits 0-8 are used by the i960 port.  */
303 #define SF_SYSPROC      (0x0000003f)    /* bits 0-5 are used to store the sysproc number */
304 #define SF_IS_SYSPROC   (0x00000040)    /* bit 6 marks symbols that are sysprocs */
305 #define SF_BALNAME      (0x00000080)    /* bit 7 marks BALNAME symbols */
306 #define SF_CALLNAME     (0x00000100)    /* bit 8 marks CALLNAME symbols */
307
308 #define SF_NORMAL_MASK  (0x0000ffff)    /* bits 12-15 are general purpose.  */
309
310 #define SF_STATICS      (0x00001000)    /* Mark the .text & all symbols */
311 #define SF_DEFINED      (0x00002000)    /* Symbol is defined in this file */
312 #define SF_STRING       (0x00004000)    /* Symbol name length > 8 */
313 #define SF_LOCAL        (0x00008000)    /* Symbol must not be emitted */
314
315 #define SF_DEBUG_MASK   (0xffff0000)    /* bits 16-31 are debug info */
316
317 #define SF_FUNCTION     (0x00010000)    /* The symbol is a function */
318 #define SF_PROCESS      (0x00020000)    /* Process symbol before write */
319 #define SF_TAGGED       (0x00040000)    /* Is associated with a tag */
320 #define SF_TAG          (0x00080000)    /* Is a tag */
321 #define SF_DEBUG        (0x00100000)    /* Is in debug or abs section */
322 #define SF_GET_SEGMENT  (0x00200000)    /* Get the section of the forward symbol.  */
323 /* All other bits are unused.  */
324
325 /* Accessors */
326 #define SF_GET(s)               (*symbol_get_obj (s))
327 #define SF_GET_DEBUG(s)         (symbol_get_bfdsym (s)->flags & BSF_DEBUGGING)
328 #define SF_SET_DEBUG(s)         (symbol_get_bfdsym (s)->flags |= BSF_DEBUGGING)
329 #define SF_GET_NORMAL_FIELD(s)  (SF_GET (s) & SF_NORMAL_MASK)
330 #define SF_GET_DEBUG_FIELD(s)   (SF_GET (s) & SF_DEBUG_MASK)
331 #define SF_GET_FILE(s)          (SF_GET (s) & SF_FILE)
332 #define SF_GET_STATICS(s)       (SF_GET (s) & SF_STATICS)
333 #define SF_GET_DEFINED(s)       (SF_GET (s) & SF_DEFINED)
334 #define SF_GET_STRING(s)        (SF_GET (s) & SF_STRING)
335 #define SF_GET_LOCAL(s)         (SF_GET (s) & SF_LOCAL)
336 #define SF_GET_FUNCTION(s)      (SF_GET (s) & SF_FUNCTION)
337 #define SF_GET_PROCESS(s)       (SF_GET (s) & SF_PROCESS)
338 #define SF_GET_TAGGED(s)        (SF_GET (s) & SF_TAGGED)
339 #define SF_GET_TAG(s)           (SF_GET (s) & SF_TAG)
340 #define SF_GET_GET_SEGMENT(s)   (SF_GET (s) & SF_GET_SEGMENT)
341 #define SF_GET_I960(s)          (SF_GET (s) & SF_I960_MASK)     /* used by i960 */
342 #define SF_GET_BALNAME(s)       (SF_GET (s) & SF_BALNAME)       /* used by i960 */
343 #define SF_GET_CALLNAME(s)      (SF_GET (s) & SF_CALLNAME)      /* used by i960 */
344 #define SF_GET_IS_SYSPROC(s)    (SF_GET (s) & SF_IS_SYSPROC)    /* used by i960 */
345 #define SF_GET_SYSPROC(s)       (SF_GET (s) & SF_SYSPROC)       /* used by i960 */
346
347 /* Modifiers */
348 #define SF_SET(s,v)             (SF_GET (s) = (v))
349 #define SF_SET_NORMAL_FIELD(s,v)(SF_GET (s) |= ((v) & SF_NORMAL_MASK))
350 #define SF_SET_DEBUG_FIELD(s,v) (SF_GET (s) |= ((v) & SF_DEBUG_MASK))
351 #define SF_SET_FILE(s)          (SF_GET (s) |= SF_FILE)
352 #define SF_SET_STATICS(s)       (SF_GET (s) |= SF_STATICS)
353 #define SF_SET_DEFINED(s)       (SF_GET (s) |= SF_DEFINED)
354 #define SF_SET_STRING(s)        (SF_GET (s) |= SF_STRING)
355 #define SF_SET_LOCAL(s)         (SF_GET (s) |= SF_LOCAL)
356 #define SF_CLEAR_LOCAL(s)       (SF_GET (s) &= ~SF_LOCAL)
357 #define SF_SET_FUNCTION(s)      (SF_GET (s) |= SF_FUNCTION)
358 #define SF_SET_PROCESS(s)       (SF_GET (s) |= SF_PROCESS)
359 #define SF_SET_TAGGED(s)        (SF_GET (s) |= SF_TAGGED)
360 #define SF_SET_TAG(s)           (SF_GET (s) |= SF_TAG)
361 #define SF_SET_GET_SEGMENT(s)   (SF_GET (s) |= SF_GET_SEGMENT)
362 #define SF_SET_I960(s,v)        (SF_GET (s) |= ((v) & SF_I960_MASK))    /* used by i960 */
363 #define SF_SET_BALNAME(s)       (SF_GET (s) |= SF_BALNAME)      /* used by i960 */
364 #define SF_SET_CALLNAME(s)      (SF_GET (s) |= SF_CALLNAME)     /* used by i960 */
365 #define SF_SET_IS_SYSPROC(s)    (SF_GET (s) |= SF_IS_SYSPROC)   /* used by i960 */
366 #define SF_SET_SYSPROC(s,v)     (SF_GET (s) |= ((v) & SF_SYSPROC))      /* used by i960 */
367
368 /* --------------  Line number handling ------- */
369 extern int text_lineno_number;
370 extern int coff_line_base;
371 extern int coff_n_line_nos;
372
373 #define obj_emit_lineno(WHERE,LINE,FILE_START)  abort ()
374 extern void coff_add_linesym PARAMS ((symbolS *));
375
376 void c_dot_file_symbol PARAMS ((const char *filename));
377 #define obj_app_file c_dot_file_symbol
378
379 extern void coff_frob_symbol PARAMS ((symbolS *, int *));
380 extern void coff_adjust_symtab PARAMS ((void));
381 extern void coff_frob_section PARAMS ((segT));
382 extern void coff_adjust_section_syms PARAMS ((bfd *, asection *, PTR));
383 extern void coff_frob_file_after_relocs PARAMS ((void));
384 #define obj_frob_symbol(S,P)    coff_frob_symbol(S,&P)
385 #ifndef obj_adjust_symtab
386 #define obj_adjust_symtab()     coff_adjust_symtab()
387 #endif
388 #define obj_frob_section(S)     coff_frob_section (S)
389 #define obj_frob_file_after_relocs() coff_frob_file_after_relocs ()
390
391 extern symbolS *coff_last_function;
392
393 /* Forward the segment of a forwarded symbol, handle assignments that
394    just copy symbol values, etc.  */
395 #ifndef OBJ_COPY_SYMBOL_ATTRIBUTES
396 #ifndef TE_I386AIX
397 #define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src) \
398   (SF_GET_GET_SEGMENT (dest) \
399    ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \
400    : 0)
401 #else
402 #define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src) \
403   (SF_GET_GET_SEGMENT (dest) && S_GET_SEGMENT (dest) == SEG_UNKNOWN \
404    ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \
405    : 0)
406 #endif
407 #endif
408
409 /* sanity check */
410
411 #ifdef TC_I960
412 #ifndef C_LEAFSTAT
413 hey ! Where is the C_LEAFSTAT definition ? i960 - coff support is depending on it.
414 #endif /* no C_LEAFSTAT */
415 #endif /* TC_I960 */
416
417 #else /* not BFD_ASSEMBLER */
418
419 #ifdef TC_A29K
420 /* Allow translate from aout relocs to coff relocs */
421 #define NO_RELOC 20
422 #define RELOC_32 1
423 #define RELOC_8 2
424 #define RELOC_CONST 3
425 #define RELOC_CONSTH 4
426 #define RELOC_JUMPTARG 5
427 #define RELOC_BASE22 6
428 #define RELOC_HI22 7
429 #define RELOC_LO10 8
430 #define RELOC_BASE13 9
431 #define RELOC_WDISP22 10
432 #define RELOC_WDISP30 11
433 #endif
434
435 extern const segT N_TYPE_seg[];
436
437 /* Magic number of paged executable.  */
438 #define DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE    0x8300
439
440 /* SYMBOL TABLE */
441
442 /* Symbol table entry data type */
443
444 typedef struct
445 {
446   /* Basic symbol */
447   struct internal_syment ost_entry;
448   /* Auxiliary entry.  */
449   union internal_auxent ost_auxent[OBJ_COFF_MAX_AUXENTRIES];
450   /* obj_coff internal use only flags */
451   unsigned int ost_flags;
452 } obj_symbol_type;
453
454 #ifndef DO_NOT_STRIP
455 #define DO_NOT_STRIP    0
456 #endif
457 /* Symbol table macros and constants */
458
459 /* Possible and usefull section number in symbol table
460  * The values of TEXT, DATA and BSS may not be portable.
461  */
462
463 #define C_ABS_SECTION           N_ABS
464 #define C_UNDEF_SECTION         N_UNDEF
465 #define C_DEBUG_SECTION         N_DEBUG
466 #define C_NTV_SECTION           N_TV
467 #define C_PTV_SECTION           P_TV
468 #define C_REGISTER_SECTION      50
469
470 /*
471  *  Macros to extract information from a symbol table entry.
472  *  This syntaxic indirection allows independence regarding a.out or coff.
473  *  The argument (s) of all these macros is a pointer to a symbol table entry.
474  */
475
476 /* Predicates */
477 /* True if the symbol is external */
478 #define S_IS_EXTERNAL(s)        ((s)->sy_symbol.ost_entry.n_scnum == C_UNDEF_SECTION)
479 /* True if symbol has been defined, ie :
480    section > 0 (DATA, TEXT or BSS)
481    section == 0 and value > 0 (external bss symbol) */
482 #define S_IS_DEFINED(s) \
483   ((s)->sy_symbol.ost_entry.n_scnum > C_UNDEF_SECTION \
484    || ((s)->sy_symbol.ost_entry.n_scnum == C_UNDEF_SECTION \
485        && S_GET_VALUE (s) > 0) \
486    || ((s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION))
487 /* True if a debug special symbol entry */
488 #define S_IS_DEBUG(s)           ((s)->sy_symbol.ost_entry.n_scnum == C_DEBUG_SECTION)
489 /* True if a symbol is local symbol name */
490 /* A symbol name whose name includes ^A is a gas internal pseudo symbol */
491 #define S_IS_LOCAL(s) \
492   ((s)->sy_symbol.ost_entry.n_scnum == C_REGISTER_SECTION \
493    || (S_LOCAL_NAME(s) && ! flag_keep_locals && ! S_IS_DEBUG (s)) \
494    || strchr (S_GET_NAME (s), '\001') != NULL \
495    || strchr (S_GET_NAME (s), '\002') != NULL \
496    || (flag_strip_local_absolute \
497        && !S_IS_EXTERNAL(s) \
498        && (s)->sy_symbol.ost_entry.n_scnum == C_ABS_SECTION))
499 /* True if a symbol is not defined in this file */
500 #define S_IS_EXTERN(s)          ((s)->sy_symbol.ost_entry.n_scnum == 0 \
501                                  && S_GET_VALUE (s) == 0)
502 /*
503  * True if a symbol can be multiply defined (bss symbols have this def
504  * though it is bad practice)
505  */
506 #define S_IS_COMMON(s)          ((s)->sy_symbol.ost_entry.n_scnum == 0 \
507                                  && S_GET_VALUE (s) != 0)
508 /* True if a symbol name is in the string table, i.e. its length is > 8.  */
509 #define S_IS_STRING(s)          (strlen(S_GET_NAME(s)) > 8 ? 1 : 0)
510
511 /* True if a symbol is defined as weak.  */
512 #ifdef TE_PE
513 #define S_IS_WEAK(s) \
514   ((s)->sy_symbol.ost_entry.n_sclass == C_NT_WEAK \
515    || (s)->sy_symbol.ost_entry.n_sclass == C_WEAKEXT)
516 #else
517 #define S_IS_WEAK(s) \
518   ((s)->sy_symbol.ost_entry.n_sclass == C_WEAKEXT)
519 #endif
520
521 /* Accessors */
522 /* The name of the symbol */
523 #define S_GET_NAME(s)           ((char*)(s)->sy_symbol.ost_entry.n_offset)
524 /* The pointer to the string table */
525 #define S_GET_OFFSET(s)         ((s)->sy_symbol.ost_entry.n_offset)
526 /* The numeric value of the segment */
527 #define S_GET_SEGMENT(s)   s_get_segment(s)
528 /* The data type */
529 #define S_GET_DATA_TYPE(s)      ((s)->sy_symbol.ost_entry.n_type)
530 /* The storage class */
531 #define S_GET_STORAGE_CLASS(s)  ((s)->sy_symbol.ost_entry.n_sclass)
532 /* The number of auxiliary entries */
533 #define S_GET_NUMBER_AUXILIARY(s)       ((s)->sy_symbol.ost_entry.n_numaux)
534
535 /* Modifiers */
536 /* Set the name of the symbol */
537 #define S_SET_NAME(s,v)         ((s)->sy_symbol.ost_entry.n_offset = (unsigned long)(v))
538 /* Set the offset of the symbol */
539 #define S_SET_OFFSET(s,v)       ((s)->sy_symbol.ost_entry.n_offset = (v))
540 /* The numeric value of the segment */
541 #define S_SET_SEGMENT(s,v)      ((s)->sy_symbol.ost_entry.n_scnum = SEGMENT_TO_SYMBOL_TYPE(v))
542 /* The data type */
543 #define S_SET_DATA_TYPE(s,v)    ((s)->sy_symbol.ost_entry.n_type = (v))
544 /* The storage class */
545 #define S_SET_STORAGE_CLASS(s,v)        ((s)->sy_symbol.ost_entry.n_sclass = (v))
546 /* The number of auxiliary entries */
547 #define S_SET_NUMBER_AUXILIARY(s,v)     ((s)->sy_symbol.ost_entry.n_numaux = (v))
548
549 /* Additional modifiers */
550 /* The symbol is external (does not mean undefined) */
551 #define S_SET_EXTERNAL(s)       { S_SET_STORAGE_CLASS(s, C_EXT) ; SF_CLEAR_LOCAL(s); }
552
553 /* Auxiliary entry macros. SA_ stands for symbol auxiliary */
554 /* Omit the tv related fields */
555 /* Accessors */
556 #define SYM_AUXENT(S)   (&(S)->sy_symbol.ost_auxent[0])
557
558 #define SA_GET_SYM_TAGNDX(s)    (SYM_AUXENT (s)->x_sym.x_tagndx.l)
559 #define SA_GET_SYM_LNNO(s)      (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno)
560 #define SA_GET_SYM_SIZE(s)      (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size)
561 #define SA_GET_SYM_FSIZE(s)     (SYM_AUXENT (s)->x_sym.x_misc.x_fsize)
562 #define SA_GET_SYM_LNNOPTR(s)   (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr)
563 #define SA_GET_SYM_ENDNDX(s)    (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx.l)
564 #define SA_GET_SYM_DIMEN(s,i)   (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)])
565 #define SA_GET_FILE_FNAME(s)    (SYM_AUXENT (s)->x_file.x_fname)
566 #define SA_GET_FILE_FNAME_OFFSET(s)  (SYM_AUXENT (s)->x_file.x_n.x_offset)
567 #define SA_GET_FILE_FNAME_ZEROS(s)   (SYM_AUXENT (s)->x_file.x_n.x_zeroes)
568 #define SA_GET_SCN_SCNLEN(s)    (SYM_AUXENT (s)->x_scn.x_scnlen)
569 #define SA_GET_SCN_NRELOC(s)    (SYM_AUXENT (s)->x_scn.x_nreloc)
570 #define SA_GET_SCN_NLINNO(s)    (SYM_AUXENT (s)->x_scn.x_nlinno)
571
572 /* Modifiers */
573 #define SA_SET_SYM_TAGNDX(s,v)  (SYM_AUXENT (s)->x_sym.x_tagndx.l=(v))
574 #define SA_SET_SYM_LNNO(s,v)    (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_lnno=(v))
575 #define SA_SET_SYM_SIZE(s,v)    (SYM_AUXENT (s)->x_sym.x_misc.x_lnsz.x_size=(v))
576 #define SA_SET_SYM_FSIZE(s,v)   (SYM_AUXENT (s)->x_sym.x_misc.x_fsize=(v))
577 #define SA_SET_SYM_LNNOPTR(s,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_lnnoptr=(v))
578 #define SA_SET_SYM_ENDNDX(s,v)  (SYM_AUXENT (s)->x_sym.x_fcnary.x_fcn.x_endndx.l=(v))
579 #define SA_SET_SYM_DIMEN(s,i,v) (SYM_AUXENT (s)->x_sym.x_fcnary.x_ary.x_dimen[(i)]=(v))
580 #define SA_SET_FILE_FNAME(s,v)  strncpy(SYM_AUXENT (s)->x_file.x_fname,(v),FILNMLEN)
581 #define SA_SET_FILE_FNAME_OFFSET(s,v) (SYM_AUXENT (s)->x_file.x_n.x_offset=(v))
582 #define SA_SET_FILE_FNAME_ZEROS(s,v)  (SYM_AUXENT (s)->x_file.x_n.x_zeroes=(v))
583 #define SA_SET_SCN_SCNLEN(s,v)  (SYM_AUXENT (s)->x_scn.x_scnlen=(v))
584 #define SA_SET_SCN_NRELOC(s,v)  (SYM_AUXENT (s)->x_scn.x_nreloc=(v))
585 #define SA_SET_SCN_NLINNO(s,v)  (SYM_AUXENT (s)->x_scn.x_nlinno=(v))
586
587 /*
588  * Internal use only definitions. SF_ stands for symbol flags.
589  *
590  * These values can be assigned to sy_symbol.ost_flags field of a symbolS.
591  *
592  * You'll break i960 if you shift the SYSPROC bits anywhere else.  for
593  * more on the balname/callname hack, see tc-i960.h.  b.out is done
594  * differently.
595  */
596
597 #define SF_I960_MASK    (0x000001ff)    /* Bits 0-8 are used by the i960 port.  */
598 #define SF_SYSPROC      (0x0000003f)    /* bits 0-5 are used to store the sysproc number */
599 #define SF_IS_SYSPROC   (0x00000040)    /* bit 6 marks symbols that are sysprocs */
600 #define SF_BALNAME      (0x00000080)    /* bit 7 marks BALNAME symbols */
601 #define SF_CALLNAME     (0x00000100)    /* bit 8 marks CALLNAME symbols */
602
603 #define SF_NORMAL_MASK  (0x0000ffff)    /* bits 12-15 are general purpose.  */
604
605 #define SF_STATICS      (0x00001000)    /* Mark the .text & all symbols */
606 #define SF_DEFINED      (0x00002000)    /* Symbol is defined in this file */
607 #define SF_STRING       (0x00004000)    /* Symbol name length > 8 */
608 #define SF_LOCAL        (0x00008000)    /* Symbol must not be emitted */
609
610 #define SF_DEBUG_MASK   (0xffff0000)    /* bits 16-31 are debug info */
611
612 #define SF_FUNCTION     (0x00010000)    /* The symbol is a function */
613 #define SF_PROCESS      (0x00020000)    /* Process symbol before write */
614 #define SF_TAGGED       (0x00040000)    /* Is associated with a tag */
615 #define SF_TAG          (0x00080000)    /* Is a tag */
616 #define SF_DEBUG        (0x00100000)    /* Is in debug or abs section */
617 #define SF_GET_SEGMENT  (0x00200000)    /* Get the section of the forward symbol.  */
618 #define SF_ADJ_LNNOPTR  (0x00400000)    /* Has a lnnoptr */
619 /* All other bits are unused.  */
620
621 /* Accessors */
622 #define SF_GET(s)               ((s)->sy_symbol.ost_flags)
623 #define SF_GET_NORMAL_FIELD(s)  (SF_GET (s) & SF_NORMAL_MASK)
624 #define SF_GET_DEBUG_FIELD(s)   (SF_GET (s) & SF_DEBUG_MASK)
625 #define SF_GET_FILE(s)          (SF_GET (s) & SF_FILE)
626 #define SF_GET_STATICS(s)       (SF_GET (s) & SF_STATICS)
627 #define SF_GET_DEFINED(s)       (SF_GET (s) & SF_DEFINED)
628 #define SF_GET_STRING(s)        (SF_GET (s) & SF_STRING)
629 #define SF_GET_LOCAL(s)         (SF_GET (s) & SF_LOCAL)
630 #define SF_GET_FUNCTION(s)      (SF_GET (s) & SF_FUNCTION)
631 #define SF_GET_PROCESS(s)       (SF_GET (s) & SF_PROCESS)
632 #define SF_GET_DEBUG(s)         (SF_GET (s) & SF_DEBUG)
633 #define SF_GET_TAGGED(s)        (SF_GET (s) & SF_TAGGED)
634 #define SF_GET_TAG(s)           (SF_GET (s) & SF_TAG)
635 #define SF_GET_GET_SEGMENT(s)   (SF_GET (s) & SF_GET_SEGMENT)
636 #define SF_GET_ADJ_LNNOPTR(s)   (SF_GET (s) & SF_ADJ_LNNOPTR)
637 #define SF_GET_I960(s)          (SF_GET (s) & SF_I960_MASK)     /* used by i960 */
638 #define SF_GET_BALNAME(s)       (SF_GET (s) & SF_BALNAME)       /* used by i960 */
639 #define SF_GET_CALLNAME(s)      (SF_GET (s) & SF_CALLNAME)      /* used by i960 */
640 #define SF_GET_IS_SYSPROC(s)    (SF_GET (s) & SF_IS_SYSPROC)    /* used by i960 */
641 #define SF_GET_SYSPROC(s)       (SF_GET (s) & SF_SYSPROC)       /* used by i960 */
642
643 /* Modifiers */
644 #define SF_SET(s,v)             (SF_GET (s) = (v))
645 #define SF_SET_NORMAL_FIELD(s,v)(SF_GET (s) |= ((v) & SF_NORMAL_MASK))
646 #define SF_SET_DEBUG_FIELD(s,v) (SF_GET (s) |= ((v) & SF_DEBUG_MASK))
647 #define SF_SET_FILE(s)          (SF_GET (s) |= SF_FILE)
648 #define SF_SET_STATICS(s)       (SF_GET (s) |= SF_STATICS)
649 #define SF_SET_DEFINED(s)       (SF_GET (s) |= SF_DEFINED)
650 #define SF_SET_STRING(s)        (SF_GET (s) |= SF_STRING)
651 #define SF_SET_LOCAL(s)         (SF_GET (s) |= SF_LOCAL)
652 #define SF_CLEAR_LOCAL(s)       (SF_GET (s) &= ~SF_LOCAL)
653 #define SF_SET_FUNCTION(s)      (SF_GET (s) |= SF_FUNCTION)
654 #define SF_SET_PROCESS(s)       (SF_GET (s) |= SF_PROCESS)
655 #define SF_SET_DEBUG(s)         (SF_GET (s) |= SF_DEBUG)
656 #define SF_SET_TAGGED(s)        (SF_GET (s) |= SF_TAGGED)
657 #define SF_SET_TAG(s)           (SF_GET (s) |= SF_TAG)
658 #define SF_SET_GET_SEGMENT(s)   (SF_GET (s) |= SF_GET_SEGMENT)
659 #define SF_SET_ADJ_LNNOPTR(s)   (SF_GET (s) |= SF_ADJ_LNNOPTR)
660 #define SF_SET_I960(s,v)        (SF_GET (s) |= ((v) & SF_I960_MASK))    /* used by i960 */
661 #define SF_SET_BALNAME(s)       (SF_GET (s) |= SF_BALNAME)      /* used by i960 */
662 #define SF_SET_CALLNAME(s)      (SF_GET (s) |= SF_CALLNAME)     /* used by i960 */
663 #define SF_SET_IS_SYSPROC(s)    (SF_GET (s) |= SF_IS_SYSPROC)   /* used by i960 */
664 #define SF_SET_SYSPROC(s,v)     (SF_GET (s) |= ((v) & SF_SYSPROC))      /* used by i960 */
665
666 /* File header macro and type definition */
667
668 /*
669  * File position calculators. Beware to use them when all the
670  * appropriate fields are set in the header.
671  */
672
673 #ifdef OBJ_COFF_OMIT_OPTIONAL_HEADER
674 #define OBJ_COFF_AOUTHDRSZ (0)
675 #else
676 #define OBJ_COFF_AOUTHDRSZ (AOUTHDRSZ)
677 #endif /* OBJ_COFF_OMIT_OPTIONAL_HEADER */
678
679 #define H_GET_FILE_SIZE(h) \
680     (long)(FILHSZ + OBJ_COFF_AOUTHDRSZ + \
681            H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ + \
682            H_GET_TEXT_SIZE(h) + H_GET_DATA_SIZE(h) + \
683            H_GET_RELOCATION_SIZE(h) + H_GET_LINENO_SIZE(h) + \
684            H_GET_SYMBOL_TABLE_SIZE(h) + \
685            (h)->string_table_size)
686 #define H_GET_TEXT_FILE_OFFSET(h) \
687     (long)(FILHSZ + OBJ_COFF_AOUTHDRSZ + \
688            H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ)
689 #define H_GET_DATA_FILE_OFFSET(h) \
690     (long)(FILHSZ + OBJ_COFF_AOUTHDRSZ + \
691            H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ + \
692            H_GET_TEXT_SIZE(h))
693 #define H_GET_BSS_FILE_OFFSET(h) 0
694 #define H_GET_RELOCATION_FILE_OFFSET(h) \
695     (long)(FILHSZ + OBJ_COFF_AOUTHDRSZ + \
696            H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ + \
697            H_GET_TEXT_SIZE(h) + H_GET_DATA_SIZE(h))
698 #define H_GET_LINENO_FILE_OFFSET(h) \
699     (long)(FILHSZ + OBJ_COFF_AOUTHDRSZ + \
700            H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ + \
701            H_GET_TEXT_SIZE(h) + H_GET_DATA_SIZE(h) + \
702            H_GET_RELOCATION_SIZE(h))
703 #define H_GET_SYMBOL_TABLE_FILE_OFFSET(h) \
704     (long)(FILHSZ + OBJ_COFF_AOUTHDRSZ + \
705            H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ + \
706            H_GET_TEXT_SIZE(h) + H_GET_DATA_SIZE(h) + \
707            H_GET_RELOCATION_SIZE(h) + H_GET_LINENO_SIZE(h))
708
709 /* Accessors */
710 /* aouthdr */
711 #define H_GET_MAGIC_NUMBER(h)           ((h)->aouthdr.magic)
712 #define H_GET_VERSION_STAMP(h)          ((h)->aouthdr.vstamp)
713 #define H_GET_TEXT_SIZE(h)              ((h)->aouthdr.tsize)
714 #define H_GET_DATA_SIZE(h)              ((h)->aouthdr.dsize)
715 #define H_GET_BSS_SIZE(h)               ((h)->aouthdr.bsize)
716 #define H_GET_ENTRY_POINT(h)            ((h)->aouthdr.entry)
717 #define H_GET_TEXT_START(h)             ((h)->aouthdr.text_start)
718 #define H_GET_DATA_START(h)             ((h)->aouthdr.data_start)
719 /* filehdr */
720 #define H_GET_FILE_MAGIC_NUMBER(h)      ((h)->filehdr.f_magic)
721 #define H_GET_NUMBER_OF_SECTIONS(h)     ((h)->filehdr.f_nscns)
722 #define H_GET_TIME_STAMP(h)             ((h)->filehdr.f_timdat)
723 #define H_GET_SYMBOL_TABLE_POINTER(h)   ((h)->filehdr.f_symptr)
724 #define H_GET_SYMBOL_COUNT(h)           ((h)->filehdr.f_nsyms)
725 #define H_GET_SYMBOL_TABLE_SIZE(h)      (H_GET_SYMBOL_COUNT(h) * SYMESZ)
726 #define H_GET_SIZEOF_OPTIONAL_HEADER(h) ((h)->filehdr.f_opthdr)
727 #define H_GET_FLAGS(h)                  ((h)->filehdr.f_flags)
728 /* Extra fields to achieve bsd a.out compatibility and for convenience */
729 #define H_GET_RELOCATION_SIZE(h)        ((h)->relocation_size)
730 #define H_GET_STRING_SIZE(h)            ((h)->string_table_size)
731 #define H_GET_LINENO_SIZE(h)            ((h)->lineno_size)
732
733 #ifndef OBJ_COFF_OMIT_OPTIONAL_HEADER
734 #define H_GET_HEADER_SIZE(h)            (sizeof(FILHDR) \
735                                          + sizeof(AOUTHDR)\
736                                          + (H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ))
737 #else /* OBJ_COFF_OMIT_OPTIONAL_HEADER */
738 #define H_GET_HEADER_SIZE(h)            (sizeof(FILHDR) \
739                                          + (H_GET_NUMBER_OF_SECTIONS(h) * SCNHSZ))
740 #endif /* OBJ_COFF_OMIT_OPTIONAL_HEADER */
741
742 #define H_GET_TEXT_RELOCATION_SIZE(h)   (text_section_header.s_nreloc * RELSZ)
743 #define H_GET_DATA_RELOCATION_SIZE(h)   (data_section_header.s_nreloc * RELSZ)
744
745 /* Modifiers */
746 /* aouthdr */
747 #define H_SET_MAGIC_NUMBER(h,v)         ((h)->aouthdr.magic = (v))
748 #define H_SET_VERSION_STAMP(h,v)        ((h)->aouthdr.vstamp = (v))
749 #define H_SET_TEXT_SIZE(h,v)            ((h)->aouthdr.tsize = (v))
750 #define H_SET_DATA_SIZE(h,v)            ((h)->aouthdr.dsize = (v))
751 #define H_SET_BSS_SIZE(h,v)             ((h)->aouthdr.bsize = (v))
752 #define H_SET_ENTRY_POINT(h,v)          ((h)->aouthdr.entry = (v))
753 #define H_SET_TEXT_START(h,v)           ((h)->aouthdr.text_start = (v))
754 #define H_SET_DATA_START(h,v)           ((h)->aouthdr.data_start = (v))
755 /* filehdr */
756 #define H_SET_FILE_MAGIC_NUMBER(h,v)    ((h)->filehdr.f_magic = (v))
757 #define H_SET_NUMBER_OF_SECTIONS(h,v)   ((h)->filehdr.f_nscns = (v))
758 #define H_SET_TIME_STAMP(h,v)           ((h)->filehdr.f_timdat = (v))
759 #define H_SET_SYMBOL_TABLE_POINTER(h,v) ((h)->filehdr.f_symptr = (v))
760 #define H_SET_SYMBOL_TABLE_SIZE(h,v)    ((h)->filehdr.f_nsyms = (v))
761 #define H_SET_SIZEOF_OPTIONAL_HEADER(h,v) ((h)->filehdr.f_opthdr = (v))
762 #define H_SET_FLAGS(h,v)                ((h)->filehdr.f_flags = (v))
763 /* Extra fields to achieve bsd a.out compatibility and for convinience */
764 #define H_SET_RELOCATION_SIZE(h,t,d)    ((h)->relocation_size = (t)+(d))
765 #define H_SET_STRING_SIZE(h,v)          ((h)->string_table_size = (v))
766 #define H_SET_LINENO_SIZE(h,v)          ((h)->lineno_size = (v))
767
768 /* Segment flipping */
769
770 typedef struct
771 {
772   struct internal_aouthdr aouthdr;      /* a.out header */
773   struct internal_filehdr filehdr;      /* File header, not machine dep.  */
774   long string_table_size;       /* names + '\0' + sizeof(int) */
775   long relocation_size; /* Cumulated size of relocation
776                            information for all sections in
777                            bytes.  */
778   long lineno_size;             /* Size of the line number information
779                                    table in bytes */
780 } object_headers;
781
782 struct lineno_list
783 {
784   struct bfd_internal_lineno line;
785   char *frag;                   /* Frag to which the line number is related */
786   struct lineno_list *next;     /* Forward chain pointer */
787 };
788
789 #define obj_segment_name(i) (segment_info[(int) (i)].scnhdr.s_name)
790
791 #define obj_add_segment(s) obj_coff_add_segment (s)
792
793 extern segT obj_coff_add_segment PARAMS ((const char *));
794
795 extern void obj_coff_section PARAMS ((int));
796
797 extern void c_dot_file_symbol PARAMS ((char *filename));
798 #define obj_app_file c_dot_file_symbol
799 extern void obj_extra_stuff PARAMS ((object_headers * headers));
800
801 extern segT s_get_segment PARAMS ((symbolS *ptr));
802
803 extern void c_section_header PARAMS ((struct internal_scnhdr * header,
804                                       char *name,
805                                       long core_address,
806                                       long size,
807                                       long data_ptr,
808                                       long reloc_ptr,
809                                       long lineno_ptr,
810                                       long reloc_number,
811                                       long lineno_number,
812                                       long alignment));
813
814 #ifndef tc_coff_symbol_emit_hook
815 void tc_coff_symbol_emit_hook PARAMS ((symbolS *));
816 #endif
817
818 /* sanity check */
819
820 #ifdef TC_I960
821 #ifndef C_LEAFSTAT
822 hey ! Where is the C_LEAFSTAT definition ? i960 - coff support is depending on it.
823 #endif /* no C_LEAFSTAT */
824 #endif /* TC_I960 */
825 extern struct internal_scnhdr data_section_header;
826 extern struct internal_scnhdr text_section_header;
827
828 /* Forward the segment of a forwarded symbol.  */
829 #define OBJ_COPY_SYMBOL_ATTRIBUTES(dest,src) \
830   (SF_GET_GET_SEGMENT (dest) \
831    ? (S_SET_SEGMENT (dest, S_GET_SEGMENT (src)), 0) \
832    : 0)
833
834 #ifdef TE_PE
835 #define obj_handle_link_once(t) obj_coff_pe_handle_link_once (t)
836 extern void obj_coff_pe_handle_link_once ();
837 #endif
838
839 #endif /* not BFD_ASSEMBLER */
840
841 extern const pseudo_typeS coff_pseudo_table[];
842
843 #ifndef obj_pop_insert
844 #define obj_pop_insert() pop_insert (coff_pseudo_table)
845 #endif
846
847 /* In COFF, if a symbol is defined using .def/.val SYM/.endef, it's OK
848    to redefine the symbol later on.  This can happen if C symbols use
849    a prefix, and a symbol is defined both with and without the prefix,
850    as in start/_start/__start in gcc/libgcc1-test.c.  */
851 #define RESOLVE_SYMBOL_REDEFINITION(sym)                \
852 (SF_GET_GET_SEGMENT (sym)                               \
853  ? (sym->sy_frag = frag_now,                            \
854     S_SET_VALUE (sym, frag_now_fix ()),                 \
855     S_SET_SEGMENT (sym, now_seg),                       \
856     0)                                                  \
857  : 0)
858
859 /* Stabs in a coff file go into their own section.  */
860 #define SEPARATE_STAB_SECTIONS 1
861
862 /* We need 12 bytes at the start of the section to hold some initial
863    information.  */
864 extern void obj_coff_init_stab_section PARAMS ((segT));
865 #define INIT_STAB_SECTION(seg) obj_coff_init_stab_section (seg)
866
867 /* Store the number of relocations in the section aux entry.  */
868 #define SET_SECTION_RELOCS(sec, relocs, n) \
869   SA_SET_SCN_NRELOC (section_symbol (sec), n)
870
871 #endif /* OBJ_FORMAT_H */
This page took 0.07496 seconds and 4 git commands to generate.