bfd: new BFD target entry point _bfd_set_reloc.
[deliverable/binutils-gdb.git] / bfd / som.c
index a642231a8f9e8c307b1330524bfd7aef6a506eee..496040c3f0faa2fed2b9180ee5b136a1ee6e787d 100644 (file)
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -1,7 +1,5 @@
 /* bfd back-end for HP PA-RISC SOM objects.
 /* bfd back-end for HP PA-RISC SOM objects.
-   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 1990-2017 Free Software Foundation, Inc.
 
    Contributed by the Center for Software Science at the
    University of Utah.
 
    Contributed by the Center for Software Science at the
    University of Utah.
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
-#include "alloca-conf.h"
 #include "sysdep.h"
 #include "sysdep.h"
+#include "alloca-conf.h"
 #include "bfd.h"
 #include "bfd.h"
-
+#include "libiberty.h"
 #include "libbfd.h"
 #include "som.h"
 #include "safe-ctype.h"
 #include "libbfd.h"
 #include "som.h"
 #include "safe-ctype.h"
@@ -2496,7 +2494,7 @@ som_object_p (bfd *abfd)
     {
       struct som_external_exec_auxhdr ext_exec_auxhdr;
 
     {
       struct som_external_exec_auxhdr ext_exec_auxhdr;
 
-      aux_hdr_ptr = bfd_zalloc (abfd, 
+      aux_hdr_ptr = bfd_zalloc (abfd,
                                (bfd_size_type) sizeof (*aux_hdr_ptr));
       if (aux_hdr_ptr == NULL)
        return NULL;
                                (bfd_size_type) sizeof (*aux_hdr_ptr));
       if (aux_hdr_ptr == NULL)
        return NULL;
@@ -3306,11 +3304,12 @@ som_write_space_strings (bfd *abfd,
   /* Chunk of memory that we can use as buffer space, then throw
      away.  */
   size_t tmp_space_size = SOM_TMP_BUFSIZE;
   /* Chunk of memory that we can use as buffer space, then throw
      away.  */
   size_t tmp_space_size = SOM_TMP_BUFSIZE;
-  char *tmp_space = alloca (tmp_space_size);
+  char *tmp_space = xmalloc (tmp_space_size);
   char *p = tmp_space;
   unsigned int strings_size = 0;
   asection *section;
   bfd_size_type amt;
   char *p = tmp_space;
   unsigned int strings_size = 0;
   asection *section;
   bfd_size_type amt;
+  bfd_size_type res;
 
   /* Seek to the start of the space strings in preparation for writing
      them out.  */
 
   /* Seek to the start of the space strings in preparation for writing
      them out.  */
@@ -3357,7 +3356,7 @@ som_write_space_strings (bfd *abfd,
                 tmp_space_size = length + 5;
               else
                 tmp_space_size = 2 * tmp_space_size;
                 tmp_space_size = length + 5;
               else
                 tmp_space_size = 2 * tmp_space_size;
-             tmp_space = alloca (tmp_space_size);
+             tmp_space = xrealloc (tmp_space, tmp_space_size);
            }
 
          /* Reset to beginning of the (possibly new) buffer space.  */
            }
 
          /* Reset to beginning of the (possibly new) buffer space.  */
@@ -3393,7 +3392,9 @@ som_write_space_strings (bfd *abfd,
   /* Done with the space/subspace strings.  Write out any information
      contained in a partial block.  */
   amt = p - tmp_space;
   /* Done with the space/subspace strings.  Write out any information
      contained in a partial block.  */
   amt = p - tmp_space;
-  if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
+  res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd);
+  free (tmp_space);
+  if (res != amt)
     return FALSE;
   *string_sizep = strings_size;
   return TRUE;
     return FALSE;
   *string_sizep = strings_size;
   return TRUE;
@@ -3410,15 +3411,14 @@ som_write_symbol_strings (bfd *abfd,
                          struct som_compilation_unit *compilation_unit)
 {
   unsigned int i;
                          struct som_compilation_unit *compilation_unit)
 {
   unsigned int i;
-
   /* Chunk of memory that we can use as buffer space, then throw
      away.  */
   size_t tmp_space_size = SOM_TMP_BUFSIZE;
   /* Chunk of memory that we can use as buffer space, then throw
      away.  */
   size_t tmp_space_size = SOM_TMP_BUFSIZE;
-  char *tmp_space = alloca (tmp_space_size);
+  char *tmp_space = xmalloc (tmp_space_size);
   char *p = tmp_space;
   char *p = tmp_space;
-
   unsigned int strings_size = 0;
   bfd_size_type amt;
   unsigned int strings_size = 0;
   bfd_size_type amt;
+  bfd_size_type res;
 
   /* This gets a bit gruesome because of the compilation unit.  The
      strings within the compilation unit are part of the symbol
 
   /* This gets a bit gruesome because of the compilation unit.  The
      strings within the compilation unit are part of the symbol
@@ -3477,7 +3477,7 @@ som_write_symbol_strings (bfd *abfd,
                     tmp_space_size = 5 + length;
                   else
                     tmp_space_size = 2 * tmp_space_size;
                     tmp_space_size = 5 + length;
                   else
                     tmp_space_size = 2 * tmp_space_size;
-                 tmp_space = alloca (tmp_space_size);
+                 tmp_space = xrealloc (tmp_space, tmp_space_size);
                }
 
              /* Reset to beginning of the (possibly new) buffer
                }
 
              /* Reset to beginning of the (possibly new) buffer
@@ -3532,7 +3532,7 @@ som_write_symbol_strings (bfd *abfd,
                 tmp_space_size = 5 + length;
               else
                 tmp_space_size = 2 * tmp_space_size;
                 tmp_space_size = 5 + length;
               else
                 tmp_space_size = 2 * tmp_space_size;
-             tmp_space = alloca (tmp_space_size);
+             tmp_space = xrealloc (tmp_space, tmp_space_size);
            }
 
          /* Reset to beginning of the (possibly new) buffer space.  */
            }
 
          /* Reset to beginning of the (possibly new) buffer space.  */
@@ -3565,7 +3565,9 @@ som_write_symbol_strings (bfd *abfd,
 
   /* Scribble out any partial block.  */
   amt = p - tmp_space;
 
   /* Scribble out any partial block.  */
   amt = p - tmp_space;
-  if (bfd_bwrite ((void *) &tmp_space[0], amt, abfd) != amt)
+  res = bfd_bwrite ((void *) &tmp_space[0], amt, abfd);
+  free (tmp_space);
+  if (res != amt)
     return FALSE;
 
   *string_sizep = strings_size;
     return FALSE;
 
   *string_sizep = strings_size;
@@ -4572,7 +4574,7 @@ som_get_symtab_upper_bound (bfd *abfd)
 
 /* Convert from a SOM subspace index to a BFD section.  */
 
 
 /* Convert from a SOM subspace index to a BFD section.  */
 
-static asection *
+asection *
 bfd_section_from_som_symbol
   (bfd *abfd, struct som_external_symbol_dictionary_record *symbol)
 {
 bfd_section_from_som_symbol
   (bfd *abfd, struct som_external_symbol_dictionary_record *symbol)
 {
@@ -5351,7 +5353,7 @@ som_canonicalize_reloc (bfd *abfd,
   return section->reloc_count;
 }
 
   return section->reloc_count;
 }
 
-extern const bfd_target som_vec;
+extern const bfd_target hppa_som_vec;
 
 /* A hook to set up object file dependent section information.  */
 
 
 /* A hook to set up object file dependent section information.  */
 
@@ -5717,18 +5719,22 @@ som_set_arch_mach (bfd *abfd,
 
 static bfd_boolean
 som_find_nearest_line (bfd *abfd,
 
 static bfd_boolean
 som_find_nearest_line (bfd *abfd,
-                      asection *section,
                       asymbol **symbols,
                       asymbol **symbols,
+                      asection *section,
                       bfd_vma offset,
                       const char **filename_ptr,
                       const char **functionname_ptr,
                       bfd_vma offset,
                       const char **filename_ptr,
                       const char **functionname_ptr,
-                      unsigned int *line_ptr)
+                      unsigned int *line_ptr,
+                      unsigned int *discriminator_ptr)
 {
   bfd_boolean found;
   asymbol *func;
   bfd_vma low_func;
   asymbol **p;
 
 {
   bfd_boolean found;
   asymbol *func;
   bfd_vma low_func;
   asymbol **p;
 
+  if (discriminator_ptr)
+    *discriminator_ptr = 0;
+
   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
                                              & found, filename_ptr,
                                              functionname_ptr, line_ptr,
   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
                                              & found, filename_ptr,
                                              functionname_ptr, line_ptr,
@@ -5746,9 +5752,9 @@ som_find_nearest_line (bfd *abfd,
   low_func = 0;
 
   for (p = symbols; *p != NULL; p++)
   low_func = 0;
 
   for (p = symbols; *p != NULL; p++)
-    { 
+    {
       som_symbol_type *q = (som_symbol_type *) *p;
       som_symbol_type *q = (som_symbol_type *) *p;
-  
+
       if (q->som_type == SYMBOL_TYPE_ENTRY
          && q->symbol.section == section
          && q->symbol.value >= low_func
       if (q->som_type == SYMBOL_TYPE_ENTRY
          && q->symbol.section == section
          && q->symbol.value >= low_func
@@ -5773,7 +5779,7 @@ static int
 som_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
                    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
 som_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
                    struct bfd_link_info *info ATTRIBUTE_UNUSED)
 {
-  (*_bfd_error_handler) (_("som_sizeof_headers unimplemented"));
+  _bfd_error_handler (_("som_sizeof_headers unimplemented"));
   abort ();
   return 0;
 }
   abort ();
   return 0;
 }
@@ -6715,6 +6721,8 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
   return som_is_subspace (sec) && sec->size > 240000;
 }
 
   return som_is_subspace (sec) && sec->size > 240000;
 }
 
+#define som_find_line                          _bfd_nosymbols_find_line
+#define som_get_symbol_version_string          _bfd_nosymbols_get_symbol_version_string
 #define        som_close_and_cleanup                   som_bfd_free_cached_info
 #define som_read_ar_hdr                                _bfd_generic_read_ar_hdr
 #define som_write_ar_hdr                       _bfd_generic_write_ar_hdr
 #define        som_close_and_cleanup                   som_bfd_free_cached_info
 #define som_read_ar_hdr                                _bfd_generic_read_ar_hdr
 #define som_write_ar_hdr                       _bfd_generic_write_ar_hdr
@@ -6734,13 +6742,13 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
 #define som_bfd_get_relocated_section_contents  bfd_generic_get_relocated_section_contents
 #define som_bfd_relax_section                   bfd_generic_relax_section
 #define som_bfd_link_hash_table_create          _bfd_generic_link_hash_table_create
 #define som_bfd_get_relocated_section_contents  bfd_generic_get_relocated_section_contents
 #define som_bfd_relax_section                   bfd_generic_relax_section
 #define som_bfd_link_hash_table_create          _bfd_generic_link_hash_table_create
-#define som_bfd_link_hash_table_free            _bfd_generic_link_hash_table_free
 #define som_bfd_link_add_symbols                _bfd_generic_link_add_symbols
 #define som_bfd_link_just_syms                  _bfd_generic_link_just_syms
 #define som_bfd_copy_link_hash_symbol_type \
   _bfd_generic_copy_link_hash_symbol_type
 #define som_bfd_final_link                      _bfd_generic_final_link
 #define som_bfd_gc_sections                    bfd_generic_gc_sections
 #define som_bfd_link_add_symbols                _bfd_generic_link_add_symbols
 #define som_bfd_link_just_syms                  _bfd_generic_link_just_syms
 #define som_bfd_copy_link_hash_symbol_type \
   _bfd_generic_copy_link_hash_symbol_type
 #define som_bfd_final_link                      _bfd_generic_final_link
 #define som_bfd_gc_sections                    bfd_generic_gc_sections
+#define som_bfd_lookup_section_flags            bfd_generic_lookup_section_flags
 #define som_bfd_merge_sections                 bfd_generic_merge_sections
 #define som_bfd_is_group_section               bfd_generic_is_group_section
 #define som_bfd_discard_group                  bfd_generic_discard_group
 #define som_bfd_merge_sections                 bfd_generic_merge_sections
 #define som_bfd_is_group_section               bfd_generic_is_group_section
 #define som_bfd_discard_group                  bfd_generic_discard_group
@@ -6750,8 +6758,10 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
 #define som_bfd_copy_private_header_data       _bfd_generic_bfd_copy_private_header_data
 #define som_bfd_set_private_flags              _bfd_generic_bfd_set_private_flags
 #define som_find_inliner_info                  _bfd_nosymbols_find_inliner_info
 #define som_bfd_copy_private_header_data       _bfd_generic_bfd_copy_private_header_data
 #define som_bfd_set_private_flags              _bfd_generic_bfd_set_private_flags
 #define som_find_inliner_info                  _bfd_nosymbols_find_inliner_info
+#define som_bfd_link_check_relocs               _bfd_generic_link_check_relocs
+#define som_set_reloc                          _bfd_generic_set_reloc
 
 
-const bfd_target som_vec =
+const bfd_target hppa_som_vec =
 {
   "som",                       /* Name.  */
   bfd_target_som_flavour,
 {
   "som",                       /* Name.  */
   bfd_target_som_flavour,
This page took 0.028902 seconds and 4 git commands to generate.