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