public inbox for frysk@sourceware.org
 help / color / mirror / Atom feed
From: Mark Wielaard <mark@klomp.org>
To: Phil Muldoon <pmuldoon@redhat.com>
Cc: Frysk Hackers <frysk@sourceware.org>
Subject: Re: Corefile -arch 32 test failures with breakpoint and stacktrace 	tests
Date: Mon, 08 Oct 2007 10:46:00 -0000	[thread overview]
Message-ID: <1191840378.3859.20.camel@dijkstra.wildebeest.org> (raw)
In-Reply-To: <47074377.5040602@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 1182 bytes --]

Hi Phil,

On Sat, 2007-10-06 at 09:12 +0100, Phil Muldoon wrote:
> I've spent the last week fixing 32 on 64 test failures with core files, 
> and while all tests passed on my local build, when I merged with HEAD, I 
> got as noted below in the email. I suspect these are  changes made in 
> the last week or so.
> 
> Basically the tests now failing are:
> 
> 1) 
> testInsertedBreakpoint(frysk.proc.dead.TestLinuxCore)lib.dwfl.ElfFileException

This one works fine for me either with or without -arch 32 given to
TestRunner. But I noticed that it tries to create an Elf object directly
using the result of getProc() which isn't reliably since getProc()
"guesses" the path to the original executable. The attached patch makes
it use the new DwflCache.get(Task) construct for finding symbols. Hope
that helps in your case. If not it is at least more correct.

2007-10-08  Mark Wielaard  <mwielaard@redhat.com>

        * TestLinuxCore.java (Symbol): New static helper class.
        (getFunctionEntryAddress): Use Dwfl directly instead of
        constructing Elf and Dwarf objects directly.

The tests PASS here with or without the patch and with or without -arch
32.

Cheers,

Mark

[-- Attachment #2: elf-dwfl-core.patch --]
[-- Type: text/x-patch, Size: 3515 bytes --]

Index: frysk-core/frysk/proc/dead/ChangeLog
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/dead/ChangeLog,v
retrieving revision 1.32
diff -u -r1.32 ChangeLog
--- frysk-core/frysk/proc/dead/ChangeLog	2 Oct 2007 22:31:50 -0000	1.32
+++ frysk-core/frysk/proc/dead/ChangeLog	8 Oct 2007 10:44:52 -0000
@@ -1,3 +1,9 @@
+2007-10-08  Mark Wielaard  <mwielaard@redhat.com>
+
+	* TestLinuxCore.java (Symbol): New static helper class.
+	(getFunctionEntryAddress): Use Dwfl directly instead of
+	constructing Elf and Dwarf objects directly.
+	
 2007-10-02  Andrew Cagney  <cagney@redhat.com>
 
 	* LinuxProc.java (sendrecISA()): Add.
Index: frysk-core/frysk/proc/dead/TestLinuxCore.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/dead/TestLinuxCore.java,v
retrieving revision 1.16
diff -u -r1.16 TestLinuxCore.java
--- frysk-core/frysk/proc/dead/TestLinuxCore.java	10 Aug 2007 18:54:34 -0000	1.16
+++ frysk-core/frysk/proc/dead/TestLinuxCore.java	8 Oct 2007 10:44:52 -0000
@@ -45,7 +45,6 @@
 import java.io.File;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.util.ArrayList;
 
 import frysk.proc.Action;
 import frysk.proc.Isa;
@@ -67,6 +66,7 @@
 import frysk.testbed.LegacyOffspring;
 
 import lib.dwfl.*;
+import frysk.dwfl.*;
 
 public class TestLinuxCore
     extends TestLib
@@ -387,22 +387,66 @@
     assertEquals(origb, coreb);
   }
 
+
+  // Helper class since there there isn't a get symbol method in Dwfl,
+  // so we need to wrap it all in a builder pattern.
+  static class Symbol implements SymbolBuilder
+  {
+    private String name;
+    private long address;
+
+    private boolean found;
+
+    private Symbol()
+    {
+      // properties get set in public static get() method.
+    }
+
+    static Symbol get(Dwfl dwfl, String name)
+    {
+      Symbol sym = new Symbol();
+      sym.name = name;
+      DwflModule[] modules = dwfl.getModules();
+      for (int i = 0; i < modules.length && ! sym.found; i++)
+        modules[i].getSymbolByName(name, sym);
+
+      if (sym.found)
+        return sym;
+      else
+        return null;
+    }
+
+    String getName()
+    {
+      return name;
+    }
+
+    long getAddress()
+    {
+      return address;
+    }
+
+    public void symbol(String name, long value, long size,
+                       int type, int bind, int visibility)
+    {
+      if (name.equals(this.name))
+        {
+          this.address = value;
+          this.found = true;
+        }
+    }
+  }
+
   /**
-   * Returns the address of the requested function through query the
-   * Proc Elf and DwarfDie. Asserts that the function has only 1
-   * entry point.
+   * Returns the address of the requested function through query Dwfl
+   * of the main Task of the given Proc.
    */
   private static long getFunctionEntryAddress(Proc proc, String func)
-    throws ElfException
   {
-    Elf elf = new Elf(proc.getExe(), ElfCommand.ELF_C_READ);
-    Dwarf dwarf = new Dwarf(elf, DwarfCommand.READ, null);
-    DwarfDie die = DwarfDie.getDecl(dwarf, func);
-    ArrayList entryAddrs = die.getEntryBreakpoints();
-    
-    // We really expect just one entry point.
-    assertEquals(entryAddrs.size(), 1);
-    return ((Long) entryAddrs.get(0)).longValue();
+    Task task = proc.getMainTask();
+    Dwfl dwfl = DwflCache.getDwfl(task);
+    Symbol sym = Symbol.get(dwfl, func);
+    return sym.getAddress();
   }
 
   /**

  reply	other threads:[~2007-10-08 10:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-06  8:12 Phil Muldoon
2007-10-08 10:46 ` Mark Wielaard [this message]
2007-10-09 17:08   ` Andrew Cagney
2007-10-09 17:30     ` dl symbol search path; Was: " Andrew Cagney
2007-10-16  2:39       ` Roland McGrath

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1191840378.3859.20.camel@dijkstra.wildebeest.org \
    --to=mark@klomp.org \
    --cc=frysk@sourceware.org \
    --cc=pmuldoon@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).