From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23183 invoked by alias); 24 Jan 2008 18:15:34 -0000 Received: (qmail 23153 invoked by uid 9514); 24 Jan 2008 18:15:31 -0000 Date: Thu, 24 Jan 2008 18:15:00 -0000 Message-ID: <20080124181531.23137.qmail@sourceware.org> From: pmuldoon@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Rewrite Corefile FP note writing for PPC32/64. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 70fa8f890eed8bbf43198163308160eab1a2451d X-Git-Newrev: 1d1338d115a70655940f94a009d401afeb86ea0b Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q1/txt/msg00112.txt.bz2 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 Date: Thu Jan 24 18:15:23 2008 +0000 Rewrite Corefile FP note writing for PPC32/64. 2008-01-24 Phil Muldoon * 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 + + * PPC32LinuxElfCorefile.java (writeNoteFPRegset): Rewrite using + BankRegisters to form bank. + * PPC64LinuxElfCorefile.java (writeNoteFPRegset): Ditto. + 2008-01-24 Andrew Cagney * 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