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 /bfd/reloc.c | |
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.
Diffstat (limited to 'bfd/reloc.c')
-rw-r--r-- | bfd/reloc.c | 29 |
1 files changed, 15 insertions, 14 deletions
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; } |