This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Switch to frysk.sys.ptrace.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]