X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Fsom.c;h=f78b651d1a0f3d103421fd118f3e88444d0400d0;hb=0b67023188fef926357f0fd27e600195ab35727e;hp=6bc4ac922ccdd7f75bd51b0b5de131c5044576ca;hpb=9c461f7dba0ab17227ec3ada32804ed7f7c1a4d2;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/som.c b/bfd/som.c index 6bc4ac922c..f78b651d1a 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -1,5 +1,5 @@ /* bfd back-end for HP PA-RISC SOM objects. - Copyright (C) 1990-2014 Free Software Foundation, Inc. + Copyright (C) 1990-2017 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah. @@ -24,7 +24,7 @@ #include "sysdep.h" #include "alloca-conf.h" #include "bfd.h" - +#include "libiberty.h" #include "libbfd.h" #include "som.h" #include "safe-ctype.h" @@ -3304,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; - 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; + bfd_size_type res; /* Seek to the start of the space strings in preparation for writing them out. */ @@ -3355,7 +3356,7 @@ som_write_space_strings (bfd *abfd, 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. */ @@ -3391,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; - 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; @@ -3408,15 +3411,14 @@ som_write_symbol_strings (bfd *abfd, 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; - char *tmp_space = alloca (tmp_space_size); + char *tmp_space = xmalloc (tmp_space_size); char *p = tmp_space; - 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 @@ -3475,7 +3477,7 @@ som_write_symbol_strings (bfd *abfd, 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 @@ -3530,7 +3532,7 @@ som_write_symbol_strings (bfd *abfd, 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. */ @@ -3563,7 +3565,9 @@ som_write_symbol_strings (bfd *abfd, /* 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; @@ -5715,18 +5719,22 @@ som_set_arch_mach (bfd *abfd, static bfd_boolean som_find_nearest_line (bfd *abfd, - asection *section, asymbol **symbols, + asection *section, 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; + if (discriminator_ptr) + *discriminator_ptr = 0; + if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset, & found, filename_ptr, functionname_ptr, line_ptr, @@ -5771,7 +5779,7 @@ static int 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; } @@ -6714,6 +6722,7 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) } #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 @@ -6749,6 +6758,7 @@ 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_link_check_relocs _bfd_generic_link_check_relocs const bfd_target hppa_som_vec = {