diff options
author | Alan Modra <amodra@gmail.com> | 2005-06-06 13:16:15 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-06-06 13:16:15 +0000 |
commit | 46de2a7c487120233d6331aa25109dd2aaf83b8b (patch) | |
tree | 7cfdcdfb92486135a71dfe4b4bbceece4fa6d380 | |
parent | b4f4e59ffff89dd86068046263008836e145ae41 (diff) | |
download | gdb-46de2a7c487120233d6331aa25109dd2aaf83b8b.zip gdb-46de2a7c487120233d6331aa25109dd2aaf83b8b.tar.gz gdb-46de2a7c487120233d6331aa25109dd2aaf83b8b.tar.bz2 |
* elf64-ppc.c (ppc_stub_name): Return immediately on bfd_malloc fail.
(ppc64_elf_edit_opd): Ignore zero size .opd. Check bfd_alloc
return value.
-rw-r--r-- | bfd/ChangeLog | 2 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 34 |
2 files changed, 20 insertions, 16 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e509590..85b883c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -4,6 +4,8 @@ case, include addend when indexing .opd section map. (ppc64_elf_edit_opd): Add no_opd_opt param. Do nothing besides clear opd_adjust array if no_opd_opt set. Tidy code. + Ignore zero size .opd. Check bfd_alloc return value. + (ppc_stub_name): Return immediately on bfd_malloc fail. * elf64-ppc.h (ppc64_elf_edit_opd): Update prototype. 2005-06-04 H.J. Lu <hongjiu.lu@intel.com> diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index 5c398b1..bd122cf 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3581,26 +3581,26 @@ ppc_stub_name (const asection *input_section, { len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1; stub_name = bfd_malloc (len); - if (stub_name != NULL) - { - sprintf (stub_name, "%08x.%s+%x", - input_section->id & 0xffffffff, - h->elf.root.root.string, - (int) rel->r_addend & 0xffffffff); - } + if (stub_name == NULL) + return stub_name; + + sprintf (stub_name, "%08x.%s+%x", + input_section->id & 0xffffffff, + h->elf.root.root.string, + (int) rel->r_addend & 0xffffffff); } else { len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1; stub_name = bfd_malloc (len); - if (stub_name != NULL) - { - sprintf (stub_name, "%08x.%x:%x+%x", - input_section->id & 0xffffffff, - sym_sec->id & 0xffffffff, - (int) ELF64_R_SYM (rel->r_info) & 0xffffffff, - (int) rel->r_addend & 0xffffffff); - } + if (stub_name == NULL) + return stub_name; + + sprintf (stub_name, "%08x.%x:%x+%x", + input_section->id & 0xffffffff, + sym_sec->id & 0xffffffff, + (int) ELF64_R_SYM (rel->r_info) & 0xffffffff, + (int) rel->r_addend & 0xffffffff); } if (stub_name[len - 2] == '+' && stub_name[len - 1] == '0') stub_name[len - 2] = 0; @@ -6176,7 +6176,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, bfd_size_type cnt_16b = 0; sec = bfd_get_section_by_name (ibfd, ".opd"); - if (sec == NULL) + if (sec == NULL || sec->size == 0) continue; amt = sec->size * sizeof (long) / 8; @@ -6186,6 +6186,8 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, /* check_relocs hasn't been called. Must be a ld -r link or --just-symbols object. */ opd_adjust = bfd_alloc (obfd, amt); + if (opd_adjust == NULL) + return FALSE; ppc64_elf_section_data (sec)->opd.adjust = opd_adjust; } memset (opd_adjust, 0, amt); |