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