public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Make Proc.getMainTask() abstract. Date: Tue, 11 Mar 2008 13:26:00 -0000 [thread overview] Message-ID: <20080311132642.28868.qmail@sourceware.org> (raw) 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
reply other threads:[~2008-03-11 13:26 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080311132642.28868.qmail@sourceware.org \ --to=cagney@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).