[SCM] master: Test both mapping guard kinds

pmachata@sourceware.org pmachata@sourceware.org
Fri Nov 16 14:13:00 GMT 2007


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



More information about the Frysk-cvs mailing list