From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5916 invoked by alias); 19 Mar 2008 19:37:25 -0000 Received: (qmail 5891 invoked by uid 9561); 19 Mar 2008 19:37:25 -0000 Date: Wed, 19 Mar 2008 19:37:00 -0000 Message-ID: <20080319193725.5875.qmail@sourceware.org> From: swagiaal@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: swagiaal: Converted fstep to ProcRunUtil. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 84e6afb1e5439f82a59dc7aa131c37e35cf237e1 X-Git-Newrev: bb46ac6e3f62e6ec77509f6d563453a3e7df405f 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: 2008-q1/txt/msg00408.txt.bz2 The branch, master has been updated via bb46ac6e3f62e6ec77509f6d563453a3e7df405f (commit) from 84e6afb1e5439f82a59dc7aa131c37e35cf237e1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit bb46ac6e3f62e6ec77509f6d563453a3e7df405f Author: Sami Wagiaalla Date: Wed Mar 19 15:36:13 2008 -0400 swagiaal: Converted fstep to ProcRunUtil. frysk-core/frysk/bindir/ChangeLog +2008-03-19 Sami Wagiaalla + + * fstep.java: Now uses ProcRunUtil. + frysk-core/frysk/util/ChangeLog +2008-03-19 Sami Wagiaalla + + * ProcRunUtil.java: remove observationAdded()/Realized(). + ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/bindir/ChangeLog | 4 + frysk-core/frysk/bindir/fstep.java | 96 ++++++++++--------------------- frysk-core/frysk/util/ChangeLog | 4 + frysk-core/frysk/util/ProcRunUtil.java | 47 +++++++--------- 4 files changed, 59 insertions(+), 92 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/bindir/ChangeLog b/frysk-core/frysk/bindir/ChangeLog index 3606ba8..d9cf717 100644 --- a/frysk-core/frysk/bindir/ChangeLog +++ b/frysk-core/frysk/bindir/ChangeLog @@ -1,3 +1,7 @@ +2008-03-19 Sami Wagiaalla + + * fstep.java: Now uses ProcRunUtil. + 2008-03-17 Andrew Cagney * fstep.java: Update; using TaskAttachedObserverXXX. diff --git a/frysk-core/frysk/bindir/fstep.java b/frysk-core/frysk/bindir/fstep.java index 6fa722a..44b9a83 100644 --- a/frysk-core/frysk/bindir/fstep.java +++ b/frysk-core/frysk/bindir/fstep.java @@ -39,26 +39,25 @@ package frysk.bindir; -import frysk.isa.signals.Signal; -import frysk.proc.FindProc; -import java.util.List; -import frysk.proc.Auxv; -import frysk.proc.Manager; -import frysk.util.CommandlineParser; import inua.eio.ByteBuffer; -import frysk.proc.TaskObserver; -import lib.opcodes.Disassembler; -import java.util.HashMap; + import java.util.ArrayList; -import gnu.classpath.tools.getopt.OptionException; -import gnu.classpath.tools.getopt.Option; +import java.util.HashMap; import java.util.Iterator; +import java.util.List; + +import lib.opcodes.Disassembler; +import frysk.isa.signals.Signal; import frysk.proc.Action; -import frysk.proc.Proc; +import frysk.proc.Auxv; +import frysk.proc.Manager; import frysk.proc.Task; -import frysk.proc.TaskAttachedObserverXXX; +import frysk.proc.TaskObserver; +import frysk.util.ProcRunUtil; +import gnu.classpath.tools.getopt.Option; +import gnu.classpath.tools.getopt.OptionException; -public class fstep implements TaskAttachedObserverXXX, +public class fstep implements ProcRunUtil.NewTaskObserver, TaskObserver.Code, TaskObserver.Instruction, TaskObserver.Terminated @@ -76,7 +75,7 @@ public class fstep implements TaskAttachedObserverXXX, private static int instrs; // The command to execute - static String[] command; +// static String[] command; // The process id to trace static int pid; @@ -89,15 +88,7 @@ public class fstep implements TaskAttachedObserverXXX, sample = 0; instrs = 1; - final CommandlineParser parser = new CommandlineParser("fstep") - { - - public void parseCommand(Proc command) { - fstep.command = command.getCmdLine(); - } - - }; - parser.add(new Option("sample", 's', + Option sampleOption = new Option("sample", 's', "how often to print the current instruction", "samples") { @@ -115,9 +106,9 @@ public class fstep implements TaskAttachedObserverXXX, throw ex; } } - }); + }; - parser.add(new Option("instructions", 'i', + Option instructionsOption = new Option("instructions", 'i', "how many instructions to print at each step/sample", "instructions") { @@ -135,9 +126,9 @@ public class fstep implements TaskAttachedObserverXXX, throw ex; } } - }); + }; - parser.add(new Option("pid", 'p', + Option pidOptions = new Option("pid", 'p', "the running process to step", "pid") { @@ -155,40 +146,14 @@ public class fstep implements TaskAttachedObserverXXX, throw ex; } } - }); - - parser.parse(args); - if ((command == null || command.length == 0) - && pid == 0) - { - System.err.println("fstep: Neither command line nor pid provided"); - parser.printHelp(); - System.exit(-1); - } - if (command != null && command.length != 0 && pid != 0) - { - System.err.println("fstep: Provide either a command line or a pid"); - parser.printHelp(); - System.exit(-1); - } + }; final fstep step = new fstep(); - if (pid != 0) { - Manager.host.requestProc(pid, new FindProc() { - public void procFound(Proc proc) { - Task mainTask = proc.getMainTask(); - mainTask.requestAddAttachedObserver(step); - } - public void procNotFound(int pid) { - System.err.println("no such process: " + pid); - parser.printHelp(); - System.exit(-1); - }}); - } - else - Manager.host.requestCreateAttachedProc(command, step); - Manager.eventLoop.run(); + Option[] options = new Option[]{sampleOption, instructionsOption, pidOptions}; + + ProcRunUtil procRunUtil = new ProcRunUtil("fstep", "fstep [OPTIONS]", args, step , options, ProcRunUtil.DEFAULT); + procRunUtil.start(); } /** @@ -223,8 +188,7 @@ public class fstep implements TaskAttachedObserverXXX, } } - // TaskAttachedObserverXXX interface - public Action updateAttached(Task task) + public void notifyNewTask(Task task) { // We only need one disassembler since all Tasks share their memory. if (disassembler == null) @@ -241,8 +205,8 @@ public class fstep implements TaskAttachedObserverXXX, // then we want to start stepping at the actual start of the // process (and not inside the dynamic linker). long startAddress = 0; - if (command != null && command.length != 0) - { +// if (command != null && command.length != 0) +// { Auxv[] auxv = task.getProc().getAuxv (); for (int i = 0; i < auxv.length; i++) { @@ -252,7 +216,9 @@ public class fstep implements TaskAttachedObserverXXX, break; } } - } +// } + +// System.out.println("fstep.updateAttached() startAddress 0x" + Long.toHexString(startAddress)); if (startAddress == 0) { @@ -262,7 +228,7 @@ public class fstep implements TaskAttachedObserverXXX, } else task.requestAddCodeObserver(this, startAddress); - return Action.BLOCK; + } // TaskObserver.Code interface diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog index 1ddb337..66884f6 100644 --- a/frysk-core/frysk/util/ChangeLog +++ b/frysk-core/frysk/util/ChangeLog @@ -1,3 +1,7 @@ +2008-03-19 Sami Wagiaalla + + * ProcRunUtil.java: remove observationAdded()/Realized(). + 2008-03-18 Phil Muldoon * CommandlineParser.java (CommandlineParser): Trim diff --git a/frysk-core/frysk/util/ProcRunUtil.java b/frysk-core/frysk/util/ProcRunUtil.java index 1eaaf4b..f46db8d 100644 --- a/frysk-core/frysk/util/ProcRunUtil.java +++ b/frysk-core/frysk/util/ProcRunUtil.java @@ -39,17 +39,17 @@ package frysk.util; -import java.util.HashMap; import java.util.HashSet; import java.util.Set; + import frysk.proc.Action; import frysk.proc.Manager; import frysk.proc.Proc; import frysk.proc.ProcObserver; import frysk.proc.ProcTasksObserver; import frysk.proc.Task; -import frysk.proc.TaskObserver; import frysk.proc.TaskAttachedObserverXXX; +import frysk.proc.TaskObserver; import frysk.proc.TaskObserver.Cloned; import frysk.proc.TaskObserver.Execed; import frysk.proc.TaskObserver.Forked; @@ -75,11 +75,24 @@ public class ProcRunUtil { private RunningUtilOptions options; private TaskObserver[] observers; + private NewTaskObserver newTaskObserver; + + public static interface NewTaskObserver{ + void notifyNewTask(Task task); + } + public static class RunningUtilOptions { boolean followForks = true; } public static final RunningUtilOptions DEFAULT = new RunningUtilOptions(); + + public ProcRunUtil(String utilName, String usage, String[] args, + NewTaskObserver newTaskObserver, Option[] customOptions, + RunningUtilOptions options) { + this(utilName, usage, args, new TaskObserver[]{}, customOptions, options); + this.newTaskObserver = newTaskObserver; + } public ProcRunUtil(String utilName, String usage, String[] args, TaskObserver[] observers, Option[] customOptions, @@ -122,36 +135,14 @@ public class ProcRunUtil { } if(options.followForks){ this.addTaskObserver(forkedObserver, task); - observationRequested(task); } } - private HashMap observationCounters = new HashMap(); - synchronized private void observationRequested(Task task) { - Integer i = (Integer)observationCounters.get(task); - if (i == null) - i = new Integer(1); - else - i = new Integer(i.intValue() + 1); - observationCounters.put(task, i); - } - - synchronized private void observationRealized(Task task) { - Integer i = (Integer)observationCounters.get(task); - // must be non-null - int j = i.intValue(); - if (j == 1) { - // Store a dummy into the map to detect errors. - observationCounters.put(task, new Object()); - task.requestUnblock(attachedObserver); - } - else - observationCounters.put(task, new Integer(--j)); - } - class ForkedObserver implements TaskObserver.Forked { public Action updateForkedOffspring(Task parent, Task offspring) { + newTaskObserver.notifyNewTask(offspring); addObservers(offspring.getProc()); + offspring.requestUnblock(this); return Action.BLOCK; } @@ -163,7 +154,6 @@ public class ProcRunUtil { } public void addedTo(Object observable) { - observationRealized((Task) observable); } public void deletedFrom(Object observable) { @@ -174,11 +164,14 @@ public class ProcRunUtil { private Set procs = new HashSet(); public synchronized Action updateAttached(Task task) { + newTaskObserver.notifyNewTask(task); + Proc proc = task.getProc(); if (!procs.contains(proc)) { procs.add(proc); addObservers(proc); } + task.requestUnblock(this); return Action.BLOCK; } hooks/post-receive -- frysk system monitor/debugger