From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21973 invoked by alias); 7 Dec 2007 22:11:41 -0000 Received: (qmail 21943 invoked by uid 9561); 7 Dec 2007 22:11:40 -0000 Date: Fri, 07 Dec 2007 22:11:00 -0000 Message-ID: <20071207221140.21928.qmail@sourceware.org> From: swagiaal@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: swagiaal: Tested DwarfDie.getOffset. Implmented and tested DwarfDie.getDieByOffset(). X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: f58119c5647ea4f0fde832a9bb080227926a52db X-Git-Newrev: 36cff033d7840d1968d9952a44486abbe3b26b3f 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/msg00546.txt.bz2 The branch, master has been updated via 36cff033d7840d1968d9952a44486abbe3b26b3f (commit) via d44d1d4b37527e6af661a2e59db675f5a146b01c (commit) from f58119c5647ea4f0fde832a9bb080227926a52db (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 36cff033d7840d1968d9952a44486abbe3b26b3f Author: Sami Wagiaalla Date: Fri Dec 7 16:32:06 2007 -0500 swagiaal: Tested DwarfDie.getOffset. Implmented and tested DwarfDie.getDieByOffset(). frysk-sys/lib/dwfl/ChangeLog +2007-12-07 Sami Wagiaalla + + * DwflModule.java (getDieByOffset): New function + * cni/DwflModule.cxx (DwflModule::offdie): New function. + * TestDwarfDie.java (testGetOffset): New test. + commit d44d1d4b37527e6af661a2e59db675f5a146b01c Author: Sami Wagiaalla Date: Fri Dec 7 12:00:23 2007 -0500 swagiaal: DwarfDie.getOffset() now returns long instead of int. frysk-core/frysk/debuginfo/ChangeLog +2007-12-07 Sami Wagiaalla + + DwarfDie.getOffset() now returns long. + * TypeEntry.java: Updated. + frysk-sys/lib/dwfl/ChangeLog +2007-12-07 Sami Wagiaalla + + * DwarfDie.java (getOffset): Now returns long. + * cni/DwarfDie.cxx: Updated. + ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/debuginfo/ChangeLog | 5 +++++ frysk-core/frysk/debuginfo/TypeEntry.java | 8 ++++---- frysk-sys/lib/dwfl/ChangeLog | 11 +++++++++++ frysk-sys/lib/dwfl/DwarfDie.java | 4 ++-- frysk-sys/lib/dwfl/DwflModule.java | 8 +++++++- frysk-sys/lib/dwfl/TestDwarfDie.java | 24 ++++++++++++++++++++++++ frysk-sys/lib/dwfl/cni/DwarfDie.cxx | 4 ++-- frysk-sys/lib/dwfl/cni/DwflModule.cxx | 16 ++++++++++++++++ 8 files changed, 71 insertions(+), 9 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog index 82bb3b9..4cea696 100644 --- a/frysk-core/frysk/debuginfo/ChangeLog +++ b/frysk-core/frysk/debuginfo/ChangeLog @@ -1,3 +1,8 @@ +2007-12-07 Sami Wagiaalla + + DwarfDie.getOffset() now returns long. + * TypeEntry.java: Updated. + 2007-12-05 Stan Cox * gen-type-expect-tests.py (j.start_test): Use splitext instead of split diff --git a/frysk-core/frysk/debuginfo/TypeEntry.java b/frysk-core/frysk/debuginfo/TypeEntry.java index 5aac115..4e0567f 100644 --- a/frysk-core/frysk/debuginfo/TypeEntry.java +++ b/frysk-core/frysk/debuginfo/TypeEntry.java @@ -342,16 +342,16 @@ public class TypeEntry else type = typeDie; - Type mappedType = (Type)dieHash.get(new Integer(type.getOffset())); + Type mappedType = (Type)dieHash.get(new Long(type.getOffset())); if (mappedType != null) return mappedType; - else if (dieHash.containsKey(new Integer(type.getOffset()))) { + else if (dieHash.containsKey(new Long(type.getOffset()))) { // ??? will this always be a pointer to ourselves? // Instead of VoidType, we need a way to reference ourselves return new PointerType("", byteorder, getByteSize(type), new VoidType()); } - dieHash.put(new Integer(type.getOffset()), null); + dieHash.put(new Long(type.getOffset()), null); Type returnType = null; switch (type.getTag().hashCode()) { @@ -434,7 +434,7 @@ public class TypeEntry } if (returnType != null) { - dieHash.put(new Integer(type.getOffset()), returnType); + dieHash.put(new Long(type.getOffset()), returnType); return returnType; } else diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog index 4806cc3..9a6434c 100644 --- a/frysk-sys/lib/dwfl/ChangeLog +++ b/frysk-sys/lib/dwfl/ChangeLog @@ -1,3 +1,14 @@ +2007-12-07 Sami Wagiaalla + + * DwflModule.java (getDieByOffset): New function + * cni/DwflModule.cxx (DwflModule::offdie): New function. + * TestDwarfDie.java (testGetOffset): New test. + +2007-12-07 Sami Wagiaalla + + * DwarfDie.java (getOffset): Now returns long. + * cni/DwarfDie.cxx: Updated. + 2007-12-05 Sami Wagiaalla * TestDwarfDie.java (testGetModule): New Test. diff --git a/frysk-sys/lib/dwfl/DwarfDie.java b/frysk-sys/lib/dwfl/DwarfDie.java index 909fad7..1345417 100644 --- a/frysk-sys/lib/dwfl/DwarfDie.java +++ b/frysk-sys/lib/dwfl/DwarfDie.java @@ -261,7 +261,7 @@ abstract public class DwarfDie { /** * @return The offset for this die. */ - public int getOffset() { + public long getOffset() { return get_offset(this.getPointer()); } @@ -436,7 +436,7 @@ abstract public class DwarfDie { private native int get_attr_constant (long addr, int attr); - private native int get_offset (long addr); + private native long get_offset (long addr); // Package access for DwarfDieFactory static native int get_tag (long var_die); diff --git a/frysk-sys/lib/dwfl/DwflModule.java b/frysk-sys/lib/dwfl/DwflModule.java index def4304..6ddf2c1 100644 --- a/frysk-sys/lib/dwfl/DwflModule.java +++ b/frysk-sys/lib/dwfl/DwflModule.java @@ -91,9 +91,15 @@ public class DwflModule } return pubNames; } - private native void get_pubnames(); + + protected DwarfDie getDieByOffset(long offset){ + return offdie(this.getPointer(), offset); + } + private native DwarfDie offdie(long die, long offset); + + /** * Get the name of the module. * diff --git a/frysk-sys/lib/dwfl/TestDwarfDie.java b/frysk-sys/lib/dwfl/TestDwarfDie.java index ed2049c..cc5832e 100644 --- a/frysk-sys/lib/dwfl/TestDwarfDie.java +++ b/frysk-sys/lib/dwfl/TestDwarfDie.java @@ -101,4 +101,28 @@ public class TestDwarfDie extends TestCase { assertTrue("Found correct module", dwflModule.getName().contains("TestRunner")); } + public void testGetOffset(){ + + Dwfl dwfl = new Dwfl(Pid.get()); + assertNotNull(dwfl); + long addr = LocalMemory.getCodeAddr(); + + DwarfDie cuDie = dwfl.getCompilationUnit(addr).die; + assertNotNull(cuDie); + + DwarfDie die = cuDie.getScopes(addr)[0]; + + long offset = die.getOffset(); + + DwarfDie retrievedDie = die.getModule().getDieByOffset(offset); + assertNotNull(retrievedDie); + + assertEquals("dies have the same name", die.getName(), retrievedDie.getName()); + assertEquals("dies have the same tag", die.getTag(), retrievedDie.getTag()); + + die = retrievedDie; + + } + + } diff --git a/frysk-sys/lib/dwfl/cni/DwarfDie.cxx b/frysk-sys/lib/dwfl/cni/DwarfDie.cxx index 810882e..fc57d12 100644 --- a/frysk-sys/lib/dwfl/cni/DwarfDie.cxx +++ b/frysk-sys/lib/dwfl/cni/DwarfDie.cxx @@ -429,11 +429,11 @@ lib::dwfl::DwarfDie::get_attr_constant (jlong die_p, jint attr) return -1; } -jint +jlong lib::dwfl::DwarfDie::get_offset (jlong var_die) { Dwarf_Die *die = (Dwarf_Die*) var_die; - return (jint)dwarf_dieoffset(die); + return (jlong)dwarf_dieoffset(die); } void diff --git a/frysk-sys/lib/dwfl/cni/DwflModule.cxx b/frysk-sys/lib/dwfl/cni/DwflModule.cxx index 515632e..5cfdd09 100644 --- a/frysk-sys/lib/dwfl/cni/DwflModule.cxx +++ b/frysk-sys/lib/dwfl/cni/DwflModule.cxx @@ -233,3 +233,19 @@ lib::dwfl::DwflModule::get_pubnames() dwarf_getpubnames(dwarf, callback, this,0); } + +lib::dwfl::DwarfDie* +lib::dwfl::DwflModule::offdie(jlong die, jlong offset){ + + Dwarf_Addr bias; + Dwarf_Off dwarf_offset = (Dwarf_Off)offset; + Dwarf_Die* dwarf_die = (Dwarf_Die*)JvMalloc(sizeof(Dwarf_Die)); + + ::Dwarf* dbg = dwfl_module_getdwarf ((Dwfl_Module*)this->getPointer(), &bias); + + dwarf_offdie (dbg, dwarf_offset, dwarf_die); + + lib::dwfl::DwarfDie* dwarfDie = this->parent->factory->makeDie((jlong)dwarf_die, this); + + return dwarfDie; +} hooks/post-receive -- frysk system monitor/debugger