remove some duplicate #include's.
[deliverable/binutils-gdb.git] / gas / config / obj-elf.h
CommitLineData
252b5132 1/* ELF object file format.
dbe2df79 2 Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
ebd1c875 3 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
252b5132
RH
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
5110c57e 9 the Free Software Foundation; either version 2, or (at your option)
252b5132
RH
10 any later version.
11
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
252b5132 21
252b5132
RH
22/* HP PA-RISC support was contributed by the Center for Software Science
23 at the University of Utah. */
24
25#ifndef _OBJ_ELF_H
26#define _OBJ_ELF_H
27
28#define OBJ_ELF 1
29
5110c57e
HPN
30/* Note that all macros in this file should be wrapped in #ifndef, for
31 sake of obj-multi.h which includes this file. */
32
4ca72d38 33#ifndef OUTPUT_FLAVOR
252b5132 34#define OUTPUT_FLAVOR bfd_target_elf_flavour
4ca72d38 35#endif
252b5132 36
252b5132
RH
37#define BYTES_IN_WORD 4 /* for now */
38#include "bfd/elf-bfd.h"
39
49309057
ILT
40#include "targ-cpu.h"
41
42#ifdef TC_ALPHA
a8316fe2 43#define ECOFF_DEBUGGING (alpha_flag_mdebug > 0)
49309057
ILT
44extern int alpha_flag_mdebug;
45#endif
46
47/* For now, always set ECOFF_DEBUGGING for a MIPS target. */
48#ifdef TC_MIPS
ecb4347a
DJ
49#define ECOFF_DEBUGGING mips_flag_mdebug
50extern int mips_flag_mdebug;
49309057
ILT
51#endif /* TC_MIPS */
52
4c63da97
AM
53#ifdef OBJ_MAYBE_ECOFF
54#ifndef ECOFF_DEBUGGING
55#define ECOFF_DEBUGGING 1
56#endif
57#endif
58
252b5132 59/* Additional information we keep for each symbol. */
252b5132
RH
60struct elf_obj_sy
61{
49309057
ILT
62 /* Whether the symbol has been marked as local. */
63 int local;
64
252b5132
RH
65 /* Use this to keep track of .size expressions that involve
66 differences that we can't compute yet. */
67 expressionS *size;
68
69 /* The name specified by the .symver directive. */
70 char *versioned_name;
49309057
ILT
71
72#ifdef ECOFF_DEBUGGING
73 /* If we are generating ECOFF debugging information, we need some
74 additional fields for each symbol. */
75 struct efdr *ecoff_file;
76 struct localsym *ecoff_symbol;
77 valueT ecoff_extern_size;
78#endif
252b5132 79};
252b5132
RH
80
81#define OBJ_SYMFIELD_TYPE struct elf_obj_sy
82
0d2bcfaf 83/* Symbol fields used by the ELF back end. */
22772e33 84#define ELF_TARGET_SYMBOL_FIELDS unsigned int local:1;
0d2bcfaf
NC
85
86/* Don't change this; change ELF_TARGET_SYMBOL_FIELDS instead. */
2a24298d 87#ifndef TARGET_SYMBOL_FIELDS
0d2bcfaf 88#define TARGET_SYMBOL_FIELDS ELF_TARGET_SYMBOL_FIELDS
2a24298d 89#endif
0d2bcfaf 90
252b5132
RH
91#ifndef FALSE
92#define FALSE 0
93#define TRUE !FALSE
94#endif
95
5110c57e 96#ifndef obj_begin
252b5132 97#define obj_begin() elf_begin ()
5110c57e 98#endif
dbe2df79 99extern void elf_begin (void);
252b5132
RH
100
101/* should be conditional on address size! */
814f6641 102#define elf_symbol(asymbol) ((elf_symbol_type *) (&(asymbol)->the_bfd))
252b5132 103
4ca72d38 104#ifndef S_GET_SIZE
49309057
ILT
105#define S_GET_SIZE(S) \
106 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size)
4ca72d38
AM
107#endif
108#ifndef S_SET_SIZE
252b5132 109#define S_SET_SIZE(S,V) \
49309057 110 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size = (V))
4ca72d38 111#endif
252b5132 112
4ca72d38 113#ifndef S_GET_ALIGN
49309057
ILT
114#define S_GET_ALIGN(S) \
115 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value)
4ca72d38
AM
116#endif
117#ifndef S_SET_ALIGN
252b5132 118#define S_SET_ALIGN(S,V) \
49309057 119 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value = (V))
4ca72d38 120#endif
252b5132 121
dbe2df79 122int elf_s_get_other (symbolS *);
4c63da97
AM
123#ifndef S_GET_OTHER
124#define S_GET_OTHER(S) (elf_s_get_other (S))
125#endif
126#ifndef S_SET_OTHER
252b5132 127#define S_SET_OTHER(S,V) \
49309057 128 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V))
4c63da97 129#endif
252b5132
RH
130
131extern asection *gdb_section;
132
4ca72d38 133#ifndef obj_frob_file
252b5132 134#define obj_frob_file elf_frob_file
4ca72d38 135#endif
dbe2df79 136extern void elf_frob_file (void);
252b5132 137
339681c0
L
138#ifndef obj_frob_file_before_adjust
139#define obj_frob_file_before_adjust elf_frob_file_before_adjust
140#endif
dbe2df79 141extern void elf_frob_file_before_adjust (void);
339681c0 142
4ca72d38 143#ifndef obj_frob_file_after_relocs
252b5132 144#define obj_frob_file_after_relocs elf_frob_file_after_relocs
4ca72d38 145#endif
dbe2df79 146extern void elf_frob_file_after_relocs (void);
252b5132 147
07a53e5c
RH
148/* If the target doesn't have special processing for labels, take care of
149 dwarf2 output at the object file level. */
150#ifndef tc_frob_label
151#include "dwarf2dbg.h"
152#define obj_frob_label dwarf2_emit_label
153#endif
154
5110c57e 155#ifndef obj_app_file
252b5132 156#define obj_app_file elf_file_symbol
5110c57e 157#endif
c04f5787 158extern void elf_file_symbol (const char *, int);
252b5132 159
dbe2df79 160extern void obj_elf_section_change_hook (void);
252b5132 161
dbe2df79
AM
162extern void obj_elf_section (int);
163extern void obj_elf_previous (int);
164extern void obj_elf_version (int);
165extern void obj_elf_common (int);
166extern void obj_elf_data (int);
167extern void obj_elf_text (int);
e8cf2216 168extern void obj_elf_change_section
dbe2df79
AM
169 (const char *, int, int, int, const char *, int, int);
170extern struct fix *obj_elf_vtable_inherit (int);
171extern struct fix *obj_elf_vtable_entry (int);
252b5132
RH
172
173/* BFD wants to write the udata field, which is a no-no for the
a161fe53 174 predefined section symbols in bfd/section.c. They are read-only. */
4ca72d38 175#ifndef obj_sec_sym_ok_for_reloc
252b5132 176#define obj_sec_sym_ok_for_reloc(SEC) ((SEC)->owner != 0)
4ca72d38 177#endif
252b5132 178
dbe2df79 179void elf_obj_read_begin_hook (void);
4c63da97
AM
180#ifndef obj_read_begin_hook
181#define obj_read_begin_hook elf_obj_read_begin_hook
182#endif
183
dbe2df79 184void elf_obj_symbol_new_hook (symbolS *);
4c63da97
AM
185#ifndef obj_symbol_new_hook
186#define obj_symbol_new_hook elf_obj_symbol_new_hook
187#endif
188
dbe2df79 189void elf_copy_symbol_attributes (symbolS *, symbolS *);
4ca72d38 190#ifndef OBJ_COPY_SYMBOL_ATTRIBUTES
8fd3e36b
AM
191#define OBJ_COPY_SYMBOL_ATTRIBUTES(DEST, SRC) \
192 (elf_copy_symbol_attributes (DEST, SRC))
4ca72d38 193#endif
252b5132 194
5110c57e
HPN
195#ifndef SEPARATE_STAB_SECTIONS
196/* Avoid ifndef each separate macro setting by wrapping the whole of the
197 stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS
198 caters to ECOFF_DEBUGGING and the right setting of INIT_STAB_SECTIONS
199 and OBJ_PROCESS_STAB too, without needing the tweaks below. */
200
252b5132
RH
201/* Stabs go in a separate section. */
202#define SEPARATE_STAB_SECTIONS 1
203
204/* We need 12 bytes at the start of the section to hold some initial
205 information. */
dbe2df79 206extern void obj_elf_init_stab_section (segT);
252b5132
RH
207#define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg)
208
252b5132 209#ifdef ECOFF_DEBUGGING
252b5132
RH
210/* We smuggle stabs in ECOFF rather than using a separate section.
211 The Irix linker can not handle a separate stabs section. */
212
213#undef SEPARATE_STAB_SECTIONS
214#define SEPARATE_STAB_SECTIONS (!ECOFF_DEBUGGING)
215
216#undef INIT_STAB_SECTION
217#define INIT_STAB_SECTION(seg) \
814f6641 218 ((void) (ECOFF_DEBUGGING ? 0 : (obj_elf_init_stab_section (seg), 0)))
252b5132 219
4ca72d38 220#undef OBJ_PROCESS_STAB
252b5132
RH
221#define OBJ_PROCESS_STAB(seg, what, string, type, other, desc) \
222 if (ECOFF_DEBUGGING) \
223 ecoff_stab ((seg), (what), (string), (type), (other), (desc))
224#endif /* ECOFF_DEBUGGING */
225
bf514e21 226#endif /* SEPARATE_STAB_SECTIONS not defined. */
5110c57e 227
dbe2df79 228extern void elf_frob_symbol (symbolS *, int *);
252b5132
RH
229#ifndef obj_frob_symbol
230#define obj_frob_symbol(symp, punt) elf_frob_symbol (symp, &punt)
231#endif
232
dbe2df79 233extern void elf_pop_insert (void);
4ca72d38 234#ifndef obj_pop_insert
252b5132 235#define obj_pop_insert() elf_pop_insert()
4ca72d38 236#endif
252b5132
RH
237
238#ifndef OBJ_MAYBE_ELF
239#define obj_ecoff_set_ext elf_ecoff_set_ext
252b5132 240struct ecoff_extr;
dbe2df79 241extern void elf_ecoff_set_ext (symbolS *, struct ecoff_extr *);
252b5132 242#endif
3b22753a
L
243extern asection *elf_com_section_ptr;
244extern symbolS * elf_common_parse (int ignore ATTRIBUTE_UNUSED, symbolS *symbolP,
245 addressT size);
252b5132
RH
246
247#endif /* _OBJ_ELF_H */
This page took 0.295987 seconds and 4 git commands to generate.