From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26169 invoked by alias); 16 Nov 2007 14:13:36 -0000 Received: (qmail 26142 invoked by uid 9697); 16 Nov 2007 14:13:34 -0000 Date: Fri, 16 Nov 2007 14:13:00 -0000 Message-ID: <20071116141333.26127.qmail@sourceware.org> From: pmachata@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Test both mapping guard kinds X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 91ea7094b8352cb974509d5790a80c96a0de648e X-Git-Newrev: 61c0f2d4090b4e683195cd530fb9ce4eef33c9b6 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2007-q4/txt/msg00381.txt.bz2 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 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 + + * 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 * 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 @@ -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