public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Rewrite Corefile FP note writing for PPC32/64.
@ 2008-01-24 18:15 pmuldoon
  0 siblings, 0 replies; only message in thread
From: pmuldoon @ 2008-01-24 18:15 UTC (permalink / raw)
  To: frysk-cvs

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-01-24 18:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-24 18:15 [SCM] master: Rewrite Corefile FP note writing for PPC32/64 pmuldoon

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).