Fix typos
[deliverable/binutils-gdb.git] / gas / config / obj-elf.h
CommitLineData
252b5132 1/* ELF object file format.
4c63da97 2 Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
49309057 3 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
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
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
3f9b03b5 37#include "bfd.h"
252b5132
RH
38
39#define BYTES_IN_WORD 4 /* for now */
40#include "bfd/elf-bfd.h"
41
49309057
ILT
42#include "targ-cpu.h"
43
44#ifdef TC_ALPHA
a8316fe2 45#define ECOFF_DEBUGGING (alpha_flag_mdebug > 0)
49309057
ILT
46extern int alpha_flag_mdebug;
47#endif
48
49/* For now, always set ECOFF_DEBUGGING for a MIPS target. */
50#ifdef TC_MIPS
51#ifdef MIPS_STABS_ELF
52#define ECOFF_DEBUGGING 0
53#else
54#define ECOFF_DEBUGGING 1
55#endif /* MIPS_STABS_ELF */
56#endif /* TC_MIPS */
57
4c63da97
AM
58#ifdef OBJ_MAYBE_ECOFF
59#ifndef ECOFF_DEBUGGING
60#define ECOFF_DEBUGGING 1
61#endif
62#endif
63
252b5132 64/* Additional information we keep for each symbol. */
252b5132
RH
65struct elf_obj_sy
66{
49309057
ILT
67 /* Whether the symbol has been marked as local. */
68 int local;
69
252b5132
RH
70 /* Use this to keep track of .size expressions that involve
71 differences that we can't compute yet. */
72 expressionS *size;
73
74 /* The name specified by the .symver directive. */
75 char *versioned_name;
49309057
ILT
76
77#ifdef ECOFF_DEBUGGING
78 /* If we are generating ECOFF debugging information, we need some
79 additional fields for each symbol. */
80 struct efdr *ecoff_file;
81 struct localsym *ecoff_symbol;
82 valueT ecoff_extern_size;
83#endif
252b5132 84};
252b5132
RH
85
86#define OBJ_SYMFIELD_TYPE struct elf_obj_sy
87
0d2bcfaf
NC
88/* Symbol fields used by the ELF back end. */
89#define ELF_TARGET_SYMBOL_FIELDS int local:1;
90
91/* Don't change this; change ELF_TARGET_SYMBOL_FIELDS instead. */
92#define TARGET_SYMBOL_FIELDS ELF_TARGET_SYMBOL_FIELDS
93
94/* #include "targ-cpu.h" */
95
252b5132
RH
96#ifndef FALSE
97#define FALSE 0
98#define TRUE !FALSE
99#endif
100
5110c57e 101#ifndef obj_begin
252b5132 102#define obj_begin() elf_begin ()
5110c57e 103#endif
252b5132
RH
104extern void elf_begin PARAMS ((void));
105
106/* should be conditional on address size! */
814f6641 107#define elf_symbol(asymbol) ((elf_symbol_type *) (&(asymbol)->the_bfd))
252b5132 108
4ca72d38 109#ifndef S_GET_SIZE
49309057
ILT
110#define S_GET_SIZE(S) \
111 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size)
4ca72d38
AM
112#endif
113#ifndef S_SET_SIZE
252b5132 114#define S_SET_SIZE(S,V) \
49309057 115 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size = (V))
4ca72d38 116#endif
252b5132 117
4ca72d38 118#ifndef S_GET_ALIGN
49309057
ILT
119#define S_GET_ALIGN(S) \
120 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value)
4ca72d38
AM
121#endif
122#ifndef S_SET_ALIGN
252b5132 123#define S_SET_ALIGN(S,V) \
49309057 124 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value = (V))
4ca72d38 125#endif
252b5132 126
4c63da97
AM
127int elf_s_get_other PARAMS ((symbolS *));
128#ifndef S_GET_OTHER
129#define S_GET_OTHER(S) (elf_s_get_other (S))
130#endif
131#ifndef S_SET_OTHER
252b5132 132#define S_SET_OTHER(S,V) \
49309057 133 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V))
4c63da97 134#endif
252b5132
RH
135
136extern asection *gdb_section;
137
4ca72d38 138#ifndef obj_frob_file
252b5132 139#define obj_frob_file elf_frob_file
4ca72d38 140#endif
252b5132
RH
141extern void elf_frob_file PARAMS ((void));
142
339681c0
L
143#ifndef obj_frob_file_before_adjust
144#define obj_frob_file_before_adjust elf_frob_file_before_adjust
145#endif
146extern void elf_frob_file_before_adjust PARAMS ((void));
147
4ca72d38 148#ifndef obj_frob_file_after_relocs
252b5132 149#define obj_frob_file_after_relocs elf_frob_file_after_relocs
4ca72d38 150#endif
252b5132
RH
151extern void elf_frob_file_after_relocs PARAMS ((void));
152
5110c57e 153#ifndef obj_app_file
252b5132 154#define obj_app_file elf_file_symbol
5110c57e
HPN
155#endif
156extern void elf_file_symbol PARAMS ((const char *));
252b5132
RH
157
158extern void obj_elf_section_change_hook PARAMS ((void));
159
160extern void obj_elf_section PARAMS ((int));
161extern void obj_elf_previous PARAMS ((int));
162extern void obj_elf_version PARAMS ((int));
40b10cc7
NC
163extern void obj_elf_common PARAMS ((int));
164extern void obj_elf_data PARAMS ((int));
165extern void obj_elf_text PARAMS ((int));
904a31bf
AM
166extern struct fix *obj_elf_vtable_inherit PARAMS ((int));
167extern struct fix *obj_elf_vtable_entry PARAMS ((int));
252b5132
RH
168
169/* BFD wants to write the udata field, which is a no-no for the
170 globally defined sections. */
4ca72d38 171#ifndef obj_sec_sym_ok_for_reloc
252b5132 172#define obj_sec_sym_ok_for_reloc(SEC) ((SEC)->owner != 0)
4ca72d38 173#endif
252b5132 174
4c63da97
AM
175void elf_obj_read_begin_hook PARAMS ((void));
176#ifndef obj_read_begin_hook
177#define obj_read_begin_hook elf_obj_read_begin_hook
178#endif
179
180void elf_obj_symbol_new_hook PARAMS ((symbolS *));
181#ifndef obj_symbol_new_hook
182#define obj_symbol_new_hook elf_obj_symbol_new_hook
183#endif
184
252b5132
RH
185/* When setting one symbol equal to another, by default we probably
186 want them to have the same "size", whatever it means in the current
187 context. */
4ca72d38 188#ifndef OBJ_COPY_SYMBOL_ATTRIBUTES
252b5132
RH
189#define OBJ_COPY_SYMBOL_ATTRIBUTES(DEST,SRC) \
190do \
191 { \
49309057
ILT
192 struct elf_obj_sy *srcelf = symbol_get_obj (SRC); \
193 struct elf_obj_sy *destelf = symbol_get_obj (DEST); \
194 if (srcelf->size) \
252b5132 195 { \
49309057
ILT
196 if (destelf->size == NULL) \
197 destelf->size = \
252b5132 198 (expressionS *) xmalloc (sizeof (expressionS)); \
49309057 199 *destelf->size = *srcelf->size; \
252b5132
RH
200 } \
201 else \
202 { \
49309057
ILT
203 if (destelf->size != NULL) \
204 free (destelf->size); \
205 destelf->size = NULL; \
252b5132
RH
206 } \
207 S_SET_SIZE ((DEST), S_GET_SIZE (SRC)); \
208 S_SET_OTHER ((DEST), S_GET_OTHER (SRC)); \
209 } \
210while (0)
4ca72d38 211#endif
252b5132 212
5110c57e
HPN
213#ifndef SEPARATE_STAB_SECTIONS
214/* Avoid ifndef each separate macro setting by wrapping the whole of the
215 stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS
216 caters to ECOFF_DEBUGGING and the right setting of INIT_STAB_SECTIONS
217 and OBJ_PROCESS_STAB too, without needing the tweaks below. */
218
252b5132
RH
219/* Stabs go in a separate section. */
220#define SEPARATE_STAB_SECTIONS 1
221
222/* We need 12 bytes at the start of the section to hold some initial
223 information. */
224extern void obj_elf_init_stab_section PARAMS ((segT));
225#define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg)
226
252b5132 227#ifdef ECOFF_DEBUGGING
252b5132
RH
228/* We smuggle stabs in ECOFF rather than using a separate section.
229 The Irix linker can not handle a separate stabs section. */
230
231#undef SEPARATE_STAB_SECTIONS
232#define SEPARATE_STAB_SECTIONS (!ECOFF_DEBUGGING)
233
234#undef INIT_STAB_SECTION
235#define INIT_STAB_SECTION(seg) \
814f6641 236 ((void) (ECOFF_DEBUGGING ? 0 : (obj_elf_init_stab_section (seg), 0)))
252b5132 237
4ca72d38 238#undef OBJ_PROCESS_STAB
252b5132
RH
239#define OBJ_PROCESS_STAB(seg, what, string, type, other, desc) \
240 if (ECOFF_DEBUGGING) \
241 ecoff_stab ((seg), (what), (string), (type), (other), (desc))
242#endif /* ECOFF_DEBUGGING */
243
bf514e21 244#endif /* SEPARATE_STAB_SECTIONS not defined. */
5110c57e 245
49309057 246extern void elf_frob_symbol PARAMS ((symbolS *, int *));
252b5132
RH
247#ifndef obj_frob_symbol
248#define obj_frob_symbol(symp, punt) elf_frob_symbol (symp, &punt)
249#endif
250
251extern void elf_pop_insert PARAMS ((void));
4ca72d38 252#ifndef obj_pop_insert
252b5132 253#define obj_pop_insert() elf_pop_insert()
4ca72d38 254#endif
252b5132
RH
255
256#ifndef OBJ_MAYBE_ELF
257#define obj_ecoff_set_ext elf_ecoff_set_ext
258#ifdef ANSI_PROTOTYPES
259struct ecoff_extr;
260#endif
49309057 261extern void elf_ecoff_set_ext PARAMS ((symbolS *, struct ecoff_extr *));
252b5132
RH
262#endif
263
264#endif /* _OBJ_ELF_H */
This page took 0.081215 seconds and 4 git commands to generate.