public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Use outer frame address in TaskTracer for getting return address.
@ 2008-04-12 22:24 mark
  0 siblings, 0 replies; only message in thread
From: mark @ 2008-04-12 22:24 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  f8adab1900f94cc4661fb9b3b2930fc87ce7cf63 (commit)
       via  0f343d494686989385d14340da9013b7f1892147 (commit)
      from  85168090750c1127c3b4e7e918130b26aed60d19 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit f8adab1900f94cc4661fb9b3b2930fc87ce7cf63
Author: Mark Wielaard <mwielaard@redhat.com>
Date:   Sun Apr 13 00:18:12 2008 +0200

    Use outer frame address in TaskTracer for getting return address.
    
    2008-04-16  Mark Wielaard  <mwielaard@redhat.com>
    
            * TaskTracer.java (getReturnAddress): Fetch the return address
            through outer frame address again.

commit 0f343d494686989385d14340da9013b7f1892147
Author: Mark Wielaard <mwielaard@redhat.com>
Date:   Sun Apr 13 00:10:16 2008 +0200

    Add TestFrame.testInnerFrameAddress for bug #6029.
    
    2008-04-12  Mark Wielaard  <mwielaard@redhat.com>
    
            * TestFrame.java (testInnerFrameAddress): New test for bug #6029.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/ftrace/ChangeLog       |    5 +++
 frysk-core/frysk/ftrace/TaskTracer.java |    4 +-
 frysk-core/frysk/stack/ChangeLog        |    4 ++
 frysk-core/frysk/stack/TestFrame.java   |   54 +++++++++++++++++++++++++++++++
 4 files changed, 65 insertions(+), 2 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/ftrace/ChangeLog b/frysk-core/frysk/ftrace/ChangeLog
index 603d193..7ea8677 100644
--- a/frysk-core/frysk/ftrace/ChangeLog
+++ b/frysk-core/frysk/ftrace/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-16  Mark Wielaard  <mwielaard@redhat.com>
+
+	* TaskTracer.java (getReturnAddress): Fetch the return address
+	through outer frame address again.
+
 2008-04-06  Petr Machata  <pmachata@redhat.com>
 
 	* TaskTracer.java
diff --git a/frysk-core/frysk/ftrace/TaskTracer.java b/frysk-core/frysk/ftrace/TaskTracer.java
index 6aa71dc..b2625dc 100644
--- a/frysk-core/frysk/ftrace/TaskTracer.java
+++ b/frysk-core/frysk/ftrace/TaskTracer.java
@@ -56,6 +56,7 @@ import frysk.rt.PLTBreakpoint;
 import frysk.rt.SourceBreakpoint;
 import frysk.rt.SourceBreakpointObserver;
 import frysk.rt.SymbolBreakpoint;
+import frysk.stack.StackFactory;
 import frysk.symtab.DwflSymbol;
 import frysk.symtab.PLTEntry;
 
@@ -234,8 +235,7 @@ class TaskTracer
 
 	private long getReturnAddress(Task task) {
 	    try {
-		//return StackFactory.createFrame(task).getOuter().getAddress();
-		return arch.getReturnAddress(task);
+		return StackFactory.createFrame(task).getOuter().getAddress();
 	    } catch (java.lang.NullPointerException npe) {
 		return 0;
 	    }
diff --git a/frysk-core/frysk/stack/ChangeLog b/frysk-core/frysk/stack/ChangeLog
index 714e8dc..da35a68 100644
--- a/frysk-core/frysk/stack/ChangeLog
+++ b/frysk-core/frysk/stack/ChangeLog
@@ -1,3 +1,7 @@
+2008-04-12  Mark Wielaard  <mwielaard@redhat.com>
+
+	* TestFrame.java (testInnerFrameAddress): New test for bug #6029.
+
 2008-04-11  Mark Wielaard  <mwielaard@redhat.com>
 
 	* TestFrame.java (testBogusAddressPrevFrame): Resolved.
diff --git a/frysk-core/frysk/stack/TestFrame.java b/frysk-core/frysk/stack/TestFrame.java
index c647efa..acfa56a 100644
--- a/frysk-core/frysk/stack/TestFrame.java
+++ b/frysk-core/frysk/stack/TestFrame.java
@@ -211,4 +211,58 @@ public class TestFrame extends TestLib {
 	assertRunUntilStop("wait for hit");
 	assertTrue(code.hit);
     }
+
+    /**
+     * Explicit test for bug #6029. Make sure that when generating
+     * backtrace in the updateHit() method the address is correct.
+     */
+    public void testInnerFrameAddress() throws ElfException
+    {
+      String[] cmd =
+	{ Config.getPkgLibFile("funit-hello").getPath(), "world" };
+      DaemonBlockedAtEntry child = new DaemonBlockedAtEntry(cmd);
+      Task task = child.getMainTask();
+      Info info = new Info(task);
+      
+      long address = info.getFunctionEntryAddress("print");
+      CodeObserver code = new CodeObserver();
+      task.requestAddCodeObserver(code, address);
+      assertRunUntilStop("add breakpoint observer");
+      
+      child.requestRemoveBlock();
+      assertFalse(code.hit);
+      assertRunUntilStop("wait for hit");
+      assertTrue(code.hit);
+    }
+
+  static class CodeObserver implements TaskObserver.Code
+  {
+    public boolean hit = false;
+    
+    public Action updateHit (Task task, long hitAddress)
+    {
+      hit = true;
+      long frameAddress = StackFactory.createFrame(task).getAddress();
+      assertEquals("Hit and Frame address", hitAddress, frameAddress);
+
+      Manager.eventLoop.requestStop();
+      return Action.BLOCK;
+    }
+    
+    public void addFailed (Object observable, Throwable w)
+    {
+      // Whoa
+      w.printStackTrace();
+    }
+    
+    public void addedTo (Object observable)
+    {
+      Manager.eventLoop.requestStop();
+    }
+
+    public void deletedFrom (Object observable)
+    {
+      // We never delete
+    }
+  }
 }


hooks/post-receive
--
frysk system monitor/debugger


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-04-12 22:24 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-12 22:24 [SCM] master: Use outer frame address in TaskTracer for getting return address mark

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).