public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: swagiaal@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: swagiaal: fixed broken tests.
Date: Tue, 03 Jun 2008 18:09:00 -0000	[thread overview]
Message-ID: <20080603180915.2333.qmail@sourceware.org> (raw)

The branch, master has been updated
       via  e6a47641818cfc898f84505e7d1252e9c0f4a6b2 (commit)
      from  93b19c557bbbf3e77df8259633ec034b97ad20de (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit e6a47641818cfc898f84505e7d1252e9c0f4a6b2
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Mon Jun 2 17:19:42 2008 -0400

    swagiaal: fixed broken tests.
    
    frysk-core/frysk/debuginfo/ChangeLog
    +2008-06-02  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* TestFrameDebugInfo.java (testVirtualStackTraceWithLocals): New test.
    +	* DebugInfoFrame.java (printScope): Now prints
    +	all scopes (bug fix).
    +
    
    frysk-core/frysk/scopes/ChangeLog
    +2008-06-02  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +	* Function.java: Now explores referenced dies.
    +	* Scope.java: Ditto.
    +

-----------------------------------------------------------------------

Summary of changes:
 .gitignore                                         |    1 +
 frysk-core/frysk/debuginfo/ChangeLog               |    6 ++
 frysk-core/frysk/debuginfo/DebugInfoFrame.java     |   14 +++--
 frysk-core/frysk/debuginfo/TestFrameDebugInfo.java |   26 +++++++-
 frysk-core/frysk/scopes/ChangeLog                  |    5 ++
 frysk-core/frysk/scopes/Function.java              |   20 ++++--
 frysk-core/frysk/scopes/Scope.java                 |   71 ++++++++++---------
 7 files changed, 96 insertions(+), 47 deletions(-)

First 500 lines of diff:
diff --git a/.gitignore b/.gitignore
index dfb8077..958f102 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@ config.sub
 files.base
 files.jnixx
 *~
+*.class
diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog
index b45342a..b6a1ad5 100644
--- a/frysk-core/frysk/debuginfo/ChangeLog
+++ b/frysk-core/frysk/debuginfo/ChangeLog
@@ -1,3 +1,9 @@
+2008-06-02  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* TestFrameDebugInfo.java (testVirtualStackTraceWithLocals): New test.
+	* DebugInfoFrame.java (printScope): Now prints 
+	all scopes (bug fix).
+
 2008-05-21  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	* ObjectDeclarationSearchEngine.java
diff --git a/frysk-core/frysk/debuginfo/DebugInfoFrame.java b/frysk-core/frysk/debuginfo/DebugInfoFrame.java
index 91e6e12..39305e6 100644
--- a/frysk-core/frysk/debuginfo/DebugInfoFrame.java
+++ b/frysk-core/frysk/debuginfo/DebugInfoFrame.java
@@ -40,6 +40,7 @@
 package frysk.debuginfo;
 
 import java.io.PrintWriter;
+import java.util.Iterator;
 import java.util.LinkedList;
 
 import lib.dwfl.DwarfDie;
@@ -221,17 +222,20 @@ public class DebugInfoFrame extends FrameDecorator {
         }
     }
     
-    void printScopes(PrintWriter writer) {
+    public void printScopes(PrintWriter writer) {
 	printScope(writer, getSubprogram(), " ");
     }
 
     private void printScope(PrintWriter writer, Scope scope, String indentString) {
-	
+
 	if (scope != null) {
-	    writer.print(indentString + "{");
+	    writer.print(indentString + "{"); 
 	    scope.toPrint(this, writer, indentString);
-	    if(!(scope.getInner() instanceof Function && ((Function)scope.getInner()).isInlined())){
-		printScope(writer, scope.getInner(), indentString+" ");
+
+	    Iterator innerScopes = scope.getScopes().iterator();
+	    while (innerScopes.hasNext()) {
+		Scope innerScope = (Scope) innerScopes.next(); 
+		printScope(writer, innerScope, indentString+" ");
 	    }
 	    writer.println(indentString+"}");
 	}
diff --git a/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java b/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java
index 34cd4bd..3764416 100644
--- a/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java
+++ b/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java
@@ -43,21 +43,23 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Iterator;
 import java.util.LinkedList;
+
 import javax.naming.NameNotFoundException;
+
 import lib.dwfl.DwTag;
 import lib.dwfl.DwarfDie;
 import lib.dwfl.Dwfl;
 import lib.dwfl.DwflDieBias;
 import frysk.dwfl.DwflCache;
 import frysk.proc.Task;
+import frysk.scopes.Function;
 import frysk.scopes.LexicalBlock;
 import frysk.scopes.Scope;
-import frysk.scopes.Function;
+import frysk.scopes.Variable;
 import frysk.stack.Frame;
 import frysk.stack.StackFactory;
 import frysk.testbed.DaemonBlockedAtSignal;
 import frysk.testbed.TestLib;
-import frysk.scopes.Variable;
 
 public class TestFrameDebugInfo extends TestLib {
 
@@ -319,6 +321,26 @@ public class TestFrameDebugInfo extends TestLib {
     assertTrue("contains main", stringWriter.getBuffer().toString().contains("main"));
   }
   
+  public void testVirtualStackTraceWithLocals()
+  {
+    
+      Task task = (new DaemonBlockedAtSignal("funit-stack-inlined")).getMainTask();
+    
+    PrintStackOptions options = new PrintStackOptions();
+    options.setNumberOfFrames(0); 
+    options.setPrintParams(true);
+    options.setPrintLocals(true);
+    options.setPrintFullPaths(true);
+    
+    DebugInfoFrame frame = DebugInfoStackFactory.createVirtualStackTrace(task);
+    frame = frame.getOuterDebugInfoFrame();
+    
+    StringWriter stringWriter = new StringWriter();
+    frame.printScopes(new PrintWriter(stringWriter));
+    
+    assertTrue("Contains var2", stringWriter.getBuffer().toString().contains("var2"));
+  }
+  
   public void testInlinedFunctionDerailment()
   {
     inlinedFunctionDerailment("");
diff --git a/frysk-core/frysk/scopes/ChangeLog b/frysk-core/frysk/scopes/ChangeLog
index 8e08b46..74ffefd 100644
--- a/frysk-core/frysk/scopes/ChangeLog
+++ b/frysk-core/frysk/scopes/ChangeLog
@@ -1,3 +1,8 @@
+2008-06-02  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* Function.java: Now explores referenced dies.
+	* Scope.java: Ditto.
+
 2008-05-16  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	Added frame requirement to 
diff --git a/frysk-core/frysk/scopes/Function.java b/frysk-core/frysk/scopes/Function.java
index 89c225f..71d3f8a 100644
--- a/frysk-core/frysk/scopes/Function.java
+++ b/frysk-core/frysk/scopes/Function.java
@@ -43,6 +43,10 @@ import java.io.PrintWriter;
 import java.util.Iterator;
 import java.util.LinkedList;
 
+import lib.dwfl.DwAt;
+import lib.dwfl.DwInl;
+import lib.dwfl.DwTag;
+import lib.dwfl.DwarfDie;
 import frysk.debuginfo.DebugInfoFrame;
 import frysk.debuginfo.LocationExpression;
 import frysk.debuginfo.PieceLocation;
@@ -52,10 +56,6 @@ import frysk.value.FunctionType;
 import frysk.value.ObjectDeclaration;
 import frysk.value.Type;
 import frysk.value.Value;
-import lib.dwfl.DwAt;
-import lib.dwfl.DwInl;
-import lib.dwfl.DwTag;
-import lib.dwfl.DwarfDie;
 
 /**
  * In DWARF a subroutine is used to refer to an entity that can either be a
@@ -76,7 +76,16 @@ public class Function extends NamedScope {
 	locationExpression = new LocationExpression(die);
 	
 	parameters = new LinkedList();
-	die = die.getChild();
+	
+	DwarfDie tempDie = die.getOriginalDie();
+	if(tempDie != null){
+	    exploreDie(tempDie.getChild());
+	}
+	tempDie = die.getChild();
+	exploreDie(tempDie);
+    }
+
+    private void exploreDie(DwarfDie die){
 	while (die != null) {
 	    
 	    boolean artificial = die.hasAttribute(DwAt.ARTIFICIAL)
@@ -91,7 +100,6 @@ public class Function extends NamedScope {
 	}
 
     }
-
     public LinkedList getParameters ()
     {
       return parameters;
diff --git a/frysk-core/frysk/scopes/Scope.java b/frysk-core/frysk/scopes/Scope.java
index a3e993b..5a8be67 100644
--- a/frysk-core/frysk/scopes/Scope.java
+++ b/frysk-core/frysk/scopes/Scope.java
@@ -104,20 +104,8 @@ public class Scope
   }
   
   public LinkedList getScopes(){
-
       if (this.scopes == null) {
-	  this.scopes = new LinkedList();
-	  DwarfDie die = this.die.getChild();
-	  
-	  while (die != null) {
-	      try{
-		  Scope scope = ScopeFactory.theFactory.getScope(die, typeFactory);
-		  this.scopes.add(scope);
-	      } catch (IllegalArgumentException e) {
-		  // not a scope
-	      }
-	      die = die.getSibling();
-	  }
+	  this.getObjectDeclarations();
       }
       return scopes;
   }
@@ -128,45 +116,61 @@ public class Scope
   
   public LinkedList getVariables() {
       if (this.variables == null) {
-	  this.variables = new LinkedList();
-	  DwarfDie die = this.die.getChild();
-	  
-	  while (die != null) {
-	      
-	      if (die.getTag().equals(DwTag.VARIABLE)) {
-		  Variable variable = new Variable(die);
-		  variables.add(variable);
-	      }
-	      die = die.getSibling();
-	  }
+	  this.getObjectDeclarations();
       }
       return variables;
   }
 
+  /**
+   * Searches for variables, scopes, and object declarations
+   * Variables are variable tags
+   * scopes are scope tags
+   * objectDeclarations are either variables or NamedScopes
+   * @return
+   */
   public LinkedList getObjectDeclarations() {
       if (this.objectDeclarations == null) {
+	  
 	  this.objectDeclarations = new LinkedList();
-	  DwarfDie die = this.die.getChild();
+	  this.variables = new LinkedList();
+	  this.scopes = new LinkedList();
 	  
+	  DwarfDie die = this.die.getOriginalDie();
+	  if(die != null){
+	      exploreDie(die.getChild());
+	  }
+	  die = this.die.getChild();
+	  exploreDie(die);
+      }
+      return objectDeclarations;
+  }
+
+  private void exploreDie(DwarfDie die){
 	  while (die != null) {
-	      
+
 	      try{
 		  Scope scope = ScopeFactory.theFactory.getScope(die, typeFactory);
+		  if (scope instanceof InlinedFunction) {
+		      // skip this and trust that it will be handled by
+		      // the virtual frame corresponding to this inlining.
+		  }else{
+		      scopes.add(scope);
+		  }
 		  if (scope instanceof NamedScope) {
 		      this.objectDeclarations.add(scope);
 		  }
 	      } catch (IllegalArgumentException e) {
+
 		    if (die.getTag().equals(DwTag.VARIABLE)) {
-			Variable variable = new Variable(die);
+			Variable variable = new Variable(die); 
 			objectDeclarations.add(variable);
-		    }
-		}
+			variables.add(variable);
+		    }		    
+	      }
 	      die = die.getSibling();
 	  }
-      }
-      return objectDeclarations;
   }
-
+  
   public SourceLocation getSourceLocation(){
       return this.sourceLocation;
   }
@@ -262,11 +266,10 @@ public class Scope
   }
   
   public void toPrint(DebugInfoFrame frame, PrintWriter writer, String indentString){
-  
     Iterator iterator = this.getVariables().iterator();
     while(iterator.hasNext()){
 	Variable variable = (Variable) iterator.next();
-	writer.println();
+	writer.println(); 
 	writer.print(indentString + " ");
 	variable.toPrint(writer, frame);
 	writer.print(" = ");


hooks/post-receive
--
frysk system monitor/debugger


                 reply	other threads:[~2008-06-03 18:09 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080603180915.2333.qmail@sourceware.org \
    --to=swagiaal@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).