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: Merge branch 'master' of ssh://sources.redhat.com/git/frysk


The branch, master has been updated
       via  0d030927ffff2842d7175af81a37b725c7842fc4 (commit)
       via  14da5f49f8bcd34a91f22062329966a6ca541d09 (commit)
      from  73d248bf48736b4e48a0ea9cc006704c287df727 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 0d030927ffff2842d7175af81a37b725c7842fc4
Merge: 14da5f49f8bcd34a91f22062329966a6ca541d09 73d248bf48736b4e48a0ea9cc006704c287df727
Author: Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
Date:   Wed Nov 28 14:19:50 2007 -0200

    Merge branch 'master' of ssh://sources.redhat.com/git/frysk

commit 14da5f49f8bcd34a91f22062329966a6ca541d09
Author: Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
Date:   Wed Nov 28 14:19:23 2007 -0200

    Fixing PowerPC access to regs and corefile fp notes section.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/proc/live/ChangeLog               |   12 ++---
 .../proc/live/PtraceRegisterBanksFactory.java      |   14 ++++--
 frysk-core/frysk/util/ChangeLog                    |    9 +++
 frysk-core/frysk/util/PPC64LinuxElfCorefile.java   |   53 +++++++++++++++----
 frysk-core/frysk/util/TestFCore.java               |    8 +++-
 frysk-sys/frysk/sys/ChangeLog                      |    5 ++
 frysk-sys/frysk/sys/cni/Ptrace.cxx                 |   10 +++-
 7 files changed, 86 insertions(+), 25 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog
index 05f1824..ee712f6 100644
--- a/frysk-core/frysk/proc/live/ChangeLog
+++ b/frysk-core/frysk/proc/live/ChangeLog
@@ -1,12 +1,8 @@
-2007-11-28  Zhao Shujing  <pearly.zhao@oracle.com>
+2007-11-27  Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
 
-	* TestByteBuffer.java (testMemoryBufferCapacity()): Update; Add PPC
-	support and make it simpler.
-
-2007-11-22  Zhao shujing  <pearly.zhao@oracle.com>
-
-	* TestByteBuffer.java (testMemoryBufferCapacity()): Fix bug 5394.
-	Renabled test.
+	* PtraceRegisterBanksFactory.java: Putting single PowerPC ptrace
+	register bank (holds all registers with different sizes, even
+	floating pointer ones and vector register.
 
 2007-11-22  Andrew Cagney  <cagney@redhat.com>
 
diff --git a/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java b/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java
index 0621b3c..74232f0 100644
--- a/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java
+++ b/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java
@@ -83,10 +83,16 @@ class PtraceRegisterBanksFactory {
     }
 
     private static ByteBuffer[] ppcBanksBE(int pid) {
-	ByteBuffer registers
-	    = new AddressSpaceByteBuffer(pid, AddressSpace.USR);
-	registers.order(ByteOrder.BIG_ENDIAN); // set explicitly
-	return new ByteBuffer[] { registers };
+	ByteBuffer[] bankBuffers = new ByteBuffer[] {
+            new RegisterSetByteBuffer(pid, RegisterSet.REGS),
+            new AddressSpaceByteBuffer(pid, AddressSpace.USR)
+        };
+
+	for (int i = 0; i < bankBuffers.length; i++) {
+            bankBuffers[i].order(ByteOrder.BIG_ENDIAN);
+        }	
+
+	return bankBuffers;
     }
 
     static RegisterBanks create(ISA isa, int pid) {
diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog
index 2452a84..24e3eb0 100644
--- a/frysk-core/frysk/util/ChangeLog
+++ b/frysk-core/frysk/util/ChangeLog
@@ -1,3 +1,12 @@
+2007-11-28  Jose Flavio Aguilar Paulino <jflavio@br.ibm.com>
+	
+	* PPC64LinuxElfCorefile.java: Fixed the floating pointer
+	notes writer.
+
+	* TestFCore.java: Marked testFloatingPointRegisters as an Unresolved
+	test since doesnt make sense to test for fp regs in the second bank,
+	they are together with all other regs in the first bank.
+
 2007-11-28  Phil Muldoon  <pmuldoon@redhat.com>
 
 	* PPC64LinuxElfCorefile.java (writeNotePrstatus): Add GPR
diff --git a/frysk-core/frysk/util/PPC64LinuxElfCorefile.java b/frysk-core/frysk/util/PPC64LinuxElfCorefile.java
index ffcc899..58553c7 100644
--- a/frysk-core/frysk/util/PPC64LinuxElfCorefile.java
+++ b/frysk-core/frysk/util/PPC64LinuxElfCorefile.java
@@ -47,7 +47,6 @@ import java.math.BigInteger;
 
 import frysk.proc.Proc;
 import frysk.proc.Task;
-import inua.eio.ByteBuffer;
 import inua.eio.ByteOrder;
 
 import lib.dwfl.ElfNhdr;
@@ -241,20 +240,52 @@ public class PPC64LinuxElfCorefile extends LinuxElfCorefile {
          *      frysk.proc.Task)
          */
     protected void writeNoteFPRegset(ElfNhdr nhdrEntry, Task task) {
-	ElfPrFPRegSet fpRegSet = new ElfPrFPRegSet();
 
-	// Write FP Register info over wholesae. Do not interpret.
-	ByteBuffer registerMaps[] = task.getRegisterBuffersFIXME();
-	byte[] regBuffer = new byte[(int) registerMaps[1].capacity()];
-	registerMaps[1].get(regBuffer);
+        ElfPrFPRegSet fpRegSet = new ElfPrFPRegSet();
+
+        Register[] ppc64FloatingPointerRegMap = {
+                PPC64Registers.FPR0, PPC64Registers.FPR1, PPC64Registers.FPR2,
+                PPC64Registers.FPR3, PPC64Registers.FPR4, PPC64Registers.FPR5,
+		PPC64Registers.FPR6, PPC64Registers.FPR7, PPC64Registers.FPR8,
+		PPC64Registers.FPR9, PPC64Registers.FPR10, PPC64Registers.FPR11,
+		PPC64Registers.FPR12, PPC64Registers.FPR13, PPC64Registers.FPR14,
+		PPC64Registers.FPR15, PPC64Registers.FPR16, PPC64Registers.FPR17,
+		PPC64Registers.FPR18, PPC64Registers.FPR19, PPC64Registers.FPR20,
+		PPC64Registers.FPR21, PPC64Registers.FPR22, PPC64Registers.FPR23,
+		PPC64Registers.FPR24, PPC64Registers.FPR25, PPC64Registers.FPR26,
+		PPC64Registers.FPR27, PPC64Registers.FPR28, PPC64Registers.FPR29,
+		PPC64Registers.FPR30, PPC64Registers.FPR31 };
+
+        int totalBufferSize = 0;
+        for (int i = 0; i < ppc64FloatingPointerRegMap.length; i++) {
+            int registerSize = ppc64FloatingPointerRegMap[i].getType().getSize();
+            totalBufferSize += registerSize;
+        }
 
-	fpRegSet.setFPRegisterBuffer(regBuffer);
+	// Creating a raw byte buffer to fill with fp regs value
+        byte[] regBuffer = new byte[totalBufferSize];
+
+        // Filling the buffer
+        int regBufferIndex = 0;
+        for (int i = 0; i < ppc64FloatingPointerRegMap.length; i++) {
+            int registerSize = ppc64FloatingPointerRegMap[i].getType().getSize();
+            byte[] currentRegBuffer = new byte[registerSize];
+            task.access(ppc64FloatingPointerRegMap[i], 0,
+                        registerSize, currentRegBuffer, 0, false);
+            for(int j=0; j < registerSize; j++) {
+                regBuffer[regBufferIndex] = currentRegBuffer[j];
+                regBufferIndex++;
+            }
+        }
 
-	// Write it
-	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, fpRegSet);
-    }
+        // Write FP Register info over wholesae. Do not interpret.
+        fpRegSet.setFPRegisterBuffer(regBuffer);
 
-    /* (non-Javadoc)
+        // Write it
+        nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, fpRegSet);
+   }
+
+    /*F(non-Javadoc)
      * @see frysk.util.LinuxElfCorefile#writeNotePRXFPRegset(lib.dwfl.ElfNhdr, frysk.proc.Task)
      */
     protected boolean writeNotePRXFPRegset(ElfNhdr nhdrEntry, Task task) {
diff --git a/frysk-core/frysk/util/TestFCore.java b/frysk-core/frysk/util/TestFCore.java
index 1cc29d7..9b32905 100644
--- a/frysk-core/frysk/util/TestFCore.java
+++ b/frysk-core/frysk/util/TestFCore.java
@@ -236,7 +236,8 @@ public class TestFCore
       
       // Get the live process register banks and store them
       ByteBuffer liveRegisterMaps[] = mainLiveTask.getRegisterBuffersFIXME();
-      byte[] liveRegBuffer = new byte[(int) liveRegisterMaps[0].capacity()];
+      long bankSize = liveRegisterMaps[0].capacity();
+      byte[] liveRegBuffer = new byte[(int)bankSize];
       liveRegisterMaps[0].get(0,liveRegBuffer,0,(int) liveRegisterMaps[0].capacity());
       
       // Create a corefile from process
@@ -274,6 +275,11 @@ public class TestFCore
   public void testFloatingPointRegisters ()
   {
       
+      // PowerPc doesnt have a bank for Floating Point registers
+      // this registers are with all others in the main bank
+      if (unresolvedOnPPC(4890))
+         return;	
+
       // Construct a process
       Proc ackProc = giveMeABlockedProc();
       assertNotNull("Found Process",ackProc);
diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog
index fcea6d1..d194c16 100644
--- a/frysk-sys/frysk/sys/ChangeLog
+++ b/frysk-sys/frysk/sys/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-28  Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
+
+	* cni/Ptrace.cxx: Add PowerPC single register bank access
+	(its size and parammeter to access register).
+
 2007-11-15  Andrew Cagney  <cagney@redhat.com>
 
 	* Errno.java (Errno()): Delete.
diff --git a/frysk-sys/frysk/sys/cni/Ptrace.cxx b/frysk-sys/frysk/sys/cni/Ptrace.cxx
index fc08d63..5959eb3 100644
--- a/frysk-sys/frysk/sys/cni/Ptrace.cxx
+++ b/frysk-sys/frysk/sys/cni/Ptrace.cxx
@@ -76,7 +76,7 @@ op_as_string (int op)
       OP(PTRACE_SINGLESTEP);
       OP(PTRACE_CONT);
       OP(PTRACE_SYSCALL);
-#if defined(__i386__)|| defined(__x86_64__)
+#if defined(__i386__) || defined(__x86_64__)
       OP(PTRACE_GETREGS);
       OP(PTRACE_SETREGS);
       OP(PTRACE_GETFPREGS);
@@ -207,6 +207,10 @@ frysk::sys::Ptrace$RegisterSet::regs ()
 #if defined(__i386__)|| defined(__x86_64__)
   return new frysk::sys::Ptrace$RegisterSet (sizeof (user_regs_struct),
 					     PTRACE_GETREGS, PTRACE_SETREGS);
+#elif defined(__powerpc64__)
+  /* PowerPc single register bank which holds ALL registers (of all kinds) */
+  return new frysk::sys::Ptrace$RegisterSet (sizeof(mcontext_t),
+                                             PTRACE_PEEKUSR , PTRACE_POKEUSR);
 #else
   return NULL;
 #endif
@@ -219,6 +223,10 @@ frysk::sys::Ptrace$RegisterSet::fpregs ()
   return new frysk::sys::Ptrace$RegisterSet (sizeof(user_fpregs_struct),
 					     PTRACE_GETFPREGS,
 					     PTRACE_SETFPREGS);
+#elif defined(__powerpc64__)
+  /* PowerPC has a single register bank (by ptrace) and it hold all
+     registers, even the floating pointer ones, special and vector regs */
+  return NULL;
 #else
   return NULL;
 #endif


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]