From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28962 invoked by alias); 11 Mar 2008 13:26:43 -0000 Received: (qmail 28883 invoked by uid 367); 11 Mar 2008 13:26:42 -0000 Date: Tue, 11 Mar 2008 13:26:00 -0000 Message-ID: <20080311132642.28868.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Make Proc.getMainTask() abstract. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 10919301c6d65e57871bc6710e3db46fbf244ab9 X-Git-Newrev: a23e7138d3068bc8f776303b00273cac96067fdd 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/msg00325.txt.bz2 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 Date: Tue Mar 11 09:25:31 2008 -0400 Make Proc.getMainTask() abstract. frysk-core/frysk/proc/ChangeLog 2008-03-11 Andrew Cagney * Proc.java (getMainTask()): Make abstract. frysk-core/frysk/proc/dead/ChangeLog 2008-03-11 Andrew Cagney * 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 * DummyProc.java (getMainTask()): Implement. frysk-core/frysk/proc/live/ChangeLog 2008-03-11 Andrew Cagney * 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 + + * Proc.java (getMainTask()): Make abstract. + 2008-03-10 Andrew Cagney * 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 + + * LinuxExeProc.java (getMainTask()): Implement. + * LinuxCoreProc.java (getMainTask()): Implement. + * LinuxCoreInfo.java (constructTasks(LinuxCoreInfo)): Return the + main task. + 2008-03-10 Andrew Cagney * 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 + + * DummyProc.java (getMainTask()): Implement. + 2008-03-04 Andrew Cagney * 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 + + * LinuxPtraceProc.java (getMainTask()): Implement. + 2008-03-10 Andrew Cagney * 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