370 lines
13 KiB
Diff
370 lines
13 KiB
Diff
diff -up frysk-0.4/frysk-core/frysk/bindir/fauxv.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fauxv.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fauxv.java.taskstoputil 2010-03-24 14:11:48.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fauxv.java 2010-03-24 14:12:04.000000000 -0400
|
|
@@ -42,14 +42,14 @@ package frysk.bindir;
|
|
import frysk.event.ProcEvent;
|
|
import frysk.proc.Proc;
|
|
import frysk.util.AuxvStringBuilder;
|
|
-import frysk.util.ProcStopUtil;
|
|
+import frysk.util.TaskStopUtil;
|
|
|
|
public class fauxv {
|
|
|
|
static Proc proc = null;
|
|
|
|
public static void main (String[] args) {
|
|
- ProcStopUtil fauxv = new ProcStopUtil("fauxv", args,
|
|
+ TaskStopUtil fauxv = new TaskStopUtil("fauxv", args,
|
|
new PrintAuxvEvent());
|
|
fauxv.setUsage("Usage: fauxv <PID> || fauxv <COREFILE> [<EXEFILE>] " +
|
|
"|| fauvx <COREFILE> [<EXEFILE>]");
|
|
diff -up frysk-0.4/frysk-core/frysk/bindir/fcore.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fcore.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fcore.java.taskstoputil 2010-03-24 14:10:12.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fcore.java 2010-03-24 14:10:47.000000000 -0400
|
|
@@ -44,7 +44,7 @@ import frysk.event.ProcEvent;
|
|
import frysk.proc.Proc;
|
|
import frysk.proc.Task;
|
|
|
|
-import frysk.util.ProcStopUtil;
|
|
+import frysk.util.TaskStopUtil;
|
|
import frysk.isa.corefiles.LinuxElfCorefile;
|
|
import frysk.isa.corefiles.LinuxElfCorefileFactory;
|
|
import gnu.classpath.tools.getopt.Option;
|
|
@@ -68,7 +68,7 @@ public class fcore {
|
|
* @param args - pid of the process to core dump
|
|
*/
|
|
public static void main (String[] args) {
|
|
- ProcStopUtil fcore = new ProcStopUtil("fcore", args,
|
|
+ TaskStopUtil fcore = new TaskStopUtil("fcore", args,
|
|
new createCoreEvent(),
|
|
options());
|
|
fcore.setUsage("Usage: fcore PID");
|
|
diff -up frysk-0.4/frysk-core/frysk/bindir/fdebugdump.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fdebugdump.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fdebugdump.java.taskstoputil 2010-03-24 14:48:00.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fdebugdump.java 2010-03-24 15:00:05.000000000 -0400
|
|
@@ -3,35 +3,33 @@ package frysk.bindir;
|
|
import java.io.PrintWriter;
|
|
import java.util.Iterator;
|
|
|
|
+import frysk.dwfl.DwflCache;
|
|
+import frysk.event.ProcEvent;
|
|
+import frysk.proc.Proc;
|
|
+import frysk.util.TaskStopUtil;
|
|
import lib.dwfl.DwarfDie;
|
|
import lib.dwfl.Dwfl;
|
|
import lib.dwfl.DwflModule;
|
|
-import frysk.dwfl.DwflCache;
|
|
-import frysk.isa.signals.Signal;
|
|
-import frysk.proc.Action;
|
|
-import frysk.proc.Task;
|
|
-import frysk.util.ProcRunUtil;
|
|
-import frysk.util.ProcRunUtil.ProcRunObserver;
|
|
-import frysk.util.ProcRunUtil.RunUtilOptions;
|
|
-import gnu.classpath.tools.getopt.OptionGroup;
|
|
|
|
public class fdebugdump{
|
|
|
|
private static PrintWriter printWriter = new PrintWriter(System.out);
|
|
|
|
public static void main(String[] args) {
|
|
- RunUtilOptions options = new RunUtilOptions();
|
|
-
|
|
- OptionGroup[] customOptions = new OptionGroup[]{};
|
|
-
|
|
- ProcRunUtil procRunUtil = new ProcRunUtil("fdebugdump", "fdebugdump <exe>", args, procRunObserver, customOptions, options);
|
|
- procRunUtil.start();
|
|
+ TaskStopUtil fdebugdump = new TaskStopUtil("fdebugdump", args,
|
|
+ new DebugDumpEvent(),
|
|
+ null);
|
|
+ fdebugdump.setUsage("Usage: fdebugdump <EXE> | fdebugdump <PID> | fdebugdump <COREFILE> [ <EXEFILE> ]");
|
|
+ fdebugdump.execute();
|
|
+ printWriter.flush();
|
|
}
|
|
|
|
- private static ProcRunObserver procRunObserver = new ProcRunObserver(){
|
|
-
|
|
- public Action updateAttached(Task task) {
|
|
- Dwfl dwfl = DwflCache.getDwfl(task);
|
|
+ private static class DebugDumpEvent implements ProcEvent {
|
|
+ public void executeLive(Proc proc) {
|
|
+ executeDead(proc);
|
|
+ }
|
|
+ public void executeDead(Proc proc) {
|
|
+ Dwfl dwfl = DwflCache.getDwfl(proc.getMainTask());
|
|
DwflModule[] dwflModules = dwfl.getModules();
|
|
for (int i = 0; i < dwflModules.length; i++) {
|
|
DwflModule module = dwflModules[i];
|
|
@@ -42,34 +40,15 @@ public class fdebugdump{
|
|
printDie(die, " ");
|
|
}
|
|
}
|
|
- return Action.CONTINUE;
|
|
}
|
|
-
|
|
- public void addFailed(Object observable, Throwable w) {}
|
|
-
|
|
- public void addedTo(Object observable) {}
|
|
-
|
|
- public void deletedFrom(Object observable) {}
|
|
-
|
|
- public Action updateForkedOffspring(Task parent, Task offspring) { return Action.CONTINUE; }
|
|
- public Action updateForkedParent(Task parent, Task offspring) { return Action.CONTINUE; }
|
|
- public Action updateExeced(Task task) { return Action.CONTINUE; }
|
|
- public Action updateClonedParent(Task task, Task clone) { return Action.CONTINUE; }
|
|
- public Action updateTerminated(Task task, Signal signal, int value) { return Action.CONTINUE; }
|
|
- public Action updateClonedOffspring(Task parent, Task offspring) { return Action.CONTINUE; }
|
|
- public void existingTask(Task task) {}
|
|
- public void taskAdded(Task task) {}
|
|
- public void taskRemoved(Task task) {}
|
|
-
|
|
- };
|
|
|
|
- private static void printDie(DwarfDie die, String indent){
|
|
- printWriter.println(indent + die.getTag() + " " + die.getName());
|
|
-
|
|
- die = die.getChild();
|
|
- while(die != null){
|
|
- printDie(die, indent+ " ");
|
|
- die = die.getSibling();
|
|
+ private static void printDie(DwarfDie die, String indent){
|
|
+ printWriter.println(indent + die.getTag() + " " + die.getName());
|
|
+ die = die.getChild();
|
|
+ while(die != null){
|
|
+ printDie(die, indent+ " ");
|
|
+ die = die.getSibling();
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
diff -up frysk-0.4/frysk-core/frysk/bindir/fdebuginfo.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fdebuginfo.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fdebuginfo.java.taskstoputil 2010-03-24 14:12:48.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fdebuginfo.java 2010-03-24 14:13:08.000000000 -0400
|
|
@@ -44,7 +44,7 @@ import frysk.proc.Proc;
|
|
import frysk.proc.Task;
|
|
|
|
import frysk.util.DebuginfoPaths;
|
|
-import frysk.util.ProcStopUtil;
|
|
+import frysk.util.TaskStopUtil;
|
|
|
|
public final class fdebuginfo
|
|
{
|
|
@@ -54,7 +54,7 @@ public final class fdebuginfo
|
|
*/
|
|
public static void main(String[] args)
|
|
{
|
|
- ProcStopUtil fdebuginfo = new ProcStopUtil("fdebuginfo", args,
|
|
+ TaskStopUtil fdebuginfo = new TaskStopUtil("fdebuginfo", args,
|
|
new PrintDebuginfoEvent());
|
|
fdebuginfo.setUsage("Usage: fdebuginfo <PID> || fdebuginfo <EXEFILE> " +
|
|
"|| fdebuginfo <COREFILE> [<EXEFILE>]");
|
|
diff -up frysk-0.4/frysk-core/frysk/bindir/fexe.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fexe.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fexe.java.taskstoputil 2010-03-24 14:12:15.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fexe.java 2010-03-24 14:12:33.000000000 -0400
|
|
@@ -41,7 +41,7 @@ package frysk.bindir;
|
|
|
|
import frysk.sys.ProcessIdentifier;
|
|
import frysk.sys.ProcessIdentifierFactory;
|
|
-import frysk.util.ProcStopUtil;
|
|
+import frysk.util.TaskStopUtil;
|
|
import frysk.event.ProcEvent;
|
|
import frysk.proc.Proc;
|
|
import frysk.sys.proc.Exe;
|
|
@@ -64,7 +64,7 @@ public class fexe
|
|
|
|
public static void main(String[] args) {
|
|
PrintExeEvent printExe = new PrintExeEvent();
|
|
- ProcStopUtil fexe = new ProcStopUtil("fexe", args, printExe,
|
|
+ TaskStopUtil fexe = new TaskStopUtil("fexe", args, printExe,
|
|
options());
|
|
fexe.setUsage("Usage: fexe <PID> || fexe <EXEFILE> " +
|
|
"|| fexe <COREFILE> [<EXEFILE>]");
|
|
diff -up frysk-0.4/frysk-core/frysk/bindir/fmaps.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fmaps.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fmaps.java.taskstoputil 2010-03-24 14:11:15.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fmaps.java 2010-03-24 14:11:33.000000000 -0400
|
|
@@ -39,7 +39,7 @@
|
|
|
|
package frysk.bindir;
|
|
|
|
-import frysk.util.ProcStopUtil;
|
|
+import frysk.util.TaskStopUtil;
|
|
import frysk.event.ProcEvent;
|
|
import frysk.proc.Proc;
|
|
import frysk.proc.MemoryMap;
|
|
@@ -47,7 +47,7 @@ import frysk.proc.MemoryMap;
|
|
public class fmaps {
|
|
|
|
public static void main (String[] args) {
|
|
- ProcStopUtil fmaps = new ProcStopUtil("fmaps", args,
|
|
+ TaskStopUtil fmaps = new TaskStopUtil("fmaps", args,
|
|
new PrintMapsEvent());
|
|
fmaps.setUsage("Usage: fmaps <PID> || fmaps <EXEFILE> " +
|
|
"|| fmaps <COREFILE> [<EXEFILE>]");
|
|
diff -up frysk-0.4/frysk-core/frysk/bindir/fstack.java.taskstoputil frysk-0.4/frysk-core/frysk/bindir/fstack.java
|
|
--- frysk-0.4/frysk-core/frysk/bindir/fstack.java.taskstoputil 2010-03-24 14:13:32.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/bindir/fstack.java 2010-03-24 15:00:53.000000000 -0400
|
|
@@ -43,12 +43,11 @@ import java.io.PrintWriter;
|
|
import java.util.Iterator;
|
|
import java.util.TreeMap;
|
|
import frysk.debuginfo.PrintDebugInfoStackOptions;
|
|
-import frysk.event.Event;
|
|
import frysk.event.ProcEvent;
|
|
import frysk.proc.Proc;
|
|
import frysk.proc.Task;
|
|
import frysk.rsl.Log;
|
|
-import frysk.util.ProcStopUtil;
|
|
+import frysk.util.TaskStopUtil;
|
|
import frysk.util.StackPrintUtil;
|
|
import gnu.classpath.tools.getopt.OptionGroup;
|
|
|
|
@@ -60,11 +59,12 @@ public final class fstack {
|
|
private static final Log fine = Log.fine(fstack.class);
|
|
|
|
public static void main(String[] args) {
|
|
- ProcStopUtil fstack = new ProcStopUtil("fstack", args,
|
|
+ TaskStopUtil fstack = new TaskStopUtil("fstack", args,
|
|
new StackerEvent(),
|
|
options());
|
|
fstack.setUsage("Usage: fstack <PID> || fstack <COREFILE> [<EXEFILE>]");
|
|
fstack.execute();
|
|
+ printWriter.flush();
|
|
}
|
|
|
|
/**
|
|
@@ -74,19 +74,11 @@ public final class fstack {
|
|
public void executeLive(Proc proc) {
|
|
fine.log(this, "printTasks");
|
|
printTasks(proc);
|
|
- proc.requestAbandonAndRunEvent(new Event()
|
|
- {
|
|
- public void execute ()
|
|
- {
|
|
- printWriter.flush();
|
|
- }
|
|
- });
|
|
}
|
|
|
|
public void executeDead(Proc proc) {
|
|
fine.log(this, "printTasks");
|
|
printTasks(proc);
|
|
- printWriter.flush();
|
|
}
|
|
}
|
|
|
|
diff -up frysk-0.4/frysk-core/frysk/util/TaskStopUtil.java.taskstoputil frysk-0.4/frysk-core/frysk/util/TaskStopUtil.java
|
|
--- frysk-0.4/frysk-core/frysk/util/TaskStopUtil.java.taskstoputil 2008-06-09 14:03:07.000000000 -0400
|
|
+++ frysk-0.4/frysk-core/frysk/util/TaskStopUtil.java 2010-03-24 14:44:48.000000000 -0400
|
|
@@ -39,6 +39,9 @@
|
|
|
|
package frysk.util;
|
|
|
|
+import java.util.Set;
|
|
+import java.util.HashSet;
|
|
+
|
|
import frysk.event.Event;
|
|
import frysk.event.ProcEvent;
|
|
import frysk.proc.Manager;
|
|
@@ -57,13 +60,13 @@ import frysk.rsl.Log;
|
|
*
|
|
* Utilities must define a event.ProcEvent to execute.
|
|
*/
|
|
-public class ProcStopUtil {
|
|
- private static final Log fine = Log.fine(ProcStopUtil.class);
|
|
+public class TaskStopUtil {
|
|
+ private static final Log fine = Log.fine(TaskStopUtil.class);
|
|
|
|
private String[] args;
|
|
private CommandlineParser parser;
|
|
|
|
- public ProcStopUtil(String utilName, String[] args,
|
|
+ public TaskStopUtil(String utilName, String[] args,
|
|
final ProcEvent procEvent,
|
|
OptionGroup[] utilOptionGroups) {
|
|
this.args = args;
|
|
@@ -72,10 +75,10 @@ public class ProcStopUtil {
|
|
public void parsePids(Proc[] procs) {
|
|
for (int i= 0; i < procs.length; i++) {
|
|
Proc proc = procs[i];
|
|
- UtilEvent utilEvent = new UtilEvent(proc, procEvent);
|
|
- new ProcBlockAction(proc, new UtilAction(proc, utilEvent));
|
|
- Manager.eventLoop.run();
|
|
+ new ProcBlockAction(proc, new TasksBlocked(proc,
|
|
+ procEvent));
|
|
}
|
|
+ Manager.eventLoop.run();
|
|
}
|
|
|
|
//@Override
|
|
@@ -95,7 +98,7 @@ public class ProcStopUtil {
|
|
};
|
|
}
|
|
|
|
- public ProcStopUtil(String utilName, String[] args,
|
|
+ public TaskStopUtil(String utilName, String[] args,
|
|
final ProcEvent procEvent) {
|
|
this(utilName, args, procEvent, null);
|
|
}
|
|
@@ -120,17 +123,32 @@ public class ProcStopUtil {
|
|
}
|
|
}
|
|
|
|
- private static class UtilAction implements ProcBlockObserver {
|
|
+ private static class TasksBlocked implements ProcBlockObserver, Event {
|
|
protected Proc proc;
|
|
- private Event event;
|
|
+ private ProcEvent procEvent;
|
|
+ protected Set procs = new HashSet();
|
|
|
|
- public UtilAction(Proc proc, Event event) {
|
|
+ public TasksBlocked(Proc proc, ProcEvent procEvent) {
|
|
this.proc = proc;
|
|
- this.event = event;
|
|
+ this.procEvent = procEvent;
|
|
+ this.procs.add (proc);
|
|
}
|
|
|
|
public void allExistingTasksCompleted() {
|
|
- Manager.eventLoop.add(event);
|
|
+ fine.log("allExistingTasksCompleted proc", proc);
|
|
+ procEvent.executeLive(proc);
|
|
+ // Now ask for it to be detached.
|
|
+ proc.requestAbandonAndRunEvent(this);
|
|
+ }
|
|
+
|
|
+ // Called when the process has been abandoned.
|
|
+ public void execute () {
|
|
+ fine.log("execute abandonedProc", proc, "remaining", procs);
|
|
+ procs.remove(proc);
|
|
+ if (procs.isEmpty()) {
|
|
+ fine.log("all abandoned");
|
|
+ Manager.eventLoop.requestStop();
|
|
+ }
|
|
}
|
|
public void taskAddFailed(Object task, Throwable w) {
|
|
}
|
|
@@ -143,25 +161,4 @@ public class ProcStopUtil {
|
|
public void deletedFrom(Object observable) {
|
|
}
|
|
}
|
|
-
|
|
- private static class UtilEvent
|
|
- implements Event
|
|
- {
|
|
- private Proc proc = null;
|
|
- private ProcEvent event = null;
|
|
-
|
|
- public UtilEvent(Proc proc, ProcEvent event) {
|
|
- this.proc = proc;
|
|
- this.event = event;
|
|
- }
|
|
-
|
|
- public void execute() {
|
|
- fine.log("execute live", proc);
|
|
- event.executeLive(proc);
|
|
-
|
|
- // FIXME: Should request eventloop to stop
|
|
- // instead of exit.
|
|
- System.exit(0);
|
|
- }
|
|
- }
|
|
}
|
|
\ No newline at end of file
|