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