]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gas/config/obj-elf.h
merge from gcc
[thirdparty/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,
aa820537 3 2002, 2003, 2004, 2005, 2006, 2007, 2009 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
ec2655a6 9 the Free Software Foundation; either version 3, 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 100
199114c2
AS
101#ifndef LOCAL_LABEL_PREFIX
102#define LOCAL_LABEL_PREFIX '.'
103#endif
104
252b5132 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
dbe2df79 126int elf_s_get_other (symbolS *);
4c63da97
AM
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
dbe2df79 140extern void elf_frob_file (void);
252b5132 141
339681c0
L
142#ifndef obj_frob_file_before_adjust
143#define obj_frob_file_before_adjust elf_frob_file_before_adjust
144#endif
dbe2df79 145extern void elf_frob_file_before_adjust (void);
339681c0 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
dbe2df79 150extern void elf_frob_file_after_relocs (void);
252b5132 151
07a53e5c
RH
152/* If the target doesn't have special processing for labels, take care of
153 dwarf2 output at the object file level. */
154#ifndef tc_frob_label
155#include "dwarf2dbg.h"
156#define obj_frob_label dwarf2_emit_label
157#endif
158
5110c57e 159#ifndef obj_app_file
252b5132 160#define obj_app_file elf_file_symbol
5110c57e 161#endif
c04f5787 162extern void elf_file_symbol (const char *, int);
252b5132 163
dbe2df79 164extern void obj_elf_section_change_hook (void);
252b5132 165
dbe2df79 166extern void obj_elf_section (int);
52b010e4 167extern char * obj_elf_section_name (void);
dbe2df79
AM
168extern void obj_elf_previous (int);
169extern void obj_elf_version (int);
170extern void obj_elf_common (int);
171extern void obj_elf_data (int);
172extern void obj_elf_text (int);
e8cf2216 173extern void obj_elf_change_section
01e1a5bc 174 (const char *, int, bfd_vma, int, const char *, int, int);
dbe2df79
AM
175extern struct fix *obj_elf_vtable_inherit (int);
176extern struct fix *obj_elf_vtable_entry (int);
252b5132
RH
177
178/* BFD wants to write the udata field, which is a no-no for the
a161fe53 179 predefined section symbols in bfd/section.c. They are read-only. */
4ca72d38 180#ifndef obj_sec_sym_ok_for_reloc
252b5132 181#define obj_sec_sym_ok_for_reloc(SEC) ((SEC)->owner != 0)
4ca72d38 182#endif
252b5132 183
dbe2df79 184void elf_obj_read_begin_hook (void);
4c63da97
AM
185#ifndef obj_read_begin_hook
186#define obj_read_begin_hook elf_obj_read_begin_hook
187#endif
188
dbe2df79 189void elf_obj_symbol_new_hook (symbolS *);
4c63da97
AM
190#ifndef obj_symbol_new_hook
191#define obj_symbol_new_hook elf_obj_symbol_new_hook
192#endif
193
dbe2df79 194void elf_copy_symbol_attributes (symbolS *, symbolS *);
4ca72d38 195#ifndef OBJ_COPY_SYMBOL_ATTRIBUTES
8fd3e36b
AM
196#define OBJ_COPY_SYMBOL_ATTRIBUTES(DEST, SRC) \
197 (elf_copy_symbol_attributes (DEST, SRC))
4ca72d38 198#endif
252b5132 199
5110c57e
HPN
200#ifndef SEPARATE_STAB_SECTIONS
201/* Avoid ifndef each separate macro setting by wrapping the whole of the
202 stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS
203 caters to ECOFF_DEBUGGING and the right setting of INIT_STAB_SECTIONS
204 and OBJ_PROCESS_STAB too, without needing the tweaks below. */
205
252b5132
RH
206/* Stabs go in a separate section. */
207#define SEPARATE_STAB_SECTIONS 1
208
209/* We need 12 bytes at the start of the section to hold some initial
210 information. */
dbe2df79 211extern void obj_elf_init_stab_section (segT);
252b5132
RH
212#define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg)
213
252b5132 214#ifdef ECOFF_DEBUGGING
252b5132
RH
215/* We smuggle stabs in ECOFF rather than using a separate section.
216 The Irix linker can not handle a separate stabs section. */
217
218#undef SEPARATE_STAB_SECTIONS
219#define SEPARATE_STAB_SECTIONS (!ECOFF_DEBUGGING)
220
221#undef INIT_STAB_SECTION
222#define INIT_STAB_SECTION(seg) \
814f6641 223 ((void) (ECOFF_DEBUGGING ? 0 : (obj_elf_init_stab_section (seg), 0)))
252b5132 224
4ca72d38 225#undef OBJ_PROCESS_STAB
252b5132
RH
226#define OBJ_PROCESS_STAB(seg, what, string, type, other, desc) \
227 if (ECOFF_DEBUGGING) \
228 ecoff_stab ((seg), (what), (string), (type), (other), (desc))
229#endif /* ECOFF_DEBUGGING */
230
bf514e21 231#endif /* SEPARATE_STAB_SECTIONS not defined. */
5110c57e 232
dbe2df79 233extern void elf_frob_symbol (symbolS *, int *);
252b5132
RH
234#ifndef obj_frob_symbol
235#define obj_frob_symbol(symp, punt) elf_frob_symbol (symp, &punt)
236#endif
237
dbe2df79 238extern void elf_pop_insert (void);
4ca72d38 239#ifndef obj_pop_insert
252b5132 240#define obj_pop_insert() elf_pop_insert()
4ca72d38 241#endif
252b5132
RH
242
243#ifndef OBJ_MAYBE_ELF
ae4a729b 244/* If OBJ_MAYBE_ELF then obj-multi.h will define obj_ecoff_set_ext. */
252b5132 245#define obj_ecoff_set_ext elf_ecoff_set_ext
252b5132 246struct ecoff_extr;
dbe2df79 247extern void elf_ecoff_set_ext (symbolS *, struct ecoff_extr *);
252b5132 248#endif
3b22753a
L
249extern asection *elf_com_section_ptr;
250extern symbolS * elf_common_parse (int ignore ATTRIBUTE_UNUSED, symbolS *symbolP,
251 addressT size);
252b5132
RH
252
253#endif /* _OBJ_ELF_H */