public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Make Proc.getMainTask() abstract.
@ 2008-03-11 13:26 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-03-11 13:26 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  a23e7138d3068bc8f776303b00273cac96067fdd (commit)
      from  10919301c6d65e57871bc6710e3db46fbf244ab9 (commit)

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

- Log -----------------------------------------------------------------
commit a23e7138d3068bc8f776303b00273cac96067fdd
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue Mar 11 09:25:31 2008 -0400

    Make Proc.getMainTask() abstract.
    
    frysk-core/frysk/proc/ChangeLog
    2008-03-11  Andrew Cagney  <cagney@redhat.com>
    
    	* Proc.java (getMainTask()): Make abstract.
    
    frysk-core/frysk/proc/dead/ChangeLog
    2008-03-11  Andrew Cagney  <cagney@redhat.com>
    
    	* LinuxExeProc.java (getMainTask()): Implement.
    	* LinuxCoreProc.java (getMainTask()): Implement.
    	* LinuxCoreInfo.java (constructTasks(LinuxCoreInfo)): Return the
    	main task.
    
    frysk-core/frysk/proc/dummy/ChangeLog
    2008-03-11  Andrew Cagney  <cagney@redhat.com>
    
    	* DummyProc.java (getMainTask()): Implement.
    
    frysk-core/frysk/proc/live/ChangeLog
    2008-03-11  Andrew Cagney  <cagney@redhat.com>
    
    	* LinuxPtraceProc.java (getMainTask()): Implement.

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

Summary of changes:
 frysk-core/frysk/proc/ChangeLog                 |    4 +++
 frysk-core/frysk/proc/Proc.java                 |    9 ++++--
 frysk-core/frysk/proc/dead/ChangeLog            |    7 +++++
 frysk-core/frysk/proc/dead/LinuxCoreInfo.java   |   29 +++++++++++++++--------
 frysk-core/frysk/proc/dead/LinuxCoreProc.java   |    8 +++++-
 frysk-core/frysk/proc/dead/LinuxExeProc.java    |    8 +++++-
 frysk-core/frysk/proc/dummy/ChangeLog           |    4 +++
 frysk-core/frysk/proc/dummy/DummyProc.java      |    5 ++++
 frysk-core/frysk/proc/live/ChangeLog            |    4 +++
 frysk-core/frysk/proc/live/LinuxPtraceProc.java |   17 ++++++++++++-
 10 files changed, 79 insertions(+), 16 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog
index a1bb1c3..56f2684 100644
--- a/frysk-core/frysk/proc/ChangeLog
+++ b/frysk-core/frysk/proc/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-11  Andrew Cagney  <cagney@redhat.com>
+
+	* Proc.java (getMainTask()): Make abstract.
+
 2008-03-10  Andrew Cagney  <cagney@redhat.com>
 
 	* MemoryMap.java (pathnameOffset): Delete.
diff --git a/frysk-core/frysk/proc/Proc.java b/frysk-core/frysk/proc/Proc.java
index e38db75..4eb1171 100644
--- a/frysk-core/frysk/proc/Proc.java
+++ b/frysk-core/frysk/proc/Proc.java
@@ -117,10 +117,13 @@ public abstract class Proc implements Comparable {
 
     /**
      * @return The main task for this process
+     *
+     * XXX: Rather than getting the main task and manipulating that,
+     * it should be possible to instead manipulate the proc - for
+     * instance asking the proc to notify of fork/exec/clone events.
+     * At present this is implemented by ProcBlockAction.
      */
-    public Task getMainTask() {
-	return (Task) taskPool.get(new TaskId(this.getPid()));
-    }
+    public abstract Task getMainTask();
   
     /**
      * Return the Proc's command line argument list
diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog
index 5a4db36..c452884 100644
--- a/frysk-core/frysk/proc/dead/ChangeLog
+++ b/frysk-core/frysk/proc/dead/ChangeLog
@@ -1,3 +1,10 @@
+2008-03-11  Andrew Cagney  <cagney@redhat.com>
+
+	* LinuxExeProc.java (getMainTask()): Implement.
+	* LinuxCoreProc.java (getMainTask()): Implement.
+	* LinuxCoreInfo.java (constructTasks(LinuxCoreInfo)): Return the
+	main task.
+
 2008-03-10  Andrew Cagney  <cagney@redhat.com>
 
 	* LinuxCoreInfo.java: Update to match MemoryMap.
diff --git a/frysk-core/frysk/proc/dead/LinuxCoreInfo.java b/frysk-core/frysk/proc/dead/LinuxCoreInfo.java
index bd8a80e..ed6aa2f 100644
--- a/frysk-core/frysk/proc/dead/LinuxCoreInfo.java
+++ b/frysk-core/frysk/proc/dead/LinuxCoreInfo.java
@@ -364,9 +364,9 @@ class LinuxCoreInfo {
     }
 
     /**
-     * Find and create the core tasks.
+     * Find and create the core tasks; return the main task.
      */
-    void constructTasks(LinuxCoreProc proc) {
+    LinuxCoreTask constructTasks(LinuxCoreProc proc) {
 	// Two methods of whether Floating Point note data exists.  In
 	// userland generated core-dumps there is no way to test if
 	// floating point data operations have actually occurred, so
@@ -376,7 +376,7 @@ class LinuxCoreInfo {
 	// note data is written per thread by analyzing to see if that
 	// thread has performed Floating Point operations. If it has,
 	// it will write NT_FPREGSET, and if it hasn't it won't.
-    
+	LinuxCoreTask mainTask = null;
 	if (elfFPRegs.length == elfTasks.length) {
 	    // The number of NT_FPREGSET note objects is equal to the
 	    // the number of NT_PRSTATUS note objects, then no do not
@@ -387,8 +387,11 @@ class LinuxCoreInfo {
 		ElfPrXFPRegSet xregSet = null;
 		if (elfXFPRegs.length > 0)
 		    xregSet = elfXFPRegs[i];
-		new LinuxCoreTask(proc, elfTasks[i], elfFPRegs[i],
-				  xregSet, isa);
+		LinuxCoreTask task = new LinuxCoreTask(proc, elfTasks[i],
+						       elfFPRegs[i], xregSet,
+						       isa);
+		if (task.getTid() == proc.getPid())
+		    mainTask = task;
 	    }
 	} else {
 	    // Otherwise add only NT_FPREGSET data if pr_fpvalid is >
@@ -398,19 +401,25 @@ class LinuxCoreInfo {
 	    // correctly.
 	    int fpCount = 0;
 	    for (int i = 0; i < elfTasks.length; i++) {
+		LinuxCoreTask task;
 		if (elfTasks[i].getPrFPValid() > 0) {
 		    // xfpregsets accompany fp registers on a 1:1
 		    // basis but only on some architectures.
 		    ElfPrXFPRegSet xregSet = null;
 		    if (elfXFPRegs.length > 0)
 			xregSet = elfXFPRegs[fpCount];
-		    new LinuxCoreTask(proc, elfTasks[i],
-				      elfFPRegs[fpCount],
-				      xregSet, isa);
+		    task = new LinuxCoreTask(proc, elfTasks[i],
+					     elfFPRegs[fpCount],
+					     xregSet, isa);
 		    fpCount++;
-		} else
-		    new LinuxCoreTask(proc, elfTasks[i],  null, null, isa);
+		} else {
+		    task = new LinuxCoreTask(proc, elfTasks[i],  null, null,
+					     isa);
+		}
+		if (task.getTid() == proc.getPid())
+		    mainTask = task;
 	    }
 	}
+	return mainTask;
     }
 }
diff --git a/frysk-core/frysk/proc/dead/LinuxCoreProc.java b/frysk-core/frysk/proc/dead/LinuxCoreProc.java
index 532df14..73e0dc4 100644
--- a/frysk-core/frysk/proc/dead/LinuxCoreProc.java
+++ b/frysk-core/frysk/proc/dead/LinuxCoreProc.java
@@ -42,19 +42,25 @@ package frysk.proc.dead;
 import frysk.proc.Auxv;
 import frysk.proc.MemoryMap;
 import frysk.rsl.Log;
+import frysk.proc.Task;
 
 public class LinuxCoreProc extends DeadProc {
     private static final Log fine = Log.fine(LinuxCoreProc.class);
   
     private final LinuxCoreInfo info;
+    private final LinuxCoreTask mainTask;
 
     LinuxCoreProc(LinuxCoreHost host, LinuxCoreInfo info) {
 	super(host, null, info.prpsInfo.getPrPid());
 	fine.log(this, "LinuxCoreProc host", host, "info", info);
 	this.info = info;
-	info.constructTasks(this);
+	this.mainTask = info.constructTasks(this);
     }	
 
+    public Task getMainTask() {
+	return mainTask;
+    }
+
     public String getCommand() {
 	String command = info.prpsInfo.getPrFname();
 	fine.log(this, "getCommand()", command);
diff --git a/frysk-core/frysk/proc/dead/LinuxExeProc.java b/frysk-core/frysk/proc/dead/LinuxExeProc.java
index 9616965..95edf4b 100644
--- a/frysk-core/frysk/proc/dead/LinuxExeProc.java
+++ b/frysk-core/frysk/proc/dead/LinuxExeProc.java
@@ -43,12 +43,14 @@ import lib.dwfl.ElfEHeader;
 import frysk.proc.Auxv;
 import frysk.proc.MemoryMap;
 import java.io.File;
+import frysk.proc.Task;
 
 public class LinuxExeProc extends DeadProc {
 
     private final MemoryMap[] memoryMaps;
     private final String[] argv;
     private final File exeFile;
+    private final LinuxExeTask mainTask;
 
     public LinuxExeProc(LinuxExeHost host, File exeFile, ElfEHeader eHeader,
 			MemoryMap[] memoryMaps, String[] argv) {
@@ -56,7 +58,11 @@ public class LinuxExeProc extends DeadProc {
 	this.exeFile = exeFile;
 	this.memoryMaps = memoryMaps;
 	this.argv = argv;
-	new LinuxExeTask(this, eHeader, memoryMaps);
+	this.mainTask = new LinuxExeTask(this, eHeader, memoryMaps);
+    }
+
+    public Task getMainTask() {
+	return mainTask;
     }
 
     public Auxv[] getAuxv() {
diff --git a/frysk-core/frysk/proc/dummy/ChangeLog b/frysk-core/frysk/proc/dummy/ChangeLog
index b1a27e4..0357009 100644
--- a/frysk-core/frysk/proc/dummy/ChangeLog
+++ b/frysk-core/frysk/proc/dummy/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-11  Andrew Cagney  <cagney@redhat.com>
+
+	* DummyProc.java (getMainTask()): Implement.
+
 2008-03-04  Andrew Cagney  <cagney@redhat.com>
 
 	* DummyHost.java: Update to match File.
diff --git a/frysk-core/frysk/proc/dummy/DummyProc.java b/frysk-core/frysk/proc/dummy/DummyProc.java
index 3312238..2096835 100644
--- a/frysk-core/frysk/proc/dummy/DummyProc.java
+++ b/frysk-core/frysk/proc/dummy/DummyProc.java
@@ -42,6 +42,7 @@ package frysk.proc.dummy;
 import frysk.proc.Auxv;
 import frysk.proc.MemoryMap;
 import frysk.proc.Proc;
+import frysk.proc.Task;
 
 public class DummyProc extends Proc {
     public DummyProc(DummyHost host, int pid) {
@@ -51,6 +52,10 @@ public class DummyProc extends Proc {
 	this(new DummyHost(), 42);
     }
   
+    public Task getMainTask() {
+	return null;
+    }
+
     public String getCommand() {
 	return "Foo";
     }
diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog
index ccde76a..2046d04 100644
--- a/frysk-core/frysk/proc/live/ChangeLog
+++ b/frysk-core/frysk/proc/live/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-11  Andrew Cagney  <cagney@redhat.com>
+
+	* LinuxPtraceProc.java (getMainTask()): Implement.
+
 2008-03-10  Andrew Cagney  <cagney@redhat.com>
 
 	* LinuxPtraceProc.java: Update to match MemoryMap.
diff --git a/frysk-core/frysk/proc/live/LinuxPtraceProc.java b/frysk-core/frysk/proc/live/LinuxPtraceProc.java
index 3de3a07..7c78616 100644
--- a/frysk-core/frysk/proc/live/LinuxPtraceProc.java
+++ b/frysk-core/frysk/proc/live/LinuxPtraceProc.java
@@ -82,6 +82,7 @@ public class LinuxPtraceProc extends LiveProc {
 	this.stat = stat;
 	this.breakpoints = new BreakpointAddresses(this);
     }
+
     /**
      * Create a new, definitely attached, definitely running fork of
      * Task.
@@ -102,7 +103,20 @@ public class LinuxPtraceProc extends LiveProc {
     }
     private final HashMap tasks = new HashMap();
 
-    private Auxv[] auxv;
+    public Task getMainTask() {
+	if (mainTask == null) {
+	    if (tasks.size() == 0) {
+		// Detached, make up a main task.
+		mainTask = new LinuxPtraceTask(this, pid);
+	    } else {
+		// Hopefully attached, extract the main task.
+		mainTask = (LinuxPtraceTask)tasks.get(pid);
+	    }
+	}
+	return mainTask;
+    }
+    private LinuxPtraceTask mainTask;
+
     public Auxv[] getAuxv() {
 	if (auxv == null) {
 	    class BuildAuxv extends AuxvBuilder {
@@ -125,6 +139,7 @@ public class LinuxPtraceProc extends LiveProc {
 	}
 	return auxv;
     }
+    private Auxv[] auxv;
 
     private MemoryMap[] maps;
 


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


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

only message in thread, other threads:[~2008-03-11 13:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-11 13:26 [SCM] master: Make Proc.getMainTask() abstract cagney

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