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