public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: pmachata@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Emit a diagnostic when syscall or signal rule wasn't matched Date: Mon, 17 Mar 2008 21:34:00 -0000 [thread overview] Message-ID: <20080317213419.29570.qmail@sourceware.org> (raw) 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
reply other threads:[~2008-03-17 21:34 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=20080317213419.29570.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: linkBe 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).