~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/gas/config/obj-elf.h

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* ELF object file format.
 
2
   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
 
3
   2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
 
4
   Free Software Foundation, Inc.
 
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
 
10
   the Free Software Foundation; either version 3, or (at your option)
 
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
 
20
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
 
21
   02110-1301, USA.  */
 
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
 
 
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
 
 
34
#ifndef OUTPUT_FLAVOR
 
35
#define OUTPUT_FLAVOR bfd_target_elf_flavour
 
36
#endif
 
37
 
 
38
#define BYTES_IN_WORD 4         /* for now */
 
39
#include "bfd/elf-bfd.h"
 
40
 
 
41
#include "targ-cpu.h"
 
42
 
 
43
#ifdef TC_ALPHA
 
44
#define ECOFF_DEBUGGING (alpha_flag_mdebug > 0)
 
45
extern int alpha_flag_mdebug;
 
46
#endif
 
47
 
 
48
/* For now, always set ECOFF_DEBUGGING for a MIPS target.  */
 
49
#ifdef TC_MIPS
 
50
#define ECOFF_DEBUGGING mips_flag_mdebug
 
51
extern int mips_flag_mdebug;
 
52
#endif /* TC_MIPS */
 
53
 
 
54
#ifdef OBJ_MAYBE_ECOFF
 
55
#ifndef ECOFF_DEBUGGING
 
56
#define ECOFF_DEBUGGING 1
 
57
#endif
 
58
#endif
 
59
 
 
60
/* Additional information we keep for each symbol.  */
 
61
struct elf_obj_sy
 
62
{
 
63
  /* Whether the symbol has been marked as local.  */
 
64
  int local;
 
65
 
 
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;
 
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
 
80
};
 
81
 
 
82
#define OBJ_SYMFIELD_TYPE struct elf_obj_sy
 
83
 
 
84
#ifndef FALSE
 
85
#define FALSE 0
 
86
#define TRUE  !FALSE
 
87
#endif
 
88
 
 
89
#ifndef obj_begin
 
90
#define obj_begin() elf_begin ()
 
91
#endif
 
92
extern void elf_begin (void);
 
93
 
 
94
#ifndef LOCAL_LABEL_PREFIX
 
95
#define LOCAL_LABEL_PREFIX '.'
 
96
#endif
 
97
 
 
98
/* should be conditional on address size! */
 
99
#define elf_symbol(asymbol) ((elf_symbol_type *) (&(asymbol)->the_bfd))
 
100
 
 
101
#ifndef S_GET_SIZE
 
102
#define S_GET_SIZE(S) \
 
103
  (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size)
 
104
#endif
 
105
#ifndef S_SET_SIZE
 
106
#define S_SET_SIZE(S,V) \
 
107
  (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size = (V))
 
108
#endif
 
109
 
 
110
#ifndef S_GET_ALIGN
 
111
#define S_GET_ALIGN(S) \
 
112
  (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value)
 
113
#endif
 
114
#ifndef S_SET_ALIGN
 
115
#define S_SET_ALIGN(S,V) \
 
116
  (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value = (V))
 
117
#endif
 
118
 
 
119
int elf_s_get_other (symbolS *);
 
120
#ifndef S_GET_OTHER
 
121
#define S_GET_OTHER(S)  (elf_s_get_other (S))
 
122
#endif
 
123
#ifndef S_SET_OTHER
 
124
#define S_SET_OTHER(S,V) \
 
125
  (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V))
 
126
#endif
 
127
 
 
128
extern asection *gdb_section;
 
129
 
 
130
#ifndef obj_frob_file
 
131
#define obj_frob_file  elf_frob_file
 
132
#endif
 
133
extern void elf_frob_file (void);
 
134
 
 
135
#ifndef obj_frob_file_before_adjust
 
136
#define obj_frob_file_before_adjust  elf_frob_file_before_adjust
 
137
#endif
 
138
extern void elf_frob_file_before_adjust (void);
 
139
 
 
140
#ifndef obj_frob_file_after_relocs
 
141
#define obj_frob_file_after_relocs  elf_frob_file_after_relocs
 
142
#endif
 
143
extern void elf_frob_file_after_relocs (void);
 
144
 
 
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
 
 
152
#ifndef obj_app_file
 
153
#define obj_app_file elf_file_symbol
 
154
#endif
 
155
extern void elf_file_symbol (const char *, int);
 
156
 
 
157
extern void obj_elf_section_change_hook (void);
 
158
 
 
159
extern void obj_elf_section (int);
 
160
extern char * obj_elf_section_name (void);
 
161
extern void obj_elf_previous (int);
 
162
extern void obj_elf_version (int);
 
163
extern void obj_elf_common (int);
 
164
extern void obj_elf_data (int);
 
165
extern void obj_elf_text (int);
 
166
extern void obj_elf_change_section
 
167
  (const char *, int, bfd_vma, int, const char *, int, int);
 
168
extern struct fix *obj_elf_vtable_inherit (int);
 
169
extern struct fix *obj_elf_vtable_entry (int);
 
170
extern int obj_elf_vendor_attribute (int);
 
171
 
 
172
/* BFD wants to write the udata field, which is a no-no for the
 
173
   predefined section symbols in bfd/section.c.  They are read-only.  */
 
174
#ifndef obj_sec_sym_ok_for_reloc
 
175
#define obj_sec_sym_ok_for_reloc(SEC)   ((SEC)->owner != 0)
 
176
#endif
 
177
 
 
178
void elf_obj_read_begin_hook (void);
 
179
#ifndef obj_read_begin_hook
 
180
#define obj_read_begin_hook     elf_obj_read_begin_hook
 
181
#endif
 
182
 
 
183
void elf_obj_symbol_new_hook (symbolS *);
 
184
#ifndef obj_symbol_new_hook
 
185
#define obj_symbol_new_hook     elf_obj_symbol_new_hook
 
186
#endif
 
187
 
 
188
void elf_copy_symbol_attributes (symbolS *, symbolS *);
 
189
#ifndef OBJ_COPY_SYMBOL_ATTRIBUTES
 
190
#define OBJ_COPY_SYMBOL_ATTRIBUTES(DEST, SRC) \
 
191
  (elf_copy_symbol_attributes (DEST, SRC))
 
192
#endif
 
193
 
 
194
void elf_adjust_symtab (void);
 
195
#ifndef obj_adjust_symtab
 
196
#define obj_adjust_symtab       elf_adjust_symtab
 
197
#endif
 
198
 
 
199
#ifndef SEPARATE_STAB_SECTIONS
 
200
/* Avoid ifndef each separate macro setting by wrapping the whole of the
 
201
   stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS
 
202
   caters to ECOFF_DEBUGGING and the right setting of INIT_STAB_SECTIONS
 
203
   and OBJ_PROCESS_STAB too, without needing the tweaks below.  */
 
204
 
 
205
/* Stabs go in a separate section.  */
 
206
#define SEPARATE_STAB_SECTIONS 1
 
207
 
 
208
/* We need 12 bytes at the start of the section to hold some initial
 
209
   information.  */
 
210
extern void obj_elf_init_stab_section (segT);
 
211
#define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg)
 
212
 
 
213
#ifdef ECOFF_DEBUGGING
 
214
/* We smuggle stabs in ECOFF rather than using a separate section.
 
215
   The Irix linker can not handle a separate stabs section.  */
 
216
 
 
217
#undef  SEPARATE_STAB_SECTIONS
 
218
#define SEPARATE_STAB_SECTIONS (!ECOFF_DEBUGGING)
 
219
 
 
220
#undef  INIT_STAB_SECTION
 
221
#define INIT_STAB_SECTION(seg) \
 
222
  ((void) (ECOFF_DEBUGGING ? 0 : (obj_elf_init_stab_section (seg), 0)))
 
223
 
 
224
#undef OBJ_PROCESS_STAB
 
225
#define OBJ_PROCESS_STAB(seg, what, string, type, other, desc)          \
 
226
  if (ECOFF_DEBUGGING)                                                  \
 
227
    ecoff_stab ((seg), (what), (string), (type), (other), (desc))
 
228
#endif /* ECOFF_DEBUGGING */
 
229
 
 
230
#endif /* SEPARATE_STAB_SECTIONS not defined.  */
 
231
 
 
232
extern void elf_frob_symbol (symbolS *, int *);
 
233
#ifndef obj_frob_symbol
 
234
#define obj_frob_symbol(symp, punt) elf_frob_symbol (symp, &punt)
 
235
#endif
 
236
 
 
237
extern void elf_pop_insert (void);
 
238
#ifndef obj_pop_insert
 
239
#define obj_pop_insert()        elf_pop_insert()
 
240
#endif
 
241
 
 
242
#ifndef OBJ_MAYBE_ELF
 
243
/* If OBJ_MAYBE_ELF then obj-multi.h will define obj_ecoff_set_ext.  */
 
244
#define obj_ecoff_set_ext elf_ecoff_set_ext
 
245
struct ecoff_extr;
 
246
extern void elf_ecoff_set_ext (symbolS *, struct ecoff_extr *);
 
247
#endif
 
248
extern asection *elf_com_section_ptr;
 
249
extern symbolS * elf_common_parse (int ignore ATTRIBUTE_UNUSED, symbolS *symbolP,
 
250
                                   addressT size);
 
251
 
 
252
#endif /* _OBJ_ELF_H */