Fix PowerPC targets minor memory leaks found by Coverity

bfd/
2014-02-04  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* coff-rs6000.c (xcoff_write_archive_contents_big): Free OFFSETS in
	return paths.  Three times.
	* elf64-ppc.c (ppc64_elf_link_hash_table_create): Free HTAB in all
	return paths.
	(ppc64_elf_tls_optimize): Free TOC_REF in return path.
	(ppc64_elf_edit_toc): Free USED in return path.
This commit is contained in:
Jan Kratochvil 2014-02-04 20:17:16 +01:00
parent 591a12a1d4
commit 2915c55b41
3 changed files with 44 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2014-02-04 Jan Kratochvil <jan.kratochvil@redhat.com>
* coff-rs6000.c (xcoff_write_archive_contents_big): Free OFFSETS in
return paths. Three times.
* elf64-ppc.c (ppc64_elf_link_hash_table_create): Free HTAB in all
return paths.
(ppc64_elf_tls_optimize): Free TOC_REF in return path.
(ppc64_elf_edit_toc): Free USED in return path.
2014-02-03 Sandra Loosemore <sandra@codesourcery.com>
* reloc.c (BFD_RELOC_NIOS2_GOT_LO, BFD_RELOC_NIOS2_GOT_HA): New.

View File

@ -2404,7 +2404,10 @@ xcoff_write_archive_contents_big (bfd *abfd)
PRINT20 (ahdrp->nextoff, iterator.next.offset);
if (!do_pad (abfd, iterator.current.leading_padding))
return FALSE;
{
free (offsets);
return FALSE;
}
BFD_ASSERT (iterator.current.offset == bfd_tell (abfd));
namlen = iterator.current.padded_namlen;
@ -2414,7 +2417,10 @@ xcoff_write_archive_contents_big (bfd *abfd)
|| bfd_seek (iterator.current.member, 0, SEEK_SET) != 0
|| !do_copy (abfd, iterator.current.member)
|| !do_pad (abfd, iterator.current.trailing_padding))
return FALSE;
{
free (offsets);
return FALSE;
}
offsets[i] = iterator.current.offset;
prevoff = iterator.current.offset;
@ -2459,7 +2465,10 @@ xcoff_write_archive_contents_big (bfd *abfd)
member_table_size += member_table_size & 1;
member_table = bfd_zmalloc (member_table_size);
if (member_table == NULL)
return FALSE;
{
free (offsets);
return FALSE;
}
hdr = (struct xcoff_ar_hdr_big *) member_table;

View File

@ -4168,19 +4168,31 @@ ppc64_elf_link_hash_table_create (bfd *abfd)
/* Init the stub hash table too. */
if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
sizeof (struct ppc_stub_hash_entry)))
return NULL;
{
_bfd_elf_link_hash_table_free ((struct bfd_link_hash_table *) htab);
return NULL;
}
/* And the branch hash table. */
if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
sizeof (struct ppc_branch_hash_entry)))
return NULL;
{
bfd_hash_table_free (&htab->stub_hash_table);
_bfd_elf_link_hash_table_free ((struct bfd_link_hash_table *) htab);
return NULL;
}
htab->tocsave_htab = htab_try_create (1024,
tocsave_htab_hash,
tocsave_htab_eq,
NULL);
if (htab->tocsave_htab == NULL)
return NULL;
{
bfd_hash_table_free (&htab->branch_hash_table);
bfd_hash_table_free (&htab->stub_hash_table);
_bfd_elf_link_hash_table_free ((struct bfd_link_hash_table *) htab);
return NULL;
}
/* Initializing two fields of the union is just cosmetic. We really
only care about glist, but when compiled on a 32-bit host the
@ -8073,7 +8085,10 @@ ppc64_elf_tls_optimize (struct bfd_link_info *info)
relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
info->keep_memory);
if (relstart == NULL)
return FALSE;
{
free (toc_ref);
return FALSE;
}
relend = relstart + sec->reloc_count;
for (rel = relstart; rel < relend; rel++)
@ -8781,7 +8796,10 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
info->keep_memory);
if (relstart == NULL)
goto error_ret;
{
free (used);
goto error_ret;
}
/* Mark toc entries referenced as used. */
do