This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PR5692
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sourceware dot org
- Date: Mon, 4 Feb 2008 10:37:25 +1030
- Subject: PR5692
Hi Nick,
I believe this is a better fix for PR5692. It isn't valid to use
get_elf_backend_data on non-ELF input BFDs, and testing for NULL won't
catch other targets that happen to use their backend_data field.
Please note the FIXME I added to elf32-arm.c!
elf32-ppc.c:is_ppc_elf_target is one solution, but I'll leave that to
the ARM maintainers.
PR ld/5692
* elf.c (bfd_elf_get_elf_syms): Revert 2008-01-31. Instead abort
on non-ELF input.
* elf32-arm.c (elf32_arm_size_dynamic_sections): Skip glue
processing on non-ELF input.
Index: bfd/elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.430
diff -u -p -r1.430 elf.c
--- bfd/elf.c 31 Jan 2008 10:48:35 -0000 1.430
+++ bfd/elf.c 3 Feb 2008 12:46:34 -0000
@@ -351,6 +351,9 @@ bfd_elf_get_elf_syms (bfd *ibfd,
bfd_size_type amt;
file_ptr pos;
+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
+ abort ();
+
if (symcount == 0)
return intsym_buf;
@@ -363,9 +366,6 @@ bfd_elf_get_elf_syms (bfd *ibfd,
alloc_ext = NULL;
alloc_extshndx = NULL;
bed = get_elf_backend_data (ibfd);
- /* PR ld/5692: Check for non-ELF files. */
- if (bed == NULL)
- return NULL;
extsym_size = bed->s->sizeof_sym;
amt = symcount * extsym_size;
pos = symtab_hdr->sh_offset + symoffset * extsym_size;
Index: bfd/elf32-arm.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-arm.c,v
retrieving revision 1.132
diff -u -p -r1.132 elf32-arm.c
--- bfd/elf32-arm.c 11 Jan 2008 09:07:03 -0000 1.132
+++ bfd/elf32-arm.c 3 Feb 2008 12:46:43 -0000
@@ -1,6 +1,6 @@
/* 32-bit ELF support for ARM
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
- Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+ 2008 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -8524,6 +8524,11 @@ elf32_arm_size_dynamic_sections (bfd * o
Elf_Internal_Shdr *symtab_hdr;
asection *srel;
+ /* FIXME: Here and elsewhere the test for an ELF input BFD is
+ not sufficiently strict. Since we use elf32_arm_tdata and
+ elf32_arm_section_data, we should only allow those targets
+ that in fact have such data. This of course is the set of
+ targets defined in this file. */
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
continue;
@@ -8601,6 +8606,9 @@ elf32_arm_size_dynamic_sections (bfd * o
/* Here we rummage through the found bfds to collect glue information. */
for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
{
+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
+ continue;
+
/* Initialise mapping tables for code/data. */
bfd_elf32_arm_init_maps (ibfd);
--
Alan Modra
Australia Development Lab, IBM