public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: swagiaal: Converted fstep to ProcRunUtil.
@ 2008-03-19 19:37 swagiaal
  0 siblings, 0 replies; only message in thread
From: swagiaal @ 2008-03-19 19:37 UTC (permalink / raw)
  To: frysk-cvs

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 <swagiaal@redhat.com>
Date:   Wed Mar 19 15:36:13 2008 -0400

    swagiaal: Converted fstep to ProcRunUtil.
    
    frysk-core/frysk/bindir/ChangeLog
    +2008-03-19  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* fstep.java: Now uses ProcRunUtil.
    +
    
    frysk-core/frysk/util/ChangeLog
    +2008-03-19  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* 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  <swagiaal@redhat.com>
+
+	* fstep.java: Now uses ProcRunUtil.
+
 2008-03-17  Andrew Cagney  <cagney@redhat.com>
 
 	* 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 <PID|EXEC> [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  <swagiaal@redhat.com>
+
+	* ProcRunUtil.java: remove observationAdded()/Realized().
+
 2008-03-18  Phil Muldoon  <pmuldoon@redhat.com>
 
 	* 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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-03-19 19:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-19 19:37 [SCM] master: swagiaal: Converted fstep to ProcRunUtil swagiaal

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).