* elf-bfd.h (struct bfd_elf_section_data): Rename "group" to
[external/binutils.git] / bfd / elf-bfd.h
1 /* BFD back-end data structures for ELF files.
2    Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
3    Free Software Foundation, Inc.
4    Written by Cygnus Support.
5
6 This file is part of BFD, the Binary File Descriptor library.
7
8 This program 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 2 of the License, or
11 (at your option) any later version.
12
13 This program 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 this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22 #ifndef _LIBELF_H_
23 #define _LIBELF_H_ 1
24
25 #include "elf/common.h"
26 #include "elf/internal.h"
27 #include "elf/external.h"
28 #include "bfdlink.h"
29
30 /* The number of entries in a section is its size divided by the size
31    of a single entry.  This is normally only applicable to reloc and
32    symbol table sections.  */
33 #define NUM_SHDR_ENTRIES(shdr) ((shdr)->sh_size / (shdr)->sh_entsize)
34
35 /* If size isn't specified as 64 or 32, NAME macro should fail.  */
36 /* Do not "beautify" the CONCAT* macro args.  Traditional C will not
37    remove whitespace added here, and thus will fail to concatenate
38    the tokens.  */
39 #ifndef NAME
40 #if ARCH_SIZE==64
41 #define NAME(x,y) CONCAT4 (x,64,_,y)
42 #endif
43 #if ARCH_SIZE==32
44 #define NAME(x,y) CONCAT4 (x,32,_,y)
45 #endif
46 #endif
47
48 #ifndef NAME
49 #define NAME(x,y) CONCAT4 (x,NOSIZE,_,y)
50 #endif
51
52 #define ElfNAME(X)      NAME(Elf,X)
53 #define elfNAME(X)      NAME(elf,X)
54
55 /* Information held for an ELF symbol.  The first field is the
56    corresponding asymbol.  Every symbol is an ELF file is actually a
57    pointer to this structure, although it is often handled as a
58    pointer to an asymbol.  */
59
60 typedef struct
61 {
62   /* The BFD symbol.  */
63   asymbol symbol;
64   /* ELF symbol information.  */
65   Elf_Internal_Sym internal_elf_sym;
66   /* Backend specific information.  */
67   union
68     {
69       unsigned int hppa_arg_reloc;
70       PTR mips_extr;
71       PTR any;
72     }
73   tc_data;
74
75   /* Version information.  This is from an Elf_Internal_Versym
76      structure in a SHT_GNU_versym section.  It is zero if there is no
77      version information.  */
78   unsigned short version;
79
80 } elf_symbol_type;
81 \f
82 /* ELF linker hash table entries.  */
83
84 struct elf_link_hash_entry
85 {
86   struct bfd_link_hash_entry root;
87
88   /* Symbol index in output file.  This is initialized to -1.  It is
89      set to -2 if the symbol is used by a reloc.  */
90   long indx;
91
92   /* Symbol index as a dynamic symbol.  Initialized to -1, and remains
93      -1 if this is not a dynamic symbol.  */
94   /* ??? Note that this is consistently used as a synonym for tests
95      against whether we can perform various simplifying transformations
96      to the code.  (E.g. changing a pc-relative jump to a PLT entry
97      into a pc-relative jump to the target function.)  That test, which
98      is often relatively complex, and someplaces wrong or incomplete,
99      should really be replaced by a predicate in elflink.c.
100
101      End result: this field -1 does not indicate that the symbol is
102      not in the dynamic symbol table, but rather that the symbol is
103      not visible outside this DSO.  */
104   long dynindx;
105
106   /* String table index in .dynstr if this is a dynamic symbol.  */
107   unsigned long dynstr_index;
108
109   /* Hash value of the name computed using the ELF hash function.  */
110   unsigned long elf_hash_value;
111
112   /* If this is a weak defined symbol from a dynamic object, this
113      field points to a defined symbol with the same value, if there is
114      one.  Otherwise it is NULL.  */
115   struct elf_link_hash_entry *weakdef;
116
117   /* If this symbol is used in the linker created sections, the processor
118      specific backend uses this field to map the field into the offset
119      from the beginning of the section.  */
120   struct elf_linker_section_pointers *linker_section_pointer;
121
122   /* Version information.  */
123   union
124   {
125     /* This field is used for a symbol which is not defined in a
126        regular object.  It points to the version information read in
127        from the dynamic object.  */
128     Elf_Internal_Verdef *verdef;
129     /* This field is used for a symbol which is defined in a regular
130        object.  It is set up in size_dynamic_sections.  It points to
131        the version information we should write out for this symbol.  */
132     struct bfd_elf_version_tree *vertree;
133   } verinfo;
134
135   /* Virtual table entry use information.  This array is nominally of size
136      size/sizeof(target_void_pointer), though we have to be able to assume
137      and track a size while the symbol is still undefined.  It is indexed
138      via offset/sizeof(target_void_pointer).  */
139   size_t vtable_entries_size;
140   boolean *vtable_entries_used;
141
142   /* Virtual table derivation info.  */
143   struct elf_link_hash_entry *vtable_parent;
144
145   /* If this symbol requires an entry in the global offset table, the
146      processor specific backend uses this field to track usage and
147      final offset.  We use a union and two names primarily to document
148      the intent of any particular piece of code.  The field should be
149      used as a count until size_dynamic_sections, at which point the
150      contents of the .got is fixed.  Afterward, if this field is -1,
151      then the symbol does not require a global offset table entry.  */
152   union
153     {
154       bfd_signed_vma refcount;
155       bfd_vma offset;
156     } got;
157
158   /* Same, but tracks a procedure linkage table entry.  */
159   union
160     {
161       bfd_signed_vma refcount;
162       bfd_vma offset;
163     } plt;
164
165   /* Symbol size.  */
166   bfd_size_type size;
167
168   /* Symbol type (STT_NOTYPE, STT_OBJECT, etc.).  */
169   char type;
170
171   /* Symbol st_other value, symbol visibility.  */
172   unsigned char other;
173
174   /* Some flags; legal values follow.  */
175   unsigned short elf_link_hash_flags;
176   /* Symbol is referenced by a non-shared object.  */
177 #define ELF_LINK_HASH_REF_REGULAR 01
178   /* Symbol is defined by a non-shared object.  */
179 #define ELF_LINK_HASH_DEF_REGULAR 02
180   /* Symbol is referenced by a shared object.  */
181 #define ELF_LINK_HASH_REF_DYNAMIC 04
182   /* Symbol is defined by a shared object.  */
183 #define ELF_LINK_HASH_DEF_DYNAMIC 010
184   /* Symbol has a non-weak reference from a non-shared object.  */
185 #define ELF_LINK_HASH_REF_REGULAR_NONWEAK 020
186   /* Dynamic symbol has been adjustd.  */
187 #define ELF_LINK_HASH_DYNAMIC_ADJUSTED 040
188   /* Symbol needs a copy reloc.  */
189 #define ELF_LINK_HASH_NEEDS_COPY 0100
190   /* Symbol needs a procedure linkage table entry.  */
191 #define ELF_LINK_HASH_NEEDS_PLT 0200
192   /* Symbol appears in a non-ELF input file.  */
193 #define ELF_LINK_NON_ELF 0400
194   /* Symbol should be marked as hidden in the version information.  */
195 #define ELF_LINK_HIDDEN 01000
196   /* Symbol was forced to local scope due to a version script file.  */
197 #define ELF_LINK_FORCED_LOCAL 02000
198   /* Symbol was marked during garbage collection.  */
199 #define ELF_LINK_HASH_MARK 04000
200   /* Symbol is referenced by a non-GOT/non-PLT relocation.  This is
201      not currently set by all the backends.  */
202 #define ELF_LINK_NON_GOT_REF 010000
203 };
204
205 /* Records local symbols to be emitted in the dynamic symbol table.  */
206
207 struct elf_link_local_dynamic_entry
208 {
209   struct elf_link_local_dynamic_entry *next;
210
211   /* The input bfd this symbol came from.  */
212   bfd *input_bfd;
213
214   /* The index of the local symbol being copied.  */
215   long input_indx;
216
217   /* The index in the outgoing dynamic symbol table.  */
218   long dynindx;
219
220   /* A copy of the input symbol.  */
221   Elf_Internal_Sym isym;
222 };
223
224 /* ELF linker hash table.  */
225
226 struct elf_link_hash_table
227 {
228   struct bfd_link_hash_table root;
229
230   /* Whether we have created the special dynamic sections required
231      when linking against or generating a shared object.  */
232   boolean dynamic_sections_created;
233
234   /* The BFD used to hold special sections created by the linker.
235      This will be the first BFD found which requires these sections to
236      be created.  */
237   bfd *dynobj;
238
239   /* The value to use when initialising got.refcount/offset and
240      plt.refcount/offset in an elf_link_hash_entry.  Set to zero when
241      the values are refcounts.  Set to -1 in size_dynamic_sections
242      when the values may be offsets.  */
243   bfd_signed_vma init_refcount;
244
245   /* The number of symbols found in the link which must be put into
246      the .dynsym section.  */
247   bfd_size_type dynsymcount;
248
249   /* The string table of dynamic symbols, which becomes the .dynstr
250      section.  */
251   struct bfd_strtab_hash *dynstr;
252
253   /* The number of buckets in the hash table in the .hash section.
254      This is based on the number of dynamic symbols.  */
255   bfd_size_type bucketcount;
256
257   /* A linked list of DT_NEEDED names found in dynamic objects
258      included in the link.  */
259   struct bfd_link_needed_list *needed;
260
261   /* The _GLOBAL_OFFSET_TABLE_ symbol.  */
262   struct elf_link_hash_entry *hgot;
263
264   /* A pointer to information used to link stabs in sections.  */
265   PTR stab_info;
266
267   /* A pointer to information used to merge SEC_MERGE sections.  */
268   PTR merge_info;
269
270   /* A linked list of local symbols to be added to .dynsym.  */
271   struct elf_link_local_dynamic_entry *dynlocal;
272
273   /* A linked list of DT_RPATH/DT_RUNPATH names found in dynamic
274      objects included in the link.  */
275   struct bfd_link_needed_list *runpath;
276 };
277
278 /* Look up an entry in an ELF linker hash table.  */
279
280 #define elf_link_hash_lookup(table, string, create, copy, follow)       \
281   ((struct elf_link_hash_entry *)                                       \
282    bfd_link_hash_lookup (&(table)->root, (string), (create),            \
283                          (copy), (follow)))
284
285 /* Traverse an ELF linker hash table.  */
286
287 #define elf_link_hash_traverse(table, func, info)                       \
288   (bfd_link_hash_traverse                                               \
289    (&(table)->root,                                                     \
290     (boolean (*) PARAMS ((struct bfd_link_hash_entry *, PTR))) (func),  \
291     (info)))
292
293 /* Get the ELF linker hash table from a link_info structure.  */
294
295 #define elf_hash_table(p) ((struct elf_link_hash_table *) ((p)->hash))
296
297 /* Returns true if the hash table is a struct elf_link_hash_table.  */
298 #define is_elf_hash_table(p)                                            \
299   ((p)->hash->type == bfd_link_elf_hash_table)
300 \f
301 /* Constant information held for an ELF backend.  */
302
303 struct elf_size_info {
304   unsigned char sizeof_ehdr, sizeof_phdr, sizeof_shdr;
305   unsigned char sizeof_rel, sizeof_rela, sizeof_sym, sizeof_dyn, sizeof_note;
306
307   /* The size of entries in the .hash section.  */
308   unsigned char sizeof_hash_entry;
309
310   /* The number of internal relocations to allocate per external
311      relocation entry.  */
312   unsigned char int_rels_per_ext_rel;
313
314   unsigned char arch_size, file_align;
315   unsigned char elfclass, ev_current;
316   int (*write_out_phdrs)
317     PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
318   boolean (*write_shdrs_and_ehdr)
319     PARAMS ((bfd *));
320   void (*write_relocs)
321     PARAMS ((bfd *, asection *, PTR));
322   void (*swap_symbol_out)
323     PARAMS ((bfd *, const Elf_Internal_Sym *, PTR));
324   boolean (*slurp_reloc_table)
325     PARAMS ((bfd *, asection *, asymbol **, boolean));
326   long (*slurp_symbol_table)
327     PARAMS ((bfd *, asymbol **, boolean));
328   void (*swap_dyn_in)
329     PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
330   void (*swap_dyn_out)
331     PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
332
333   /* This function, if defined, is called to swap in a REL
334      relocation.  If an external relocation corresponds to more than
335      one internal relocation, then all relocations are swapped in at
336      once.  */
337   void (*swap_reloc_in)
338     PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rel *));
339
340   /* This function, if defined, is called to swap out a REL
341      relocation.  */
342   void (*swap_reloc_out)
343     PARAMS ((bfd *, const Elf_Internal_Rel *, bfd_byte *));
344
345   /* This function, if defined, is called to swap in a RELA
346      relocation.  If an external relocation corresponds to more than
347      one internal relocation, then all relocations are swapped in at
348      once.  */
349   void (*swap_reloca_in)
350     PARAMS ((bfd *, const bfd_byte *, Elf_Internal_Rela *));
351
352   /* This function, if defined, is called to swap out a RELA
353      relocation.  */
354   void (*swap_reloca_out)
355     PARAMS ((bfd *, const Elf_Internal_Rela *, bfd_byte *));
356
357 };
358
359 #define elf_symbol_from(ABFD,S) \
360         (((S)->the_bfd->xvec->flavour == bfd_target_elf_flavour \
361           && (S)->the_bfd->tdata.elf_obj_data != 0) \
362          ? (elf_symbol_type *) (S) \
363          : 0)
364
365 enum elf_reloc_type_class {
366   reloc_class_normal,
367   reloc_class_relative,
368   reloc_class_plt,
369   reloc_class_copy
370 };
371
372 struct elf_backend_data
373 {
374   /* The architecture for this backend.  */
375   enum bfd_architecture arch;
376
377   /* The ELF machine code (EM_xxxx) for this backend.  */
378   int elf_machine_code;
379
380   /* The maximum page size for this backend.  */
381   bfd_vma maxpagesize;
382
383   /* A function to translate an ELF RELA relocation to a BFD arelent
384      structure.  */
385   void (*elf_info_to_howto)
386     PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
387
388   /* A function to translate an ELF REL relocation to a BFD arelent
389      structure.  */
390   void (*elf_info_to_howto_rel)
391     PARAMS ((bfd *, arelent *, Elf_Internal_Rel *));
392
393   /* A function to determine whether a symbol is global when
394      partitioning the symbol table into local and global symbols.
395      This should be NULL for most targets, in which case the correct
396      thing will be done.  MIPS ELF, at least on the Irix 5, has
397      special requirements.  */
398   boolean (*elf_backend_sym_is_global)
399     PARAMS ((bfd *, asymbol *));
400
401   /* The remaining functions are hooks which are called only if they
402      are not NULL.  */
403
404   /* A function to permit a backend specific check on whether a
405      particular BFD format is relevant for an object file, and to
406      permit the backend to set any global information it wishes.  When
407      this is called elf_elfheader is set, but anything else should be
408      used with caution.  If this returns false, the check_format
409      routine will return a bfd_error_wrong_format error.  */
410   boolean (*elf_backend_object_p)
411     PARAMS ((bfd *));
412
413   /* A function to do additional symbol processing when reading the
414      ELF symbol table.  This is where any processor-specific special
415      section indices are handled.  */
416   void (*elf_backend_symbol_processing)
417     PARAMS ((bfd *, asymbol *));
418
419   /* A function to do additional symbol processing after reading the
420      entire ELF symbol table.  */
421   boolean (*elf_backend_symbol_table_processing)
422     PARAMS ((bfd *, elf_symbol_type *, unsigned int));
423
424    /* A function to set the type of the info field.  Processor-specific
425      types should be handled here.  */
426   int (*elf_backend_get_symbol_type)
427     PARAMS (( Elf_Internal_Sym *, int));
428
429   /* A function to do additional processing on the ELF section header
430      just before writing it out.  This is used to set the flags and
431      type fields for some sections, or to actually write out data for
432      unusual sections.  */
433   boolean (*elf_backend_section_processing)
434     PARAMS ((bfd *, Elf32_Internal_Shdr *));
435
436   /* A function to handle unusual section types when creating BFD
437      sections from ELF sections.  */
438   boolean (*elf_backend_section_from_shdr)
439     PARAMS ((bfd *, Elf32_Internal_Shdr *, char *));
440
441   /* A function to convert machine dependent section header flags to
442      BFD internal section header flags.  */
443   boolean (*elf_backend_section_flags)
444     PARAMS ((flagword *, Elf32_Internal_Shdr *));
445
446   /* A function to handle unusual program segment types when creating BFD
447      sections from ELF program segments.  */
448   boolean (*elf_backend_section_from_phdr)
449     PARAMS ((bfd *, Elf32_Internal_Phdr *, int));
450
451   /* A function to set up the ELF section header for a BFD section in
452      preparation for writing it out.  This is where the flags and type
453      fields are set for unusual sections.  */
454   boolean (*elf_backend_fake_sections)
455     PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *));
456
457   /* A function to get the ELF section index for a BFD section.  If
458      this returns true, the section was found.  If it is a normal ELF
459      section, *RETVAL should be left unchanged.  If it is not a normal
460      ELF section *RETVAL should be set to the SHN_xxxx index.  */
461   boolean (*elf_backend_section_from_bfd_section)
462     PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *retval));
463
464   /* If this field is not NULL, it is called by the add_symbols phase
465      of a link just before adding a symbol to the global linker hash
466      table.  It may modify any of the fields as it wishes.  If *NAME
467      is set to NULL, the symbol will be skipped rather than being
468      added to the hash table.  This function is responsible for
469      handling all processor dependent symbol bindings and section
470      indices, and must set at least *FLAGS and *SEC for each processor
471      dependent case; failure to do so will cause a link error.  */
472   boolean (*elf_add_symbol_hook)
473     PARAMS ((bfd *abfd, struct bfd_link_info *info,
474              const Elf_Internal_Sym *, const char **name,
475              flagword *flags, asection **sec, bfd_vma *value));
476
477   /* If this field is not NULL, it is called by the elf_link_output_sym
478      phase of a link for each symbol which will appear in the object file.  */
479   boolean (*elf_backend_link_output_symbol_hook)
480     PARAMS ((bfd *, struct bfd_link_info *info, const char *,
481              Elf_Internal_Sym *, asection *));
482
483   /* The CREATE_DYNAMIC_SECTIONS function is called by the ELF backend
484      linker the first time it encounters a dynamic object in the link.
485      This function must create any sections required for dynamic
486      linking.  The ABFD argument is a dynamic object.  The .interp,
487      .dynamic, .dynsym, .dynstr, and .hash functions have already been
488      created, and this function may modify the section flags if
489      desired.  This function will normally create the .got and .plt
490      sections, but different backends have different requirements.  */
491   boolean (*elf_backend_create_dynamic_sections)
492     PARAMS ((bfd *abfd, struct bfd_link_info *info));
493
494   /* The CHECK_RELOCS function is called by the add_symbols phase of
495      the ELF backend linker.  It is called once for each section with
496      relocs of an object file, just after the symbols for the object
497      file have been added to the global linker hash table.  The
498      function must look through the relocs and do any special handling
499      required.  This generally means allocating space in the global
500      offset table, and perhaps allocating space for a reloc.  The
501      relocs are always passed as Rela structures; if the section
502      actually uses Rel structures, the r_addend field will always be
503      zero.  */
504   boolean (*check_relocs)
505     PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
506              const Elf_Internal_Rela *relocs));
507
508   /* The ADJUST_DYNAMIC_SYMBOL function is called by the ELF backend
509      linker for every symbol which is defined by a dynamic object and
510      referenced by a regular object.  This is called after all the
511      input files have been seen, but before the SIZE_DYNAMIC_SECTIONS
512      function has been called.  The hash table entry should be
513      bfd_link_hash_defined ore bfd_link_hash_defweak, and it should be
514      defined in a section from a dynamic object.  Dynamic object
515      sections are not included in the final link, and this function is
516      responsible for changing the value to something which the rest of
517      the link can deal with.  This will normally involve adding an
518      entry to the .plt or .got or some such section, and setting the
519      symbol to point to that.  */
520   boolean (*elf_backend_adjust_dynamic_symbol)
521     PARAMS ((struct bfd_link_info *info, struct elf_link_hash_entry *h));
522
523   /* The ALWAYS_SIZE_SECTIONS function is called by the backend linker
524      after all the linker input files have been seen but before the
525      section sizes have been set.  This is called after
526      ADJUST_DYNAMIC_SYMBOL, but before SIZE_DYNAMIC_SECTIONS.  */
527   boolean (*elf_backend_always_size_sections)
528     PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
529
530   /* The SIZE_DYNAMIC_SECTIONS function is called by the ELF backend
531      linker after all the linker input files have been seen but before
532      the sections sizes have been set.  This is called after
533      ADJUST_DYNAMIC_SYMBOL has been called on all appropriate symbols.
534      It is only called when linking against a dynamic object.  It must
535      set the sizes of the dynamic sections, and may fill in their
536      contents as well.  The generic ELF linker can handle the .dynsym,
537      .dynstr and .hash sections.  This function must handle the
538      .interp section and any sections created by the
539      CREATE_DYNAMIC_SECTIONS entry point.  */
540   boolean (*elf_backend_size_dynamic_sections)
541     PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
542
543   /* The RELOCATE_SECTION function is called by the ELF backend linker
544      to handle the relocations for a section.
545
546      The relocs are always passed as Rela structures; if the section
547      actually uses Rel structures, the r_addend field will always be
548      zero.
549
550      This function is responsible for adjust the section contents as
551      necessary, and (if using Rela relocs and generating a
552      relocateable output file) adjusting the reloc addend as
553      necessary.
554
555      This function does not have to worry about setting the reloc
556      address or the reloc symbol index.
557
558      LOCAL_SYMS is a pointer to the swapped in local symbols.
559
560      LOCAL_SECTIONS is an array giving the section in the input file
561      corresponding to the st_shndx field of each local symbol.
562
563      The global hash table entry for the global symbols can be found
564      via elf_sym_hashes (input_bfd).
565
566      When generating relocateable output, this function must handle
567      STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
568      going to be the section symbol corresponding to the output
569      section, which means that the addend must be adjusted
570      accordingly.  */
571   boolean (*elf_backend_relocate_section)
572     PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
573              bfd *input_bfd, asection *input_section, bfd_byte *contents,
574              Elf_Internal_Rela *relocs, Elf_Internal_Sym *local_syms,
575              asection **local_sections));
576
577   /* The FINISH_DYNAMIC_SYMBOL function is called by the ELF backend
578      linker just before it writes a symbol out to the .dynsym section.
579      The processor backend may make any required adjustment to the
580      symbol.  It may also take the opportunity to set contents of the
581      dynamic sections.  Note that FINISH_DYNAMIC_SYMBOL is called on
582      all .dynsym symbols, while ADJUST_DYNAMIC_SYMBOL is only called
583      on those symbols which are defined by a dynamic object.  */
584   boolean (*elf_backend_finish_dynamic_symbol)
585     PARAMS ((bfd *output_bfd, struct bfd_link_info *info,
586              struct elf_link_hash_entry *h, Elf_Internal_Sym *sym));
587
588   /* The FINISH_DYNAMIC_SECTIONS function is called by the ELF backend
589      linker just before it writes all the dynamic sections out to the
590      output file.  The FINISH_DYNAMIC_SYMBOL will have been called on
591      all dynamic symbols.  */
592   boolean (*elf_backend_finish_dynamic_sections)
593     PARAMS ((bfd *output_bfd, struct bfd_link_info *info));
594
595   /* A function to do any beginning processing needed for the ELF file
596      before building the ELF headers and computing file positions.  */
597   void (*elf_backend_begin_write_processing)
598     PARAMS ((bfd *, struct bfd_link_info *));
599
600   /* A function to do any final processing needed for the ELF file
601      before writing it out.  The LINKER argument is true if this BFD
602      was created by the ELF backend linker.  */
603   void (*elf_backend_final_write_processing)
604     PARAMS ((bfd *, boolean linker));
605
606   /* This function is called by get_program_header_size.  It should
607      return the number of additional program segments which this BFD
608      will need.  It should return -1 on error.  */
609   int (*elf_backend_additional_program_headers)
610     PARAMS ((bfd *));
611
612   /* This function is called to modify an existing segment map in a
613      backend specific fashion.  */
614   boolean (*elf_backend_modify_segment_map)
615     PARAMS ((bfd *));
616
617   /* This function is called during section gc to discover the section a
618      particular relocation refers to.  It need not be defined for hosts
619      that have no queer relocation types.  */
620   asection * (*gc_mark_hook)
621     PARAMS ((bfd *abfd, struct bfd_link_info *, Elf_Internal_Rela *,
622              struct elf_link_hash_entry *h, Elf_Internal_Sym *));
623
624   /* This function, if defined, is called during the sweep phase of gc
625      in order that a backend might update any data structures it might
626      be maintaining.  */
627   boolean (*gc_sweep_hook)
628     PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
629              const Elf_Internal_Rela *relocs));
630
631   /* This function, if defined, is called after the ELF headers have
632      been created.  This allows for things like the OS and ABI versions
633      to be changed.  */
634   void (*elf_backend_post_process_headers)
635     PARAMS ((bfd *, struct bfd_link_info *));
636
637   /* This function, if defined, prints a symbol to file and returns the
638      name of the symbol to be printed.  It should return NULL to fall
639      back to default symbol printing.  */
640   const char *(*elf_backend_print_symbol_all)
641     PARAMS ((bfd *, PTR, asymbol *));
642
643   /* This function, if defined, is called after all local symbols and
644      global symbols converted to locals are emited into the symtab
645      section.  It allows the backend to emit special global symbols
646      not handled in the hash table.  */
647   boolean (*elf_backend_output_arch_syms)
648     PARAMS ((bfd *, struct bfd_link_info *, PTR,
649             boolean (*) (PTR, const char *, Elf_Internal_Sym *, asection *)));
650
651   /* Copy any information related to dynamic linking from a pre-existing 
652      symbol to a newly created symbol.  Also called to copy flags and
653      other back-end info to a weakdef, in which case the symbol is not
654      newly created and plt/got refcounts and dynamic indices should not
655      be copied.  */
656   void (*elf_backend_copy_indirect_symbol)
657     PARAMS ((struct elf_link_hash_entry *, struct elf_link_hash_entry *));
658
659   /* Modify any information related to dynamic linking such that the
660      symbol is not exported.  */
661   void (*elf_backend_hide_symbol)
662     PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
663
664   /* Emit relocations.  Overrides default routine for emitting relocs,
665      except during a relocatable link, or if all relocs are being emitted.  */
666   void (*elf_backend_emit_relocs)
667     PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
668
669   /* Count relocations.  Not called for relocatable links
670      or if all relocs are being preserved in the output.  */
671   unsigned int (*elf_backend_count_relocs)
672     PARAMS ((asection *, Elf_Internal_Rela *));
673
674   /* This function, if defined, is called when an NT_PRSTATUS note is found
675      in a core file. */
676   boolean (*elf_backend_grok_prstatus)
677     PARAMS ((bfd *, Elf_Internal_Note *));
678
679   /* This function, if defined, is called when an NT_PSINFO or NT_PRPSINFO
680      note is found in a core file. */
681   boolean (*elf_backend_grok_psinfo)
682     PARAMS ((bfd *, Elf_Internal_Note *));
683
684   /* Functions to print VMAs.  Special code to handle 64 bit ELF files.  */
685   void (* elf_backend_sprintf_vma)
686     PARAMS ((bfd *, char *, bfd_vma));
687   void (* elf_backend_fprintf_vma)
688     PARAMS ((bfd *, PTR, bfd_vma));
689
690   /* This function returns class of a reloc type.  */
691   enum elf_reloc_type_class (*elf_backend_reloc_type_class)
692     PARAMS ((const Elf_Internal_Rela *));
693
694   /* The swapping table to use when dealing with ECOFF information.
695      Used for the MIPS ELF .mdebug section.  */
696   const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
697
698   /* Alternate EM_xxxx machine codes for this backend.  */
699   int elf_machine_alt1;
700   int elf_machine_alt2;
701
702   const struct elf_size_info *s;
703
704   /* offset of the _GLOBAL_OFFSET_TABLE_ symbol from the start of the
705      .got section */
706   bfd_vma got_symbol_offset;
707
708   /* The size in bytes of the headers for the GOT and PLT.  This includes
709      the so-called reserved entries on some systems.  */
710   bfd_vma got_header_size;
711   bfd_vma plt_header_size;
712
713   /* This is true if the linker should act like collect and gather
714      global constructors and destructors by name.  This is true for
715      MIPS ELF because the Irix 5 tools can not handle the .init
716      section.  */
717   unsigned collect : 1;
718
719   /* This is true if the linker should ignore changes to the type of a
720      symbol.  This is true for MIPS ELF because some Irix 5 objects
721      record undefined functions as STT_OBJECT although the definitions
722      are STT_FUNC.  */
723   unsigned type_change_ok : 1;
724
725   /* Whether the backend may use REL relocations.  (Some backends use
726      both REL and RELA relocations, and this flag is set for those
727      backends.)  */
728   unsigned may_use_rel_p : 1;
729
730   /* Whether the backend may use RELA relocations.  (Some backends use
731      both REL and RELA relocations, and this flag is set for those
732      backends.)  */
733   unsigned may_use_rela_p : 1;
734
735   /* Whether the default relocation type is RELA.  If a backend with
736      this flag set wants REL relocations for a particular section,
737      it must note that explicitly.  Similarly, if this flag is clear,
738      and the backend wants RELA relocations for a particular
739      section.  */
740   unsigned default_use_rela_p : 1;
741
742   /* True if addresses "naturally" sign extend.  This is used when
743      swapping in from Elf32 when BFD64.  */
744   unsigned sign_extend_vma : 1;
745
746   unsigned want_got_plt : 1;
747   unsigned plt_readonly : 1;
748   unsigned want_plt_sym : 1;
749   unsigned plt_not_loaded : 1;
750   unsigned plt_alignment : 4;
751   unsigned can_gc_sections : 1;
752   unsigned can_refcount : 1;
753   unsigned want_got_sym : 1;
754   unsigned want_dynbss : 1;
755 };
756
757 /* Information stored for each BFD section in an ELF file.  This
758    structure is allocated by elf_new_section_hook.  */
759
760 struct bfd_elf_section_data
761 {
762   /* The ELF header for this section.  */
763   Elf_Internal_Shdr this_hdr;
764
765   /* The ELF header for the reloc section associated with this
766      section, if any.  */
767   Elf_Internal_Shdr rel_hdr;
768
769   /* If there is a second reloc section associated with this section,
770      as can happen on Irix 6, this field points to the header.  */
771   Elf_Internal_Shdr *rel_hdr2;
772
773   /* The number of relocations currently assigned to REL_HDR.  */
774   unsigned int rel_count;
775
776   /* The number of relocations currently assigned to REL_HDR2.  */
777   unsigned int rel_count2;
778
779   /* The number of dynamic relocs copied for local symbols.  */
780   unsigned int local_dynrel;
781
782   /* A pointer to the bfd section used for dynamic relocs.  */
783   asection *sreloc;
784
785   /* The ELF section number of this section.  Only used for an output
786      file.  */
787   int this_idx;
788
789   /* The ELF section number of the reloc section indicated by
790      REL_HDR if any.  Only used for an output file.  */
791   int rel_idx;
792
793   /* The ELF section number of the reloc section indicated by
794      REL_HDR2 if any.  Only used for an output file.  */
795   int rel_idx2;
796
797   /* Used by the backend linker to store the symbol hash table entries
798      associated with relocs against global symbols.  */
799   struct elf_link_hash_entry **rel_hashes;
800
801   /* A pointer to the swapped relocs.  If the section uses REL relocs,
802      rather than RELA, all the r_addend fields will be zero.  This
803      pointer may be NULL.  It is used by the backend linker.  */
804   Elf_Internal_Rela *relocs;
805
806   /* Used by the backend linker when generating a shared library to
807      record the dynamic symbol index for a section symbol
808      corresponding to this section.  A value of 0 means that there is
809      no dynamic symbol for this section.  */
810   long dynindx;
811
812   /* A pointer used for .stab linking optimizations.  */
813   PTR stab_info;
814
815   /* A pointer used for SEC_MERGE optimizations.  */
816   PTR merge_info;
817
818   /* Group name, if this section is part of a group.  */
819   const char *group_name;
820
821   /* A linked list of sections in the group.  Circular when used by
822      the linker.  */
823   asection *next_in_group;
824
825   /* A pointer available for the processor specific ELF backend.  */
826   PTR tdata;
827
828   /* Nonzero if this section uses RELA relocations, rather than REL.  */
829   unsigned int use_rela_p:1;
830 };
831
832 #define elf_section_data(sec)  ((struct bfd_elf_section_data*)sec->used_by_bfd)
833 #define elf_group_name(sec)    (elf_section_data(sec)->group_name)
834 #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
835
836 #define get_elf_backend_data(abfd) \
837   ((struct elf_backend_data *) (abfd)->xvec->backend_data)
838
839 /* Enumeration to specify the special section.  */
840 typedef enum elf_linker_section_enum
841 {
842   LINKER_SECTION_UNKNOWN,               /* not used */
843   LINKER_SECTION_GOT,                   /* .got section for global offset pointers */
844   LINKER_SECTION_PLT,                   /* .plt section for generated procedure stubs */
845   LINKER_SECTION_SDATA,                 /* .sdata/.sbss section for PowerPC */
846   LINKER_SECTION_SDATA2,                /* .sdata2/.sbss2 section for PowerPC */
847   LINKER_SECTION_MAX                    /* # of linker sections */
848 } elf_linker_section_enum_t;
849
850 /* Sections created by the linker.  */
851
852 typedef struct elf_linker_section
853 {
854   char *name;                           /* name of the section */
855   char *rel_name;                       /* name of the associated .rel{,a}. section */
856   char *bss_name;                       /* name of a related .bss section */
857   char *sym_name;                       /* name of symbol to reference this section */
858   asection *section;                    /* pointer to the section */
859   asection *bss_section;                /* pointer to the bss section associated with this */
860   asection *rel_section;                /* pointer to the relocations needed for this section */
861   struct elf_link_hash_entry *sym_hash; /* pointer to the created symbol hash value */
862   bfd_vma initial_size;                 /* initial size before any linker generated allocations */
863   bfd_vma sym_offset;                   /* offset of symbol from beginning of section */
864   bfd_vma hole_size;                    /* size of reserved address hole in allocation */
865   bfd_vma hole_offset;                  /* current offset for the hole */
866   bfd_vma max_hole_offset;              /* maximum offset for the hole */
867   elf_linker_section_enum_t which;      /* which section this is */
868   boolean hole_written_p;               /* whether the hole has been initialized */
869   unsigned int alignment;               /* alignment for the section */
870   flagword flags;                       /* flags to use to create the section */
871 } elf_linker_section_t;
872
873 /* Linked list of allocated pointer entries.  This hangs off of the symbol lists, and
874    provides allows us to return different pointers, based on different addend's.  */
875
876 typedef struct elf_linker_section_pointers
877 {
878   struct elf_linker_section_pointers *next;     /* next allocated pointer for this symbol */
879   bfd_vma offset;                               /* offset of pointer from beginning of section */
880   bfd_vma addend;                               /* addend used */
881   elf_linker_section_enum_t which;              /* which linker section this is */
882   boolean written_address_p;                    /* whether address was written yet */
883 } elf_linker_section_pointers_t;
884
885 /* Some private data is stashed away for future use using the tdata pointer
886    in the bfd structure.  */
887
888 struct elf_obj_tdata
889 {
890   Elf_Internal_Ehdr elf_header[1];      /* Actual data, but ref like ptr */
891   Elf_Internal_Shdr **elf_sect_ptr;
892   Elf_Internal_Phdr *phdr;
893   struct elf_segment_map *segment_map;
894   struct bfd_strtab_hash *strtab_ptr;
895   int num_locals;
896   int num_globals;
897   int num_section_syms;
898   asymbol **section_syms;               /* STT_SECTION symbols for each section */
899   Elf_Internal_Shdr symtab_hdr;
900   Elf_Internal_Shdr shstrtab_hdr;
901   Elf_Internal_Shdr strtab_hdr;
902   Elf_Internal_Shdr dynsymtab_hdr;
903   Elf_Internal_Shdr dynstrtab_hdr;
904   Elf_Internal_Shdr dynversym_hdr;
905   Elf_Internal_Shdr dynverref_hdr;
906   Elf_Internal_Shdr dynverdef_hdr;
907   unsigned int symtab_section, shstrtab_section;
908   unsigned int strtab_section, dynsymtab_section;
909   unsigned int dynversym_section, dynverdef_section, dynverref_section;
910   file_ptr next_file_pos;
911 #if 0
912   /* we don't need these inside bfd anymore, and I think
913      these weren't used outside bfd.  */
914   void *prstatus;                       /* The raw /proc prstatus structure */
915   void *prpsinfo;                       /* The raw /proc prpsinfo structure */
916 #endif
917   bfd_vma gp;                           /* The gp value */
918   unsigned int gp_size;                 /* The gp size */
919
920   Elf_Internal_Shdr **group_sect_ptr;
921   int num_group;
922
923   /* Information grabbed from an elf core file.  */
924   int core_signal;
925   int core_pid;
926   int core_lwpid;
927   char* core_program;
928   char* core_command;
929
930   /* This is set to true if the object was created by the backend
931      linker.  */
932   boolean linker;
933
934   /* A mapping from external symbols to entries in the linker hash
935      table, used when linking.  This is indexed by the symbol index
936      minus the sh_info field of the symbol table header.  */
937   struct elf_link_hash_entry **sym_hashes;
938
939   /* A mapping from local symbols to offsets into the global offset
940      table, used when linking.  This is indexed by the symbol index.
941      Like for the globals, we use a union and two names primarily to
942      document the intent of any particular piece of code.  The field
943      should be used as a count until size_dynamic_sections, at which
944      point the contents of the .got is fixed.  Afterward, if an entry
945      is -1, then the symbol does not require a global offset table entry.  */
946   union
947     {
948       bfd_signed_vma *refcounts;
949       bfd_vma *offsets;
950     } local_got;
951
952   /* A mapping from local symbols to offsets into the various linker
953      sections added.  This is index by the symbol index.  */
954   elf_linker_section_pointers_t **linker_section_pointers;
955
956   /* The linker ELF emulation code needs to let the backend ELF linker
957      know what filename should be used for a dynamic object if the
958      dynamic object is found using a search.  The emulation code then
959      sometimes needs to know what name was actually used.  Until the
960      file has been added to the linker symbol table, this field holds
961      the name the linker wants.  After it has been added, it holds the
962      name actually used, which will be the DT_SONAME entry if there is
963      one.  */
964   const char *dt_name;
965
966   /* When a reference in a regular object is resolved by a shared
967      object is loaded into via the DT_NEEDED entries by the linker
968      ELF emulation code, we need to add the shared object to the
969      DT_NEEDED list of the resulting binary to indicate the dependency
970      as if the -l option is passed to the linker. This field holds the
971      name of the loaded shared object.  */
972   const char *dt_soname;
973
974   /* Irix 5 often screws up the symbol table, sorting local symbols
975      after global symbols.  This flag is set if the symbol table in
976      this BFD appears to be screwed up.  If it is, we ignore the
977      sh_info field in the symbol table header, and always read all the
978      symbols.  */
979   boolean bad_symtab;
980
981   /* Records the result of `get_program_header_size'.  */
982   bfd_size_type program_header_size;
983
984   /* Used by find_nearest_line entry point.  */
985   PTR line_info;
986
987   /* Used by MIPS ELF find_nearest_line entry point.  The structure
988      could be included directly in this one, but there's no point to
989      wasting the memory just for the infrequently called
990      find_nearest_line.  */
991   struct mips_elf_find_line *find_line_info;
992
993   /* A place to stash dwarf1 info for this bfd.  */
994   struct dwarf1_debug *dwarf1_find_line_info;
995
996   /* A place to stash dwarf2 info for this bfd.  */
997   PTR dwarf2_find_line_info;
998
999   /* An array of stub sections indexed by symbol number, used by the
1000      MIPS ELF linker.  FIXME: We should figure out some way to only
1001      include this field for a MIPS ELF target.  */
1002   asection **local_stubs;
1003
1004   /* Used to determine if the e_flags field has been initialized */
1005   boolean flags_init;
1006
1007   /* Number of symbol version definitions we are about to emit.  */
1008   unsigned int cverdefs;
1009
1010   /* Number of symbol version references we are about to emit.  */
1011   unsigned int cverrefs;
1012
1013   /* Symbol version definitions in external objects.  */
1014   Elf_Internal_Verdef *verdef;
1015
1016   /* Symbol version references to external objects.  */
1017   Elf_Internal_Verneed *verref;
1018
1019   /* Linker sections that we are interested in.  */
1020   struct elf_linker_section *linker_section[ (int)LINKER_SECTION_MAX ];
1021
1022   /* The Irix 5 support uses two virtual sections, which represent
1023      text/data symbols defined in dynamic objects.  */
1024   asymbol *elf_data_symbol;
1025   asymbol *elf_text_symbol;
1026   asection *elf_data_section;
1027   asection *elf_text_section;
1028 };
1029
1030 #define elf_tdata(bfd)          ((bfd) -> tdata.elf_obj_data)
1031 #define elf_elfheader(bfd)      (elf_tdata(bfd) -> elf_header)
1032 #define elf_elfsections(bfd)    (elf_tdata(bfd) -> elf_sect_ptr)
1033 #define elf_shstrtab(bfd)       (elf_tdata(bfd) -> strtab_ptr)
1034 #define elf_onesymtab(bfd)      (elf_tdata(bfd) -> symtab_section)
1035 #define elf_dynsymtab(bfd)      (elf_tdata(bfd) -> dynsymtab_section)
1036 #define elf_dynversym(bfd)      (elf_tdata(bfd) -> dynversym_section)
1037 #define elf_dynverdef(bfd)      (elf_tdata(bfd) -> dynverdef_section)
1038 #define elf_dynverref(bfd)      (elf_tdata(bfd) -> dynverref_section)
1039 #define elf_num_locals(bfd)     (elf_tdata(bfd) -> num_locals)
1040 #define elf_num_globals(bfd)    (elf_tdata(bfd) -> num_globals)
1041 #define elf_section_syms(bfd)   (elf_tdata(bfd) -> section_syms)
1042 #define elf_num_section_syms(bfd) (elf_tdata(bfd) -> num_section_syms)
1043 #define core_prpsinfo(bfd)      (elf_tdata(bfd) -> prpsinfo)
1044 #define core_prstatus(bfd)      (elf_tdata(bfd) -> prstatus)
1045 #define elf_gp(bfd)             (elf_tdata(bfd) -> gp)
1046 #define elf_gp_size(bfd)        (elf_tdata(bfd) -> gp_size)
1047 #define elf_sym_hashes(bfd)     (elf_tdata(bfd) -> sym_hashes)
1048 #define elf_local_got_refcounts(bfd) (elf_tdata(bfd) -> local_got.refcounts)
1049 #define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got.offsets)
1050 #define elf_local_ptr_offsets(bfd) (elf_tdata(bfd) -> linker_section_pointers)
1051 #define elf_dt_name(bfd)        (elf_tdata(bfd) -> dt_name)
1052 #define elf_dt_soname(bfd)      (elf_tdata(bfd) -> dt_soname)
1053 #define elf_bad_symtab(bfd)     (elf_tdata(bfd) -> bad_symtab)
1054 #define elf_flags_init(bfd)     (elf_tdata(bfd) -> flags_init)
1055 #define elf_linker_section(bfd,n) (elf_tdata(bfd) -> linker_section[(int)n])
1056 \f
1057 extern void _bfd_elf_swap_verdef_in
1058   PARAMS ((bfd *, const Elf_External_Verdef *, Elf_Internal_Verdef *));
1059 extern void _bfd_elf_swap_verdef_out
1060   PARAMS ((bfd *, const Elf_Internal_Verdef *, Elf_External_Verdef *));
1061 extern void _bfd_elf_swap_verdaux_in
1062   PARAMS ((bfd *, const Elf_External_Verdaux *, Elf_Internal_Verdaux *));
1063 extern void _bfd_elf_swap_verdaux_out
1064   PARAMS ((bfd *, const Elf_Internal_Verdaux *, Elf_External_Verdaux *));
1065 extern void _bfd_elf_swap_verneed_in
1066   PARAMS ((bfd *, const Elf_External_Verneed *, Elf_Internal_Verneed *));
1067 extern void _bfd_elf_swap_verneed_out
1068   PARAMS ((bfd *, const Elf_Internal_Verneed *, Elf_External_Verneed *));
1069 extern void _bfd_elf_swap_vernaux_in
1070   PARAMS ((bfd *, const Elf_External_Vernaux *, Elf_Internal_Vernaux *));
1071 extern void _bfd_elf_swap_vernaux_out
1072   PARAMS ((bfd *, const Elf_Internal_Vernaux *, Elf_External_Vernaux *));
1073 extern void _bfd_elf_swap_versym_in
1074   PARAMS ((bfd *, const Elf_External_Versym *, Elf_Internal_Versym *));
1075 extern void _bfd_elf_swap_versym_out
1076   PARAMS ((bfd *, const Elf_Internal_Versym *, Elf_External_Versym *));
1077
1078 extern int _bfd_elf_section_from_bfd_section
1079   PARAMS ((bfd *, asection *));
1080 extern char *bfd_elf_string_from_elf_section
1081   PARAMS ((bfd *, unsigned, unsigned));
1082 extern char *bfd_elf_get_str_section
1083   PARAMS ((bfd *, unsigned));
1084
1085 extern boolean _bfd_elf_print_private_bfd_data
1086   PARAMS ((bfd *, PTR));
1087 extern void bfd_elf_print_symbol
1088   PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
1089
1090 #define elf_string_from_elf_strtab(abfd, strindex) \
1091   bfd_elf_string_from_elf_section(abfd, elf_elfheader(abfd)->e_shstrndx, \
1092                                   strindex)
1093
1094 #define bfd_elf32_print_symbol  bfd_elf_print_symbol
1095 #define bfd_elf64_print_symbol  bfd_elf_print_symbol
1096
1097 extern void _bfd_elf_sprintf_vma
1098   PARAMS ((bfd *, char *, bfd_vma));
1099 extern void _bfd_elf_fprintf_vma
1100   PARAMS ((bfd *, PTR, bfd_vma));
1101
1102 extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
1103   PARAMS ((const Elf_Internal_Rela *));
1104
1105 extern unsigned long bfd_elf_hash
1106   PARAMS ((const char *));
1107
1108 extern bfd_reloc_status_type bfd_elf_generic_reloc
1109   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
1110 extern boolean bfd_elf_mkobject
1111   PARAMS ((bfd *));
1112 extern boolean bfd_elf_mkcorefile
1113   PARAMS ((bfd *));
1114 extern Elf_Internal_Shdr *bfd_elf_find_section
1115   PARAMS ((bfd *, char *));
1116 extern boolean _bfd_elf_make_section_from_shdr
1117   PARAMS ((bfd *, Elf_Internal_Shdr *, const char *));
1118 extern boolean _bfd_elf_make_section_from_phdr
1119   PARAMS ((bfd *, Elf_Internal_Phdr *, int, const char *));
1120 extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
1121   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
1122 extern struct bfd_link_hash_table *_bfd_elf_link_hash_table_create
1123   PARAMS ((bfd *));
1124 extern void _bfd_elf_link_hash_copy_indirect
1125   PARAMS ((struct elf_link_hash_entry *, struct elf_link_hash_entry *));
1126 extern void _bfd_elf_link_hash_hide_symbol
1127   PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
1128 extern boolean _bfd_elf_link_hash_table_init
1129   PARAMS ((struct elf_link_hash_table *, bfd *,
1130            struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
1131                                        struct bfd_hash_table *,
1132                                        const char *)));
1133 extern boolean _bfd_elf_slurp_version_tables
1134   PARAMS ((bfd *));
1135
1136 extern boolean _bfd_elf_merge_sections
1137   PARAMS ((bfd *, struct bfd_link_info *));
1138
1139 extern boolean _bfd_elf_copy_private_symbol_data
1140   PARAMS ((bfd *, asymbol *, bfd *, asymbol *));
1141 extern boolean _bfd_elf_copy_private_section_data
1142   PARAMS ((bfd *, asection *, bfd *, asection *));
1143 extern boolean _bfd_elf_write_object_contents
1144   PARAMS ((bfd *));
1145 extern boolean _bfd_elf_write_corefile_contents
1146   PARAMS ((bfd *));
1147 extern boolean _bfd_elf_set_section_contents
1148   PARAMS ((bfd *, sec_ptr, PTR, file_ptr, bfd_size_type));
1149 extern long _bfd_elf_get_symtab_upper_bound
1150   PARAMS ((bfd *));
1151 extern long _bfd_elf_get_symtab
1152   PARAMS ((bfd *, asymbol **));
1153 extern long _bfd_elf_get_dynamic_symtab_upper_bound
1154   PARAMS ((bfd *));
1155 extern long _bfd_elf_canonicalize_dynamic_symtab
1156   PARAMS ((bfd *, asymbol **));
1157 extern long _bfd_elf_get_reloc_upper_bound
1158   PARAMS ((bfd *, sec_ptr));
1159 extern long _bfd_elf_canonicalize_reloc
1160   PARAMS ((bfd *, sec_ptr, arelent **, asymbol **));
1161 extern long _bfd_elf_get_dynamic_reloc_upper_bound
1162   PARAMS ((bfd *));
1163 extern long _bfd_elf_canonicalize_dynamic_reloc
1164   PARAMS ((bfd *, arelent **, asymbol **));
1165 extern asymbol *_bfd_elf_make_empty_symbol
1166   PARAMS ((bfd *));
1167 extern void _bfd_elf_get_symbol_info
1168   PARAMS ((bfd *, asymbol *, symbol_info *));
1169 extern boolean _bfd_elf_is_local_label_name
1170   PARAMS ((bfd *, const char *));
1171 extern alent *_bfd_elf_get_lineno
1172   PARAMS ((bfd *, asymbol *));
1173 extern boolean _bfd_elf_set_arch_mach
1174   PARAMS ((bfd *, enum bfd_architecture, unsigned long));
1175 extern boolean _bfd_elf_find_nearest_line
1176   PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
1177            const char **, unsigned int *));
1178 #define _bfd_elf_read_minisymbols _bfd_generic_read_minisymbols
1179 #define _bfd_elf_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
1180 extern int _bfd_elf_sizeof_headers
1181   PARAMS ((bfd *, boolean));
1182 extern boolean _bfd_elf_new_section_hook
1183   PARAMS ((bfd *, asection *));
1184 extern boolean _bfd_elf_init_reloc_shdr
1185   PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, boolean));
1186
1187 /* If the target doesn't have reloc handling written yet:  */
1188 extern void _bfd_elf_no_info_to_howto
1189   PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
1190
1191 extern boolean bfd_section_from_shdr
1192   PARAMS ((bfd *, unsigned int shindex));
1193 extern boolean bfd_section_from_phdr
1194   PARAMS ((bfd *, Elf_Internal_Phdr *, int));
1195
1196 extern int _bfd_elf_symbol_from_bfd_symbol
1197   PARAMS ((bfd *, asymbol **));
1198
1199 extern asection *bfd_section_from_elf_index
1200   PARAMS ((bfd *, unsigned int));
1201 extern boolean _bfd_elf_create_dynamic_sections
1202   PARAMS ((bfd *, struct bfd_link_info *));
1203 extern struct bfd_strtab_hash *_bfd_elf_stringtab_init
1204   PARAMS ((void));
1205 extern boolean _bfd_elf_link_record_dynamic_symbol
1206   PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
1207 extern long _bfd_elf_link_lookup_local_dynindx
1208   PARAMS ((struct bfd_link_info *, bfd *, long));
1209 extern boolean _bfd_elf_compute_section_file_positions
1210   PARAMS ((bfd *, struct bfd_link_info *));
1211 extern void _bfd_elf_assign_file_positions_for_relocs
1212   PARAMS ((bfd *));
1213 extern file_ptr _bfd_elf_assign_file_position_for_section
1214   PARAMS ((Elf_Internal_Shdr *, file_ptr, boolean));
1215
1216 extern boolean _bfd_elf_validate_reloc
1217   PARAMS ((bfd *, arelent *));
1218
1219 extern boolean _bfd_elf_create_dynamic_sections
1220   PARAMS ((bfd *, struct bfd_link_info *));
1221 extern boolean _bfd_elf_create_got_section
1222   PARAMS ((bfd *, struct bfd_link_info *));
1223 extern unsigned long _bfd_elf_link_renumber_dynsyms
1224   PARAMS ((bfd *, struct bfd_link_info *));
1225
1226 extern boolean _bfd_elfcore_make_pseudosection
1227   PARAMS ((bfd *, char *, size_t, ufile_ptr));
1228 extern char *_bfd_elfcore_strndup
1229   PARAMS ((bfd *, char *, size_t));
1230
1231 extern elf_linker_section_t *_bfd_elf_create_linker_section
1232   PARAMS ((bfd *, struct bfd_link_info *, enum elf_linker_section_enum,
1233            elf_linker_section_t *));
1234
1235 extern elf_linker_section_pointers_t *_bfd_elf_find_pointer_linker_section
1236   PARAMS ((elf_linker_section_pointers_t *, bfd_vma,
1237            elf_linker_section_enum_t));
1238
1239 extern boolean bfd_elf32_create_pointer_linker_section
1240   PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
1241            struct elf_link_hash_entry *, const Elf32_Internal_Rela *));
1242
1243 extern bfd_vma bfd_elf32_finish_pointer_linker_section
1244   PARAMS ((bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *,
1245            struct elf_link_hash_entry *, bfd_vma,
1246            const Elf32_Internal_Rela *, int));
1247
1248 extern boolean bfd_elf64_create_pointer_linker_section
1249   PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
1250            struct elf_link_hash_entry *, const Elf64_Internal_Rela *));
1251
1252 extern bfd_vma bfd_elf64_finish_pointer_linker_section
1253   PARAMS ((bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *,
1254            struct elf_link_hash_entry *, bfd_vma,
1255            const Elf64_Internal_Rela *, int));
1256
1257 extern boolean _bfd_elf_make_linker_section_rela
1258   PARAMS ((bfd *, elf_linker_section_t *, int));
1259
1260 extern const bfd_target *bfd_elf32_object_p
1261   PARAMS ((bfd *));
1262 extern const bfd_target *bfd_elf32_core_file_p
1263   PARAMS ((bfd *));
1264 extern char *bfd_elf32_core_file_failing_command
1265   PARAMS ((bfd *));
1266 extern int bfd_elf32_core_file_failing_signal
1267   PARAMS ((bfd *));
1268 extern boolean bfd_elf32_core_file_matches_executable_p
1269   PARAMS ((bfd *, bfd *));
1270
1271 extern boolean bfd_elf32_bfd_link_add_symbols
1272   PARAMS ((bfd *, struct bfd_link_info *));
1273 extern boolean bfd_elf32_bfd_final_link
1274   PARAMS ((bfd *, struct bfd_link_info *));
1275
1276 extern void bfd_elf32_swap_symbol_in
1277   PARAMS ((bfd *, const Elf32_External_Sym *, Elf_Internal_Sym *));
1278 extern void bfd_elf32_swap_symbol_out
1279   PARAMS ((bfd *, const Elf_Internal_Sym *, PTR));
1280 extern void bfd_elf32_swap_reloc_in
1281   PARAMS ((bfd *, const Elf32_External_Rel *, Elf_Internal_Rel *));
1282 extern void bfd_elf32_swap_reloc_out
1283   PARAMS ((bfd *, const Elf_Internal_Rel *, Elf32_External_Rel *));
1284 extern void bfd_elf32_swap_reloca_in
1285   PARAMS ((bfd *, const Elf32_External_Rela *, Elf_Internal_Rela *));
1286 extern void bfd_elf32_swap_reloca_out
1287   PARAMS ((bfd *, const Elf_Internal_Rela *, Elf32_External_Rela *));
1288 extern void bfd_elf32_swap_phdr_in
1289   PARAMS ((bfd *, const Elf32_External_Phdr *, Elf_Internal_Phdr *));
1290 extern void bfd_elf32_swap_phdr_out
1291   PARAMS ((bfd *, const Elf_Internal_Phdr *, Elf32_External_Phdr *));
1292 extern void bfd_elf32_swap_dyn_in
1293   PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
1294 extern void bfd_elf32_swap_dyn_out
1295   PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
1296 extern long bfd_elf32_slurp_symbol_table
1297   PARAMS ((bfd *, asymbol **, boolean));
1298 extern boolean bfd_elf32_write_shdrs_and_ehdr
1299   PARAMS ((bfd *));
1300 extern int bfd_elf32_write_out_phdrs
1301   PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
1302 extern void bfd_elf32_write_relocs
1303   PARAMS ((bfd *, asection *, PTR));
1304 extern boolean bfd_elf32_slurp_reloc_table
1305   PARAMS ((bfd *, asection *, asymbol **, boolean));
1306 extern boolean bfd_elf32_add_dynamic_entry
1307   PARAMS ((struct bfd_link_info *, bfd_vma, bfd_vma));
1308 extern boolean bfd_elf32_link_create_dynamic_sections
1309   PARAMS ((bfd *, struct bfd_link_info *));
1310 extern Elf_Internal_Rela *_bfd_elf32_link_read_relocs
1311   PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
1312
1313 extern const bfd_target *bfd_elf64_object_p
1314   PARAMS ((bfd *));
1315 extern const bfd_target *bfd_elf64_core_file_p
1316   PARAMS ((bfd *));
1317 extern char *bfd_elf64_core_file_failing_command
1318   PARAMS ((bfd *));
1319 extern int bfd_elf64_core_file_failing_signal
1320   PARAMS ((bfd *));
1321 extern boolean bfd_elf64_core_file_matches_executable_p
1322   PARAMS ((bfd *, bfd *));
1323 extern boolean bfd_elf64_bfd_link_add_symbols
1324   PARAMS ((bfd *, struct bfd_link_info *));
1325 extern boolean bfd_elf64_bfd_final_link
1326   PARAMS ((bfd *, struct bfd_link_info *));
1327
1328 extern void bfd_elf64_swap_symbol_in
1329   PARAMS ((bfd *, const Elf64_External_Sym *, Elf_Internal_Sym *));
1330 extern void bfd_elf64_swap_symbol_out
1331   PARAMS ((bfd *, const Elf_Internal_Sym *, PTR));
1332 extern void bfd_elf64_swap_reloc_in
1333   PARAMS ((bfd *, const Elf64_External_Rel *, Elf_Internal_Rel *));
1334 extern void bfd_elf64_swap_reloc_out
1335   PARAMS ((bfd *, const Elf_Internal_Rel *, Elf64_External_Rel *));
1336 extern void bfd_elf64_swap_reloca_in
1337   PARAMS ((bfd *, const Elf64_External_Rela *, Elf_Internal_Rela *));
1338 extern void bfd_elf64_swap_reloca_out
1339   PARAMS ((bfd *, const Elf_Internal_Rela *, Elf64_External_Rela *));
1340 extern void bfd_elf64_swap_phdr_in
1341   PARAMS ((bfd *, const Elf64_External_Phdr *, Elf_Internal_Phdr *));
1342 extern void bfd_elf64_swap_phdr_out
1343   PARAMS ((bfd *, const Elf_Internal_Phdr *, Elf64_External_Phdr *));
1344 extern void bfd_elf64_swap_dyn_in
1345   PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
1346 extern void bfd_elf64_swap_dyn_out
1347   PARAMS ((bfd *, const Elf_Internal_Dyn *, PTR));
1348 extern long bfd_elf64_slurp_symbol_table
1349   PARAMS ((bfd *, asymbol **, boolean));
1350 extern boolean bfd_elf64_write_shdrs_and_ehdr
1351   PARAMS ((bfd *));
1352 extern int bfd_elf64_write_out_phdrs
1353   PARAMS ((bfd *, const Elf_Internal_Phdr *, unsigned int));
1354 extern void bfd_elf64_write_relocs
1355   PARAMS ((bfd *, asection *, PTR));
1356 extern boolean bfd_elf64_slurp_reloc_table
1357   PARAMS ((bfd *, asection *, asymbol **, boolean));
1358 extern boolean bfd_elf64_add_dynamic_entry
1359   PARAMS ((struct bfd_link_info *, bfd_vma, bfd_vma));
1360 extern boolean bfd_elf64_link_create_dynamic_sections
1361   PARAMS ((bfd *, struct bfd_link_info *));
1362 extern Elf_Internal_Rela *_bfd_elf64_link_read_relocs
1363   PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, boolean));
1364
1365 #define bfd_elf32_link_record_dynamic_symbol \
1366   _bfd_elf_link_record_dynamic_symbol
1367 #define bfd_elf64_link_record_dynamic_symbol \
1368   _bfd_elf_link_record_dynamic_symbol
1369
1370 extern boolean _bfd_elf32_link_record_local_dynamic_symbol
1371   PARAMS ((struct bfd_link_info *, bfd *, long));
1372 extern boolean _bfd_elf64_link_record_local_dynamic_symbol
1373   PARAMS ((struct bfd_link_info *, bfd *, long));
1374
1375 extern boolean _bfd_elf_close_and_cleanup
1376   PARAMS ((bfd *));
1377 extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn
1378   PARAMS ((bfd *, arelent *, struct symbol_cache_entry *, PTR,
1379            asection *, bfd *, char **));
1380
1381 extern boolean _bfd_elf32_gc_sections
1382   PARAMS ((bfd *, struct bfd_link_info *));
1383 extern boolean _bfd_elf32_gc_common_finalize_got_offsets
1384   PARAMS ((bfd *, struct bfd_link_info *));
1385 extern boolean _bfd_elf32_gc_common_final_link
1386   PARAMS ((bfd *, struct bfd_link_info *));
1387 extern boolean _bfd_elf32_gc_record_vtinherit
1388   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
1389 extern boolean _bfd_elf32_gc_record_vtentry
1390   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
1391
1392 extern boolean _bfd_elf64_gc_sections
1393   PARAMS ((bfd *, struct bfd_link_info *));
1394 extern boolean _bfd_elf64_gc_common_finalize_got_offsets
1395   PARAMS ((bfd *, struct bfd_link_info *));
1396 extern boolean _bfd_elf64_gc_common_final_link
1397   PARAMS ((bfd *, struct bfd_link_info *));
1398 extern boolean _bfd_elf64_gc_record_vtinherit
1399   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
1400 extern boolean _bfd_elf64_gc_record_vtentry
1401   PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
1402
1403 /* MIPS ELF specific routines.  */
1404
1405 extern boolean _bfd_mips_elf_object_p
1406   PARAMS ((bfd *));
1407 extern boolean _bfd_mips_elf_section_from_shdr
1408   PARAMS ((bfd *, Elf_Internal_Shdr *, char *));
1409 extern boolean _bfd_mips_elf_fake_sections
1410   PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
1411 extern boolean _bfd_mips_elf_section_from_bfd_section
1412   PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, int *));
1413 extern boolean _bfd_mips_elf_section_processing
1414   PARAMS ((bfd *, Elf_Internal_Shdr *));
1415 extern void _bfd_mips_elf_symbol_processing
1416   PARAMS ((bfd *, asymbol *));
1417 extern boolean _bfd_mips_elf_read_ecoff_info
1418   PARAMS ((bfd *, asection *, struct ecoff_debug_info *));
1419 extern void _bfd_mips_elf_final_write_processing
1420   PARAMS ((bfd *, boolean));
1421 extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc
1422   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
1423 extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc
1424   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
1425 extern bfd_reloc_status_type _bfd_mips_elf_gprel16_reloc
1426   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
1427 extern bfd_reloc_status_type _bfd_mips_elf_got16_reloc
1428   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
1429 extern bfd_reloc_status_type _bfd_mips_elf_gprel32_reloc
1430   PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
1431 extern boolean _bfd_mips_elf_set_private_flags
1432   PARAMS ((bfd *, flagword));
1433 extern boolean _bfd_mips_elf_copy_private_bfd_data
1434   PARAMS ((bfd *, bfd *));
1435 extern boolean _bfd_mips_elf_merge_private_bfd_data
1436   PARAMS ((bfd *, bfd *));
1437 extern boolean _bfd_mips_elf_find_nearest_line
1438   PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
1439            const char **, unsigned int *));
1440 extern boolean _bfd_mips_elf_set_section_contents
1441   PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type));
1442 extern boolean _bfd_mips_elf_create_dynamic_sections
1443   PARAMS ((bfd *, struct bfd_link_info *));
1444 extern boolean _bfd_mips_elf_add_symbol_hook
1445   PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Sym *,
1446            const char **, flagword *, asection **, bfd_vma *));
1447 extern boolean _bfd_mips_elf_adjust_dynamic_symbol
1448   PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
1449 extern boolean _bfd_mips_elf_finish_dynamic_symbol
1450   PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
1451            Elf_Internal_Sym *));
1452 extern boolean _bfd_mips_elf_finish_dynamic_sections
1453   PARAMS ((bfd *, struct bfd_link_info *));
1454 extern asection * _bfd_mips_elf_gc_mark_hook
1455   PARAMS ((bfd *, struct bfd_link_info *, Elf_Internal_Rela *,
1456            struct elf_link_hash_entry *, Elf_Internal_Sym *));
1457 extern boolean _bfd_mips_elf_gc_sweep_hook
1458   PARAMS ((bfd *, struct bfd_link_info *, asection *,
1459            const Elf_Internal_Rela *));
1460 extern boolean _bfd_mips_elf_always_size_sections
1461   PARAMS ((bfd *, struct bfd_link_info *));
1462 extern boolean _bfd_mips_elf_size_dynamic_sections
1463   PARAMS ((bfd *, struct bfd_link_info *));
1464 extern boolean _bfd_mips_elf_check_relocs
1465   PARAMS ((bfd *, struct bfd_link_info *, asection *,
1466            const Elf_Internal_Rela *));
1467 extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create
1468   PARAMS ((bfd *));
1469 extern boolean _bfd_mips_elf_print_private_bfd_data
1470   PARAMS ((bfd *, PTR));
1471 extern boolean _bfd_mips_elf_link_output_symbol_hook
1472   PARAMS ((bfd *, struct bfd_link_info *, const char *, Elf_Internal_Sym *,
1473            asection *));
1474 extern boolean _bfd_mips_elf_final_link
1475   PARAMS ((bfd *, struct bfd_link_info *));
1476 extern int _bfd_mips_elf_additional_program_headers
1477   PARAMS ((bfd *));
1478 extern boolean _bfd_mips_elf_modify_segment_map
1479   PARAMS ((bfd *));
1480 extern boolean _bfd_mips_elf_relocate_section
1481   PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
1482            Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
1483
1484 /* SH ELF specific routine.  */
1485
1486 extern boolean _sh_elf_set_mach_from_flags
1487   PARAMS ((bfd *));
1488
1489 #endif /* _LIBELF_H_ */