public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: frysk-sys/lib/unwind/ChangeLog
@ 2007-12-11 16:42 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2007-12-11 16:42 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  cdad0e3f634a6a4caac80c4732cba140b2d5280c (commit)
       via  3149b14ca3a78615c08ad4c5603a3b05df03bcea (commit)
       via  40dd9ec8cd83a0e03172e1503344d060f11cc399 (commit)
       via  2f480d4c7bb5fd5e1ea600405c44af996ef09c3e (commit)
      from  2c838b4e166d5faf1823a54aca4e69648ac4bab3 (commit)

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

- Log -----------------------------------------------------------------
commit cdad0e3f634a6a4caac80c4732cba140b2d5280c
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue Dec 11 11:42:01 2007 -0500

    frysk-sys/lib/unwind/ChangeLog
    
    2007-12-11  Andrew Cagney  <cagney@redhat.com>
    
    	* cni/UnwindH.hxx (getRegister): Delete stray printf.

commit 3149b14ca3a78615c08ad4c5603a3b05df03bcea
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue Dec 11 11:39:32 2007 -0500

    Fetch non-libunwind registers direct from the task; enable x86-64 tests.
    
    frysk-core/frysk/stack/ChangeLog
    2007-12-11  Andrew Cagney  <cagney@redhat.com>
    
    	* TestRegs.java (testFloatRegisters()): Delete.
    	(testVectorRegisters()): Delete.
    	* LibunwindFrame.java (getRegister(Register,long,int,byte[],int)):
    	When libunwind doesn't know a register, pass the request directly
    	to the task.
    	(setRegister(Register,long,int,byte[],int)): Ditto.

commit 40dd9ec8cd83a0e03172e1503344d060f11cc399
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue Dec 11 11:35:10 2007 -0500

    Add RegisterMap.containsKey methods; test.
    
    frysk-core/frysk/isa/ChangeLog
    2007-12-11  Andrew Cagney  <cagney@redhat.com>
    
    	* TestRegisterMap.java: New file.
    	* RegisterMap.java (containsKey(Register)): New.
    	(containsKey(Number)): New.
    	(containsKey(int)): New.

commit 2f480d4c7bb5fd5e1ea600405c44af996ef09c3e
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue Dec 11 11:05:20 2007 -0500

    Give some of libunwind's generated files explict dependencies.
    
    frysk-sys/ChangeLog
    2007-12-11  Andrew Cagney  <cagney@redhat.com>
    
    	* Makefile.am (lib/unwind/Unwind%.java)
    	(lib/unwind/cni/Unwind%.cxx): Add explict dependencies.

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

Summary of changes:
 frysk-core/frysk/isa/ChangeLog                     |    7 ++
 frysk-core/frysk/isa/RegisterMap.java              |   39 ++++++++
 .../isa/{TestISA.java => TestRegisterMap.java}     |   97 +++++++++++---------
 frysk-core/frysk/stack/ChangeLog                   |    9 ++
 frysk-core/frysk/stack/LibunwindFrame.java         |   28 ++++--
 frysk-core/frysk/stack/TestRegs.java               |   15 ---
 frysk-sys/ChangeLog                                |    5 +
 frysk-sys/Makefile.am                              |    4 +
 frysk-sys/lib/unwind/ChangeLog                     |    4 +
 frysk-sys/lib/unwind/cni/UnwindH.hxx               |    1 -
 10 files changed, 142 insertions(+), 67 deletions(-)
 copy frysk-core/frysk/isa/{TestISA.java => TestRegisterMap.java} (55%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/isa/ChangeLog b/frysk-core/frysk/isa/ChangeLog
index 4a83a10..289d224 100644
--- a/frysk-core/frysk/isa/ChangeLog
+++ b/frysk-core/frysk/isa/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-11  Andrew Cagney  <cagney@redhat.com>
+
+	* TestRegisterMap.java: New file.
+	* RegisterMap.java (containsKey(Register)): New.
+	(containsKey(Number)): New.
+	(containsKey(int)): New.
+	
 2007-12-05  Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
 
 	* TestISA.java: Correcting PowerPC32/64 isa expected strings.
diff --git a/frysk-core/frysk/isa/RegisterMap.java b/frysk-core/frysk/isa/RegisterMap.java
index 5b27c35..1a18748 100644
--- a/frysk-core/frysk/isa/RegisterMap.java
+++ b/frysk-core/frysk/isa/RegisterMap.java
@@ -45,6 +45,7 @@ import java.util.Map;
 /**
  * Provides a map between an internal and external register format.
  */
+
 public class RegisterMap {
     
     private final Map integerToRegister = new HashMap();
@@ -52,10 +53,17 @@ public class RegisterMap {
     private final Map numberToRegister = new HashMap();
     private final String what;
 
+    /**
+     * Create a register-to-number map.  WHAT defines what the map is
+     * about and is used when throwing exceptions.
+     */
     public RegisterMap(String what) {
 	this.what = what;
     }
     
+    /**
+     * Add the REGISTER-NUMBER mapping.
+     */
     public final RegisterMap add(Register register,
 				 Number number) {
 	registerToNumber.put(register, number);
@@ -64,6 +72,10 @@ public class RegisterMap {
 	return this;
     }
     
+    /**
+     * Find the NUMBER corresponding to REGISTER.  Use
+     * containsKey(Register) to verify that the mapping is present.
+     */
     public Number getRegisterNumber(Register register) {
 	Number number = (Number) registerToNumber.get(register);
 	if (number == null)
@@ -73,6 +85,10 @@ public class RegisterMap {
 	return number;
     }
     
+    /**
+     * Find the REGISTER corresponding to REG_NUM (as a Number).  Use
+     * containsKey(int) to verify that the mapping is present.
+     */
     public Register getRegister(int regNum) {
 	Register register
 	    = (Register) integerToRegister.get(new Integer(regNum));
@@ -83,6 +99,10 @@ public class RegisterMap {
 	return register;
     }
 
+    /**
+     * Find the REGISTER corresponding to NUMBER.  Use
+     * containsKey(Number) to verify that the mapping is present.
+     */
     public Register getRegister(Number number) {
 	Register register = (Register) numberToRegister.get(number);
 	if (register == null)
@@ -91,4 +111,23 @@ public class RegisterMap {
 					   + " register map");
 	return register;
     }
+
+    /**
+     * Return true if REGISTER is known.
+     */
+    public boolean containsKey(Register register) {
+	return registerToNumber.containsKey(register);
+    }
+    /**
+     * Return true if NUMBER is known.
+     */
+    public boolean containsKey(Number number) {
+	return numberToRegister.containsKey(number);
+    }
+    /**
+     * Return true if REG_NUM (as a Number) is known.
+     */
+    public boolean containsKey(int regNum) {
+	return integerToRegister.containsKey(new Integer(regNum));
+    }
 }
diff --git a/frysk-core/frysk/isa/TestISA.java b/frysk-core/frysk/isa/TestRegisterMap.java
similarity index 55%
copy from frysk-core/frysk/isa/TestISA.java
copy to frysk-core/frysk/isa/TestRegisterMap.java
index 739ce5b..42856f9 100644
--- a/frysk-core/frysk/isa/TestISA.java
+++ b/frysk-core/frysk/isa/TestRegisterMap.java
@@ -40,58 +40,71 @@
 package frysk.isa;
 
 import frysk.junit.TestCase;
-import frysk.Config;
 
 /**
- * Searchable, hashable key sufficient for identifying the supported
- * Instruction Set Architectures
- *
- * Client code, rather than extending this key should implement local
- * or more global structures indexed by this key.
+ * Test the mapping between registers and numbers.
  */
+public class TestRegisterMap extends TestCase {
+    private final RegisterMap map
+	= new RegisterMap("testing")
+	.add(IA32Registers.EAX, new Long(0))
+	.add(IA32Registers.EBX, new Long(1))
+	.add(IA32Registers.ECX, new Long(2))
+	.add(IA32Registers.EDX, new Long(3));
 
-public class TestISA extends TestCase {
-    public void testEquals() {
-	assertTrue("equals", ISA.IA32.equals(ISA.IA32));
-	assertFalse("!equals", ISA.IA32.equals(ISA.X8664));
+    public void testContainsRegister() {
+	assertEquals("contains EAX", true,
+		     map.containsKey(IA32Registers.EAX));
+	assertEquals("contains ESP", false,
+		     map.containsKey(IA32Registers.ESP));
     }
-    public void testToString() {
-	assertEquals("toString", 
-		     "32-bit big-endian PowerPC32BE",
-		     ISA.PPC32BE.toString());
-	assertEquals("toString",
-		     "64-bit big-endian PowerPC64BE",
-		     ISA.PPC64BE.toString());
+    public void testContainsNumber() {
+	assertEquals("contains 1", true, map.containsKey(new Long(1)));
+	assertEquals("contains 5", false, map.containsKey(new Long(4)));
+    }
+    public void testContainsInt() {
+	assertEquals("contains 1", true, map.containsKey(1));
+	assertEquals("contains 5", false, map.containsKey(4));
     }
-    public void testElfGet() {
-	assertSame("IA32 core", ISA.IA32,
-		   ElfMap.getISA(Config.getPkgDataFile("test-core-x86")));
-	assertSame("X8664 core", ISA.X8664,
-		   ElfMap.getISA(Config.getPkgDataFile("test-core-x8664")));
 
-	assertSame("IA32 exe", ISA.IA32,
-		   ElfMap.getISA(Config.getPkgDataFile("test-exe-x86")));
+    public void testRegisterToNumber() {
+	assertEquals("EAX to 0", new Long(0),
+		     map.getRegisterNumber(IA32Registers.EAX));
+    }
+    public void testNumberToRegister() {
+	assertEquals("1 to EBX", IA32Registers.EBX,
+		     map.getRegister(new Long(1)));
+    }
+    public void testIntToRegister() {
+	assertEquals("2 to ECX", IA32Registers.ECX, map.getRegister(2));
+		     
     }
-    public void testMappedIsa() {
-	ISAMap map = new ISAMap("good")
-	    .put(ISA.IA32, "ia32");
-	assertEquals("get", "ia32", (String)(map.get(ISA.IA32)));
-	assertTrue("containsKey", map.containsKey(ISA.IA32));
+
+    public void testNoSuchRegister() {
+	boolean npe = false;
+	try {
+	    map.getRegisterNumber(IA32Registers.ESP);
+	} catch (NullPointerException e) {
+	    npe = true;
+	}
+	assertTrue("npe", npe);
+    }
+    public void testNoSuchNumber() {
+	boolean npe = false;
+	try {
+	    map.getRegister(new Long(4));
+	} catch (NullPointerException e) {
+	    npe = true;
+	}
+	assertTrue("npe", npe);
     }
-    public void testUnmappedIsa() {
-	ISAMap map = new ISAMap("BAD")
-	    .put(ISA.IA32, "ia32");
-	assertFalse("containsKey", map.containsKey(ISA.X8664));
-	Object o = null;
-	RuntimeException e = null;
+    public void testNoSuchInt() {
+	boolean npe = false;
 	try {
-	    o = map.get(ISA.X8664);
-	} catch (RuntimeException r) {
-	    e = r;
+	    map.getRegister(4);
+	} catch (NullPointerException e) {
+	    npe = true;
 	}
-	assertNull("no result", o);
-	assertEquals("exception",
-		     "The "+ISA.X8664+" is not supported (required by BAD)",
-		     e.getMessage());
+	assertTrue("npe", npe);
     }
 }
diff --git a/frysk-core/frysk/stack/ChangeLog b/frysk-core/frysk/stack/ChangeLog
index fca7953..83886b7 100644
--- a/frysk-core/frysk/stack/ChangeLog
+++ b/frysk-core/frysk/stack/ChangeLog
@@ -1,3 +1,12 @@
+2007-12-11  Andrew Cagney  <cagney@redhat.com>
+
+	* TestRegs.java (testFloatRegisters()): Delete.
+	(testVectorRegisters()): Delete.
+	* LibunwindFrame.java (getRegister(Register,long,int,byte[],int)):
+	When libunwind doesn't know a register, pass the request directly
+	to the task.
+	(setRegister(Register,long,int,byte[],int)): Ditto.
+
 2007-12-10  Andrew Cagney  <cagney@redhat.com>
 
 	* LibunwindRegisterMapFactory.java (IA32): Add XMM registers.
diff --git a/frysk-core/frysk/stack/LibunwindFrame.java b/frysk-core/frysk/stack/LibunwindFrame.java
index 1495aa5..6327cf0 100644
--- a/frysk-core/frysk/stack/LibunwindFrame.java
+++ b/frysk-core/frysk/stack/LibunwindFrame.java
@@ -102,19 +102,29 @@ class LibunwindFrame extends Frame
   
     public void getRegister(Register register, long offset, int length,
 			    byte[] bytes, int start) {
-	Number number = registerMap.getRegisterNumber(register);
-	logger.log(Level.FINE, "{0}: getRegister register: {1} ({2})\n",
-		   new Object[] { this, register, number });
-	cursor.getRegister(number, offset, length, bytes, start);
+	if (registerMap.containsKey(register)) {
+	    Number number = registerMap.getRegisterNumber(register);
+	    logger.log(Level.FINE, "{0}: getRegister register: {1} ({2})\n",
+		       new Object[] { this, register, number });
+	    cursor.getRegister(number, offset, length, bytes, start);
+	} else {
+	    getTask().access(register, (int)offset, length, bytes, start,
+			     false);
+	}
     }
   
     public void setRegister(Register register, long offset, int length,
 			    byte[] bytes, int start) {
-	Number number = registerMap.getRegisterNumber(register);
-	logger.log(Level.FINE, "{0}: getRegister register: {1} ({2})\n",
-		   new Object[] { this, register, number });
-	cursor.setRegister(registerMap.getRegisterNumber(register),
-			   offset, length, bytes, start);
+	if (registerMap.containsKey(register)) {
+	    Number number = registerMap.getRegisterNumber(register);
+	    logger.log(Level.FINE, "{0}: getRegister register: {1} ({2})\n",
+		       new Object[] { this, register, number });
+	    cursor.setRegister(registerMap.getRegisterNumber(register),
+			       offset, length, bytes, start);
+	} else {
+	    getTask().access(register, (int)offset, length, bytes, start,
+			     true);
+	}
     }
   
     /**
diff --git a/frysk-core/frysk/stack/TestRegs.java b/frysk-core/frysk/stack/TestRegs.java
index 415ebd4..d9c1d0c 100644
--- a/frysk-core/frysk/stack/TestRegs.java
+++ b/frysk-core/frysk/stack/TestRegs.java
@@ -39,7 +39,6 @@
 
 package frysk.stack;
 
-import frysk.isa.ISA;
 import frysk.isa.Register;
 import frysk.testbed.RegsCase;
 
@@ -66,18 +65,4 @@ public class TestRegs extends RegsCase {
     public long getRegister(Object task, Register register) {
 	return frame.getRegister(register);
     }
-
-    // XXX: Delete this once the unresolved cases are fixed.
-    public void testFloatRegisters() {
-	if (isa() == ISA.X8664 && unresolved(5195))
-	    return;
-	super.testFloatRegisters();
-    }
-
-    // XXX: Delete this once the unresolved cases are fixed.
-    public void testVectorRegisters() {
-        if (isa() == ISA.X8664 && unresolved(5195))
-            return;
-	super.testVectorRegisters();
-    }
 }
diff --git a/frysk-sys/ChangeLog b/frysk-sys/ChangeLog
index 9d768c4..eb3f2b2 100644
--- a/frysk-sys/ChangeLog
+++ b/frysk-sys/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-11  Andrew Cagney  <cagney@redhat.com>
+
+	* Makefile.am (lib/unwind/Unwind%.java)
+	(lib/unwind/cni/Unwind%.cxx): Add explict dependencies.
+
 2007-11-13  Jose Flavio Aguilar Paulino <jflavio@br.ibm.com>
 
         * Makefile.am: Add libunwind-ppc32 to gcj linker dependencies.
diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am
index d7f8aca..03cbe01 100644
--- a/frysk-sys/Makefile.am
+++ b/frysk-sys/Makefile.am
@@ -66,3 +66,7 @@ GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a
                  ../frysk-imports/libunwind-ppc64/src/.libs/libunwind-ppc64.a
 endif
 GEN_GCJ_LDADD_LIST += -lstdc++ -laudit
+\f
+# Force a few dependencies
+lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx
+lib/unwind/Unwind%.java: lib/unwind/Unwind.java
diff --git a/frysk-sys/lib/unwind/ChangeLog b/frysk-sys/lib/unwind/ChangeLog
index 933bca8..bf3bbed 100644
--- a/frysk-sys/lib/unwind/ChangeLog
+++ b/frysk-sys/lib/unwind/ChangeLog
@@ -1,3 +1,7 @@
+2007-12-11  Andrew Cagney  <cagney@redhat.com>
+
+	* cni/UnwindH.hxx (getRegister): Delete stray printf.
+
 2007-12-11  Mark Wielaard  <mwielaard@redhat.com>
 
 	* ElfImage.java (name): New field.
diff --git a/frysk-sys/lib/unwind/cni/UnwindH.hxx b/frysk-sys/lib/unwind/cni/UnwindH.hxx
index 64890f5..7dbcf7b 100644
--- a/frysk-sys/lib/unwind/cni/UnwindH.hxx
+++ b/frysk-sys/lib/unwind/cni/UnwindH.hxx
@@ -313,7 +313,6 @@ lib::unwind::TARGET::getRegister(gnu::gcj::RawDataManaged* cursor,
     status = unw_get_reg((::unw_cursor_t *) cursor,
 			 (::unw_regnum_t) regNum,
 			 &word.w);
-  printf("status=%d\n", status);
   if (status != 0)
     throwRuntimeException("get register failed");
   memcpy(elements(bytes) + start, (uint8_t*)&word + offset, length);


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


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

only message in thread, other threads:[~2007-12-11 16:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-12-11 16:42 [SCM] master: frysk-sys/lib/unwind/ChangeLog cagney

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