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: Rewrite Corefile FP note writing for PPC32/64.


The branch, master has been updated
       via  1d1338d115a70655940f94a009d401afeb86ea0b (commit)
      from  70fa8f890eed8bbf43198163308160eab1a2451d (commit)

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

- Log -----------------------------------------------------------------
commit 1d1338d115a70655940f94a009d401afeb86ea0b
Author: Phil Muldoon <pmuldoon@redhat.com>
Date:   Thu Jan 24 18:15:23 2008 +0000

    Rewrite Corefile FP note writing for PPC32/64.
    
    2008-01-24  Phil Muldoon  <pmuldoon@redhat.com>
    
            * PPC32LinuxElfCorefile.java (writeNoteFPRegset): Rewrite using
            BankRegisters to form bank.
            * PPC64LinuxElfCorefile.java (writeNoteFPRegset): Ditto.

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

Summary of changes:
 frysk-core/frysk/util/ChangeLog                  |    6 ++
 frysk-core/frysk/util/PPC32LinuxElfCorefile.java |   29 +++++++++
 frysk-core/frysk/util/PPC64LinuxElfCorefile.java |   71 +++++++++-------------
 3 files changed, 65 insertions(+), 41 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/util/ChangeLog b/frysk-core/frysk/util/ChangeLog
index bfd3171..6c4300c 100644
--- a/frysk-core/frysk/util/ChangeLog
+++ b/frysk-core/frysk/util/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-24  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* PPC32LinuxElfCorefile.java (writeNoteFPRegset): Rewrite using
+	BankRegisters to form bank.
+	* PPC64LinuxElfCorefile.java (writeNoteFPRegset): Ditto.
+
 2008-01-24  Andrew Cagney  <cagney@redhat.com>
 
 	* IA32LinuxElfCorefile.java: Update; RegisterBank moved to
diff --git a/frysk-core/frysk/util/PPC32LinuxElfCorefile.java b/frysk-core/frysk/util/PPC32LinuxElfCorefile.java
index fec155f..e5dc38d 100644
--- a/frysk-core/frysk/util/PPC32LinuxElfCorefile.java
+++ b/frysk-core/frysk/util/PPC32LinuxElfCorefile.java
@@ -43,6 +43,9 @@
 
 package frysk.util;
 
+import java.util.Iterator;
+
+import inua.eio.ArrayByteBuffer;
 import inua.eio.ByteBuffer;
 import lib.dwfl.ElfEHeader;
 import lib.dwfl.ElfEMachine;
@@ -54,6 +57,8 @@ import lib.dwfl.ElfPrpsinfo;
 import lib.dwfl.ElfPrstatus;
 import frysk.isa.PPC32Registers;
 import frysk.isa.Register;
+import frysk.isa.banks.BankRegister;
+import frysk.isa.banks.LinuxPPCRegisterBanks;
 import frysk.proc.Proc;
 import frysk.proc.Task;
 import frysk.sys.proc.AuxvBuilder;
@@ -243,6 +248,30 @@ public class PPC32LinuxElfCorefile extends LinuxElfCorefile {
          *      frysk.proc.Task)
          */
     protected void writeNoteFPRegset(ElfNhdr nhdrEntry, Task task) {
+	
+   	ElfPrFPRegSet xfpRegSet = new ElfPrFPRegSet();
+	
+    	final int bankSize = 260;
+    	final int maxRegSize = 8;
+    	byte[] scratch = new byte[maxRegSize];
+    	byte[] byteOrderedRegister= new byte[bankSize];
+    	ArrayByteBuffer byteOrderedBuffer = new ArrayByteBuffer(byteOrderedRegister);
+    	
+    	Iterator registerIterator =  LinuxPPCRegisterBanks.FPREGS32.entryIterator();
+    	while (registerIterator.hasNext()) {
+	    BankRegister bankRegister = ((BankRegister)registerIterator.next());
+	    Register register = bankRegister.getRegister();
+	    task.access(register, 0, register.getType().getSize(), scratch, 0, false);
+	    bankRegister.access(byteOrderedBuffer, 0, maxRegSize, scratch, 0, true);
+    	}
+	
+    	byteOrderedBuffer.get(byteOrderedRegister);
+	
+    	xfpRegSet.setFPRegisterBuffer(byteOrderedRegister);
+	
+    	// Write it
+    	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, xfpRegSet);
+
 	ElfPrFPRegSet fpRegSet = new ElfPrFPRegSet();
 
 	// Write FP Register info over wholesae. Do not interpret.
diff --git a/frysk-core/frysk/util/PPC64LinuxElfCorefile.java b/frysk-core/frysk/util/PPC64LinuxElfCorefile.java
index df6b20b..c438b91 100644
--- a/frysk-core/frysk/util/PPC64LinuxElfCorefile.java
+++ b/frysk-core/frysk/util/PPC64LinuxElfCorefile.java
@@ -43,6 +43,10 @@
 
 package frysk.util;
 
+import inua.eio.ArrayByteBuffer;
+
+import java.util.Iterator;
+
 import lib.dwfl.ElfEHeader;
 import lib.dwfl.ElfEMachine;
 import lib.dwfl.ElfNhdr;
@@ -53,6 +57,8 @@ import lib.dwfl.ElfPrpsinfo;
 import lib.dwfl.ElfPrstatus;
 import frysk.isa.PPC64Registers;
 import frysk.isa.Register;
+import frysk.isa.banks.BankRegister;
+import frysk.isa.banks.LinuxPPCRegisterBanks;
 import frysk.proc.Proc;
 import frysk.proc.Task;
 import frysk.sys.proc.AuxvBuilder;
@@ -244,48 +250,31 @@ public class PPC64LinuxElfCorefile extends LinuxElfCorefile {
          */
     protected void writeNoteFPRegset(ElfNhdr nhdrEntry, Task task) {
 
-        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;
-        }
-
-	// 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 FP Register info over wholesae. Do not interpret.
-        fpRegSet.setFPRegisterBuffer(regBuffer);
+	
+   	ElfPrFPRegSet xfpRegSet = new ElfPrFPRegSet();
+	
+    	final int bankSize = 260;
+    	final int maxRegSize = 8;
+    	byte[] scratch = new byte[maxRegSize];
+    	byte[] byteOrderedRegister= new byte[bankSize];
+    	ArrayByteBuffer byteOrderedBuffer = new ArrayByteBuffer(byteOrderedRegister);
+    	
+    	Iterator registerIterator =  LinuxPPCRegisterBanks.FPREGS64.entryIterator();
+    	while (registerIterator.hasNext()) {
+	    BankRegister bankRegister = ((BankRegister)registerIterator.next());
+	    Register register = bankRegister.getRegister();
+	    task.access(register, 0, register.getType().getSize(), scratch, 0, false);
+	    bankRegister.access(byteOrderedBuffer, 0, maxRegSize, scratch, 0, true);
+    	}
+	
+    	byteOrderedBuffer.get(byteOrderedRegister);
+	
+    	xfpRegSet.setFPRegisterBuffer(byteOrderedRegister);
+	
+    	// Write it
+    	nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, xfpRegSet);
 
-        // Write it
-        nhdrEntry.setNhdrDesc(ElfNhdrType.NT_FPREGSET, fpRegSet);
+        
    }
 
     /*F(non-Javadoc)


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]