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: implemented and testted DwarfDie.getDefinition.
Date: Mon, 10 Dec 2007 18:19:00 -0000 [thread overview]
Message-ID: <20071210181908.30518.qmail@sourceware.org> (raw)
The branch, master has been updated
via cf5dfede44633c3aae44dfee1959c2a5ea15745f (commit)
from b46299979f8206a6b2a34e16cb2fa9ddd9eff862 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit cf5dfede44633c3aae44dfee1959c2a5ea15745f
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date: Mon Dec 10 13:12:29 2007 -0500
swagiaal: implemented and testted DwarfDie.getDefinition.
frysk-core/frysk/scopes/ChangeLog
+2007-12-10 Sami Wagiaalla <swagiaal@redhat.com>
+
+ * TestDie.java (testGetDefinition): New test.
+
frysk-sys/lib/dwfl/ChangeLog
+2007-12-10 Sami Wagiaalla <swagiaal@redhat.com>
+
+ * DwarfDie.java (isDeclaration): New function.
+ (getDefinition): New function.
+ (toString): Added null check.
+ (getOriginalDie): Added attribute check.
+
-----------------------------------------------------------------------
Summary of changes:
frysk-core/frysk/scopes/ChangeLog | 4 +++
frysk-core/frysk/scopes/TestDie.java | 36 +++++++++++++++++++++++++++
frysk-sys/lib/dwfl/ChangeLog | 7 +++++
frysk-sys/lib/dwfl/DwarfDie.java | 44 +++++++++++++++++++++++++++------
4 files changed, 83 insertions(+), 8 deletions(-)
First 500 lines of diff:
diff --git a/frysk-core/frysk/scopes/ChangeLog b/frysk-core/frysk/scopes/ChangeLog
index 24470da..9e8a0c0 100644
--- a/frysk-core/frysk/scopes/ChangeLog
+++ b/frysk-core/frysk/scopes/ChangeLog
@@ -1,3 +1,7 @@
+2007-12-10 Sami Wagiaalla <swagiaal@redhat.com>
+
+ * TestDie.java (testGetDefinition): New test.
+
2007-12-03 Sami Wagiaalla <swagiaal@redhat.com>
* TestDie.java (testGetPubnames): New test.
diff --git a/frysk-core/frysk/scopes/TestDie.java b/frysk-core/frysk/scopes/TestDie.java
index 9ad5a93..8da51c4 100644
--- a/frysk-core/frysk/scopes/TestDie.java
+++ b/frysk-core/frysk/scopes/TestDie.java
@@ -44,6 +44,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import lib.dwfl.DwAt;
+import lib.dwfl.DwTag;
import lib.dwfl.DwarfDie;
import lib.dwfl.Dwfl;
import lib.dwfl.DwflModule;
@@ -53,6 +54,7 @@ import frysk.debuginfo.DebugInfoStackFactory;
import frysk.debuginfo.ObjectDeclarationSearchEngine;
import frysk.dwfl.DwflCache;
import frysk.proc.Task;
+import frysk.stack.Frame;
import frysk.stack.StackFactory;
import frysk.testbed.DaemonBlockedAtSignal;
import frysk.testbed.TestLib;
@@ -120,7 +122,41 @@ public class TestDie
die = (DwarfDie) iterator.next();
assertEquals("Die name", "static_i", die.getName());
+ }
+
+ public void testGetDefinition(){
+
+ String fileName = "funit-class-static";
+ Task task = (new DaemonBlockedAtSignal(fileName)).getMainTask();
+ Frame frame = StackFactory.createFrame(task);
+ long pc = frame.getAdjustedAddress();
+
+ Dwfl dwfl = DwflCache.getDwfl(task);
+ DwarfDie cu = dwfl.getCompilationUnit(pc).die;
+ DwarfDie[] scopes = cu.getScopes(pc);
+ DwarfDie die = null;
+
+ for (int i = 0; i < scopes.length; i++) {
+ if(scopes[i].getTag().equals(DwTag.SUBPROGRAM)){
+ die = scopes[i];
+ break;
+ }
+ }
+
+ assertTrue("Die is a definition",
+ die.hasAttribute(DwAt.SPECIFICATION) ||
+ die.hasAttribute(DwAt.ABSTRACT_ORIGIN));
+
+ DwarfDie originalDie = die.getOriginalDie();
+
+ assertTrue("Found declaration die", originalDie.isDeclaration());
+
+ DwarfDie definitionDie = originalDie.getDefinition();
+
+ assertNotNull(definitionDie);
+ assertEquals("dies have the same name ", die.getName(), definitionDie.getName());
+ assertEquals("dies have the same modules ", die.getOffset(), definitionDie.getOffset());
}
}
diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog
index 9a6434c..b664467 100644
--- a/frysk-sys/lib/dwfl/ChangeLog
+++ b/frysk-sys/lib/dwfl/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-10 Sami Wagiaalla <swagiaal@redhat.com>
+
+ * DwarfDie.java (isDeclaration): New function.
+ (getDefinition): New function.
+ (toString): Added null check.
+ (getOriginalDie): Added attribute check.
+
2007-12-07 Sami Wagiaalla <swagiaal@redhat.com>
* DwflModule.java (getDieByOffset): New function
diff --git a/frysk-sys/lib/dwfl/DwarfDie.java b/frysk-sys/lib/dwfl/DwarfDie.java
index 1345417..177ff00 100644
--- a/frysk-sys/lib/dwfl/DwarfDie.java
+++ b/frysk-sys/lib/dwfl/DwarfDie.java
@@ -40,6 +40,8 @@
package lib.dwfl;
import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
abstract public class DwarfDie {
@@ -337,8 +339,9 @@ abstract public class DwarfDie {
public String toString() {
StringBuilder stringBuilder= new StringBuilder();
DwarfDie type = getUltimateType();
- stringBuilder.append(this.getTag() + " Name: " + this.getName());
- stringBuilder.append(" Type: " + type.toString());
+ stringBuilder.append("offset 0x"+Long.toHexString(this.getOffset()) +" "+ this.getTag() + " Name: " + this.getName());
+ if(type != null)
+ stringBuilder.append(" Type: " + type.toString());
return stringBuilder.toString();
}
@@ -387,13 +390,38 @@ abstract public class DwarfDie {
* this function returns the die pointed to by those attributes.
*/
public DwarfDie getOriginalDie() {
- long original_die = get_original_die(this.getPointer());
- DwarfDie die = null;
- if (original_die != 0)
- die = DwarfDieFactory.getFactory().makeDie(original_die, null);
- return die;
+ if(this.hasAttribute(DwAt.ABSTRACT_ORIGIN) ||
+ this.hasAttribute(DwAt.SPECIFICATION)){
+ long original_die = get_original_die(this.getPointer());
+ DwarfDie die = null;
+ if (original_die != 0)
+ die = DwarfDieFactory.getFactory().makeDie(original_die, this.module);
+ return die;
+ }
+ return null;
+ }
+
+ public boolean isDeclaration() {
+ return this.hasAttribute(DwAt.DECLARATION);
+ }
+
+ public DwarfDie getDefinition() {
+ // try to find the definition
+ // try using pubnames
+ LinkedList pubnames = this.getModule().getPubNames();
+ Iterator iterator = pubnames.iterator();
+ while (iterator.hasNext()) {
+ DwarfDie die = (DwarfDie) iterator.next();
+ DwarfDie originalDie = die.getOriginalDie();
+ if(originalDie != null && originalDie.getModule().getName().equals(this.getModule().getName()) &&
+ originalDie.getOffset() == this.getOffset()){
+ return die;
+ }
+ }
+
+ return null;
}
-
+
abstract public void accept(DieVisitor visitor);
public native ArrayList getEntryBreakpoints();
hooks/post-receive
--
frysk system monitor/debugger
reply other threads:[~2007-12-10 18:19 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=20071210181908.30518.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).