This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Emit a diagnostic when syscall or signal rule wasn't matched


The branch, master has been updated
       via  0319ac322fb655df6e61faaeda18416951514f9b (commit)
       via  5a74f8aea964c2c5ce8aeb592df7740da36bfbeb (commit)
      from  5f46b1275db9112a0816092ca96a4e9816405e21 (commit)

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

- Log -----------------------------------------------------------------
commit 0319ac322fb655df6e61faaeda18416951514f9b
Author: Petr Machata <pmachata@redhat.com>
Date:   Mon Mar 17 22:09:44 2008 +0100

    Emit a diagnostic when syscall or signal rule wasn't matched
    
    (It's generally not possible/wise to do this for symbol rules, because
    we never know which other libraries get mapped.  It would be possible
    to do for libraries whose soname is not a wildcard, although even this
    would give false alarm for certain very twisted conditions.)

commit 5a74f8aea964c2c5ce8aeb592df7740da36bfbeb
Author: Petr Machata <pmachata@redhat.com>
Date:   Mon Mar 17 18:46:18 2008 +0100

    Use rsl in ftrace.

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

Summary of changes:
 frysk-core/frysk/bindir/ChangeLog             |    4 +
 frysk-core/frysk/bindir/ftrace.java           |   16 +++-
 frysk-core/frysk/ftrace/ChangeLog             |   18 ++++
 frysk-core/frysk/ftrace/Ftrace.java           |   48 ++++++----
 frysk-core/frysk/ftrace/FtraceController.java |   28 +++---
 frysk-core/frysk/ftrace/FtraceLogger.java     |    9 ++-
 frysk-core/frysk/ftrace/Ltrace.java           |   41 ++++----
 frysk-core/frysk/ftrace/MappingGuard.java     |   60 ++++++------
 frysk-core/frysk/ftrace/ObjectFile.java       |  123 +++++++++++++------------
 frysk-core/frysk/ftrace/Rule.java             |   14 ++-
 10 files changed, 208 insertions(+), 153 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog
index 519fa1f..3606ba8 100644
--- a/frysk-core/frysk/bindir/ChangeLog
+++ b/frysk-core/frysk/bindir/ChangeLog
@@ -2,6 +2,10 @@
 
 	* fstep.java: Update; using TaskAttachedObserverXXX.
 
+2008-03-17  Petr Machata  <pmachata@redhat.com>
+
+	* ftrace.java: Fix toString for signal and syscall rules.
+
 2008-03-14  Andrew Cagney  <cagney@redhat.com>
 
 	* frysk.xml: New.
diff --git a/frysk-core/frysk/bindir/ftrace.java b/frysk-core/frysk/bindir/ftrace.java
index 5545d14..74e00f3 100644
--- a/frysk-core/frysk/bindir/ftrace.java
+++ b/frysk-core/frysk/bindir/ftrace.java
@@ -176,10 +176,20 @@ class ftrace {
 	    else
 		stackTrace = false;
 
+	    final String ruleKern = new String(str);
+	    abstract class SigSysRule extends Rule {
+		public SigSysRule(boolean addition, boolean stackTrace) {
+		    super(addition, stackTrace);
+		}
+		public String toString() {
+		    return super.toString() + ruleKern;
+		}
+	    }
+
 	    if (sysnumPat.matcher(str).matches()) {
 		fine.log(i + ": " + str + ": by number rule");
 		final int number = (new Integer(str)).intValue();
-		rule = new Rule(addition, stackTrace) {
+		rule = new SigSysRule(addition, stackTrace) {
 			public boolean matches(final Object traceable) {
 			    return number == examiner.traceableNumber(traceable);
 			}
@@ -191,7 +201,7 @@ class ftrace {
 		if (optionalPrefix != null && !str.startsWith(optionalPrefix))
 		    str = optionalPrefix + str;
 		final Pattern pattern = Glob.compile(str, Pattern.CASE_INSENSITIVE);
-		rule = new Rule(addition, stackTrace) {
+		rule = new SigSysRule(addition, stackTrace) {
 			public boolean matches(final Object traceable) {
 			    String name = examiner.traceableName(traceable);
 			    return pattern.matcher(name).matches();
@@ -200,7 +210,7 @@ class ftrace {
 	    }
 	    else {
 		fine.log(i + ": " + str + ": \"everything\" rule");
-		rule = new Rule(addition, stackTrace) {
+		rule = new SigSysRule(addition, stackTrace) {
 			public boolean matches(Object traceable) {
 			    return true;
 			}
diff --git a/frysk-core/frysk/ftrace/ChangeLog b/frysk-core/frysk/ftrace/ChangeLog
index 7d088ce..bdb812a 100644
--- a/frysk-core/frysk/ftrace/ChangeLog
+++ b/frysk-core/frysk/ftrace/ChangeLog
@@ -2,6 +2,24 @@
 
 	* Ftrace.java: Update; using TaskAttachedObserverXXX.
 
+2008-03-17  Petr Machata  <pmachata@redhat.com>
+
+	* Ftrace.java: Add some more logging messages.
+	* FtraceController.java: Fix logging.
+	Warn when rule wasn't matched.
+	* Ltrace.java: Reindent.
+	* Rule.java (apply): Return boolean, true when apply matched
+	something, false otherwise.
+
+2008-03-17  Petr Machata  <pmachata@redhat.com>
+
+	* FtraceLogger.java: Use rsl.
+	* Ftrace.java: Adjust to above.
+	* FtraceController.java: Likewise.
+	* Ltrace.java: Likewise.
+	* MappingGuard.java: Likewise.
+	* ObjectFile.java: Likewise.
+
 2008-03-14  Andrew Cagney  <cagney@redhat.com>
 
 	* Ftrace.java (ProcRemovedObserver): Re-implement as a Terminated
diff --git a/frysk-core/frysk/ftrace/Ftrace.java b/frysk-core/frysk/ftrace/Ftrace.java
index 1b88af9..6f8d002 100644
--- a/frysk-core/frysk/ftrace/Ftrace.java
+++ b/frysk-core/frysk/ftrace/Ftrace.java
@@ -54,14 +54,10 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.Iterator;
-import java.util.logging.Logger;
-import java.util.logging.Level;
 import frysk.proc.TaskAttachedObserverXXX;
 
 public class Ftrace
 {
-    static final Logger logger = Logger.getLogger(FtraceLogger.LOGGER_ID);
-
     // Where to send output.
     Reporter reporter;
 
@@ -143,11 +139,13 @@ public class Ftrace
 
     public void setTraceSyscalls (TracedSyscallProvider tracedSyscallProvider)
     {
+	FtraceLogger.finest.log("syscall tracing requested");
 	this.tracedSyscallProvider = tracedSyscallProvider;
     }
 
     public void setTraceSignals (TracedSignalProvider tracedSignalProvider)
     {
+	FtraceLogger.finest.log("signal tracing requested");
 	this.tracedSignalProvider = tracedSignalProvider;
     }
 
@@ -226,6 +224,7 @@ public class Ftrace
 	Proc proc = task.getProc();
 
 	if (tracedSyscallProvider != null) {
+	    FtraceLogger.finest.log("requesting syscall observer");
 	    task.requestAddSyscallsObserver(new MySyscallObserver(reporter));
 	    observationRequested(task);
 	    Map workingSet
@@ -234,6 +233,7 @@ public class Ftrace
 	}
 
 	if (tracedSignalProvider != null) {
+	    FtraceLogger.finest.log("requesting signal observer");
 	    task.requestAddSignaledObserver(new MySignaledObserver());
 	    observationRequested(task);
 	    Map workingSet
@@ -289,7 +289,7 @@ public class Ftrace
 
 	public void tracePoint(Task task, TracePoint tp)
 	{
-	    logger.log(Level.CONFIG, "Request for tracing `{0}'", tp.symbol.name);
+	    FtraceLogger.info.log("Request for tracing `" + tp.symbol.name + "'");
 	    tracePoints.add(tp);
 	}
 
@@ -300,19 +300,19 @@ public class Ftrace
 		TracePoint tp = (TracePoint)it.next();
 		if (tp.offset >= part.offset
 		    && tp.offset < part.offset + part.addressHigh - part.addressLow) {
-		    logger.log(Level.FINER,
-			       "Will trace `" + tp.symbol.name + "', "
-			       + "address=0x" + Long.toHexString(tp.address) + "; "
-			       + "offset=0x" + Long.toHexString(tp.offset) + "; "
-			       + "part at=0x" + Long.toHexString(part.addressLow)
-			       + ".." + Long.toHexString(part.addressHigh) + "; "
-			       + "part off=0x" + Long.toHexString(part.offset) + ";");
+		    FtraceLogger.finest.log(
+			"Will trace `" + tp.symbol.name + "', "
+			+ "address=0x" + Long.toHexString(tp.address) + "; "
+			+ "offset=0x" + Long.toHexString(tp.offset) + "; "
+			+ "part at=0x" + Long.toHexString(part.addressLow)
+			+ ".." + Long.toHexString(part.addressHigh) + "; "
+			+ "part off=0x" + Long.toHexString(part.offset) + ";");
 
 		    long actualAddress = tp.offset - part.offset + part.addressLow;
 		    TracePoint.Instance tpi = new TracePoint.Instance(tp, actualAddress);
-		    logger.log(Level.CONFIG,
-			       "Will trace `" + tpi.tracePoint.symbol.name
-			       + "' at 0x" + Long.toHexString(tpi.address));
+		    FtraceLogger.info.log(
+			"Will trace `" + tpi.tracePoint.symbol.name
+			+ "' at 0x" + Long.toHexString(tpi.address));
 
 		    request.add(tpi);
 		}
@@ -331,9 +331,9 @@ public class Ftrace
 
 		    long actualAddress = tp.offset - part.offset + part.addressLow;
 		    TracePoint.Instance tpi = new TracePoint.Instance(tp, actualAddress);
-		    logger.log(Level.CONFIG,
-			       "Stopping tracing of `" + tpi.tracePoint.symbol.name
-			       + "' at 0x" + Long.toHexString(tpi.address));
+		    FtraceLogger.info.log(
+			"Stopping tracing of `" + tpi.tracePoint.symbol.name
+			+ "' at 0x" + Long.toHexString(tpi.address));
 
 		    request.add(tpi);
 		}
@@ -479,6 +479,7 @@ public class Ftrace
 
 	public void addedTo (Object observable)
 	{
+	    FtraceLogger.finest.log("syscall observer realized");
 	    Task task = (Task) observable;
 	    observationRealized(task);
 	}
@@ -574,6 +575,7 @@ public class Ftrace
 
     class MySignaledObserver implements TaskObserver.Signaled {
 	public Action updateSignaled(Task task, Signal signal) {
+	    FtraceLogger.finest.log("signal hit " + signal);
 	    String name = signal.getName();
 	    Map signalWorkingSet = (Map)signalSetForTask.get(task);
 	    Boolean stackTrace = (Boolean)signalWorkingSet.get(signal);
@@ -589,11 +591,17 @@ public class Ftrace
 	}
 
 	public void addedTo (Object observable) {
+	    FtraceLogger.finest.log("signal observer realized for " + observable);
 	    Task task = (Task) observable;
 	    observationRealized(task);
 	}
-	public void deletedFrom (Object observable) { }
-	public void addFailed (Object observable, Throwable w) { }
+	public void deletedFrom (Object observable) {
+	    FtraceLogger.finest.log("signal observer deleted from " + observable);
+	}
+	public void addFailed (Object observable, Throwable w) {
+	    FtraceLogger.finest.log("signal observer failure for "
+				    + observable + " with " + w);
+	}
     }
 
     class MyMappingObserver
diff --git a/frysk-core/frysk/ftrace/FtraceController.java b/frysk-core/frysk/ftrace/FtraceController.java
index 2bd373a..8de39fe 100644
--- a/frysk-core/frysk/ftrace/FtraceController.java
+++ b/frysk-core/frysk/ftrace/FtraceController.java
@@ -49,7 +49,6 @@ import java.util.Set;
 import frysk.isa.signals.SignalTable;
 import frysk.isa.syscalls.SyscallTable;
 import frysk.proc.Task;
-import frysk.rsl.Log;
 
 public class FtraceController
     implements Ftrace.Controller,
@@ -57,8 +56,6 @@ public class FtraceController
 	       Ftrace.TracedSyscallProvider,
 	       Ftrace.TracedSignalProvider
 {
-    private static final Log fine = Log.fine(FtraceController.class);
-
     // ArrayList<SymbolRule>
     private final List pltRules = new ArrayList();
     private final List dynRules = new ArrayList();
@@ -82,40 +79,41 @@ public class FtraceController
     public FtraceController() { }
 
     public void gotPltRules(List rules) {
-	fine.log("Got " + rules.size() + " PLT rules.");
+	FtraceLogger.fine.log("Got " + rules.size() + " PLT rules.");
 	this.pltRules.addAll(rules);
     }
 
     public void gotDynRules(List rules) {
-	fine.log("Got " + rules.size() + " DYNAMIC rules.");
+	FtraceLogger.fine.log("Got " + rules.size() + " DYNAMIC rules.");
 	this.dynRules.addAll(rules);
     }
 
     public void gotSymRules(List rules) {
-	fine.log("Got " + rules.size() + " SYMTAB rules.");
+	FtraceLogger.fine.log("Got " + rules.size() + " SYMTAB rules.");
 	this.symRules.addAll(rules);
     }
 
     public void gotSysRules(List rules) {
-	fine.log("Got " + rules.size() + " syscall rules.");
+	FtraceLogger.fine.log("Got " + rules.size() + " syscall rules.");
 	this.sysRules.addAll(rules);
     }
 
     public void gotSigRules(List rules) {
-	fine.log("Got " + rules.size() + " signal rules.");
+	FtraceLogger.fine.log("Got " + rules.size() + " signal rules.");
 	this.sigRules.addAll(rules);
     }
 
     private Map computeWorkingSet(Task task, String what,
-				 List rules, ArrayList candidates)
+				  List rules, ArrayList candidates)
     {
 	HashSet workingSet = new HashSet();
 	HashSet stackTraceSet = new HashSet();
 
 	for (Iterator it = rules.iterator(); it.hasNext(); ) {
 	    final Rule rule = (Rule)it.next();
-	    fine.log("Considering syscall rule " + rule + ".");
-	    rule.apply(candidates, workingSet, stackTraceSet);
+	    FtraceLogger.fine.log("Considering " + what + " rule `" + rule + "'.");
+	    if (!rule.apply(candidates, workingSet, stackTraceSet))
+		FtraceLogger.warning.log("Rule `" + rule + "' didn't match any " + what + ".");
 	}
 
 	// Apply the two sets.
@@ -166,7 +164,7 @@ public class FtraceController
 				  final List rules, final TracePointOrigin origin)
 	throws lib.dwfl.ElfException
     {
-	fine.log("Building working set for origin " + origin + ".");
+	FtraceLogger.fine.log("Building working set for origin " + origin + ".");
 
 	// Skip the set if it's empty...
 	if (rules.isEmpty())
@@ -188,7 +186,7 @@ public class FtraceController
 	// lazily inside the loop.
 	for (Iterator it = rules.iterator(); it.hasNext(); ) {
 	    final SymbolRule rule = (SymbolRule)it.next();
-	    fine.log("Considering symbol rule " + rule + ".");
+	    FtraceLogger.fine.log("Considering symbol rule " + rule + ".");
 
 	    // MAIN is meta-soname meaning "main executable".
 	    if ((rule.sonamePattern.pattern().equals("MAIN")
@@ -202,7 +200,7 @@ public class FtraceController
 		    objf.eachTracePoint(new ObjectFile.TracePointIterator() {
 			    public void tracePoint(TracePoint tp) {
 				if (candidates.add(tp))
-				    fine.log("candidate `" + tp.symbol.name + "'.");
+				    FtraceLogger.fine.log("candidate `" + tp.symbol.name + "'.");
 			    }
 			}, origin);
 		}
@@ -212,7 +210,7 @@ public class FtraceController
 	}
 
 	// Finally, apply constructed working set.
-	fine.log("Applying working set for origin " + origin + ".");
+	FtraceLogger.fine.log("Applying working set for origin " + origin + ".");
 	for (Iterator it = workingSet.iterator(); it.hasNext(); )
 	    driver.tracePoint(task, (TracePoint)it.next());
 
diff --git a/frysk-core/frysk/ftrace/FtraceLogger.java b/frysk-core/frysk/ftrace/FtraceLogger.java
index e81c860..693ed54 100644
--- a/frysk-core/frysk/ftrace/FtraceLogger.java
+++ b/frysk-core/frysk/ftrace/FtraceLogger.java
@@ -38,8 +38,13 @@
 // exception.
 
 package frysk.ftrace;
+import frysk.rsl.Log;
+import frysk.rsl.LogFactory;
 
-public class FtraceLogger
+class FtraceLogger
 {
-  public static final String LOGGER_ID = "frysk";
+    static final Log warning = LogFactory.warning(Ftrace.class);
+    static final Log info = LogFactory.info(Ftrace.class);
+    static final Log fine = LogFactory.fine(Ftrace.class);
+    static final Log finest = LogFactory.finest(Ftrace.class);
 }
diff --git a/frysk-core/frysk/ftrace/Ltrace.java b/frysk-core/frysk/ftrace/Ltrace.java
index a992322..121a021 100644
--- a/frysk-core/frysk/ftrace/Ltrace.java
+++ b/frysk-core/frysk/ftrace/Ltrace.java
@@ -43,6 +43,9 @@ import frysk.proc.Action;
 import frysk.proc.Task;
 import frysk.proc.TaskObserver;
 
+import frysk.rsl.Log;
+import frysk.rsl.LogFactory;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
@@ -51,11 +54,11 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Set;
-import java.util.logging.*;
 
 public class Ltrace
 {
-    private static final Logger logger = Logger.getLogger(FtraceLogger.LOGGER_ID);
+    private static final Log fine = LogFactory.fine(Ltrace.class);
+    private static final Log finest = LogFactory.finest(Ltrace.class);
 
     // HashMap<Task, Ltrace>
     private static final Map ltraceForTask = new HashMap();
@@ -65,9 +68,9 @@ public class Ltrace
      * given set of TracePoint.Instances.
      */
     public synchronized static
-	void requestAddFunctionObserver(Task task,
-					FunctionObserver observer,
-					Set tracePoints)
+    void requestAddFunctionObserver(Task task,
+				    FunctionObserver observer,
+				    Set tracePoints)
     {
 	Ltrace ltrace = (Ltrace)ltraceForTask.get(task);
 	if (ltrace == null) {
@@ -79,9 +82,9 @@ public class Ltrace
     }
 
     public synchronized static
-	void requestDeleteFunctionObserver(Task task,
-					   FunctionObserver observer,
-					   Set tracePoints)
+    void requestDeleteFunctionObserver(Task task,
+				       FunctionObserver observer,
+				       Set tracePoints)
     {
 	Ltrace ltrace = (Ltrace)ltraceForTask.get(task);
 	if (ltrace == null)
@@ -130,7 +133,7 @@ public class Ltrace
 
 	public Action updateHit (final Task task, long address)
 	{
-	    logger.log(Level.FINE, "Return breakpoint at 0x" + Long.toHexString(address));
+	    fine.log("Return breakpoint at 0x" + Long.toHexString(address));
 
 	    final Node leave = (Node)nodeList.removeLast();
 	    Action action = Action.CONTINUE;
@@ -138,7 +141,7 @@ public class Ltrace
 	    // Retract lowlevel breakpoint when the last return has
 	    // been hit.
 	    if (nodeList.isEmpty()) {
-		logger.log(Level.FINEST, "Removing leave breakpoint.");
+		finest.log("Removing leave breakpoint.");
 		functionReturnObservers.remove(new Long(address));
 		task.requestDeleteCodeObserver(this, address);
 
@@ -147,7 +150,7 @@ public class Ltrace
 		action = Action.BLOCK;
 	    }
 
-	    logger.log(Level.FINEST, "Fetching retval.");
+	    finest.log("Fetching retval.");
 	    final Symbol symbol = leave.tpi.tracePoint.symbol;
 	    final Object ret = arch.getReturnValue(task, symbol);
 	    eachObserver(leave.observers, new ObserverIterator() {
@@ -156,7 +159,7 @@ public class Ltrace
 		    }
 		});
 
-	    logger.log(Level.FINE, "Breakpoint handled.");
+	    finest.log("Breakpoint handled.");
 
 	    return action;
 	}
@@ -212,14 +215,13 @@ public class Ltrace
 
 	public Action updateHit (final Task task, long address)
 	{
-	    logger.log(Level.FINE, "Enter breakpoint at 0x" + Long.toHexString(address));
+	    fine.log("Enter breakpoint at 0x" + Long.toHexString(address));
 
 	    if (address != tpi.tracePoint.symbol.getParent().getEntryPoint()) {
 		// Install breakpoint to return address.
 		long retAddr = arch.getReturnAddress(task, tpi.tracePoint.symbol);
-		logger.log(Level.FINER,
-			   "It's enter tracepoint, return address 0x"
-			   + Long.toHexString(retAddr) + ".");
+		fine.log("It's enter tracepoint, return address 0x"
+				      + Long.toHexString(retAddr) + ".");
 		Long retAddrL = new Long(retAddr);
 		FunctionReturnObserver retObserver
 		    = (FunctionReturnObserver)functionReturnObservers.get(retAddrL);
@@ -230,10 +232,9 @@ public class Ltrace
 		retObserver.add(tpi, observers);
 	    }
 	    else
-		logger.log(Level.FINEST,
-			   "It's _start, no return breakpoint established...");
+		fine.log("It's _start, no return breakpoint established...");
 
-	    logger.log(Level.FINEST, "Building arglist.");
+	    finest.log("Building arglist.");
 	    final Object[] args = arch.getCallArguments(task, tpi.tracePoint.symbol);
 	    eachObserver(observers, new ObserverIterator() {
 		    public Action action(FunctionObserver o) {
@@ -257,7 +258,7 @@ public class Ltrace
 	}
 
         public synchronized void addFailed(final Object observable, final Throwable w) {
-            logger.log(Level.FINE, "lowlevel addFailed!");
+            fine.log("lowlevel addFailed!");
             if (!breakpointFailed) {
 		for (Iterator it = observers.iterator(); it.hasNext(); ) {
 		    FunctionObserver fo = (FunctionObserver)it.next();
diff --git a/frysk-core/frysk/ftrace/MappingGuard.java b/frysk-core/frysk/ftrace/MappingGuard.java
index bcbd896..3cee536 100644
--- a/frysk-core/frysk/ftrace/MappingGuard.java
+++ b/frysk-core/frysk/ftrace/MappingGuard.java
@@ -40,26 +40,32 @@
 package frysk.ftrace;
 
 import frysk.isa.signals.Signal;
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.List;
-import java.util.logging.*;
-import java.io.File;
 import frysk.isa.syscalls.Syscall;
+
 import frysk.proc.Action;
 import frysk.proc.Task;


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]