diff options
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-sh.c | 12 |
2 files changed, 14 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7da5c8b..93eb6fb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,11 @@ 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. 2012-02-25 Walter Lee <walt@tilera.com> diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 780a3bf..8d8b28c 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 |