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: created NamedScope; created and used SourceLocationFactory. Date: Thu, 10 Apr 2008 18:16:00 -0000 [thread overview] Message-ID: <20080410181604.3629.qmail@sourceware.org> (raw) The branch, master has been updated via c1c9ca07e98bf3b6c93ce970c09c7612634a7a97 (commit) from 6c1e5b547ed853726943c21251b13336d5c48016 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit c1c9ca07e98bf3b6c93ce970c09c7612634a7a97 Author: Sami Wagiaalla <swagiaal@redhat.com> Date: Thu Apr 10 14:15:43 2008 -0400 swagiaal: created NamedScope; created and used SourceLocationFactory. frysk-core/frysk/debuginfo/ChangeLog +2008-04-10 Sami Wagiaalla <swagiaal@redhat.com> + + * TypeFactory.java: Use SourceLocationFactory + * DebugInfoFrame.java: ditto. + +++ b/frysk-core/frysk/scopes/ChangeLog +2008-04-10 Sami Wagiaalla <swagiaal@redhat.com> + + * NamedScope.java: New class. + * Subroutine.java: implemented getType() + implemented getValue(). + * Subprogram.java: Removed name initialization. + * Variable.java: Now uses SourceLocationFactory. + * SourceLocationFactory.java: New. + ----------------------------------------------------------------------- Summary of changes: frysk-core/frysk/debuginfo/ChangeLog | 5 ++ frysk-core/frysk/debuginfo/DebugInfoFrame.java | 26 +------- frysk-core/frysk/debuginfo/TypeFactory.java | 21 ++----- frysk-core/frysk/scopes/ChangeLog | 9 +++ .../{SourceLocation.java => NamedScope.java} | 48 +++++---------- frysk-core/frysk/scopes/Scope.java | 6 ++ frysk-core/frysk/scopes/SourceLocation.java | 2 +- ...rceLocation.java => SourceLocationFactory.java} | 62 ++++++++++---------- frysk-core/frysk/scopes/Subprogram.java | 3 - frysk-core/frysk/scopes/Subroutine.java | 26 ++++++++- frysk-core/frysk/scopes/Variable.java | 11 +--- 11 files changed, 105 insertions(+), 114 deletions(-) copy frysk-core/frysk/scopes/{SourceLocation.java => NamedScope.java} (76%) copy frysk-core/frysk/scopes/{SourceLocation.java => SourceLocationFactory.java} (64%) First 500 lines of diff: diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog index e8d90ce..605f21a 100644 --- a/frysk-core/frysk/debuginfo/ChangeLog +++ b/frysk-core/frysk/debuginfo/ChangeLog @@ -1,3 +1,8 @@ +2008-04-10 Sami Wagiaalla <swagiaal@redhat.com> + + * TypeFactory.java: Use SourceLocationFactory + * DebugInfoFrame.java: ditto. + 2008-04-09 Sami Wagiaalla <swagiaal@redhat.com> * ObjectDeclarationSearchEngine.java: Renamed getVariable to diff --git a/frysk-core/frysk/debuginfo/DebugInfoFrame.java b/frysk-core/frysk/debuginfo/DebugInfoFrame.java index 0881150..e208812 100644 --- a/frysk-core/frysk/debuginfo/DebugInfoFrame.java +++ b/frysk-core/frysk/debuginfo/DebugInfoFrame.java @@ -39,25 +39,22 @@ package frysk.debuginfo; -import java.io.File; import java.io.PrintWriter; import java.util.LinkedList; import lib.dwfl.DwarfDie; import lib.dwfl.Dwfl; import lib.dwfl.DwflDieBias; -import lib.dwfl.DwflLine; import frysk.dwfl.DwflCache; import frysk.rt.LineXXX; -import frysk.scopes.SourceLocation; import frysk.scopes.Scope; import frysk.scopes.ScopeFactory; +import frysk.scopes.SourceLocation; +import frysk.scopes.SourceLocationFactory; import frysk.scopes.Subprogram; import frysk.scopes.Subroutine; import frysk.stack.Frame; import frysk.stack.FrameDecorator; -import frysk.sysroot.SysRoot; -import frysk.sysroot.SysRootCache; public class DebugInfoFrame extends FrameDecorator { @@ -169,24 +166,7 @@ public class DebugInfoFrame extends FrameDecorator { */ public SourceLocation getLine() { if (this.line == null) { - Dwfl dwfl = DwflCache.getDwfl(this.getTask()); - SysRoot sysRoot = new SysRoot(SysRootCache.getSysRoot(this.getTask())); - // The innermost frame and frames which were - // interrupted during execution use their PC to get - // the line in source. All other frames have their PC - // set to the line after the inner frame call and must - // be decremented by one. - DwflLine dwflLine = dwfl.getSourceLine(getAdjustedAddress()); - if (dwflLine != null) { - File f = sysRoot.getSourcePathViaSysRoot - (new File(dwflLine.getCompilationDir()), - new File(dwflLine.getSourceFile())).getSysRootedFile(); - this.line = new SourceLocation(f, dwflLine.getLineNum(), - dwflLine.getColumn()); - } - // If the fetch failed, mark it as unknown. - if (this.line == null) - this.line = SourceLocation.UNKNOWN; + this.line = SourceLocationFactory.getSourceLocation(getTask(), getAdjustedAddress()); } return this.line; } diff --git a/frysk-core/frysk/debuginfo/TypeFactory.java b/frysk-core/frysk/debuginfo/TypeFactory.java index 6911d40..f59d4e6 100644 --- a/frysk-core/frysk/debuginfo/TypeFactory.java +++ b/frysk-core/frysk/debuginfo/TypeFactory.java @@ -43,6 +43,7 @@ import frysk.isa.ISA; import frysk.rsl.Log; import frysk.rsl.LogFactory; import frysk.scopes.SourceLocation; +import frysk.scopes.SourceLocationFactory; import frysk.value.Access; import frysk.value.ArrayType; import frysk.value.CharType; @@ -152,14 +153,8 @@ public class TypeFactory { } - SourceLocation sourceLocation; - try { - sourceLocation = new SourceLocation(member.getDeclFile(), - member.getDeclLine(), member.getDeclColumn()); - } catch (DwAttributeNotFoundException e) { - sourceLocation = SourceLocation.UNKNOWN; - } - + SourceLocation sourceLocation = SourceLocationFactory.getSourceLocation(member); + Access access = null; switch (member.getAttrConstant(DwAt.ACCESSIBILITY)) { case DwAccess.PUBLIC_: @@ -336,14 +331,8 @@ public class TypeFactory { offset = 0; // union } - SourceLocation lineColPair; - try { - lineColPair = new SourceLocation(member.getDeclFile(), member - .getDeclLine(), member.getDeclColumn()); - } catch (DwAttributeNotFoundException e) { - lineColPair = SourceLocation.UNKNOWN; - } - + SourceLocation lineColPair = SourceLocationFactory.getSourceLocation(member); + Access access = null; switch (member.getAttrConstant(DwAt.ACCESSIBILITY)) { case DwAccess.PUBLIC_: diff --git a/frysk-core/frysk/scopes/ChangeLog b/frysk-core/frysk/scopes/ChangeLog index f2c43ab..7f2db03 100644 --- a/frysk-core/frysk/scopes/ChangeLog +++ b/frysk-core/frysk/scopes/ChangeLog @@ -1,5 +1,14 @@ 2008-04-10 Sami Wagiaalla <swagiaal@redhat.com> + * NamedScope.java: New class. + * Subroutine.java: implemented getType() + implemented getValue(). + * Subprogram.java: Removed name initialization. + * Variable.java: Now uses SourceLocationFactory. + * SourceLocationFactory.java: New. + +2008-04-10 Sami Wagiaalla <swagiaal@redhat.com> + Changed ObjectDeclaration from abstract class to interface * Variable.java: Updated. diff --git a/frysk-core/frysk/scopes/SourceLocation.java b/frysk-core/frysk/scopes/NamedScope.java similarity index 76% copy from frysk-core/frysk/scopes/SourceLocation.java copy to frysk-core/frysk/scopes/NamedScope.java index 5fd14a7..915ab59 100644 --- a/frysk-core/frysk/scopes/SourceLocation.java +++ b/frysk-core/frysk/scopes/NamedScope.java @@ -39,42 +39,28 @@ package frysk.scopes; -import java.io.File; +import lib.dwfl.DwarfDie; +import frysk.debuginfo.TypeFactory; +import frysk.value.ObjectDeclaration; /** - * The source-code line information. + * This class is a root for all scopes which can have a name + * and can there for be queried for. + * Eg: + * function + * class + * namespace */ - -public class SourceLocation { - - /** - * The LINE is unknown; this is used instead of "null" to denote - * missing line information. - */ - public static final SourceLocation UNKNOWN = new SourceLocation(null, 0, 0); - - private final File file; - - private final int line; - - private final int column; - - public SourceLocation(File file, int line, int column) { - this.file = file; - this.line = line; - this.column = column; - } - - public File getFile () { - return file; - } +public abstract class NamedScope extends Scope implements ObjectDeclaration { + + String name; - public int getLine () { - return line; + public NamedScope(DwarfDie die, TypeFactory typeFactory) { + super(die, typeFactory); + this.name = die.getName(); } - public int getColumn () { - return column; + public String getName(){ + return this.name; } - } diff --git a/frysk-core/frysk/scopes/Scope.java b/frysk-core/frysk/scopes/Scope.java index b9fff92..e753ef2 100644 --- a/frysk-core/frysk/scopes/Scope.java +++ b/frysk-core/frysk/scopes/Scope.java @@ -81,11 +81,13 @@ public class Scope LinkedList collections; final TypeFactory typeFactory; + private final SourceLocation sourceLocation; public Scope(DwarfDie die, TypeFactory typeFactory){ this.die = die; this.scopes = new LinkedList(); this.typeFactory = typeFactory; + this.sourceLocation = SourceLocationFactory.getSourceLocation(die); } public Scope getOuter(){ @@ -126,6 +128,10 @@ public class Scope return variables; } + public SourceLocation getSourceLocation(){ + return this.sourceLocation; + } + public LinkedList getEnums(){ if(this.collections == null){ this.collections = new LinkedList(); diff --git a/frysk-core/frysk/scopes/SourceLocation.java b/frysk-core/frysk/scopes/SourceLocation.java index 5fd14a7..74ef428 100644 --- a/frysk-core/frysk/scopes/SourceLocation.java +++ b/frysk-core/frysk/scopes/SourceLocation.java @@ -59,7 +59,7 @@ public class SourceLocation { private final int column; - public SourceLocation(File file, int line, int column) { + protected SourceLocation(File file, int line, int column) { this.file = file; this.line = line; this.column = column; diff --git a/frysk-core/frysk/scopes/SourceLocation.java b/frysk-core/frysk/scopes/SourceLocationFactory.java similarity index 64% copy from frysk-core/frysk/scopes/SourceLocation.java copy to frysk-core/frysk/scopes/SourceLocationFactory.java index 5fd14a7..17e7f3a 100644 --- a/frysk-core/frysk/scopes/SourceLocation.java +++ b/frysk-core/frysk/scopes/SourceLocationFactory.java @@ -41,40 +41,40 @@ package frysk.scopes; import java.io.File; -/** - * The source-code line information. - */ +import frysk.dwfl.DwflCache; +import frysk.proc.Task; +import frysk.sysroot.SysRoot; +import frysk.sysroot.SysRootCache; +import lib.dwfl.DwAttributeNotFoundException; +import lib.dwfl.DwarfDie; +import lib.dwfl.Dwfl; +import lib.dwfl.DwflLine; -public class SourceLocation { +public class SourceLocationFactory { - /** - * The LINE is unknown; this is used instead of "null" to denote - * missing line information. - */ - public static final SourceLocation UNKNOWN = new SourceLocation(null, 0, 0); - - private final File file; - - private final int line; - - private final int column; - - public SourceLocation(File file, int line, int column) { - this.file = file; - this.line = line; - this.column = column; - } - - public File getFile () { - return file; + public static SourceLocation getSourceLocation(DwarfDie variableDie){ + SourceLocation sourceLocation; + try{ + sourceLocation = new SourceLocation(variableDie.getDeclFile(),variableDie.getDeclLine(), variableDie.getDeclColumn()); + }catch(DwAttributeNotFoundException e){ + sourceLocation = SourceLocation.UNKNOWN; + } + return sourceLocation; } - public int getLine () { - return line; - } - - public int getColumn () { - return column; + public static SourceLocation getSourceLocation(Task task, long address){ + Dwfl dwfl = DwflCache.getDwfl(task); + SysRoot sysRoot = new SysRoot(SysRootCache.getSysRoot(task)); + DwflLine dwflLine = dwfl.getSourceLine(address); + if (dwflLine != null) { + File f = sysRoot.getSourcePathViaSysRoot + (new File(dwflLine.getCompilationDir()), + new File(dwflLine.getSourceFile())).getSysRootedFile(); + + + return new SourceLocation(f, dwflLine.getLineNum(), dwflLine.getColumn()); + } + + return SourceLocation.UNKNOWN; } - } diff --git a/frysk-core/frysk/scopes/Subprogram.java b/frysk-core/frysk/scopes/Subprogram.java index f2c9ef5..c661029 100644 --- a/frysk-core/frysk/scopes/Subprogram.java +++ b/frysk-core/frysk/scopes/Subprogram.java @@ -64,11 +64,8 @@ public class Subprogram extends Subroutine FunctionType functionType; LinkedList parameters; - private String name; - public Subprogram(DwarfDie die, TypeFactory typeFactory) { super(die, typeFactory); - this.name = die.getName(); parameters = new LinkedList(); die = die.getChild(); diff --git a/frysk-core/frysk/scopes/Subroutine.java b/frysk-core/frysk/scopes/Subroutine.java index 90f410e..e70a7f8 100644 --- a/frysk-core/frysk/scopes/Subroutine.java +++ b/frysk-core/frysk/scopes/Subroutine.java @@ -39,7 +39,13 @@ package frysk.scopes; +import frysk.debuginfo.DebugInfoFrame; +import frysk.debuginfo.LocationExpression; +import frysk.debuginfo.PieceLocation; import frysk.debuginfo.TypeFactory; +import frysk.isa.ISA; +import frysk.value.Type; +import frysk.value.Value; import lib.dwfl.DwAt; import lib.dwfl.DwInl; import lib.dwfl.DwTag; @@ -49,12 +55,16 @@ import lib.dwfl.DwarfDie; * In DWARF a subroutine is used to refer to an entity that can either be a * concrete function (Subprogram) or an inlined function (InlinedSubprogram). */ -public class Subroutine extends Scope { +public class Subroutine extends NamedScope { Composite struct; + Type type; + private LocationExpression locationExpression; public Subroutine(DwarfDie die, TypeFactory typeFactory) { super(die, typeFactory); + this.type = typeFactory.getType(die); + locationExpression = new LocationExpression(die); } /** @@ -117,4 +127,18 @@ public class Subroutine extends Scope { throw new RuntimeException("Unhandled case DwTag: " + dwTag + " inline attribute " + inlineAttribute); } + + public Type getType(ISA isa) { + return this.type; + } + + 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; + + } } diff --git a/frysk-core/frysk/scopes/Variable.java b/frysk-core/frysk/scopes/Variable.java index 1fdfb4a..6aa55ef 100644 --- a/frysk-core/frysk/scopes/Variable.java +++ b/frysk-core/frysk/scopes/Variable.java @@ -40,7 +40,7 @@ package frysk.scopes; import java.io.PrintWriter; -import lib.dwfl.DwAttributeNotFoundException; + import lib.dwfl.DwException; import lib.dwfl.DwarfDie; import frysk.debuginfo.DebugInfoFrame; @@ -52,10 +52,10 @@ import frysk.debuginfo.VariableOptimizedOutException; import frysk.isa.ISA; import frysk.rsl.Log; import frysk.rsl.LogFactory; +import frysk.value.Format; import frysk.value.ObjectDeclaration; import frysk.value.Type; import frysk.value.Value; -import frysk.value.Format; /** * This class contains the static information corresponding to a @@ -79,12 +79,7 @@ public class Variable implements ObjectDeclaration { this.variableDie = variableDie; this.name = variableDie.getName(); locationExpression = new LocationExpression(variableDie); - try{ - this.sourceLocation = new SourceLocation(variableDie.getDeclFile(),variableDie.getDeclLine(), variableDie.getDeclColumn()); - }catch(DwAttributeNotFoundException e){ - this.sourceLocation = SourceLocation.UNKNOWN; - } - + sourceLocation = SourceLocationFactory.getSourceLocation(variableDie); } public DwarfDie getVariableDie() { hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-04-10 18:16 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=20080410181604.3629.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: linkBe 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).