public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: pmachata@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Test both mapping guard kinds
Date: Fri, 16 Nov 2007 14:13:00 -0000	[thread overview]
Message-ID: <20071116141333.26127.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  61c0f2d4090b4e683195cd530fb9ce4eef33c9b6 (commit)
      from  91ea7094b8352cb974509d5790a80c96a0de648e (commit)

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

- Log -----------------------------------------------------------------
commit 61c0f2d4090b4e683195cd530fb9ce4eef33c9b6
Author: Petr Machata <pmachata@redhat.com>
Date:   Fri Nov 16 15:08:59 2007 +0100

    Test both mapping guard kinds
    
    * ... and some cleanup.

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

Summary of changes:
 frysk-core/frysk/ftrace/ChangeLog          |   10 ++++++++++
 frysk-core/frysk/ftrace/Ltrace.java        |   12 ++++--------
 frysk-core/frysk/ftrace/MappingGuard.java  |   18 +++++++++++-------
 frysk-core/frysk/ftrace/MemoryMapping.java |    7 ++++---
 frysk-core/frysk/ftrace/TestLtrace.java    |   20 +++++++++++++++++++-
 5 files changed, 48 insertions(+), 19 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/ftrace/ChangeLog b/frysk-core/frysk/ftrace/ChangeLog
index def9b9b..976a9b0 100644
--- a/frysk-core/frysk/ftrace/ChangeLog
+++ b/frysk-core/frysk/ftrace/ChangeLog
@@ -1,3 +1,13 @@
+2007-11-16  Petr Machata  <pmachata@redhat.com>
+
+	* Ltrace.java: Cleanups
+	* MappingGuard.java (enableSyscallObserver): New static field.
+	(enableDebugstateObserver): dtto
+	(MappingGuardB.notifyObservers): add to blockers once for each
+	time the observer was registered.
+	* MemoryMapping.java (Part.toString): Improved.
+	* TestLtrace.java: use new fields to test both mapping guards.
+
 2007-11-14  Petr Machata  <pmachata@redhat.com>
 
 	* ChangeLog: remove paths from my previous entry
diff --git a/frysk-core/frysk/ftrace/Ltrace.java b/frysk-core/frysk/ftrace/Ltrace.java
index e3e4bfc..48196e0 100644
--- a/frysk-core/frysk/ftrace/Ltrace.java
+++ b/frysk-core/frysk/ftrace/Ltrace.java
@@ -224,8 +224,9 @@ public class Ltrace
 	task.requestAddSyscallObserver(ltraceTaskObserver);
     if (traceSignals)
 	task.requestAddSignaledObserver(ltraceTaskObserver);
+    MappingGuard.requestAddMappingObserver(task, ltraceTaskObserver);
     // There are no code observers right now.  We add them as files
-    // get mapped to process.
+    // get mapped to the process.
   }
 
   /**
@@ -291,7 +292,7 @@ public class Ltrace
 	public Action updateAttached (Task task)
 	{
 	  addProc(task.getProc());
-	  ltraceTaskObserver.updateAttached(task, null);
+	  ltraceTaskObserver.updateAttached(task);
 	  task.requestUnblock(this);
 	  return Action.BLOCK;
 	}
@@ -576,7 +577,7 @@ public class Ltrace
     // --- attached/terminated/terminating observers ---
     // -------------------------------------------------
 
-    public void updateAttached(Task task, TaskObserver blocker)
+    public Action updateAttached(Task task)
     {
       // Per-task initialization.
       long pc = task.getIsa().pc(task);
@@ -590,11 +591,6 @@ public class Ltrace
 
       this.checkMapUnmapUpdates(task, false);
       MappingGuard.requestAddMappingObserver(task, this);
-    }
-
-    public Action updateAttached (Task task)
-    {
-      updateAttached(task, this);
       return Action.BLOCK;
     }
 
diff --git a/frysk-core/frysk/ftrace/MappingGuard.java b/frysk-core/frysk/ftrace/MappingGuard.java
index f0af63e..4de4210 100644
--- a/frysk-core/frysk/ftrace/MappingGuard.java
+++ b/frysk-core/frysk/ftrace/MappingGuard.java
@@ -56,6 +56,8 @@ import frysk.proc.TaskObserver;
  */
 class MappingGuard
 {
+    /*package-private*/ static boolean enableSyscallObserver = true;
+    /*package-private*/ static boolean enableDebugstateObserver = true;
     protected static final Logger logger = Logger.getLogger(FtraceLogger.LOGGER_ID);
 
     // HashMap<Task, MappingGuardB>
@@ -114,14 +116,11 @@ class MappingGuard
 	protected void notifyObservers(Task task) {
 	    for (Iterator it = observers.keySet().iterator(); it.hasNext();) {
 		MappingObserver ob = (MappingObserver)it.next();
-		boolean block = false;
 		Integer i = (Integer)observers.get(ob);
 		int v = i.intValue();
 		for (int j = 0; j < v; ++j)
 		    if (ob.updateMapping(task) == Action.BLOCK)
-			block = true;
-		if (block)
-		    task.blockers.add(ob);
+			task.blockers.add(ob);
 	    }
 	}
     }
@@ -283,10 +282,15 @@ class MappingGuard
 	synchronized (MappingGuard.class) {
 	    guard = (MappingGuardB)guardsForTask.get(task);
 	    if (guard == null) {
-		guard = setupDebugStateObserver(task);
-		if (guard == null)
+		if (enableDebugstateObserver)
+		    guard = setupDebugStateObserver(task);
+		if (guard == null && enableSyscallObserver)
 		    guard = new SyscallMappingGuard(task);
-		guardsForTask.put(task, guard);
+
+		if (guard != null)
+		    guardsForTask.put(task, guard);
+		else
+		    observer.addFailed(task, new UnsupportedOperationException("Couldn't initialize mapping guard."));
 	    }
 	}
 	guard.addObserver(observer);
diff --git a/frysk-core/frysk/ftrace/MemoryMapping.java b/frysk-core/frysk/ftrace/MemoryMapping.java
index b191205..5742d6a 100644
--- a/frysk-core/frysk/ftrace/MemoryMapping.java
+++ b/frysk-core/frysk/ftrace/MemoryMapping.java
@@ -87,12 +87,13 @@ class MemoryMapping
 
 	public String toString()
 	{
-	    return "<" + addressLow + ".." + addressHigh
-		+ ": offset=" + offset + "; perm="
+	    return "<0x" + Long.toHexString(addressLow)
+		+ "..0x" + Long.toHexString(addressHigh)
+		+ ": offset=0x" + Long.toHexString(offset) + "; perm=`"
 		+ (permRead ? 'r' : '-')
 		+ (permWrite ? 'w' : '-')
 		+ (permExecute ? 'x' : '-')
-		+ '>';
+		+ "'>";
 	}
     }
 
diff --git a/frysk-core/frysk/ftrace/TestLtrace.java b/frysk-core/frysk/ftrace/TestLtrace.java
index f5efc39..3259cea 100644
--- a/frysk-core/frysk/ftrace/TestLtrace.java
+++ b/frysk-core/frysk/ftrace/TestLtrace.java
@@ -67,7 +67,7 @@ public class TestLtrace
     public void taskTerminated(Task task, boolean signal, int value) { }
   }
 
-  public void testAllLibrariesGetDetected()
+  public void performTestAllLibrariesGetDetected()
   {
     class MyController1
       implements LtraceController
@@ -101,6 +101,24 @@ public class TestLtrace
     assertEquals("number of recorded libraries", expectedSonames.length, controller.allLibraries.size());
   }
 
+    public void testDebugStateMappingGuard()
+    {
+	boolean save = MappingGuard.enableSyscallObserver;
+	MappingGuard.enableSyscallObserver = false;
+	assertTrue("debugstate observer enabled", MappingGuard.enableDebugstateObserver);
+	performTestAllLibrariesGetDetected();
+	MappingGuard.enableSyscallObserver = save;
+    }
+
+    public void testSyscallMappingGuard()
+    {
+	boolean save = MappingGuard.enableDebugstateObserver;
+	MappingGuard.enableDebugstateObserver = false;
+	assertTrue("syscall observer enabled", MappingGuard.enableSyscallObserver);
+	performTestAllLibrariesGetDetected();
+	MappingGuard.enableDebugstateObserver = save;
+    }
+
   public void testCallRecorded()
   {
     if(unresolvedOffUtrace(5053))


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


                 reply	other threads:[~2007-11-16 14:13 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20071116141333.26127.qmail@sourceware.org \
    --to=pmachata@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /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).