aboutsummaryrefslogtreecommitdiff
path: root/bfd/reloc.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2007-07-26 09:37:13 +0000
committerAlan Modra <amodra@gmail.com>2007-07-26 09:37:13 +0000
commitd4947150164aaf68186abe5b10725bf0a3149c7d (patch)
tree60a309b29f0fbfd9518ae3850351559c0a6368eb /bfd/reloc.c
parentbd210d54db990cce3054a4de717b0f0a8b32af0b (diff)
downloadbinutils-d4947150164aaf68186abe5b10725bf0a3149c7d.zip
binutils-d4947150164aaf68186abe5b10725bf0a3149c7d.tar.gz
binutils-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.c29
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;
}