public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Switch to frysk.sys.ptrace. Date: Tue, 12 Feb 2008 18:50:00 -0000 [thread overview] Message-ID: <20080212185049.22237.qmail@sourceware.org> (raw) The branch, master has been updated via aa9311fc8b209c13570a0e8688d1b10ca95a2efa (commit) from 4b59e4b5813d22018d7bb5e75d484826f5b59f79 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit aa9311fc8b209c13570a0e8688d1b10ca95a2efa Author: Andrew Cagney <cagney@redhat.com> Date: Tue Feb 12 13:44:35 2008 -0500 Switch to frysk.sys.ptrace. frysk-core/frysk/proc/live/ChangeLog 2008-02-12 Andrew Cagney <cagney@redhat.com> * LinuxPtraceTask.java: Use frysk.sys.ptrace. * AddressSpaceByteBuffer.java: Ditto; simplify. * LogicalMemoryBuffer.java: Ditto. * TestByteBuffer.java: Ditto. * PtraceRegisterBanksFactory.java: Ditto. * RegisterSetByteBuffer.java: Ditto; simplify. frysk-sys/frysk/sys/ChangeLog 2008-02-12 Andrew Cagney <cagney@redhat.com> * cni/Ptrace.cxx: Delete. * TestPtrace.java: Delete. * Ptrace.java: Delete. * cni/Wait.cxx: Use frysk.sys.ptrace.Ptrace. frysk-sys/frysk/sys/ptrace/ChangeLog 2008-02-12 Andrew Cagney <cagney@redhat.com> * AddressSpace.java (peek(ProcessIdentifer,long,byte[],int,int)) (poke(ProcessIdentifer,long,byte[],int,int)): Delete. * TestAddressSpace.java: Update. * TestRegisterSet.java: New. * RegisterSet.java: Map write onto ptSet. frysk-sys/frysk/testbed/ChangeLog 2008-02-12 Andrew Cagney <cagney@redhat.com> * ForkFactory.java: Use frysk.sys.ptrace. * TearDownProcess.java: Ditto. ----------------------------------------------------------------------- Summary of changes: .../frysk/proc/live/AddressSpaceByteBuffer.java | 143 ++----- frysk-core/frysk/proc/live/ChangeLog | 9 + frysk-core/frysk/proc/live/LinuxPtraceTask.java | 17 +- .../frysk/proc/live/LogicalMemoryBuffer.java | 2 +- .../proc/live/PtraceRegisterBanksFactory.java | 4 +- .../frysk/proc/live/RegisterSetByteBuffer.java | 94 ++--- frysk-core/frysk/proc/live/TestByteBuffer.java | 4 +- frysk-sys/frysk/sys/ChangeLog | 7 + frysk-sys/frysk/sys/Ptrace.java | 245 ----------- frysk-sys/frysk/sys/TestPtrace.java | 435 -------------------- frysk-sys/frysk/sys/cni/Ptrace.cxx | 393 ------------------ frysk-sys/frysk/sys/cni/Wait.cxx | 8 +- frysk-sys/frysk/sys/ptrace/AddressSpace.java | 57 +-- frysk-sys/frysk/sys/ptrace/ChangeLog | 6 + frysk-sys/frysk/sys/ptrace/RegisterSet.java | 2 +- frysk-sys/frysk/sys/ptrace/TestAddressSpace.java | 18 +- .../ptrace/TestRegisterSet.java} | 63 ++-- frysk-sys/frysk/testbed/ChangeLog | 5 + frysk-sys/frysk/testbed/ForkFactory.java | 2 +- frysk-sys/frysk/testbed/TearDownProcess.java | 4 +- 20 files changed, 188 insertions(+), 1330 deletions(-) delete mode 100644 frysk-sys/frysk/sys/Ptrace.java delete mode 100644 frysk-sys/frysk/sys/TestPtrace.java delete mode 100644 frysk-sys/frysk/sys/cni/Ptrace.cxx copy frysk-sys/frysk/{testbed/TestTearDownExpect.java => sys/ptrace/TestRegisterSet.java} (67%) First 500 lines of diff: diff --git a/frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java b/frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java index a2d2f25..adc0723 100644 --- a/frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java +++ b/frysk-core/frysk/proc/live/AddressSpaceByteBuffer.java @@ -42,7 +42,7 @@ package frysk.proc.live; import inua.eio.ByteBuffer; import frysk.sys.Errno; import frysk.sys.ProcessIdentifier; -import frysk.sys.Ptrace.AddressSpace; +import frysk.sys.ptrace.AddressSpace; import frysk.sys.proc.Mem; import frysk.event.Request; import frysk.proc.Manager; @@ -52,7 +52,7 @@ public class AddressSpaceByteBuffer extends ByteBuffer { protected final ProcessIdentifier pid; // Direct files access if possible, or null otherwise. - final Mem mem; + private Mem mem; protected AddressSpaceByteBuffer (ProcessIdentifier pid, AddressSpace addressSpace, @@ -62,14 +62,11 @@ public class AddressSpaceByteBuffer extends ByteBuffer { this.addressSpace = addressSpace; peekRequest = new PeekRequest(); pokeRequest = new PokeRequest(); - peeksRequest = new PeeksRequest(); - pokesRequest = new PokesRequest(); - if (addressSpace == AddressSpace.TEXT || addressSpace == AddressSpace.DATA) - mem = new Mem(pid); - else - mem = null; + // Try to use /proc; but if any error occures clear it and + // revert back to ptrace. + mem = new Mem(pid); } public AddressSpaceByteBuffer(ProcessIdentifier pid, AddressSpace addressSpace) { @@ -102,8 +99,7 @@ public class AddressSpaceByteBuffer extends ByteBuffer { } } private final PeekRequest peekRequest; - protected int peek (long index) - { + protected int peek(long index) { return peekRequest.request (index); } @@ -132,125 +128,64 @@ public class AddressSpaceByteBuffer extends ByteBuffer { } } private final PokeRequest pokeRequest; - protected void poke (long index, int value) - { + protected void poke(long index, int value) { pokeRequest.request (index, value); } - private class PeeksRequest - extends Request - { + private class TransferRequest extends Request { private long index; - private int length; - private int offset; private byte[] bytes; - PeeksRequest() - { + private int offset; + private int length; + private boolean write; + TransferRequest() { super(Manager.eventLoop); } - - private int peek(long index, byte[] bytes, int offset, int length) - { - if (mem != null) - { - try - { - return mem.pread(index, bytes, offset, length); - } - catch (Errno e) - { - // try again through address space. + private void transfer(long index, byte[] bytes, int offset, int length, + boolean write) { + if (mem != null && !write) { + try { + mem.pread(index, bytes, offset, length); + return; + } catch (Errno e) { + // Give up on mem; and fall back to ptrace. This + // can happen when /proc isn't mounted, or when a + // process is terminating and the kernel scrubs + // the /proc entry before its time. + mem = null; } } - - return addressSpace.peek(pid, index, length, bytes, offset); + addressSpace.transfer(pid, index, bytes, offset, length, + write); } - public void execute () - { - length = peek(index, bytes, offset, length); + public void execute() { + transfer(index, bytes, offset, length, write); } - public int request (long index, byte[] bytes, - int offset, int length) - { + public void request(long index, byte[] bytes, int offset, int length, + boolean write) { if (isEventLoopThread()) - return peek(index, bytes, offset, length); + transfer(index, bytes, offset, length, write); else synchronized (this) { this.index = index; this.bytes = bytes; this.offset = offset; this.length = length; - request(); - return length; + this.write = write; + super.request(); } } } - private final PeeksRequest peeksRequest; - protected int peek (long index, byte[] bytes, int offset, int length) - { - return peeksRequest.request(index, bytes, offset, length); - } - - - private class PokesRequest - extends Request - { - private long index; - private int length; - private int offset; - private byte[] bytes; + private final TransferRequest transfer = new TransferRequest(); - PokesRequest() - { - super(Manager.eventLoop); - } - - private int poke(long index, byte[] bytes, int offset, int length) - { - if (mem != null) - { - try - { - return mem.pwrite(index, bytes, offset, length); - } - catch (Errno e) - { - // try again through address space. - } - } - - // We lose here since AddressSpace isn't optimized for bulk poke. - for (int i = offset; i < length; i++) - addressSpace.poke(pid, index + i, bytes[i]); + protected int peek(long index, byte[] bytes, int offset, int length) { + transfer.request(index, bytes, offset, length, false); // read return length; - } - - public void execute () - { - length = poke(index, bytes, offset, length); - } - - public int request (long index, byte[] bytes, - int offset, int length) - { - if (isEventLoopThread()) - return poke(index, bytes, offset, length); - else synchronized (this) { - this.index = index; - this.bytes = bytes; - this.offset = offset; - this.length = length; - request(); - return length; - } - } } - - private final PokesRequest pokesRequest; - protected int poke(long index, byte[] bytes, int off, int len) - { - return pokesRequest.request(index, bytes, off, len); + protected int poke(long index, byte[] bytes, int offset, int length) { + transfer.request(index, bytes, offset, length, true); // write + return length; } protected ByteBuffer subBuffer (ByteBuffer parent, long lowerExtreem, diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog index 7cfa15a..0d9c400 100644 --- a/frysk-core/frysk/proc/live/ChangeLog +++ b/frysk-core/frysk/proc/live/ChangeLog @@ -1,3 +1,12 @@ +2008-02-12 Andrew Cagney <cagney@redhat.com> + + * LinuxPtraceTask.java: Use frysk.sys.ptrace. + * AddressSpaceByteBuffer.java: Ditto; simplify. + * LogicalMemoryBuffer.java: Ditto. + * TestByteBuffer.java: Ditto. + * PtraceRegisterBanksFactory.java: Ditto. + * RegisterSetByteBuffer.java: Ditto; simplify. + 2008-02-08 Andrew Cagney <cagney@redhat.com> * LinuxPtraceHost.java (procs): New. diff --git a/frysk-core/frysk/proc/live/LinuxPtraceTask.java b/frysk-core/frysk/proc/live/LinuxPtraceTask.java index 780e8ee..a9a6b51 100644 --- a/frysk-core/frysk/proc/live/LinuxPtraceTask.java +++ b/frysk-core/frysk/proc/live/LinuxPtraceTask.java @@ -61,8 +61,8 @@ import inua.eio.ByteOrder; import frysk.sys.Errno; import frysk.sys.ProcessIdentifier; import frysk.sys.ProcessIdentifierFactory; -import frysk.sys.Ptrace; -import frysk.sys.Ptrace.AddressSpace; +import frysk.sys.ptrace.Ptrace; +import frysk.sys.ptrace.AddressSpace; import frysk.sys.Signal; import frysk.isa.syscalls.Syscall; import frysk.isa.ISA; @@ -350,11 +350,10 @@ public class LinuxPtraceTask extends LiveTask { // XXX: Should be selecting the trace flags based on the contents // of .observers? Ptrace.optionTraceSysgood not set by default - private long ptraceOptions - = Ptrace.optionTraceClone() - | Ptrace.optionTraceFork() - | Ptrace.optionTraceExit() - | Ptrace.optionTraceExec(); + private long ptraceOptions = (Ptrace.OPTION_CLONE + | Ptrace.OPTION_FORK + | Ptrace.OPTION_EXIT + | Ptrace.OPTION_EXEC); void initializeAttachedState() { logger.log(Level.FINE, "{0} initializeAttachedState\n", this); Ptrace.setOptions(tid, ptraceOptions); @@ -364,12 +363,12 @@ public class LinuxPtraceTask extends LiveTask { } void startTracingSyscalls() { logger.log(Level.FINE, "{0} startTracingSyscalls\n", this); - ptraceOptions |= Ptrace.optionTraceSysgood(); + ptraceOptions |= Ptrace.OPTION_SYSGOOD; Ptrace.setOptions(tid, ptraceOptions); } void stopTracingSyscalls() { logger.log(Level.FINE, "{0} stopTracingSyscalls\n", this); - ptraceOptions &= ~ (Ptrace.optionTraceSysgood()); + ptraceOptions &= ~Ptrace.OPTION_SYSGOOD; Ptrace.setOptions(tid, ptraceOptions); } diff --git a/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java b/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java index 11038ce..5d1330b 100644 --- a/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java +++ b/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java @@ -42,7 +42,7 @@ package frysk.proc.live; import frysk.sys.ProcessIdentifier; import java.util.Iterator; import inua.eio.ByteBuffer; -import frysk.sys.Ptrace.AddressSpace; +import frysk.sys.ptrace.AddressSpace; /** * MemorySpaceByteBuffer that filters out anything the frysk core diff --git a/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java b/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java index e4fc8ac..a86bfda 100644 --- a/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java +++ b/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java @@ -44,8 +44,8 @@ import inua.eio.ByteBuffer; import inua.eio.ByteOrder; import frysk.isa.ISA; import frysk.sys.ProcessIdentifier; -import frysk.sys.Ptrace.RegisterSet; -import frysk.sys.Ptrace.AddressSpace; +import frysk.sys.ptrace.RegisterSet; +import frysk.sys.ptrace.AddressSpace; import frysk.isa.banks.RegisterBanks; import frysk.isa.banks.X86BankRegisters; import frysk.isa.banks.PPCBankRegisters; diff --git a/frysk-core/frysk/proc/live/RegisterSetByteBuffer.java b/frysk-core/frysk/proc/live/RegisterSetByteBuffer.java index 8dd857f..6b2c1ff 100644 --- a/frysk-core/frysk/proc/live/RegisterSetByteBuffer.java +++ b/frysk-core/frysk/proc/live/RegisterSetByteBuffer.java @@ -39,7 +39,7 @@ package frysk.proc.live; -import frysk.sys.Ptrace.RegisterSet; +import frysk.sys.ptrace.RegisterSet; import frysk.event.Request; import frysk.proc.Manager; import inua.eio.ByteBuffer; @@ -64,93 +64,61 @@ public class RegisterSetByteBuffer this.pid = pid; this.registerSet = registerSet; bytes = new byte[registerSet.length()]; - getRegs = new GetRegs(); - setRegs = new SetRegs(); } public RegisterSetByteBuffer(ProcessIdentifier pid, RegisterSet registerSet) { this(pid, registerSet, 0, registerSet.length()); } - private class GetRegs - extends Request - { - GetRegs() - { + private class TransferRequest extends Request { + TransferRequest() { super(Manager.eventLoop); } - public final void execute() - { - registerSet.get(pid, bytes); + private boolean write; + public final void execute() { + registerSet.transfer(pid, bytes, write); } - public void request () - { - if (isEventLoopThread()) - execute(); - else synchronized (this) { - super.request(); + private void request(boolean write) { + if (isEventLoopThread()) { + registerSet.transfer(pid, bytes, write); + } else { + synchronized (this) { + this.write = write; + super.request(); + } } } - } - private final GetRegs getRegs; - private void getRegs() - { - getRegs.request(); - } - - private class SetRegs - extends Request - { - SetRegs() - { - super(Manager.eventLoop); - } - public void execute() - { - registerSet.set(pid, bytes); + void getRegs() { + request(false); // read } - public void request () - { - if (isEventLoopThread()) - // Skip the event-loop - execute (); - else synchronized (this) { - super.request(); - } + void setRegs() { + request(true); // write } } - private final SetRegs setRegs; - private void setRegs() - { - setRegs.request(); - } + private final TransferRequest transfer = new TransferRequest(); - protected int peek (long index) - { - getRegs(); + protected int peek(long index) { + transfer.getRegs(); return bytes[(int)index]; } - protected void poke (long index, int value) - { - getRegs(); + protected void poke(long index, int value) { + transfer.getRegs(); bytes[(int)index] = (byte)value; - setRegs(); + transfer.setRegs(); } - protected int peek (long index, byte[] bytes, int off, int len) - { - getRegs(); + protected int peek(long index, byte[] bytes, int off, int len) { + transfer.getRegs(); System.arraycopy(this.bytes, (int) index, bytes, off, len); return len; } - protected int poke (long index, byte[] bytes, int off, int len) - { - getRegs(); - System.arraycopy(bytes, off, this.bytes, (int) index, len); - setRegs(); - return len; + protected int poke(long index, byte[] bytes, int off, int len) { + transfer.getRegs(); + System.arraycopy(bytes, off, this.bytes, (int) index, len); + transfer.setRegs(); + return len; } protected ByteBuffer subBuffer (ByteBuffer parent, long lowerExtreem, diff --git a/frysk-core/frysk/proc/live/TestByteBuffer.java b/frysk-core/frysk/proc/live/TestByteBuffer.java index 4bdd133..1983682 100644 --- a/frysk-core/frysk/proc/live/TestByteBuffer.java +++ b/frysk-core/frysk/proc/live/TestByteBuffer.java @@ -47,8 +47,8 @@ import frysk.proc.dummy.DummyProc; import frysk.testbed.ForkFactory; import frysk.testbed.DaemonBlockedAtEntry; import frysk.testbed.LocalMemory; -import frysk.sys.Ptrace.RegisterSet; -import frysk.sys.Ptrace.AddressSpace; +import frysk.sys.ptrace.RegisterSet; +import frysk.sys.ptrace.AddressSpace; import frysk.proc.Manager; import frysk.sys.ProcessIdentifier; import java.util.Arrays; diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog index 18a9c5c..dc2487c 100644 --- a/frysk-sys/frysk/sys/ChangeLog +++ b/frysk-sys/frysk/sys/ChangeLog @@ -1,3 +1,10 @@ +2008-02-12 Andrew Cagney <cagney@redhat.com> + + * cni/Ptrace.cxx: Delete. + * TestPtrace.java: Delete. + * Ptrace.java: Delete. + * cni/Wait.cxx: Use frysk.sys.ptrace.Ptrace. + 2008-02-11 Andrew Cagney <cagney@redhat.com> * cni/Errno.hxx: Delete unnecessary #include diff --git a/frysk-sys/frysk/sys/Ptrace.java b/frysk-sys/frysk/sys/Ptrace.java deleted file mode 100644 index 46e85d1..0000000 --- a/frysk-sys/frysk/sys/Ptrace.java +++ /dev/null @@ -1,245 +0,0 @@ -// This file is part of the program FRYSK. -// -// Copyright 2005, 2006, 2007, 2008, Red Hat Inc. -// -// FRYSK is free software; you can redistribute it and/or modify it -// under the terms of the GNU General Public License as published by -// the Free Software Foundation; version 2 of the License. -// -// FRYSK is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with FRYSK; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -// -// In addition, as a special exception, Red Hat, Inc. gives You the -// additional right to link the code of FRYSK with code not covered -// under the GNU General Public License ("Non-GPL Code") and to -// distribute linked combinations including the two, subject to the -// limitations in this paragraph. Non-GPL Code permitted under this -// exception must only link to the code of FRYSK through those well -// defined interfaces identified in the file named EXCEPTION found in -// the source code files (the "Approved Interfaces"). The files of -// Non-GPL Code may instantiate templates or use macros or inline -// functions from the Approved Interfaces without causing the hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-02-12 18:50 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=20080212185049.22237.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).