From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8456 invoked by alias); 11 Dec 2007 16:42:33 -0000 Received: (qmail 8406 invoked by uid 367); 11 Dec 2007 16:42:31 -0000 Date: Tue, 11 Dec 2007 16:42:00 -0000 Message-ID: <20071211164231.8391.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: frysk-sys/lib/unwind/ChangeLog X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 2c838b4e166d5faf1823a54aca4e69648ac4bab3 X-Git-Newrev: cdad0e3f634a6a4caac80c4732cba140b2d5280c 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/msg00566.txt.bz2 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 Date: Tue Dec 11 11:42:01 2007 -0500 frysk-sys/lib/unwind/ChangeLog 2007-12-11 Andrew Cagney * cni/UnwindH.hxx (getRegister): Delete stray printf. commit 3149b14ca3a78615c08ad4c5603a3b05df03bcea Author: Andrew Cagney 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 * 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 Date: Tue Dec 11 11:35:10 2007 -0500 Add RegisterMap.containsKey methods; test. frysk-core/frysk/isa/ChangeLog 2007-12-11 Andrew Cagney * TestRegisterMap.java: New file. * RegisterMap.java (containsKey(Register)): New. (containsKey(Number)): New. (containsKey(int)): New. commit 2f480d4c7bb5fd5e1ea600405c44af996ef09c3e Author: Andrew Cagney 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 * 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 + + * TestRegisterMap.java: New file. + * RegisterMap.java (containsKey(Register)): New. + (containsKey(Number)): New. + (containsKey(int)): New. + 2007-12-05 Jose Flavio Aguilar Paulino * 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 + + * 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 * 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 + + * Makefile.am (lib/unwind/Unwind%.java) + (lib/unwind/cni/Unwind%.cxx): Add explict dependencies. + 2007-11-13 Jose Flavio Aguilar Paulino * 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 + +# 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 + + * cni/UnwindH.hxx (getRegister): Delete stray printf. + 2007-12-11 Mark Wielaard * 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