From 3d301fdc610585d4dd037d9f4816f732aa4417d7 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 27 Feb 2012 06:48:10 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-sh.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7da5c8b751..93eb6fb9bb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2012-02-27 Alan Modra + + * 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 * elf32-spu.c (build_stub): Fix malloc under-allocation. diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 780a3bf6b0..8d8b28c76a 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -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 -- 2.34.1