Replace sh_size/sh_entsize with NUM_SHDR_ENTRIES
[binutils-gdb.git] / bfd / elf-bfd.h
index d88e4a3947ceff51b9e9dc5ad3288a5f78fd3356..f5b74e93dc944e595e5b00a8b094b74e1f209e70 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD back-end data structures for ELF files.
-   Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 1999, 2000 Free Software
-   Foundation, Inc.
+   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
    Written by Cygnus Support.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -27,6 +27,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "elf/external.h"
 #include "bfdlink.h"
 
+/* The number of entries in a section is its size divided by the size
+   of a single entry.  This is normally only applicaable to reloc and
+   symbol table sections.  */
+#define NUM_SHDR_ENTRIES(shdr) ((shdr)->sh_size / (shdr)->sh_entsize)
+
 /* If size isn't specified as 64 or 32, NAME macro should fail.  */
 #ifndef NAME
 #if ARCH_SIZE==64
@@ -208,7 +213,7 @@ struct elf_link_local_dynamic_entry
 
   /* The index in the outgoing dynamic symbol table.  */
   long dynindx;
-  
+
   /* A copy of the input symbol.  */
   Elf_Internal_Sym isym;
 };
@@ -241,6 +246,8 @@ struct elf_link_hash_table
   struct elf_link_hash_entry *hgot;
   /* A pointer to information used to link stabs in sections.  */
   PTR stab_info;
+  /* A pointer to information used to merge SEC_MERGE sections.  */
+  PTR merge_info;
   /* A linked list of local symbols to be added to .dynsym.  */
   struct elf_link_local_dynamic_entry *dynlocal;
   /* A linked list of DT_RPATH/DT_RUNPATH names found in dynamic
@@ -375,7 +382,7 @@ struct elf_backend_data
                                                          unsigned int));
 
    /* A function to set the type of the info field.  Processor-specific
-     types should be handled here. */
+     types should be handled here.  */
   int (*elf_backend_get_symbol_type) PARAMS (( Elf_Internal_Sym *, int));
 
   /* A function to do additional processing on the ELF section header
@@ -397,7 +404,7 @@ struct elf_backend_data
                                                Elf32_Internal_Shdr *));
 
   /* A function to handle unusual program segment types when creating BFD
-     sections from ELF program segments. */
+     sections from ELF program segments.  */
   boolean (*elf_backend_section_from_phdr) PARAMS ((bfd *,
                                                    Elf32_Internal_Phdr *,
                                                    int));
@@ -712,6 +719,8 @@ struct bfd_elf_section_data
   long dynindx;
   /* A pointer used for .stab linking optimizations.  */
   PTR stab_info;
+  /* A pointer used for SEC_MERGE optimizations.  */
+  PTR merge_info;
   /* A pointer available for the processor specific ELF backend.  */
   PTR tdata;
   /* Nonzero if this section uses RELA relocations, rather than REL.  */
@@ -796,14 +805,14 @@ struct elf_obj_tdata
   file_ptr next_file_pos;
 #if 0
   /* we don't need these inside bfd anymore, and I think
-     these weren't used outside bfd. */
+     these weren't used outside bfd.  */
   void *prstatus;                      /* The raw /proc prstatus structure */
   void *prpsinfo;                      /* The raw /proc prpsinfo structure */
 #endif
   bfd_vma gp;                          /* The gp value (MIPS only, for now) */
   unsigned int gp_size;                        /* The gp size (MIPS only, for now) */
 
-  /* Information grabbed from an elf core file. */
+  /* Information grabbed from an elf core file.  */
   int core_signal;
   int core_pid;
   int core_lwpid;
@@ -825,7 +834,7 @@ struct elf_obj_tdata
      document the intent of any particular piece of code.  The field
      should be used as a count until size_dynamic_sections, at which
      point the contents of the .got is fixed.  Afterward, if an entry
-     is -1, then the symbol does not require a global offset table entry. */
+     is -1, then the symbol does not require a global offset table entry.  */
   union
     {
       bfd_signed_vma *refcounts;
@@ -851,7 +860,7 @@ struct elf_obj_tdata
      ELF emulation code, we need to add the shared object to the
      DT_NEEDED list of the resulting binary to indicate the dependency
      as if the -l option is passed to the linker. This field holds the
-     name of the loaded shared object. */
+     name of the loaded shared object.  */
   const char *dt_soname;
 
   /* Irix 5 often screws up the symbol table, sorting local symbols
@@ -873,10 +882,10 @@ struct elf_obj_tdata
      find_nearest_line.  */
   struct mips_elf_find_line *find_line_info;
 
-  /* A place to stash dwarf1 info for this bfd. */
+  /* A place to stash dwarf1 info for this bfd.  */
   struct dwarf1_debug *dwarf1_find_line_info;
 
-  /* A place to stash dwarf2 info for this bfd. */
+  /* A place to stash dwarf2 info for this bfd.  */
   PTR dwarf2_find_line_info;
 
   /* An array of stub sections indexed by symbol number, used by the
@@ -1002,6 +1011,9 @@ extern boolean _bfd_elf_link_hash_table_init
                                       const char *)));
 extern boolean _bfd_elf_slurp_version_tables PARAMS ((bfd *));
 
+extern boolean _bfd_elf_merge_sections
+  PARAMS ((bfd *, struct bfd_link_info *));
+
 extern boolean _bfd_elf_copy_private_symbol_data
   PARAMS ((bfd *, asymbol *, bfd *, asymbol *));
 extern boolean _bfd_elf_copy_private_section_data