Use bfd_simple_get_relocated_section_contents() instead of bfd_get_section_contents().
authorNick Clifton <nickc@redhat.com>
Thu, 7 Nov 2002 14:36:31 +0000 (14:36 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 7 Nov 2002 14:36:31 +0000 (14:36 +0000)
bfd/ChangeLog
bfd/dwarf2.c
bfd/reloc.c
bfd/simple.c

index 941da8a28d134aa470a968054e91c15388576165..5acc0c619db518b8d88325422d8c0adaaa0a0339 100644 (file)
@@ -1,3 +1,14 @@
+2002-11-07  Michal Ludvig  <mludvig@suse.cz>
+
+       * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info,
+       _bfd_dwarf2_find_nearest_line): Use
+       bfd_simple_get_relocated_section_contents() instead of
+       bfd_get_section_contents().
+       * reloc.c (bfd_perform_relocation): Add sanity check.
+       * simple.c (simple_get_relocated_section_contents): If the section
+       does not have any relocs associated with it, just return the
+       unadjusted contents.
+
 2002-11-07  Hans-Peter Nilsson  <hp@axis.com>
 
        * elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_16_GOT,
index 063982662bc7582bf1379e37cab654c6e06741d8..1d1e343a17e7c23f1e069a1e4d7bdfa7a72657eb 100644 (file)
@@ -389,8 +389,8 @@ read_indirect_string (unit, buf, bytes_read_ptr)
       if (! stash->dwarf_abbrev_buffer)
        return NULL;
 
-      if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
-                                     (bfd_vma) 0, msec->_raw_size))
+      if (! bfd_simple_get_relocated_section_contents 
+         (abfd, msec, stash->dwarf_str_buffer))
        return NULL;
     }
 
@@ -550,8 +550,8 @@ read_abbrevs (abfd, offset, stash)
       if (! stash->dwarf_abbrev_buffer)
          return 0;
 
-      if (! bfd_get_section_contents (abfd, msec, stash->dwarf_abbrev_buffer,
-                                     (bfd_vma) 0, msec->_raw_size))
+      if (! bfd_simple_get_relocated_section_contents
+         (abfd, msec, stash->dwarf_abbrev_buffer))
        return 0;
     }
 
@@ -1023,8 +1023,8 @@ decode_line_info (unit, stash)
       if (! stash->dwarf_line_buffer)
        return 0;
 
-      if (! bfd_get_section_contents (abfd, msec, stash->dwarf_line_buffer,
-                                     (bfd_vma) 0, msec->_raw_size))
+      if (! bfd_simple_get_relocated_section_contents
+         (abfd, msec, stash->dwarf_line_buffer))
        return 0;
 
       /* FIXME: We ought to apply the relocs against this section before
@@ -1939,8 +1939,8 @@ _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
 
          start = stash->info_ptr_end - stash->info_ptr;
 
-         if (! bfd_get_section_contents (abfd, msec, stash->info_ptr + start,
-                                         (bfd_vma) 0, size))
+         if (! bfd_simple_get_relocated_section_contents
+             (abfd, msec, stash->info_ptr + start))
            continue;
 
          stash->info_ptr_end = stash->info_ptr + start + size;
index b13f6722c1a661a95da7db5f0c904f46a6114e29..0885e03232e595c330f75f5f06e2efedfcc531dd 100644 (file)
@@ -4,21 +4,21 @@
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
-This file is part of BFD, the Binary File Descriptor library.
+   This file is part of BFD, the Binary File Descriptor library.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /*
 SECTION
@@ -645,7 +645,8 @@ bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
   reloc_target_output_section = symbol->section->output_section;
 
   /* Convert input-section-relative symbol value to absolute.  */
-  if (output_bfd && ! howto->partial_inplace)
+  if ((output_bfd && ! howto->partial_inplace)
+      || reloc_target_output_section == NULL)
     output_base = 0;
   else
     output_base = reloc_target_output_section->vma;
index 10178a40ad4cd62bead3ad5ed450673d594ee1d5..f0f5ee641235de8fea573318e32f6e9d71a16dea 100644 (file)
@@ -138,6 +138,21 @@ bfd_simple_get_relocated_section_contents (abfd, sec, outbuf)
   int storage_needed, number_of_symbols;
   asymbol **symbol_table;
 
+  if (! (sec->flags & SEC_RELOC))
+    {
+      bfd_size_type size = bfd_section_size (abfd, sec);
+
+      if (outbuf == NULL)
+       contents = bfd_malloc (size);
+      else
+       contents = outbuf;
+
+      if (contents)
+       bfd_get_section_contents (abfd, sec, contents, 0, size);
+
+      return contents;
+    }
+
   /* In order to use bfd_get_relocated_section_contents, we need
      to forge some data structures that it expects.  */