bfd/
authorAlan Modra <amodra@gmail.com>
Fri, 24 Sep 2004 07:07:22 +0000 (07:07 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 24 Sep 2004 07:07:22 +0000 (07:07 +0000)
* dwarf2.c (_bfd_dwarf2_find_nearest_line): Add output section
vma and output offset to address.
* simple.c (simple_save_output_info): Only set output section
and offset for debug sections, or those not already set up by
the linker.
(bfd_simple_get_relocated_section_contents): Update comment.
ld/testsuite/
* ld-elfvsb/elfvsb.exp: Remove file name from "undefined ref" string.

bfd/ChangeLog
bfd/dwarf2.c
bfd/simple.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elfvsb/elfvsb.exp

index 8537513db6b4a436b9909212c799e66ba46c2024..1d9635288d6cc9b22de7e1660ac7ccac5137c255 100644 (file)
@@ -1,3 +1,12 @@
+2004-09-24  Alan Modra  <amodra@bigpond.net.au>
+
+       * dwarf2.c (_bfd_dwarf2_find_nearest_line): Add output section
+       vma and output offset to address.
+       * simple.c (simple_save_output_info): Only set output section
+       and offset for debug sections, or those not already set up by
+       the linker.
+       (bfd_simple_get_relocated_section_contents): Update comment.
+
 2004-09-24  Alan Modra  <amodra@bigpond.net.au>
 
        * elf.c (IS_LOADED): Delete.
index a09265755a00e78b988be3484d102a18fae0465a..b1f4ea68854300247e9aff7f4edc6c567748b9b6 100644 (file)
@@ -1703,13 +1703,19 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
      We keep a list of all the previously read compilation units, and
      a pointer to the next un-read compilation unit.  Check the
      previously read units before reading more.  */
-  struct dwarf2_debug *stash = *pinfo;
+  struct dwarf2_debug *stash;
 
   /* What address are we looking for?  */
-  bfd_vma addr = offset + section->vma;
+  bfd_vma addr;
 
   struct comp_unit* each;
 
+  stash = *pinfo;
+  addr = offset;
+  if (section->output_section)
+    addr += section->output_section->vma + section->output_offset;
+  else
+    addr += section->vma;
   *filename_ptr = NULL;
   *functionname_ptr = NULL;
   *linenumber_ptr = 0;
index 5039911dcfdf1356793a6df6a83bdfcc33019ea3..41aa950955aa31a76bcf0d9d9286200e1fb45540 100644 (file)
@@ -92,8 +92,12 @@ simple_save_output_info (bfd *abfd ATTRIBUTE_UNUSED,
   struct saved_output_info *output_info = ptr;
   output_info[section->index].offset = section->output_offset;
   output_info[section->index].section = section->output_section;
-  section->output_offset = 0;
-  section->output_section = section;
+  if ((section->flags & SEC_DEBUGGING) != 0
+      || section->output_section == NULL)
+    {
+      section->output_offset = 0;
+      section->output_section = section;
+    }
 }
 
 static void
@@ -117,13 +121,10 @@ SYNOPSIS
 DESCRIPTION
        Returns the relocated contents of section @var{sec}.  The symbols in
        @var{symbol_table} will be used, or the symbols from @var{abfd} if
-       @var{symbol_table} is NULL.  The output offsets for all sections will
+       @var{symbol_table} is NULL.  The output offsets for debug sections will
        be temporarily reset to 0.  The result will be stored at @var{outbuf}
        or allocated with @code{bfd_malloc} if @var{outbuf} is @code{NULL}.
 
-       Generally all sections in @var{abfd} should have their
-       @code{output_section} pointing back to the original section.
-
        Returns @code{NULL} on a fatal error; ignores errors applying
        particular relocations.
 */
index 83e25486cc57a94969e28aefee7cd23602839490..4546a2b57567678f7bb6e4b4c7e5d880e8bf3103 100644 (file)
@@ -1,3 +1,7 @@
+2004-09-24  Alan Modra  <amodra@bigpond.net.au>
+
+       * ld-elfvsb/elfvsb.exp: Remove file name from "undefined ref" string.
+
 2004-09-22  Alan Modra  <amodra@bigpond.net.au>
 
        * ld-i386/tlsbin.rd: Update for changed segment map.
index 0b87c77105ec9925d5ca444625eb7109d487f4e9..3208f8e1bcdab878cb4d832c821dde6141c710f1 100644 (file)
@@ -117,12 +117,12 @@ proc visibility_test { visibility progname testname main sh1 sh2 dat args } {
     }
     if {![ld_simple_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
        if { [ string match $visibility "hidden_undef" ]
-            && [regexp ".*/sh1.c.*: undefined reference to \`\.?visibility\'" $link_output]
-            && [regexp ".*/sh1.c.*: undefined reference to \`visibility_var\'" $link_output] } {
+            && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+            && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
            pass "$testname"
        } else { if { [ string match $visibility "protected_undef" ]
-            && [regexp ".*/sh1.c.*: undefined reference to \`\.?visibility\'" $link_output]
-            && [regexp ".*/sh1.c.*: undefined reference to \`visibility_var\'" $link_output] } {
+            && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+            && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
            pass "$testname"
        } else {
            fail "$testname"
@@ -140,14 +140,14 @@ proc visibility_test { visibility progname testname main sh1 sh2 dat args } {
     }
     if ![ld_simple_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
        if { [ string match $visibility "hidden" ]
-            && [regexp ".*/main.c.*: undefined reference to \`\.?visibility\'" $link_output]
-            && [regexp ".*/main.c.*: undefined reference to \`visibility_var\'" $link_output] } {
+            && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+            && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
            pass "$testname"
        } else { if { [ string match $visibility "hidden_undef_def" ]
-            && [regexp ".*/main.c.*: undefined reference to \`\.?visibility\'" $link_output]
-            && [regexp ".*/main.c.*: undefined reference to \`visibility_def\'" $link_output]
-            && [regexp ".*/main.c.*: undefined reference to \`\.?visibility_func\'" $link_output]
-            && [regexp ".*/main.c.*: undefined reference to \`visibility_var\'" $link_output] } {
+            && [regexp "undefined reference to \`\.?visibility\'" $link_output]
+            && [regexp "undefined reference to \`visibility_def\'" $link_output]
+            && [regexp "undefined reference to \`\.?visibility_func\'" $link_output]
+            && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
            pass "$testname"
        } else {
            fail "$testname"