PR ld/5692
authorAlan Modra <amodra@gmail.com>
Mon, 4 Feb 2008 00:09:04 +0000 (00:09 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 4 Feb 2008 00:09:04 +0000 (00:09 +0000)
* 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.

bfd/ChangeLog
bfd/elf.c
bfd/elf32-arm.c

index 76b95d8..218fce6 100644 (file)
@@ -1,3 +1,11 @@
+2008-02-04  Alan Modra  <amodra@bigpond.net.au>
+
+       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.
+
 2008-01-31  Marc Gauthier  <marc@tensilica.com>
 
        * config.bfd (xtensa*-*-*): Recognize processor variants.
index b8b7c92..b5dd636 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -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 3146499..b9bc502 100644 (file)
@@ -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 * output_bfd ATTRIBUTE_UNUSED,
       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 * output_bfd ATTRIBUTE_UNUSED,
   /* 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);