From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12639 invoked by alias); 22 Nov 2007 20:59:00 -0000 Received: (qmail 12614 invoked by uid 9561); 22 Nov 2007 20:59:00 -0000 Date: Thu, 22 Nov 2007 20:59:00 -0000 Message-ID: <20071122205859.12596.qmail@sourceware.org> From: swagiaal@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: swagiaal: test case and support for static data members. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 23d35ae52512823d608fb46136564301948b5fe1 X-Git-Newrev: a60c7c85cd7f5f4e570350c196d52e23381f335b 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/msg00435.txt.bz2 The branch, master has been updated via a60c7c85cd7f5f4e570350c196d52e23381f335b (commit) from 23d35ae52512823d608fb46136564301948b5fe1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit a60c7c85cd7f5f4e570350c196d52e23381f335b Author: Sami Wagiaalla Date: Thu Nov 22 15:34:53 2007 -0500 swagiaal: test case and support for static data members. frysk-core/frysk/debuginfo/ChangeLog +2007-11-22 Sami Wagiaalla + + * TestTypeEntry.java (testClassWithStaticMembers): Added test for static + and dynamic data members and member functions. + (getGccStructOrClassType): Added Check for static data members. + frysk-core/frysk/value/ChangeLog +2007-11-22 Sami Wagiaalla + + * CompositeType.java (addStaticMember): New overloaded functions. + ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/debuginfo/ChangeLog | 6 +++ frysk-core/frysk/debuginfo/TestTypeEntry.java | 41 ++++++++++----------- frysk-core/frysk/debuginfo/TypeEntry.java | 49 ++++++++++++++++++------- frysk-core/frysk/value/ChangeLog | 4 ++ frysk-core/frysk/value/CompositeType.java | 13 +++++-- 5 files changed, 75 insertions(+), 38 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog index 728e5bb..33d0db3 100644 --- a/frysk-core/frysk/debuginfo/ChangeLog +++ b/frysk-core/frysk/debuginfo/ChangeLog @@ -1,3 +1,9 @@ +2007-11-22 Sami Wagiaalla + + * TestTypeEntry.java (testClassWithStaticMembers): Added test for static + and dynamic data members and member functions. + (getGccStructOrClassType): Added Check for static data members. + 2007-11-22 Andrew Cagney * gen-type-expect-tests.py: Do not import "subprocess". diff --git a/frysk-core/frysk/debuginfo/TestTypeEntry.java b/frysk-core/frysk/debuginfo/TestTypeEntry.java index b02a08c..95f85e6 100644 --- a/frysk-core/frysk/debuginfo/TestTypeEntry.java +++ b/frysk-core/frysk/debuginfo/TestTypeEntry.java @@ -53,7 +53,9 @@ import frysk.testbed.DaemonBlockedAtSignal; import frysk.testbed.TestLib; import frysk.value.CompositeType; import frysk.value.Type; +import frysk.value.CompositeType.DynamicMember; import frysk.value.CompositeType.Member; +import frysk.value.CompositeType.StaticMember; public class TestTypeEntry extends TestLib @@ -260,29 +262,24 @@ public class TestTypeEntry Iterator iterator = compositeType.iterator(); while(iterator.hasNext()){ - System.out.println("TestTypeEntry.testClassWithStaticMembers() " + ((Member)iterator.next()).getName() + "\n"); + Member member = (Member) iterator.next(); + + if(member.getName().equals("i")){ + assertTrue("Member " + member.getName() + " has the correct class", member instanceof DynamicMember); + } + + if(member.getName().equals("static_i")){ + assertTrue("Member " + member.getName() + " has the correct class", member instanceof StaticMember); + } + + if(member.getName().equals("crash")){ + assertTrue("Member " + member.getName() + " has the correct class", member instanceof DynamicMember); + } + + if(member.getName().equals("static_crash")){ + assertTrue("Member " + member.getName() + " has the correct class", member instanceof StaticMember); + } } - - assertTrue(false); - -// Dwfl dwfl; -// DwarfDie[] allDies; -// Type varType; -// DwarfDie varDie; -// long pc = frame.getAdjustedAddress(); -// dwfl = DwflCache.getDwfl(frame.getTask()); -// DwflDieBias bias = dwfl.getCompilationUnit(pc); -// DwarfDie die = bias.die; -// allDies = die.getScopes(pc - bias.bias); -// TypeEntry typeEntry = new TypeEntry(frame.getTask().getISA()); -// -// for (int i = 0; i < expect.length; i++) { -// varDie = die.getScopeVar(allDies, expect[i].symbol); -// varType = typeEntry.getType(varDie.getType()); -// Pattern p = Pattern.compile(expect[i].output, Pattern.DOTALL); -// Matcher m = p.matcher(varType.toPrint()); -// assertTrue("testClass " + expect[i].symbol, m.matches()); -// } } } diff --git a/frysk-core/frysk/debuginfo/TypeEntry.java b/frysk-core/frysk/debuginfo/TypeEntry.java index 0af1b45..a33b6a1 100644 --- a/frysk-core/frysk/debuginfo/TypeEntry.java +++ b/frysk-core/frysk/debuginfo/TypeEntry.java @@ -125,17 +125,24 @@ public class TypeEntry * @return GccStructOrClassType for the struct */ public GccStructOrClassType getGccStructOrClassType(DwarfDie classDie, String name) { + dumpDie("classDie=", classDie); GccStructOrClassType classType = new GccStructOrClassType(name, getByteSize(classDie)); - for (DwarfDie member = classDie.getChild(); member != null; member = member - .getSibling()) { + + for (DwarfDie member = classDie.getChild(); + member != null; + member = member.getSibling()) { + dumpDie("member=", member); + + boolean staticMember = false; long offset; try { offset = member.getDataMemberLocation(); } catch (DwAttributeNotFoundException de) { offset = 0; // union + staticMember = true; } Access access = null; @@ -144,8 +151,7 @@ public class TypeEntry case DwAccess.PROTECTED_: access = Access.PROTECTED; break; case DwAccess.PRIVATE_: access = Access.PRIVATE; break; } - DwarfDie memberDieType = member.getUltimateType(); - + if (member.getTag() == DwTag.SUBPROGRAM) { Value v = getSubprogramValue(member); classType.addMember(member.getName(), v.getType(), offset, @@ -153,8 +159,9 @@ public class TypeEntry continue; } - if (memberDieType == null) - continue; +// DwarfDie memberDieType = member.getUltimateType(); +// if (memberDieType == null) +// continue; Type memberType = getType (member.getType()); if (memberType instanceof UnknownType == false) { @@ -164,17 +171,33 @@ public class TypeEntry if (bitSize != -1) { int bitOffset = member .getAttrConstant(DwAt.BIT_OFFSET); - classType.addMember(member.getName(), memberType, offset, access, - bitOffset, bitSize); + if(staticMember){ + classType.addStaticMember(member.getName(), memberType, offset, access, + bitOffset, bitSize); + }else{ + classType.addMember(member.getName(), memberType, offset, access, + bitOffset, bitSize); + } + } + else{ + if(staticMember){ + classType.addStaticMember(member.getName(), memberType, offset, access); + }else{ + classType.addMember(member.getName(), memberType, offset, access); + } + } - else - classType.addMember(member.getName(), memberType, offset, access); - continue; } - else - classType.addMember(member.getName(), new UnknownType(member + else{ + if(staticMember){ + classType.addStaticMember(member.getName(), new UnknownType(member .getName()), offset, access); + }else{ + classType.addMember(member.getName(), new UnknownType(member + .getName()), offset, access); + } + } } return classType; diff --git a/frysk-core/frysk/value/ChangeLog b/frysk-core/frysk/value/ChangeLog index b280d2a..ce55ce4 100644 --- a/frysk-core/frysk/value/ChangeLog +++ b/frysk-core/frysk/value/ChangeLog @@ -1,3 +1,7 @@ +2007-11-22 Sami Wagiaalla + + * CompositeType.java (addStaticMember): New overloaded functions. + 2007-11-21 Teresa Thomas * ArrayType.java (slice): New. diff --git a/frysk-core/frysk/value/CompositeType.java b/frysk-core/frysk/value/CompositeType.java index 27de857..9f8bc8b 100644 --- a/frysk-core/frysk/value/CompositeType.java +++ b/frysk-core/frysk/value/CompositeType.java @@ -75,7 +75,7 @@ public abstract class CompositeType } } - static class StaticMember extends Member{ + public static class StaticMember extends Member{ public StaticMember(int index, String name, Type type, Access access, boolean inheritance) { @@ -87,7 +87,7 @@ public abstract class CompositeType /** * Class members; package private. */ - static class DynamicMember extends Member{ + public static class DynamicMember extends Member{ // XXX: To keep getValue working. final long offset; final int bitOffset; @@ -213,8 +213,15 @@ public abstract class CompositeType public CompositeType addStaticMember(String name, Type type, long offset, Access access){ - return add(name, type, offset, access, -1, -1,false, false); + return add(name, type, offset, access, -1, -1,true, false); } + + public CompositeType addStaticMember(String name, Type type, long offset, + Access access, int bitOffset, + int bitLength) { + return add(name, type, offset, access, bitOffset, bitLength, true, false); + } + /** * Iterate through the class types. */ hooks/post-receive -- frysk system monitor/debugger