From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12964 invoked by alias); 12 Dec 2007 20:33:08 -0000 Received: (qmail 12939 invoked by uid 9561); 12 Dec 2007 20:33:08 -0000 Date: Wed, 12 Dec 2007 20:33:00 -0000 Message-ID: <20071212203308.12924.qmail@sourceware.org> From: swagiaal@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: swagiaal: implemented and tested look up of static member variables. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 6499eead93919efbff6580cc9713b1b465648b53 X-Git-Newrev: 75155ba51e20e84ea19a4417c545bcec4a9cc184 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/msg00578.txt.bz2 The branch, master has been updated via 75155ba51e20e84ea19a4417c545bcec4a9cc184 (commit) from 6499eead93919efbff6580cc9713b1b465648b53 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 75155ba51e20e84ea19a4417c545bcec4a9cc184 Author: Sami Wagiaalla Date: Wed Dec 12 15:22:30 2007 -0500 swagiaal: implemented and tested look up of static member variables. frysk-core/frysk/debuginfo/ChangeLog +2007-12-11 Sami Wagiaalla + + * TestObjectDeclarationSearchEngine.java (testFindFirstScopesClass): New test. + + CompositeType.java (StaticMember.StaticMember): Constructor now + takes a LocationExpression object. + Updated add methods. + * TypeEntry.java: Updated. + frysk-core/frysk/scopes/ChangeLog +2007-12-11 Sami Wagiaalla + + * Subprogram.java (getDeclaredObjectByName): Now searches + owning class/structure. + * Composite.java (getDeclaredObjectByName): New. + frysk-core/frysk/value/ChangeLog +2007-12-11 Sami Wagiaalla + + * CompositeType.java (StaticMember.StaticMember): Constructor now + takes a LocationExpression object. + Updated add methods. + (Member): now extends object declaration. + ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/debuginfo/ChangeLog | 9 +++ .../TestObjectDeclarationSearchEngine.java | 21 +++++--- frysk-core/frysk/debuginfo/TypeEntry.java | 16 ++++-- frysk-core/frysk/scopes/ChangeLog | 6 ++ frysk-core/frysk/scopes/Composite.java | 13 ++++- frysk-core/frysk/scopes/Subprogram.java | 20 +++++-- frysk-core/frysk/value/ChangeLog | 7 +++ frysk-core/frysk/value/CompositeType.java | 58 ++++++++++++++++---- 8 files changed, 122 insertions(+), 28 deletions(-) First 500 lines of diff: diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog index e82cb97..aef00ea 100644 --- a/frysk-core/frysk/debuginfo/ChangeLog +++ b/frysk-core/frysk/debuginfo/ChangeLog @@ -5,6 +5,15 @@ 2007-12-11 Sami Wagiaalla + * TestObjectDeclarationSearchEngine.java (testFindFirstScopesClass): New test. + + CompositeType.java (StaticMember.StaticMember): Constructor now + takes a LocationExpression object. + Updated add methods. + * TypeEntry.java: Updated. + +2007-12-11 Sami Wagiaalla + CompositeType constructors and add functions now take LineColPair argument. * TypeEntry.java: Updated. diff --git a/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java b/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java index 804e8bd..aec571f 100644 --- a/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java +++ b/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java @@ -114,7 +114,6 @@ public class TestObjectDeclarationSearchEngine extends TestLib{ public void testFindTwoScopesEnum(){ - String variableName = "two"; String fileName = "funit-c-scopes-enum"; @@ -128,7 +127,14 @@ public class TestObjectDeclarationSearchEngine extends TestLib{ } - + public void testFindFirstScopesClass(){ + String variableName = "first"; + String variableToken = "*this*"; + String fileName = "funit-cpp-scopes-class"; + String srcPath = Config.getPkgLibSrcDir() + fileName + ".cxx"; + + verifyVariable(variableName, variableToken, fileName, srcPath); + } /** @@ -160,15 +166,16 @@ public class TestObjectDeclarationSearchEngine extends TestLib{ Task task = (new DaemonBlockedAtSignal(fileName)).getMainTask(); DebugInfoFrame frame = DebugInfoStackFactory.createVirtualStackTrace(task); objectDeclarationSearchEngine = new ObjectDeclarationSearchEngine(frame); - Variable variable = (Variable) objectDeclarationSearchEngine.getVariable(variableName); + ObjectDeclaration objectDeclaration = (ObjectDeclaration) objectDeclarationSearchEngine.getVariable(variableName); - assertNotNull("Variable found", variable); - assertTrue("Found the correct variable", variable.getLineNumber() == variableLine); + assertNotNull("Variable found", objectDeclaration); + assertEquals("Correct name", variableName, objectDeclaration.getName() ); + assertEquals("Found the correct variable on the correct line ", variableLine, objectDeclaration.getLineCol().getLine()); //Negative test: try { - variable = (Variable) objectDeclarationSearchEngine.getVariable("NOT"+variableName); - assertTrue("Exception was thrown", false); + objectDeclaration = (Variable) objectDeclarationSearchEngine.getVariable("NOT"+variableName); + assertTrue("Exception was not thrown", false); } catch (ObjectDeclaratioinNotFoundException e) { // exception was thrown } diff --git a/frysk-core/frysk/debuginfo/TypeEntry.java b/frysk-core/frysk/debuginfo/TypeEntry.java index 97ac24e..8d8391a 100644 --- a/frysk-core/frysk/debuginfo/TypeEntry.java +++ b/frysk-core/frysk/debuginfo/TypeEntry.java @@ -128,6 +128,8 @@ public class TypeEntry */ public GccStructOrClassType getGccStructOrClassType(DwarfDie classDie, String name) { + LocationExpression locationExpression = null; + dumpDie("classDie=", classDie); GccStructOrClassType classType = new GccStructOrClassType(name, getByteSize(classDie)); @@ -145,6 +147,12 @@ public class TypeEntry } catch (DwAttributeNotFoundException de) { offset = 0; // union staticMember = true; + if(member.isDeclaration()){ + locationExpression = new LocationExpression(member.getDefinition()); + }else{ + locationExpression = new LocationExpression(member); + } + } LineColPair lineColPair; @@ -166,7 +174,7 @@ public class TypeEntry if(hasArtifitialParameter(member)){ classType.addMember(member.getName(), lineColPair, v.getType(), offset, access); }else{ - classType.addStaticMember(member.getName(), lineColPair, v.getType(), offset, access); + classType.addStaticMember(locationExpression, member.getName(), lineColPair, v.getType(), offset, access); } continue; } @@ -184,7 +192,7 @@ public class TypeEntry int bitOffset = member .getAttrConstant(DwAt.BIT_OFFSET); if(staticMember){ - classType.addStaticBitFieldMember(member.getName(), lineColPair, memberType, offset, access, + classType.addStaticBitFieldMember(locationExpression, member.getName(), lineColPair, memberType, offset, access, bitOffset, bitSize); }else{ classType.addBitFieldMember(member.getName(), lineColPair, memberType, offset, access, @@ -193,7 +201,7 @@ public class TypeEntry } else{ if(staticMember){ - classType.addStaticMember(member.getName(), lineColPair, memberType, offset, access); + classType.addStaticMember(locationExpression, member.getName(), lineColPair, memberType, offset, access); }else{ classType.addMember(member.getName(), lineColPair, memberType, offset, access); } @@ -203,7 +211,7 @@ public class TypeEntry } else{ if(staticMember){ - classType.addStaticMember(member.getName(), lineColPair, new UnknownType(member + classType.addStaticMember(locationExpression, member.getName(), lineColPair, new UnknownType(member .getName()), offset, access); }else{ classType.addMember(member.getName(), lineColPair, new UnknownType(member diff --git a/frysk-core/frysk/scopes/ChangeLog b/frysk-core/frysk/scopes/ChangeLog index 4615e8a..3422528 100644 --- a/frysk-core/frysk/scopes/ChangeLog +++ b/frysk-core/frysk/scopes/ChangeLog @@ -1,5 +1,11 @@ 2007-12-11 Sami Wagiaalla + * Subprogram.java (getDeclaredObjectByName): Now searches + owning class/structure. + * Composite.java (getDeclaredObjectByName): New. + +2007-12-11 Sami Wagiaalla + * LineColPair.java: New. 2007-12-10 Sami Wagiaalla diff --git a/frysk-core/frysk/scopes/Composite.java b/frysk-core/frysk/scopes/Composite.java index f344ce3..7c02cbd 100644 --- a/frysk-core/frysk/scopes/Composite.java +++ b/frysk-core/frysk/scopes/Composite.java @@ -39,10 +39,11 @@ package frysk.scopes; +import lib.dwfl.DwarfDie; import frysk.debuginfo.TypeEntry; import frysk.value.CompositeType; +import frysk.value.ObjectDeclaration; import frysk.value.Type; -import lib.dwfl.DwarfDie; /** * A Composite object is a scope to wich a function can belong: @@ -65,4 +66,14 @@ public class Composite extends Scope { public Type getType(){ return this.compositeType; } + + public ObjectDeclaration getDeclaredObjectByName(String name) { + ObjectDeclaration objectDeclaration; + + objectDeclaration = this.compositeType.getDeclaredObjectByName(name); + + return objectDeclaration; + } + + } diff --git a/frysk-core/frysk/scopes/Subprogram.java b/frysk-core/frysk/scopes/Subprogram.java index 3871187..d56ffb4 100644 --- a/frysk-core/frysk/scopes/Subprogram.java +++ b/frysk-core/frysk/scopes/Subprogram.java @@ -130,17 +130,27 @@ public class Subprogram extends Subroutine } public ObjectDeclaration getDeclaredObjectByName(String name) { - Variable variable = null; + ObjectDeclaration objectDeclaration = null; Iterator iterator = this.parameters.iterator(); while (iterator.hasNext()) { - variable = (Variable) iterator.next(); - if (variable.getName().equals(name)) { - return variable; + ObjectDeclaration tempObjectDeclaration = (Variable) iterator.next(); + if (tempObjectDeclaration.getName().equals(name)) { + objectDeclaration = tempObjectDeclaration; + continue; } } - return super.getDeclaredObjectByName(name); + Composite composite = this.getComposite(); + if(composite != null){ + objectDeclaration = composite.getDeclaredObjectByName(name); + } + + if(objectDeclaration == null){ + objectDeclaration = super.getDeclaredObjectByName(name); + } + + return objectDeclaration; } } diff --git a/frysk-core/frysk/value/ChangeLog b/frysk-core/frysk/value/ChangeLog index 968ef85..40ece2c 100644 --- a/frysk-core/frysk/value/ChangeLog +++ b/frysk-core/frysk/value/ChangeLog @@ -1,3 +1,10 @@ +2007-12-11 Sami Wagiaalla + + * CompositeType.java (StaticMember.StaticMember): Constructor now + takes a LocationExpression object. + Updated add methods. + (Member): now extends object declaration. + 2007-12-11 Stan Cox * Type.java (toPrint(StringBuilder, int)): Change signature from diff --git a/frysk-core/frysk/value/CompositeType.java b/frysk-core/frysk/value/CompositeType.java index 3a26ecb..a1dbfe9 100644 --- a/frysk-core/frysk/value/CompositeType.java +++ b/frysk-core/frysk/value/CompositeType.java @@ -48,6 +48,10 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import frysk.debuginfo.DebugInfoFrame; +import frysk.debuginfo.LocationExpression; +import frysk.debuginfo.PieceLocation; +import frysk.isa.ISA; import frysk.scopes.LineColPair; /** @@ -57,7 +61,8 @@ public abstract class CompositeType extends Type { - public static class Member{ + public static abstract class Member extends ObjectDeclaration { + private final LineColPair lineColPair; final int index; final String name; @@ -83,19 +88,35 @@ public abstract class CompositeType return this.name; } - public LineColPair getLinCol(){ + public LineColPair getLineCol() { return this.lineColPair; } + + public Type getType(ISA isa) { + return this.type; + } + + public abstract Value getValue(DebugInfoFrame frame); + } public static class StaticMember extends Member{ - - public StaticMember(int index, String name, LineColPair lineColPair, Type type, Access access, + private final LocationExpression locationExpression; + public StaticMember(LocationExpression locationExpression, int index, String name, LineColPair lineColPair, Type type, Access access, int bitOffset, int bitSize, boolean inheritance) { - super(index, name, lineColPair, type, access, bitOffset, bitSize, inheritance); + super(index, name, lineColPair, type, access, bitOffset, bitSize, inheritance); + this.locationExpression = locationExpression; + } + + public Value getValue(DebugInfoFrame frame) { + ISA isa = frame.getTask().getISA(); + PieceLocation pieceLocation + = new PieceLocation(locationExpression.decode(frame, this.getType(isa) + .getSize())); + Value value = new Value(this.getType(isa), pieceLocation); + return value; } - } /** @@ -127,7 +148,17 @@ public abstract class CompositeType private Value getValue (Value v) { int off = (int)offset; return new Value(type, v.getLocation().slice(off, type.getSize())); - } + } + + /** + * @deprecated + */ + public Value getValue(DebugInfoFrame frame) { + //this should not be used. without an instance non static members + // do not have a value. + throw new NullPointerException("trying to get a value of a non static member"); + } + } /** * A mapping from NAME to Member; only useful for named members. @@ -201,18 +232,18 @@ public abstract class CompositeType return addMemberToMap(member); } - public CompositeType addStaticMember(String name, LineColPair lineColPair, Type type, long offset, + public CompositeType addStaticMember(LocationExpression locationExpression, String name, LineColPair lineColPair, Type type, long offset, Access access){ - StaticMember member = new StaticMember(members.size(), name, lineColPair, type, + StaticMember member = new StaticMember(locationExpression, members.size(), name, lineColPair, type, access, -1, -1, false); return addMemberToMap(member); } - public CompositeType addStaticBitFieldMember(String name, LineColPair lineColPair, Type type, long offset, + public CompositeType addStaticBitFieldMember(LocationExpression locationExpression, String name, LineColPair lineColPair, Type type, long offset, Access access, int bitOffset, int bitLength) { type = type.pack(bitOffset, bitLength); - StaticMember member = new StaticMember(members.size(), name, lineColPair, type, + StaticMember member = new StaticMember(locationExpression, members.size(), name, lineColPair, type, access, -1, -1, false); return addMemberToMap(member); } @@ -375,4 +406,9 @@ public abstract class CompositeType } return completions > 0; } + + public ObjectDeclaration getDeclaredObjectByName(String name){ + return (ObjectDeclaration) nameToMember.get(name); + } + } hooks/post-receive -- frysk system monitor/debugger