[SCM] master: Fix libunwind's binding to use a buffer big enough to fit an FP reg.

cagney@sourceware.org cagney@sourceware.org
Mon Dec 10 19:01:00 GMT 2007


The branch, master has been updated
       via  031d8a4db7053c83ff030b44732c545ac0fb4a7c (commit)
      from  30d73c0d378db568f8f3c3f0a8f0ec8c9d2650f1 (commit)

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

- Log -----------------------------------------------------------------
commit 031d8a4db7053c83ff030b44732c545ac0fb4a7c
Author: Andrew Cagney <cagney@toil.yyz.redhat.com>
Date:   Mon Dec 10 14:00:47 2007 -0500

    Fix libunwind's binding to use a buffer big enough to fit an FP reg.
    
    frysk-core/frysk/stack/ChangeLog
    2007-12-10  Andrew Cagney  <cagney@redhat.com>
    
    	* TestRegs.java (testFloatRegisters()): Enable on IA-32.
    	* LibunwindAddressSpace.java (accessReg(Number,byte[],boolean)):
    	Limit the transfer size to the register's size.
    
    frysk-sys/lib/unwind/ChangeLog
    2007-12-10  Andrew Cagney  <cagney@redhat.com>
    
    	* cni/UnwindH.hxx (access_fpreg): Allocate a buffer big enough for
    	unw_fpreg_t.

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

Summary of changes:
 frysk-core/frysk/stack/ChangeLog                  |    6 ++++++
 frysk-core/frysk/stack/LibunwindAddressSpace.java |   11 ++++++++++-
 frysk-core/frysk/stack/TestRegs.java              |    6 +++---
 frysk-sys/lib/unwind/ChangeLog                    |    5 +++++
 frysk-sys/lib/unwind/cni/UnwindH.hxx              |    2 +-
 5 files changed, 25 insertions(+), 5 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/stack/ChangeLog b/frysk-core/frysk/stack/ChangeLog
index 9656b93..cf5f5d6 100644
--- a/frysk-core/frysk/stack/ChangeLog
+++ b/frysk-core/frysk/stack/ChangeLog
@@ -1,3 +1,9 @@
+2007-12-10  Andrew Cagney  <cagney@redhat.com>
+
+	* TestRegs.java (testFloatRegisters()): Enable on IA-32.
+	* LibunwindAddressSpace.java (accessReg(Number,byte[],boolean)):
+	Limit the transfer size to the register's size.
+
 2007-12-03  Andrew Cagney  <cagney@redhat.com>
 
 	* LibunwindFrame.java: Revert <<Get CFA from cursor>>; add more
diff --git a/frysk-core/frysk/stack/LibunwindAddressSpace.java b/frysk-core/frysk/stack/LibunwindAddressSpace.java
index 5369fd5..ef2cf1e 100644
--- a/frysk-core/frysk/stack/LibunwindAddressSpace.java
+++ b/frysk-core/frysk/stack/LibunwindAddressSpace.java
@@ -104,7 +104,16 @@ class LibunwindAddressSpace extends AddressSpace {
 
     public int accessReg (Number regnum, byte[] fpvalp, boolean write) {
 	Register register = registerMap.getRegister(regnum);
-	task.access(register, 0, fpvalp.length, fpvalp, 0, write);
+	int length;
+	// Truncate transfer to size-of-register.
+	if (fpvalp.length > register.getType().getSize())
+	    length = register.getType().getSize();
+	else
+	    length = fpvalp.length;
+	logger.log(Level.FINE, "{0}: accessReg {1} ({2}), {3} bytes\n",
+		   new Object[] { this, regnum, register,
+				  new Integer(length) });
+	task.access(register, 0, length, fpvalp, 0, write);
 	return 0;
     }
 
diff --git a/frysk-core/frysk/stack/TestRegs.java b/frysk-core/frysk/stack/TestRegs.java
index c249801..3a00ffc 100644
--- a/frysk-core/frysk/stack/TestRegs.java
+++ b/frysk-core/frysk/stack/TestRegs.java
@@ -69,10 +69,10 @@ public class TestRegs extends RegsCase {
 
     // XXX: Delete this once the unresolved cases are fixed.
     public void testFloatRegisters() {
-	if (isa() == ISA.IA32 && unresolved(4911))
+// 	if (isa() == ISA.IA32 && unresolved(4911))
+// 	    return;
+	if (isa() == ISA.X8664 && unresolved(5195))
 	    return;
-        if (isa() == ISA.X8664 && unresolved(5195))
-            return;
 	super.testFloatRegisters();
     }
 
diff --git a/frysk-sys/lib/unwind/ChangeLog b/frysk-sys/lib/unwind/ChangeLog
index 8ade7ea..1078b4a 100644
--- a/frysk-sys/lib/unwind/ChangeLog
+++ b/frysk-sys/lib/unwind/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-10  Andrew Cagney  <cagney@redhat.com>
+
+	* cni/UnwindH.hxx (access_fpreg): Allocate a buffer big enough for
+	unw_fpreg_t.
+
 2007-12-03  Mark Wielaard  <mwielaard@redhat.com>
 
 	* Cursor.java (getCFA): New method.
diff --git a/frysk-sys/lib/unwind/cni/UnwindH.hxx b/frysk-sys/lib/unwind/cni/UnwindH.hxx
index 4b59aa5..1d13156 100644
--- a/frysk-sys/lib/unwind/cni/UnwindH.hxx
+++ b/frysk-sys/lib/unwind/cni/UnwindH.hxx
@@ -167,7 +167,7 @@ static int
 access_fpreg(::unw_addr_space_t as, ::unw_regnum_t regnum,
 	     ::unw_fpreg_t *fpvalp, int write, void *arg)
 {
-  jbyteArray tmp = JvNewByteArray(sizeof (unw_word_t));
+  jbyteArray tmp = JvNewByteArray(sizeof (unw_fpreg_t));
   // Map the REGNUM back to the published ENUM.
   java::lang::Number* num = lib::unwind::TARGET_REGISTERS::valueOf(regnum);
   // Implement read/modify/write style op.


hooks/post-receive
--
frysk system monitor/debugger



More information about the Frysk-cvs mailing list