* elf32-sh.c (sh_elf_osec_to_segment): Check for elf flavour bfd
authorAlan Modra <amodra@gmail.com>
Mon, 27 Feb 2012 06:48:10 +0000 (06:48 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 27 Feb 2012 06:48:10 +0000 (06:48 +0000)
before calling elf specific function.
(sh_elf_osec_readonly_p): Test for error return from above.

bfd/ChangeLog
bfd/elf32-sh.c

index 7da5c8b7518c76451616fdbd61038e171e44a288..93eb6fb9bb619fbc01371c5c8bbec60a9db1914e 100644 (file)
@@ -1,3 +1,9 @@
+2012-02-27  Alan Modra  <amodra@gmail.com>
+
+       * elf32-sh.c (sh_elf_osec_to_segment): Check for elf flavour bfd
+       before calling elf specific function.
+       (sh_elf_osec_readonly_p): Test for error return from above.
+
 2012-02-27  Alan Modra  <amodra@gmail.com>
 
        * elf32-spu.c (build_stub): Fix malloc under-allocation.
index 780a3bf6b0fd898b52b0a04dfa0631633db848c5..8d8b28c76acc901244b200e59a30e86a93561b3d 100644 (file)
@@ -1,6 +1,7 @@
 /* Renesas / SuperH SH specific support for 32-bit ELF
    Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
    Contributed by Ian Lance Taylor, Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -3788,8 +3789,10 @@ sh_elf_got_offset (struct elf_sh_link_hash_table *htab)
 static unsigned
 sh_elf_osec_to_segment (bfd *output_bfd, asection *osec)
 {
-  Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section (output_bfd,
-                                                                  osec);
+  Elf_Internal_Phdr *p = NULL;
+
+  if (output_bfd->xvec->flavour == bfd_target_elf_flavour)
+    p = _bfd_elf_find_segment_containing_section (output_bfd, osec);
 
   /* FIXME: Nothing ever says what this index is relative to.  The kernel
      supplies data in terms of the number of load segments but this is
@@ -3802,7 +3805,8 @@ sh_elf_osec_readonly_p (bfd *output_bfd, asection *osec)
 {
   unsigned seg = sh_elf_osec_to_segment (output_bfd, osec);
 
-  return ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W);
+  return (seg != (unsigned) -1
+         && ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W));
 }
 
 /* Generate the initial contents of a local function descriptor, along