From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19566 invoked by alias); 28 Nov 2007 16:20:19 -0000 Received: (qmail 19512 invoked by uid 9707); 28 Nov 2007 16:20:17 -0000 Date: Wed, 28 Nov 2007 16:20:00 -0000 Message-ID: <20071128162017.19496.qmail@sourceware.org> From: jflavio@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Merge branch 'master' of ssh://sources.redhat.com/git/frysk X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 73d248bf48736b4e48a0ea9cc006704c287df727 X-Git-Newrev: 0d030927ffff2842d7175af81a37b725c7842fc4 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: 2007-q4/txt/msg00481.txt.bz2 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 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 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 +2007-11-27 Jose Flavio Aguilar Paulino - * TestByteBuffer.java (testMemoryBufferCapacity()): Update; Add PPC - support and make it simpler. - -2007-11-22 Zhao shujing - - * 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 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 + + * 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 * 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 + + * cni/Ptrace.cxx: Add PowerPC single register bank access + (its size and parammeter to access register). + 2007-11-15 Andrew Cagney * 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