OSDN Git Service

* merge.c (struct sec_merge_hash_entry): Add u.entsize and u.suffix
[pf3gnuchains/pf3gnuchains3x.git] / bfd / libbfd.h
index 45bf9d7..9ce8e57 100644 (file)
@@ -1,6 +1,7 @@
 /* libbfd.h -- Declarations used by bfd library *implementation*.
    (This include file is not for users of the library.)
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2001
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -59,9 +60,9 @@ struct artdata {
   file_ptr first_file_filepos;
   /* Speed up searching the armap */
   struct ar_cache *cache;
-  bfd *archive_head;            /* Only interesting in output routines */
+  bfd *archive_head;           /* Only interesting in output routines */
   carsym *symdefs;             /* the symdef entries */
-  symindex symdef_count;             /* how many there are */
+  symindex symdef_count;       /* how many there are */
   char *extended_names;                /* clever intel extension */
   /* when more compilers are standard C, this can be a time_t */
   long  armap_timestamp;       /* Timestamp value written into armap.
@@ -79,9 +80,9 @@ struct artdata {
 
 /* Goes in bfd's arelt_data slot */
 struct areltdata {
-  char * arch_header;                       /* it's actually a string */
-  unsigned int parsed_size;     /* octets of filesize not including ar_hdr */
-  char *filename;                           /* null-terminated */
+  char * arch_header;          /* it's actually a string */
+  unsigned int parsed_size;    /* octets of filesize not including ar_hdr */
+  char *filename;              /* null-terminated */
 };
 
 #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size)
@@ -128,11 +129,11 @@ void      bfd_void PARAMS ((bfd *ignore));
 bfd *_bfd_new_bfd_contained_in PARAMS ((bfd *));
 const bfd_target *_bfd_dummy_target PARAMS ((bfd *abfd));
 
-void   bfd_dont_truncate_arname PARAMS ((bfd *abfd, CONST char *filename,
+void   bfd_dont_truncate_arname PARAMS ((bfd *abfd, const char *filename,
                                        char *hdr));
-void   bfd_bsd_truncate_arname PARAMS ((bfd *abfd, CONST char *filename,
+void   bfd_bsd_truncate_arname PARAMS ((bfd *abfd, const char *filename,
                                        char *hdr));
-void   bfd_gnu_truncate_arname PARAMS ((bfd *abfd, CONST char *filename,
+void   bfd_gnu_truncate_arname PARAMS ((bfd *abfd, const char *filename,
                                        char *hdr));
 
 boolean        bsd_write_armap PARAMS ((bfd *arch, unsigned int elength,
@@ -322,6 +323,10 @@ extern boolean _bfd_generic_set_section_contents
   ((boolean (*) \
     PARAMS ((bfd *, struct bfd_link_info *))) \
    bfd_false)
+#define _bfd_nolink_bfd_merge_sections \
+  ((boolean (*) \
+    PARAMS ((bfd *, struct bfd_link_info *))) \
+   bfd_false)
 #define _bfd_nolink_bfd_link_hash_table_create \
   ((struct bfd_link_hash_table *(*) PARAMS ((bfd *))) bfd_nullvoidptr)
 #define _bfd_nolink_bfd_link_add_symbols \
@@ -365,7 +370,8 @@ extern boolean _bfd_dwarf1_find_nearest_line
 /* Find the nearest line using DWARF 2 debugging information.  */
 extern boolean _bfd_dwarf2_find_nearest_line
   PARAMS ((bfd *, asection *, asymbol **, bfd_vma, const char **,
-          const char **, unsigned int *, unsigned int));
+          const char **, unsigned int *, unsigned int,
+          PTR *));
 
 /* A routine to create entries for a bfd_link_hash_table.  */
 extern struct bfd_hash_entry *_bfd_link_hash_newfunc
@@ -460,6 +466,26 @@ extern boolean _bfd_write_stab_strings PARAMS ((bfd *, PTR *));
 extern bfd_vma _bfd_stab_section_offset
   PARAMS ((bfd *, PTR *, asection *, PTR *, bfd_vma));
 
+/* Attempt to merge a SEC_MERGE section.  */
+
+extern boolean _bfd_merge_section
+  PARAMS ((bfd *, PTR *, asection *, PTR *));
+
+/* Attempt to merge SEC_MERGE sections.  */
+
+extern boolean _bfd_merge_sections
+  PARAMS ((bfd *, PTR));
+
+/* Write out a merged section.  */
+
+extern boolean _bfd_write_merged_section
+  PARAMS ((bfd *, asection *, PTR));
+
+/* Find an offset within a modified SEC_MERGE section.  */
+
+extern bfd_vma _bfd_merged_section_offset
+  PARAMS ((bfd *, asection **, PTR, bfd_vma, bfd_vma));
+
 /* Create a string table.  */
 extern struct bfd_strtab_hash *_bfd_stringtab_init PARAMS ((void));
 
@@ -503,13 +529,24 @@ void      bfd_assert PARAMS ((const char*,int));
 #define BFD_FAIL() \
 { bfd_assert(__FILE__,__LINE__); }
 
+extern void _bfd_abort PARAMS ((const char *, int, const char *))
+     ATTRIBUTE_NORETURN;
+
+/* if gcc >= 2.6, we can give a function name, too */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
+#define __PRETTY_FUNCTION__  ((char *) NULL)
+#endif
+
+#undef abort
+#define abort() _bfd_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
+
 FILE * bfd_cache_lookup_worker PARAMS ((bfd *));
 
 extern bfd *bfd_last_cache;
 
 /* List of supported target vectors, and the default vector (if
    bfd_default_vector[0] is NULL, there is no default).  */
-extern const bfd_target * const bfd_target_vector[];
+extern const bfd_target * const *bfd_target_vector;
 extern const bfd_target *bfd_default_vector[];
 
 /* Functions shared by the ECOFF and MIPS ELF backends, which have no
@@ -540,10 +577,10 @@ extern boolean _bfd_sh_align_load_span
 
 /* And more follows */
 
-void 
+void
 bfd_write_bigendian_4byte_int PARAMS ((bfd *abfd,  int i));
 
-unsigned int 
+unsigned int
 bfd_log2 PARAMS ((bfd_vma x));
 
 #define BFD_CACHE_MAX_OPEN 10
@@ -551,15 +588,15 @@ extern bfd *bfd_last_cache;
 
 #define bfd_cache_lookup(x) \
     ((x)==bfd_last_cache? \
-      (FILE*)(bfd_last_cache->iostream): \
+      (FILE*) (bfd_last_cache->iostream): \
        bfd_cache_lookup_worker(x))
-boolean 
-bfd_cache_init  PARAMS ((bfd *abfd));
+boolean
+bfd_cache_init PARAMS ((bfd *abfd));
 
-boolean 
-bfd_cache_close  PARAMS ((bfd *abfd));
+boolean
+bfd_cache_close PARAMS ((bfd *abfd));
 
-FILE* 
+FILE*
 bfd_open_file PARAMS ((bfd *abfd));
 
 FILE *
@@ -665,6 +702,13 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_ALPHA_LITERAL",
   "BFD_RELOC_ALPHA_ELF_LITERAL",
   "BFD_RELOC_ALPHA_LITUSE",
+  "BFD_RELOC_ALPHA_USER_LITERAL",
+  "BFD_RELOC_ALPHA_USER_LITUSE_BASE",
+  "BFD_RELOC_ALPHA_USER_LITUSE_BYTOFF",
+  "BFD_RELOC_ALPHA_USER_LITUSE_JSR",
+  "BFD_RELOC_ALPHA_USER_GPDISP",
+  "BFD_RELOC_ALPHA_USER_GPRELHIGH",
+  "BFD_RELOC_ALPHA_USER_GPRELLOW",
   "BFD_RELOC_ALPHA_HINT",
   "BFD_RELOC_ALPHA_LINKAGE",
   "BFD_RELOC_ALPHA_CODEADDR",
@@ -696,6 +740,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_386_RELATIVE",
   "BFD_RELOC_386_GOTOFF",
   "BFD_RELOC_386_GOTPC",
+  "BFD_RELOC_X86_64_GOT32",
+  "BFD_RELOC_X86_64_PLT32",
+  "BFD_RELOC_X86_64_COPY",
+  "BFD_RELOC_X86_64_GLOB_DAT",
+  "BFD_RELOC_X86_64_JUMP_SLOT",
+  "BFD_RELOC_X86_64_RELATIVE",
+  "BFD_RELOC_X86_64_GOTPCREL",
+  "BFD_RELOC_X86_64_32S",
   "BFD_RELOC_NS32K_IMM_8",
   "BFD_RELOC_NS32K_IMM_16",
   "BFD_RELOC_NS32K_IMM_32",
@@ -708,6 +760,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_NS32K_DISP_8_PCREL",
   "BFD_RELOC_NS32K_DISP_16_PCREL",
   "BFD_RELOC_NS32K_DISP_32_PCREL",
+  "BFD_RELOC_PDP11_DISP_8_PCREL",
+  "BFD_RELOC_PDP11_DISP_6_PCREL",
+  "BFD_RELOC_PJ_CODE_HI16",
+  "BFD_RELOC_PJ_CODE_LO16",
+  "BFD_RELOC_PJ_CODE_DIR16",
+  "BFD_RELOC_PJ_CODE_DIR32",
+  "BFD_RELOC_PJ_CODE_REL16",
+  "BFD_RELOC_PJ_CODE_REL32",
   "BFD_RELOC_PPC_B26",
   "BFD_RELOC_PPC_BA26",
   "BFD_RELOC_PPC_TOC16",
@@ -738,9 +798,13 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_PPC_EMB_RELST_HA",
   "BFD_RELOC_PPC_EMB_BIT_FLD",
   "BFD_RELOC_PPC_EMB_RELSDA",
+  "BFD_RELOC_I370_D12",
   "BFD_RELOC_CTOR",
   "BFD_RELOC_ARM_PCREL_BRANCH",
+  "BFD_RELOC_ARM_PCREL_BLX",
+  "BFD_RELOC_THUMB_PCREL_BLX",
   "BFD_RELOC_ARM_IMMEDIATE",
+  "BFD_RELOC_ARM_ADRL_IMMEDIATE",
   "BFD_RELOC_ARM_OFFSET_IMM",
   "BFD_RELOC_ARM_SHIFT_IMM",
   "BFD_RELOC_ARM_SWI",
@@ -783,6 +847,13 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_SH_CODE",
   "BFD_RELOC_SH_DATA",
   "BFD_RELOC_SH_LABEL",
+  "BFD_RELOC_SH_LOOP_START",
+  "BFD_RELOC_SH_LOOP_END",
+  "BFD_RELOC_SH_COPY",
+  "BFD_RELOC_SH_GLOB_DAT",
+  "BFD_RELOC_SH_JMP_SLOT",
+  "BFD_RELOC_SH_RELATIVE",
+  "BFD_RELOC_SH_GOTPC",
   "BFD_RELOC_THUMB_PCREL_BRANCH9",
   "BFD_RELOC_THUMB_PCREL_BRANCH12",
   "BFD_RELOC_THUMB_PCREL_BRANCH23",
@@ -831,6 +902,11 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_MN10300_32_PCREL",
   "BFD_RELOC_MN10300_16_PCREL",
   "BFD_RELOC_TIC30_LDP",
+  "BFD_RELOC_TIC54X_PARTLS7",
+  "BFD_RELOC_TIC54X_PARTMS9",
+  "BFD_RELOC_TIC54X_23",
+  "BFD_RELOC_TIC54X_16_OF_23",
+  "BFD_RELOC_TIC54X_MS7_OF_23",
   "BFD_RELOC_FR30_48",
   "BFD_RELOC_FR30_20",
   "BFD_RELOC_FR30_6_IN_4",
@@ -845,30 +921,179 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_MCORE_PCREL_32",
   "BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2",
   "BFD_RELOC_MCORE_RVA",
+  "BFD_RELOC_AVR_7_PCREL",
+  "BFD_RELOC_AVR_13_PCREL",
+  "BFD_RELOC_AVR_16_PM",
+  "BFD_RELOC_AVR_LO8_LDI",
+  "BFD_RELOC_AVR_HI8_LDI",
+  "BFD_RELOC_AVR_HH8_LDI",
+  "BFD_RELOC_AVR_LO8_LDI_NEG",
+  "BFD_RELOC_AVR_HI8_LDI_NEG",
+  "BFD_RELOC_AVR_HH8_LDI_NEG",
+  "BFD_RELOC_AVR_LO8_LDI_PM",
+  "BFD_RELOC_AVR_HI8_LDI_PM",
+  "BFD_RELOC_AVR_HH8_LDI_PM",
+  "BFD_RELOC_AVR_LO8_LDI_PM_NEG",
+  "BFD_RELOC_AVR_HI8_LDI_PM_NEG",
+  "BFD_RELOC_AVR_HH8_LDI_PM_NEG",
+  "BFD_RELOC_AVR_CALL",
+  "BFD_RELOC_390_12",
+  "BFD_RELOC_390_GOT12",
+  "BFD_RELOC_390_PLT32",
+  "BFD_RELOC_390_COPY",
+  "BFD_RELOC_390_GLOB_DAT",
+  "BFD_RELOC_390_JMP_SLOT",
+  "BFD_RELOC_390_RELATIVE",
+  "BFD_RELOC_390_GOTPC",
+  "BFD_RELOC_390_GOT16",
+  "BFD_RELOC_390_PC16DBL",
+  "BFD_RELOC_390_PLT16DBL",
+  "BFD_RELOC_390_PC32DBL",
+  "BFD_RELOC_390_PLT32DBL",
+  "BFD_RELOC_390_GOTPCDBL",
+  "BFD_RELOC_390_GOT64",
+  "BFD_RELOC_390_PLT64",
+  "BFD_RELOC_390_GOTENT",
   "BFD_RELOC_VTABLE_INHERIT",
   "BFD_RELOC_VTABLE_ENTRY",
+  "BFD_RELOC_IA64_IMM14",
+  "BFD_RELOC_IA64_IMM22",
+  "BFD_RELOC_IA64_IMM64",
+  "BFD_RELOC_IA64_DIR32MSB",
+  "BFD_RELOC_IA64_DIR32LSB",
+  "BFD_RELOC_IA64_DIR64MSB",
+  "BFD_RELOC_IA64_DIR64LSB",
+  "BFD_RELOC_IA64_GPREL22",
+  "BFD_RELOC_IA64_GPREL64I",
+  "BFD_RELOC_IA64_GPREL32MSB",
+  "BFD_RELOC_IA64_GPREL32LSB",
+  "BFD_RELOC_IA64_GPREL64MSB",
+  "BFD_RELOC_IA64_GPREL64LSB",
+  "BFD_RELOC_IA64_LTOFF22",
+  "BFD_RELOC_IA64_LTOFF64I",
+  "BFD_RELOC_IA64_PLTOFF22",
+  "BFD_RELOC_IA64_PLTOFF64I",
+  "BFD_RELOC_IA64_PLTOFF64MSB",
+  "BFD_RELOC_IA64_PLTOFF64LSB",
+  "BFD_RELOC_IA64_FPTR64I",
+  "BFD_RELOC_IA64_FPTR32MSB",
+  "BFD_RELOC_IA64_FPTR32LSB",
+  "BFD_RELOC_IA64_FPTR64MSB",
+  "BFD_RELOC_IA64_FPTR64LSB",
+  "BFD_RELOC_IA64_PCREL21B",
+  "BFD_RELOC_IA64_PCREL21BI",
+  "BFD_RELOC_IA64_PCREL21M",
+  "BFD_RELOC_IA64_PCREL21F",
+  "BFD_RELOC_IA64_PCREL22",
+  "BFD_RELOC_IA64_PCREL60B",
+  "BFD_RELOC_IA64_PCREL64I",
+  "BFD_RELOC_IA64_PCREL32MSB",
+  "BFD_RELOC_IA64_PCREL32LSB",
+  "BFD_RELOC_IA64_PCREL64MSB",
+  "BFD_RELOC_IA64_PCREL64LSB",
+  "BFD_RELOC_IA64_LTOFF_FPTR22",
+  "BFD_RELOC_IA64_LTOFF_FPTR64I",
+  "BFD_RELOC_IA64_LTOFF_FPTR64MSB",
+  "BFD_RELOC_IA64_LTOFF_FPTR64LSB",
+  "BFD_RELOC_IA64_SEGREL32MSB",
+  "BFD_RELOC_IA64_SEGREL32LSB",
+  "BFD_RELOC_IA64_SEGREL64MSB",
+  "BFD_RELOC_IA64_SEGREL64LSB",
+  "BFD_RELOC_IA64_SECREL32MSB",
+  "BFD_RELOC_IA64_SECREL32LSB",
+  "BFD_RELOC_IA64_SECREL64MSB",
+  "BFD_RELOC_IA64_SECREL64LSB",
+  "BFD_RELOC_IA64_REL32MSB",
+  "BFD_RELOC_IA64_REL32LSB",
+  "BFD_RELOC_IA64_REL64MSB",
+  "BFD_RELOC_IA64_REL64LSB",
+  "BFD_RELOC_IA64_LTV32MSB",
+  "BFD_RELOC_IA64_LTV32LSB",
+  "BFD_RELOC_IA64_LTV64MSB",
+  "BFD_RELOC_IA64_LTV64LSB",
+  "BFD_RELOC_IA64_IPLTMSB",
+  "BFD_RELOC_IA64_IPLTLSB",
+  "BFD_RELOC_IA64_COPY",
+  "BFD_RELOC_IA64_TPREL22",
+  "BFD_RELOC_IA64_TPREL64MSB",
+  "BFD_RELOC_IA64_TPREL64LSB",
+  "BFD_RELOC_IA64_LTOFF_TP22",
+  "BFD_RELOC_IA64_LTOFF22X",
+  "BFD_RELOC_IA64_LDXMOV",
+  "BFD_RELOC_M68HC11_HI8",
+  "BFD_RELOC_M68HC11_LO8",
+  "BFD_RELOC_M68HC11_3B",
+  "BFD_RELOC_CRIS_BDISP8",
+  "BFD_RELOC_CRIS_UNSIGNED_5",
+  "BFD_RELOC_CRIS_SIGNED_6",
+  "BFD_RELOC_CRIS_UNSIGNED_6",
+  "BFD_RELOC_CRIS_UNSIGNED_4",
+  "BFD_RELOC_CRIS_COPY",
+  "BFD_RELOC_CRIS_GLOB_DAT",
+  "BFD_RELOC_CRIS_JUMP_SLOT",
+  "BFD_RELOC_CRIS_RELATIVE",
+  "BFD_RELOC_CRIS_32_GOT",
+  "BFD_RELOC_CRIS_16_GOT",
+  "BFD_RELOC_CRIS_32_GOTPLT",
+  "BFD_RELOC_CRIS_16_GOTPLT",
+  "BFD_RELOC_CRIS_32_GOTREL",
+  "BFD_RELOC_CRIS_32_PLT_GOTREL",
+  "BFD_RELOC_CRIS_32_PLT_PCREL",
+  "BFD_RELOC_860_COPY",
+  "BFD_RELOC_860_GLOB_DAT",
+  "BFD_RELOC_860_JUMP_SLOT",
+  "BFD_RELOC_860_RELATIVE",
+  "BFD_RELOC_860_PC26",
+  "BFD_RELOC_860_PLT26",
+  "BFD_RELOC_860_PC16",
+  "BFD_RELOC_860_LOW0",
+  "BFD_RELOC_860_SPLIT0",
+  "BFD_RELOC_860_LOW1",
+  "BFD_RELOC_860_SPLIT1",
+  "BFD_RELOC_860_LOW2",
+  "BFD_RELOC_860_SPLIT2",
+  "BFD_RELOC_860_LOW3",
+  "BFD_RELOC_860_LOGOT0",
+  "BFD_RELOC_860_SPGOT0",
+  "BFD_RELOC_860_LOGOT1",
+  "BFD_RELOC_860_SPGOT1",
+  "BFD_RELOC_860_LOGOTOFF0",
+  "BFD_RELOC_860_SPGOTOFF0",
+  "BFD_RELOC_860_LOGOTOFF1",
+  "BFD_RELOC_860_SPGOTOFF1",
+  "BFD_RELOC_860_LOGOTOFF2",
+  "BFD_RELOC_860_LOGOTOFF3",
+  "BFD_RELOC_860_LOPC",
+  "BFD_RELOC_860_HIGHADJ",
+  "BFD_RELOC_860_HAGOT",
+  "BFD_RELOC_860_HAGOTOFF",
+  "BFD_RELOC_860_HAPC",
+  "BFD_RELOC_860_HIGH",
+  "BFD_RELOC_860_HIGOT",
+  "BFD_RELOC_860_HIGOTOFF",
+  "BFD_RELOC_OPENRISC_ABS_26",
+  "BFD_RELOC_OPENRISC_REL_26",
  "@@overflow: BFD_RELOC_UNUSED@@",
 };
 #endif
 
 reloc_howto_type *
-bfd_default_reloc_type_lookup
- PARAMS ((bfd *abfd, bfd_reloc_code_real_type  code));
+bfd_default_reloc_type_lookup PARAMS ((bfd *abfd, bfd_reloc_code_real_type  code));
 
-boolean 
-bfd_generic_relax_section
- PARAMS ((bfd *abfd,
+boolean
+bfd_generic_relax_section PARAMS ((bfd *abfd,
     asection *section,
     struct bfd_link_info *,
     boolean *));
 
-boolean 
-bfd_generic_gc_sections
- PARAMS ((bfd *, struct bfd_link_info *));
+boolean
+bfd_generic_gc_sections PARAMS ((bfd *, struct bfd_link_info *));
 
-bfd_byte *
+boolean
+bfd_generic_merge_sections PARAMS ((bfd *, struct bfd_link_info *));
 
-bfd_generic_get_relocated_section_contents  PARAMS ((bfd *abfd,
+bfd_byte *
+bfd_generic_get_relocated_section_contents PARAMS ((bfd *abfd,
     struct bfd_link_info *link_info,
     struct bfd_link_order *link_order,
     bfd_byte *data,
@@ -876,19 +1101,18 @@ bfd_generic_get_relocated_section_contents  PARAMS ((bfd *abfd,
     asymbol **symbols));
 
 extern const bfd_arch_info_type bfd_default_arch_struct;
-boolean 
+boolean
 bfd_default_set_arch_mach PARAMS ((bfd *abfd,
     enum bfd_architecture arch,
     unsigned long mach));
 
 const bfd_arch_info_type *
-bfd_default_compatible
- PARAMS ((const bfd_arch_info_type *a,
+bfd_default_compatible PARAMS ((const bfd_arch_info_type *a,
     const bfd_arch_info_type *b));
 
-boolean 
+boolean
 bfd_default_scan PARAMS ((const struct bfd_arch_info *info, const char *string));
 
 struct elf_internal_shdr *
-bfd_elf_find_section  PARAMS ((bfd *abfd, char *name));
+bfd_elf_find_section PARAMS ((bfd *abfd, char *name));