This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]