From d4947150164aaf68186abe5b10725bf0a3149c7d Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 26 Jul 2007 09:37:13 +0000 Subject: [PATCH] * reloc.c (bfd_generic_get_relocated_section_contents): Avoid bfd_canonicalize_reloc call when bfd_get_reloc_upper_bound says there are no relocs. --- bfd/ChangeLog | 8 +++++++- bfd/reloc.c | 29 +++++++++++++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d9d4f7317cf..dc021fa27bc 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,11 @@ +2007-07-26 Alan Modra + + * reloc.c (bfd_generic_get_relocated_section_contents): Avoid + bfd_canonicalize_reloc call when bfd_get_reloc_upper_bound + says there are no relocs. + 2007-07-26 Doug Kwan - + Speed up bfd_dwarf2_find_line. * dwarf2.c (struct dwarf2_debug): Add new fields to support function and variable info hash tables. Add last_comp_unit, info_hash_count, diff --git a/bfd/reloc.c b/bfd/reloc.c index 673c05a8a07..cb9269b08c0 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -5185,26 +5185,28 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, bfd_boolean relocatable, asymbol **symbols) { - /* Get enough memory to hold the stuff. */ bfd *input_bfd = link_order->u.indirect.section->owner; asection *input_section = link_order->u.indirect.section; - - long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); - arelent **reloc_vector = NULL; + long reloc_size; + arelent **reloc_vector; long reloc_count; bfd_size_type sz; + reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); if (reloc_size < 0) - goto error_return; - - reloc_vector = bfd_malloc (reloc_size); - if (reloc_vector == NULL && reloc_size != 0) - goto error_return; + return NULL; /* Read in the section. */ sz = input_section->rawsize ? input_section->rawsize : input_section->size; if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz)) - goto error_return; + return NULL; + + if (reloc_size == 0) + return data; + + reloc_vector = bfd_malloc (reloc_size); + if (reloc_vector == NULL) + return NULL; reloc_count = bfd_canonicalize_reloc (input_bfd, input_section, @@ -5289,12 +5291,11 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, } } } - if (reloc_vector != NULL) - free (reloc_vector); + + free (reloc_vector); return data; error_return: - if (reloc_vector != NULL) - free (reloc_vector); + free (reloc_vector); return NULL; } -- 2.30.2