diff options
author | Alan Modra <amodra@gmail.com> | 2007-07-26 09:37:13 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2007-07-26 09:37:13 +0000 |
commit | d4947150164aaf68186abe5b10725bf0a3149c7d (patch) | |
tree | 60a309b29f0fbfd9518ae3850351559c0a6368eb | |
parent | bd210d54db990cce3054a4de717b0f0a8b32af0b (diff) | |
download | gdb-d4947150164aaf68186abe5b10725bf0a3149c7d.zip gdb-d4947150164aaf68186abe5b10725bf0a3149c7d.tar.gz gdb-d4947150164aaf68186abe5b10725bf0a3149c7d.tar.bz2 |
* reloc.c (bfd_generic_get_relocated_section_contents): Avoid
bfd_canonicalize_reloc call when bfd_get_reloc_upper_bound
says there are no relocs.
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/reloc.c | 29 |
2 files changed, 22 insertions, 15 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d9d4f73..dc021fa 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,11 @@ +2007-07-26 Alan Modra <amodra@bigpond.net.au> + + * 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 <dougkwan@google.com> - + 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 673c05a..cb9269b 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; } |