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