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