source: trunk/binutils/gas/config/obj-elf.h@ 2446

Last change on this file since 2446 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 7.0 KB
Line 
1/* ELF object file format.
2 Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
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
9 the Free Software Foundation; either version 2, or (at your option)
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/* 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
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
33#ifndef OUTPUT_FLAVOR
34#define OUTPUT_FLAVOR bfd_target_elf_flavour
35#endif
36
37#include "bfd.h"
38
39#define BYTES_IN_WORD 4 /* for now */
40#include "bfd/elf-bfd.h"
41
42#include "targ-cpu.h"
43
44#ifdef TC_ALPHA
45#define ECOFF_DEBUGGING (alpha_flag_mdebug > 0)
46extern int alpha_flag_mdebug;
47#endif
48
49/* For now, always set ECOFF_DEBUGGING for a MIPS target. */
50#ifdef TC_MIPS
51#define ECOFF_DEBUGGING mips_flag_mdebug
52extern int mips_flag_mdebug;
53#endif /* TC_MIPS */
54
55#ifdef OBJ_MAYBE_ECOFF
56#ifndef ECOFF_DEBUGGING
57#define ECOFF_DEBUGGING 1
58#endif
59#endif
60
61/* Additional information we keep for each symbol. */
62struct elf_obj_sy
63{
64 /* Whether the symbol has been marked as local. */
65 int local;
66
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;
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
81};
82
83#define OBJ_SYMFIELD_TYPE struct elf_obj_sy
84
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. */
89#ifndef TARGET_SYMBOL_FIELDS
90#define TARGET_SYMBOL_FIELDS ELF_TARGET_SYMBOL_FIELDS
91#endif
92
93/* #include "targ-cpu.h" */
94
95#ifndef FALSE
96#define FALSE 0
97#define TRUE !FALSE
98#endif
99
100#ifndef obj_begin
101#define obj_begin() elf_begin ()
102#endif
103extern void elf_begin PARAMS ((void));
104
105/* should be conditional on address size! */
106#define elf_symbol(asymbol) ((elf_symbol_type *) (&(asymbol)->the_bfd))
107
108#ifndef S_GET_SIZE
109#define S_GET_SIZE(S) \
110 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size)
111#endif
112#ifndef S_SET_SIZE
113#define S_SET_SIZE(S,V) \
114 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_size = (V))
115#endif
116
117#ifndef S_GET_ALIGN
118#define S_GET_ALIGN(S) \
119 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value)
120#endif
121#ifndef S_SET_ALIGN
122#define S_SET_ALIGN(S,V) \
123 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_value = (V))
124#endif
125
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
131#define S_SET_OTHER(S,V) \
132 (elf_symbol (symbol_get_bfdsym (S))->internal_elf_sym.st_other = (V))
133#endif
134
135extern asection *gdb_section;
136
137#ifndef obj_frob_file
138#define obj_frob_file elf_frob_file
139#endif
140extern void elf_frob_file PARAMS ((void));
141
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
147#ifndef obj_frob_file_after_relocs
148#define obj_frob_file_after_relocs elf_frob_file_after_relocs
149#endif
150extern void elf_frob_file_after_relocs PARAMS ((void));
151
152#ifndef obj_app_file
153#define obj_app_file elf_file_symbol
154#endif
155extern void elf_file_symbol PARAMS ((const char *));
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));
162extern void obj_elf_common PARAMS ((int));
163extern void obj_elf_data PARAMS ((int));
164extern void obj_elf_text PARAMS ((int));
165extern void obj_elf_change_section
166 PARAMS ((const char *, int, int, int, const char *, int, int));
167extern struct fix *obj_elf_vtable_inherit PARAMS ((int));
168extern struct fix *obj_elf_vtable_entry PARAMS ((int));
169
170/* BFD wants to write the udata field, which is a no-no for the
171 predefined section symbols in bfd/section.c. They are read-only. */
172#ifndef obj_sec_sym_ok_for_reloc
173#define obj_sec_sym_ok_for_reloc(SEC) ((SEC)->owner != 0)
174#endif
175
176void elf_obj_read_begin_hook PARAMS ((void));
177#ifndef obj_read_begin_hook
178#define obj_read_begin_hook elf_obj_read_begin_hook
179#endif
180
181void elf_obj_symbol_new_hook PARAMS ((symbolS *));
182#ifndef obj_symbol_new_hook
183#define obj_symbol_new_hook elf_obj_symbol_new_hook
184#endif
185
186void elf_copy_symbol_attributes PARAMS ((symbolS *, symbolS *));
187#ifndef OBJ_COPY_SYMBOL_ATTRIBUTES
188#define OBJ_COPY_SYMBOL_ATTRIBUTES(DEST, SRC) \
189 (elf_copy_symbol_attributes (DEST, SRC))
190#endif
191
192#ifndef SEPARATE_STAB_SECTIONS
193/* Avoid ifndef each separate macro setting by wrapping the whole of the
194 stab group on the assumption that whoever sets SEPARATE_STAB_SECTIONS
195 caters to ECOFF_DEBUGGING and the right setting of INIT_STAB_SECTIONS
196 and OBJ_PROCESS_STAB too, without needing the tweaks below. */
197
198/* Stabs go in a separate section. */
199#define SEPARATE_STAB_SECTIONS 1
200
201/* We need 12 bytes at the start of the section to hold some initial
202 information. */
203extern void obj_elf_init_stab_section PARAMS ((segT));
204#define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg)
205
206#ifdef ECOFF_DEBUGGING
207/* We smuggle stabs in ECOFF rather than using a separate section.
208 The Irix linker can not handle a separate stabs section. */
209
210#undef SEPARATE_STAB_SECTIONS
211#define SEPARATE_STAB_SECTIONS (!ECOFF_DEBUGGING)
212
213#undef INIT_STAB_SECTION
214#define INIT_STAB_SECTION(seg) \
215 ((void) (ECOFF_DEBUGGING ? 0 : (obj_elf_init_stab_section (seg), 0)))
216
217#undef OBJ_PROCESS_STAB
218#define OBJ_PROCESS_STAB(seg, what, string, type, other, desc) \
219 if (ECOFF_DEBUGGING) \
220 ecoff_stab ((seg), (what), (string), (type), (other), (desc))
221#endif /* ECOFF_DEBUGGING */
222
223#endif /* SEPARATE_STAB_SECTIONS not defined. */
224
225extern void elf_frob_symbol PARAMS ((symbolS *, int *));
226#ifndef obj_frob_symbol
227#define obj_frob_symbol(symp, punt) elf_frob_symbol (symp, &punt)
228#endif
229
230extern void elf_pop_insert PARAMS ((void));
231#ifndef obj_pop_insert
232#define obj_pop_insert() elf_pop_insert()
233#endif
234
235#ifndef OBJ_MAYBE_ELF
236#define obj_ecoff_set_ext elf_ecoff_set_ext
237#ifdef ANSI_PROTOTYPES
238struct ecoff_extr;
239#endif
240extern void elf_ecoff_set_ext PARAMS ((symbolS *, struct ecoff_extr *));
241#endif
242
243#endif /* _OBJ_ELF_H */
Note: See TracBrowser for help on using the repository browser.