[SCM] master: swagiaal: test case and support for static data members.

swagiaal@sourceware.org swagiaal@sourceware.org
Thu Nov 22 20:59:00 GMT 2007


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 <swagiaal@redhat.com>
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  <swagiaal@redhat.com>
    +
    +       * 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  <swagiaal@redhat.com>
    +
    +       * 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  <swagiaal@redhat.com>
+
+	* 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  <cagney@redhat.com>
 
 	* 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  <swagiaal@redhat.com>
+
+	* CompositeType.java (addStaticMember): New overloaded functions.
+
 2007-11-21  Teresa Thomas  <tthomas@redhat.com>
 
 	* 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



More information about the Frysk-cvs mailing list