This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
bfd_link_hash_table_create using bfd_alloc
- From: Alan Modra <amodra at gmail dot com>
- To: binutils at sourceware dot org
- Date: Sun, 10 Feb 2013 14:32:59 +1030
- Subject: bfd_link_hash_table_create using bfd_alloc
More link_hash_table_create errors. bfd_alloc isn't correct here
unless the backends use a custom link_hash_table_free function, since
the default link_hash_table_free will call free(). Most of these
backends even call free() on error in link_hash_table_create..
They would all bomb if ld called link_hash_table_free before exiting.
Committed mainline.
* i386linux.c (linux_link_hash_table_create): Allocate table
with bfd_zmalloc, not bfd_alloc.
* pdp11.c (link_hash_table_create): Allocate table with
bfd_malloc, not bfd_alloc.
* elf32-bfin.c (bfinfdpic_elf_link_hash_table_create): Allocate table
with bfd_zmalloc, not bfd_zalloc.
(bfin_link_hash_table_create): Likewise.
* elf32-frv.c (frvfdpic_elf_link_hash_table_create): Likewise.
* elf64-hppa.c (elf64_hppa_hash_table_create): Likewise.
Index: bfd/i386linux.c
===================================================================
RCS file: /cvs/src/src/bfd/i386linux.c,v
retrieving revision 1.25
diff -u -p -r1.25 i386linux.c
--- bfd/i386linux.c 13 Jul 2012 14:22:50 -0000 1.25
+++ bfd/i386linux.c 9 Feb 2013 10:41:16 -0000
@@ -204,7 +204,7 @@ linux_link_hash_table_create (bfd *abfd)
struct linux_link_hash_table *ret;
bfd_size_type amt = sizeof (struct linux_link_hash_table);
- ret = (struct linux_link_hash_table *) bfd_alloc (abfd, amt);
+ ret = (struct linux_link_hash_table *) bfd_zmalloc (amt);
if (ret == (struct linux_link_hash_table *) NULL)
return (struct bfd_link_hash_table *) NULL;
if (!NAME(aout,link_hash_table_init) (&ret->root, abfd,
@@ -215,11 +215,6 @@ linux_link_hash_table_create (bfd *abfd)
return (struct bfd_link_hash_table *) NULL;
}
- ret->dynobj = NULL;
- ret->fixup_count = 0;
- ret->local_builtins = 0;
- ret->fixup_list = NULL;
-
return &ret->root.root;
}
Index: bfd/pdp11.c
===================================================================
RCS file: /cvs/src/src/bfd/pdp11.c,v
retrieving revision 1.51
diff -u -p -r1.51 pdp11.c
--- bfd/pdp11.c 10 Jan 2013 20:03:54 -0000 1.51
+++ bfd/pdp11.c 9 Feb 2013 10:41:17 -0000
@@ -2459,7 +2459,7 @@ NAME (aout, link_hash_table_create) (bfd
struct aout_link_hash_table *ret;
bfd_size_type amt = sizeof (struct aout_link_hash_table);
- ret = bfd_alloc (abfd, amt);
+ ret = bfd_malloc (amt);
if (ret == NULL)
return NULL;
if (! NAME (aout, link_hash_table_init) (ret, abfd,
Index: bfd/elf32-bfin.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-bfin.c,v
retrieving revision 1.60
diff -u -p -r1.60 elf32-bfin.c
--- bfd/elf32-bfin.c 23 Oct 2012 09:33:54 -0000 1.60
+++ bfd/elf32-bfin.c 9 Feb 2013 10:41:12 -0000
@@ -1821,7 +1821,7 @@ bfinfdpic_elf_link_hash_table_create (bf
struct bfinfdpic_elf_link_hash_table *ret;
bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table);
- ret = bfd_zalloc (abfd, amt);
+ ret = bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
@@ -5088,7 +5088,7 @@ bfin_link_hash_table_create (bfd * abfd)
struct bfin_link_hash_table *ret;
bfd_size_type amt = sizeof (struct bfin_link_hash_table);
- ret = bfd_zalloc (abfd, amt);
+ ret = bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
Index: bfd/elf32-frv.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-frv.c,v
retrieving revision 1.81
diff -u -p -r1.81 elf32-frv.c
--- bfd/elf32-frv.c 10 Jan 2013 20:03:52 -0000 1.81
+++ bfd/elf32-frv.c 9 Feb 2013 10:41:13 -0000
@@ -952,7 +952,7 @@ frvfdpic_elf_link_hash_table_create (bfd
struct frvfdpic_elf_link_hash_table *ret;
bfd_size_type amt = sizeof (struct frvfdpic_elf_link_hash_table);
- ret = bfd_zalloc (abfd, amt);
+ ret = bfd_zmalloc (amt);
if (ret == NULL)
return NULL;
Index: bfd/elf64-hppa.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-hppa.c,v
retrieving revision 1.111
diff -u -p -r1.111 elf64-hppa.c
--- bfd/elf64-hppa.c 10 Jan 2013 20:03:53 -0000 1.111
+++ bfd/elf64-hppa.c 9 Feb 2013 10:41:15 -0000
@@ -299,7 +299,7 @@ elf64_hppa_hash_table_create (bfd *abfd)
struct elf64_hppa_link_hash_table *htab;
bfd_size_type amt = sizeof (*htab);
- htab = bfd_zalloc (abfd, amt);
+ htab = bfd_zmalloc (amt);
if (htab == NULL)
return NULL;
@@ -308,7 +308,7 @@ elf64_hppa_hash_table_create (bfd *abfd)
sizeof (struct elf64_hppa_link_hash_entry),
HPPA64_ELF_DATA))
{
- bfd_release (abfd, htab);
+ free (htab);
return NULL;
}
--
Alan Modra
Australia Development Lab, IBM