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: link
Be 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).