* ecoff.c (ecoff_swap_tir_in): Change input argument to const.
[binutils-gdb.git] / bfd / libecoff.h
index f413837df0c5cb5152fd9379c82d031a3b2038f0..84349f0bd221c3875ba894b1aa6788ec21716530 100644 (file)
@@ -121,6 +121,9 @@ typedef struct ecoff_tdata
      linking.  */
   asection **symndx_to_section;
 
+  /* True if this BFD was written by the backend linker.  */
+  boolean linker;
+
 } ecoff_data_type;
 
 /* Each canonical asymbol really looks like this.  */
@@ -172,16 +175,19 @@ struct ecoff_section_tdata
   bfd_byte *contents;
 
   /* Offset adjustments for PC relative branches.  A number other than
-   1 is an addend for a PC relative branch; this addend arises because
-   it crosses one or more branches which were expanded into a larger
-   code sequence.  A 1 means that this branch was itself expanded into
-   a larger code sequence.  1 is not a possible offset, since all
-   offsets must be multiples of the instruction size, which is 4;
-   also, the only relocs with non-zero offsets will be PC relative
-   branches within the same object file.  If this field is NULL, no
-   branches were expanded and no offsets are required.  Otherwise
-   there are as many entries as there are relocs in the section, and
-   the entry for any reloc that is not PC relative is zero.  */
+     1 is an addend for a PC relative branch, or a switch table entry
+     which is the difference of two .text locations; this addend
+     arises because the branch or difference crosses one or more
+     branches which were expanded into a larger code sequence.  A 1
+     means that this branch was itself expanded into a larger code
+     sequence.  1 is not a possible offset, since all offsets must be
+     multiples of the instruction size, which is 4; also, the only
+     relocs with non-zero offsets will be PC relative branches or
+     switch table entries within the same object file.  If this field
+     is NULL, no branches were expanded and no offsets are required.
+     Otherwise there are as many entries as there are relocs in the
+     section, and the entry for any reloc that is not PC relative is
+     zero.  */
   long *offsets;
 };
 
@@ -200,6 +206,10 @@ struct ecoff_link_hash_entry
   bfd *abfd;
   /* ECOFF external symbol information.  */
   EXTR esym;
+  /* Nonzero if this symbol has been written out.  */
+  char written;
+  /* Nonzero if this symbol was referred to as small undefined.  */
+  char small;
 };
 
 /* ECOFF linker hash table.  */
@@ -213,22 +223,49 @@ struct ecoff_link_hash_table
 extern boolean ecoff_mkobject PARAMS ((bfd *));
 
 /* Read in the ECOFF symbolic debugging information.  */
-extern boolean ecoff_slurp_symbolic_info PARAMS ((bfd *));
+extern boolean ecoff_slurp_symbolic_info PARAMS ((bfd *, asection *,
+                                                 struct ecoff_debug_info *));
 
 /* Generic ECOFF BFD backend vectors.  */
-extern asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd));
+
+extern boolean ecoff_write_object_contents PARAMS ((bfd *abfd));
+extern bfd_target *ecoff_archive_p PARAMS ((bfd *abfd));
+
+#define        ecoff_close_and_cleanup _bfd_generic_close_and_cleanup
+#define ecoff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
+extern boolean ecoff_new_section_hook PARAMS ((bfd *abfd,
+                                              asection *section));
+extern boolean ecoff_get_section_contents PARAMS ((bfd *abfd,
+                                                  asection *section,
+                                                  PTR location,
+                                                  file_ptr offset,
+                                                  bfd_size_type count));
+
+extern boolean ecoff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *));
+#define ecoff_bfd_copy_private_section_data \
+  _bfd_generic_bfd_copy_private_section_data
+
+extern boolean ecoff_slurp_armap PARAMS ((bfd *abfd));
+#define ecoff_slurp_extended_name_table _bfd_slurp_extended_name_table
+#define ecoff_truncate_arname bfd_dont_truncate_arname
+extern boolean ecoff_write_armap PARAMS ((bfd *abfd, unsigned int elength,
+                                         struct orl *map,
+                                         unsigned int orl_count,
+                                         int stridx));
+#define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file
+#define ecoff_generic_stat_arch_elt bfd_generic_stat_arch_elt
+
 extern long ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd));
 extern long ecoff_get_symtab PARAMS ((bfd *abfd, asymbol **alocation));
-extern void ecoff_get_symbol_info PARAMS ((bfd *abfd,
-                                          asymbol *symbol,
-                                          symbol_info *ret));
+extern asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd));
 extern void ecoff_print_symbol PARAMS ((bfd *abfd, PTR filep,
                                        asymbol *symbol,
                                        bfd_print_symbol_type how));
-extern long ecoff_canonicalize_reloc PARAMS ((bfd *abfd,
-                                             asection *section,
-                                             arelent **relptr,
-                                             asymbol **symbols));
+extern void ecoff_get_symbol_info PARAMS ((bfd *abfd,
+                                          asymbol *symbol,
+                                          symbol_info *ret));
+#define ecoff_bfd_is_local_label bfd_generic_is_local_label
+#define ecoff_get_lineno _bfd_nosymbols_get_lineno
 extern boolean ecoff_find_nearest_line PARAMS ((bfd *abfd,
                                                asection *section,
                                                asymbol **symbols,
@@ -236,64 +273,37 @@ extern boolean ecoff_find_nearest_line PARAMS ((bfd *abfd,
                                                CONST char **filename_ptr,
                                                CONST char **fnname_ptr,
                                                unsigned int *retline_ptr));
+#define ecoff_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
+
+#define ecoff_get_reloc_upper_bound    coff_get_reloc_upper_bound
+extern long ecoff_canonicalize_reloc PARAMS ((bfd *abfd,
+                                             asection *section,
+                                             arelent **relptr,
+                                             asymbol **symbols));
+/* ecoff_bfd_reloc_type_lookup defined by backend. */
+
 extern boolean ecoff_set_arch_mach PARAMS ((bfd *abfd,
                                            enum bfd_architecture arch,
                                            unsigned long machine));
-extern int ecoff_sizeof_headers PARAMS ((bfd *abfd, boolean reloc));
 extern boolean ecoff_set_section_contents PARAMS ((bfd *abfd,
                                                   asection *section,
                                                   PTR location,
                                                   file_ptr offset,
                                                   bfd_size_type count));
-extern boolean ecoff_get_section_contents PARAMS ((bfd *abfd,
-                                                  asection *section,
-                                                  PTR location,
-                                                  file_ptr offset,
-                                                  bfd_size_type count));
-extern boolean ecoff_write_object_contents PARAMS ((bfd *abfd));
-extern boolean ecoff_slurp_armap PARAMS ((bfd *abfd));
-extern boolean ecoff_write_armap PARAMS ((bfd *abfd, unsigned int elength,
-                                         struct orl *map,
-                                         unsigned int orl_count,
-                                         int stridx));
-#define ecoff_slurp_extended_name_table        _bfd_slurp_extended_name_table
-extern bfd_target *ecoff_archive_p PARAMS ((bfd *abfd));
-#define ecoff_get_lineno \
-  ((alent *(*) PARAMS ((bfd *, asymbol *))) bfd_nullvoidptr)
-#define ecoff_truncate_arname          bfd_dont_truncate_arname
-#define ecoff_openr_next_archived_file bfd_generic_openr_next_archived_file
-#define ecoff_generic_stat_arch_elt    bfd_generic_stat_arch_elt
-#define ecoff_get_reloc_upper_bound    coff_get_reloc_upper_bound
-#define        ecoff_close_and_cleanup         bfd_generic_close_and_cleanup
-#define ecoff_bfd_debug_info_start     bfd_void
-#define ecoff_bfd_debug_info_end       bfd_void
-#define ecoff_bfd_debug_info_accumulate        \
-  ((void (*) PARAMS ((bfd *, struct sec *))) bfd_void)
-#define ecoff_bfd_make_debug_symbol \
-  ((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr)
+
+extern int ecoff_sizeof_headers PARAMS ((bfd *abfd, boolean reloc));
+/* ecoff_bfd_get_relocated_section_contents defined by backend.  */
+/* ecoff_bfd_relax_section defined by backend.  */
 extern struct bfd_link_hash_table *ecoff_bfd_link_hash_table_create
   PARAMS ((bfd *));
 extern boolean ecoff_bfd_link_add_symbols
   PARAMS ((bfd *, struct bfd_link_info *));
 extern boolean ecoff_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *));
 
-#ifndef ecoff_bfd_copy_private_section_data
-#define ecoff_bfd_copy_private_section_data \
-  ((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
-#endif
-#ifndef ecoff_bfd_copy_private_bfd_data
-#define ecoff_bfd_copy_private_bfd_data \
-  ((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
-#endif
-#ifndef ecoff_bfd_is_local_label
-#define ecoff_bfd_is_local_label bfd_generic_is_local_label
-#endif
-
 /* Hook functions for the generic COFF section reading code.  */
+
 extern PTR ecoff_mkobject_hook PARAMS ((bfd *, PTR filehdr, PTR aouthdr));
 extern asection *ecoff_make_section_hook PARAMS ((bfd *abfd, char *name));
-extern boolean ecoff_new_section_hook PARAMS ((bfd *abfd,
-                                              asection *section));
 #define ecoff_set_alignment_hook \
   ((void (*) PARAMS ((bfd *, asection *, PTR))) bfd_void)
 extern boolean ecoff_set_arch_mach_hook PARAMS ((bfd *abfd, PTR filehdr));