This is the mail archive of the
frysk-cvs@sources.redhat.com
mailing list for the frysk project.
[SCM] master: Rewrite Corefile FP note writing for PPC32/64.
- From: pmuldoon at sourceware dot org
- To: frysk-cvs at sourceware dot org
- Date: 24 Jan 2008 18:15:31 -0000
- Subject: [SCM] master: Rewrite Corefile FP note writing for PPC32/64.
- Reply-to: frysk at sourceware dot org
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