public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Reintroduce frysk.symtab.Symbol
@ 2008-04-02 15:18 pmachata
  0 siblings, 0 replies; only message in thread
From: pmachata @ 2008-04-02 15:18 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  faa0a714fa42575226a1d6cd805d8541929beca1 (commit)
      from  01599825dd70ecd7ddaf5024197ed355f66bbcb0 (commit)

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

- Log -----------------------------------------------------------------
commit faa0a714fa42575226a1d6cd805d8541929beca1
Author: Petr Machata <pmachata@redhat.com>
Date:   Wed Apr 2 16:55:07 2008 +0200

    Reintroduce frysk.symtab.Symbol

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

Summary of changes:
 frysk-core/frysk/debuginfo/ChangeLog               |    5 --
 .../frysk/debuginfo/TestDebugInfoStackTrace.java   |    5 +-
 frysk-core/frysk/hpd/ChangeLog                     |    5 --
 frysk-core/frysk/hpd/DisassembleCommand.java       |    6 +-
 frysk-core/frysk/stack/ChangeLog                   |    9 ---
 frysk-core/frysk/stack/Frame.java                  |    6 +-
 frysk-core/frysk/stack/FrameDecorator.java         |    4 +-
 frysk-core/frysk/stack/LibunwindFrame.java         |    6 +-
 frysk-core/frysk/stack/TestFrameSymbol.java        |    4 +-
 .../frysk/stack/TestLibFunctionStepFrame.java      |    4 +-
 frysk-core/frysk/symtab/ChangeLog                  |    9 ---
 frysk-core/frysk/symtab/DwflSymbol.java            |    4 +-
 .../frysk/symtab/{DwflSymbol.java => Symbol.java}  |   64 +++++++++++++++++---
 frysk-core/frysk/symtab/SymbolFactory.java         |    5 +-
 frysk-core/frysk/symtab/TestSymbol.java            |    3 +-
 frysk-core/frysk/symtab/UnknownSymbol.java         |    4 +-
 frysk-core/frysk/testbed/ChangeLog                 |    5 --
 frysk-core/frysk/testbed/RegsCase.java             |    6 +-
 frysk-core/frysk/util/AuxvStringBuilder.java       |    6 +-
 frysk-core/frysk/util/ChangeLog                    |    5 --
 frysk-gui/frysk/gui/ChangeLog                      |    5 --
 .../frysk/gui/disassembler/DisassemblyWindow.java  |    4 +-
 frysk-sys/lib/dwfl/ChangeLog                       |    2 +-
 frysk-sys/lib/dwfl/ElfSymbol.java                  |   16 -----
 24 files changed, 87 insertions(+), 105 deletions(-)
 copy frysk-core/frysk/symtab/{DwflSymbol.java => Symbol.java} (62%)

First 500 lines of diff:
diff --git a/frysk-core/frysk/debuginfo/ChangeLog b/frysk-core/frysk/debuginfo/ChangeLog
index ed7eb76..9779c5d 100644
--- a/frysk-core/frysk/debuginfo/ChangeLog
+++ b/frysk-core/frysk/debuginfo/ChangeLog
@@ -21,11 +21,6 @@
 	* DebugInfoStackFactory.java: Update.
 	* TestFrameDebugInfo.java: Update.
 
-2008-03-21  Petr Machata  <pmachata@redhat.com>
-
-	* TestDebugInfoStackTrace: Use lib.dwfl.ElfSymbol instead of
-	frysk.symtab.Symbol.
-
 2008-03-19  Mark Wielaard  <mwielaard@redhat.com>
 
 	* TestDebugInfoStackTrace (frameAssertions): Also check for function
diff --git a/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java b/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java
index 31e3a6c..e932858 100644
--- a/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java
+++ b/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java
@@ -54,13 +54,12 @@ import frysk.stack.Frame;
 import frysk.stack.StackFactory;
 import frysk.stepping.SteppingEngine;
 import frysk.stepping.TaskStepEngine;
+import frysk.symtab.Symbol;
 import frysk.sys.Pid;
 import frysk.sys.Signal;
 import frysk.testbed.SynchronizedOffspring;
 import frysk.testbed.TestLib;
 
-import lib.dwfl.ElfSymbol;
-
 public class TestDebugInfoStackTrace
     extends TestLib
 {
@@ -148,7 +147,7 @@ public class TestDebugInfoStackTrace
   {
     DebugInfoFrame frame = DebugInfoStackFactory.createDebugInfoStackTrace(myTask);
     SourceLocation line;
-    ElfSymbol symbol;
+    Symbol symbol;
 
     assertNotNull(frame);
     assertNull(frame.getInner());
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index f0a926e..3cbe139 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -27,11 +27,6 @@
 	* TestListCommand.java (testListReverse): Test 'list -length' around PC.
 	* TestSysRoot.java (testHaveSysRoot()): Reactivate.
 
-2008-03-21  Petr Machata  <pmachata@redhat.com>
-
-	* DisassembleCommand.java: Use lib.dwfl.ElfSymbol instead of
-	frysk.symtab.Symbol.
-
 2008-03-20  Andrew Cagney  <cagney@redhat.com>
 
 	* StartRun.java: Use ProcTasksAction and ProcTasksObserver.
diff --git a/frysk-core/frysk/hpd/DisassembleCommand.java b/frysk-core/frysk/hpd/DisassembleCommand.java
index bab2cad..19f19e0 100644
--- a/frysk-core/frysk/hpd/DisassembleCommand.java
+++ b/frysk-core/frysk/hpd/DisassembleCommand.java
@@ -43,10 +43,10 @@ import java.util.Iterator;
 import java.util.List;
 import frysk.debuginfo.DebugInfoFrame;
 import frysk.proc.Task;
+import frysk.symtab.Symbol;
 import frysk.symtab.SymbolFactory;
 import lib.opcodes.Disassembler;
 import lib.opcodes.Instruction;
-import lib.dwfl.ElfSymbol;
 
 public class DisassembleCommand extends ParameterizedCommand {
 
@@ -108,7 +108,7 @@ public class DisassembleCommand extends ParameterizedCommand {
 		continue;
 	    DebugInfoFrame frame = cli.getTaskFrame(task);
 	    long currentInstruction = frame.getAddress();
-	    ElfSymbol symbol = frame.getSymbol();
+	    Symbol symbol = frame.getSymbol();
 
 	    Disassembler disassembler = new Disassembler(task.getMemory());
 	    cli.outWriter.println("[" + data.getParentID() + "." + data.getID()
@@ -257,7 +257,7 @@ public class DisassembleCommand extends ParameterizedCommand {
 	}
 
 	public String toPrint(Instruction instruction) {
-	    ElfSymbol symbol = SymbolFactory.getSymbol(task, instruction.address);
+	    Symbol symbol = SymbolFactory.getSymbol(task, instruction.address);
 	    return printer.toPrint(instruction)
 		    + "<"
 		    + symbol.getName()
diff --git a/frysk-core/frysk/stack/ChangeLog b/frysk-core/frysk/stack/ChangeLog
index 197820c..f0d9d75 100644
--- a/frysk-core/frysk/stack/ChangeLog
+++ b/frysk-core/frysk/stack/ChangeLog
@@ -16,15 +16,6 @@
 
 	* Frame.java: Added check to check for vdso before prepending path.
 
-2008-03-21  Petr Machata  <pmachata@redhat.com>
-
-	* Frame.java: Use lib.dwfl.ElfSymbol instead of
-	frysk.symtab.Symbol.
-	* FrameDecorator.java: Likewise.
-	* LibunwindFrame.java: Likewise.
-	* TestFrameSymbol.java: Likewise.
-	* TestLibFunctionStepFrame.java: Likewise.
-
 2008-03-19  Mark Wielaard  <mwielaard@redhat.com>
 
 	* TestLibFunctionStepFrame.java: No longer unresolved on x86_64.
diff --git a/frysk-core/frysk/stack/Frame.java b/frysk-core/frysk/stack/Frame.java
index a19e982..876735c 100644
--- a/frysk-core/frysk/stack/Frame.java
+++ b/frysk-core/frysk/stack/Frame.java
@@ -45,12 +45,12 @@ import java.io.StringWriter;
 
 import lib.dwfl.Dwfl;
 import lib.dwfl.DwflModule;
-import lib.dwfl.ElfSymbol;
 import frysk.dwfl.DwflCache;
 import frysk.dwfl.DwflFactory;
 import frysk.isa.registers.Register;
 import frysk.proc.Task;
 import frysk.rsl.Log;
+import frysk.symtab.Symbol;
 import frysk.symtab.SymbolFactory;
 import frysk.value.ScratchLocation;
 import frysk.value.Value;
@@ -166,7 +166,7 @@ public abstract class Frame {
 	    writer.write('0');
 	writer.write(addr);
 	// the symbol, if known append (), ..
-	ElfSymbol symbol = getSymbol();
+	Symbol symbol = getSymbol();
 	writer.write(" in ");
 	writer.write(symbol.getDemangledName());
 	if (symbol != SymbolFactory.UNKNOWN)
@@ -255,6 +255,6 @@ public abstract class Frame {
     /**
      * Return this frame's symbol; UNKNOWN if there is no symbol.
      */
-    public abstract ElfSymbol getSymbol ();
+    public abstract Symbol getSymbol ();
   
 }
diff --git a/frysk-core/frysk/stack/FrameDecorator.java b/frysk-core/frysk/stack/FrameDecorator.java
index 7b35f49..38c6f09 100644
--- a/frysk-core/frysk/stack/FrameDecorator.java
+++ b/frysk-core/frysk/stack/FrameDecorator.java
@@ -39,7 +39,7 @@
 
 package frysk.stack;
 
-import lib.dwfl.ElfSymbol;
+import frysk.symtab.Symbol;
 import frysk.isa.registers.Register;
 
 /**
@@ -81,7 +81,7 @@ public abstract class FrameDecorator extends Frame {
 	return undecoratedFrame.getFrameIdentifier();
     }
 
-    public ElfSymbol getSymbol() {
+    public Symbol getSymbol() {
 	return undecoratedFrame.getSymbol();
     }
     
diff --git a/frysk-core/frysk/stack/LibunwindFrame.java b/frysk-core/frysk/stack/LibunwindFrame.java
index ae016ed..08ee6d3 100644
--- a/frysk-core/frysk/stack/LibunwindFrame.java
+++ b/frysk-core/frysk/stack/LibunwindFrame.java
@@ -42,16 +42,16 @@ package frysk.stack;
 import frysk.rsl.Log;
 import frysk.isa.registers.Register;
 import lib.unwind.Cursor;
-import lib.dwfl.ElfSymbol;
 import frysk.isa.ISA;
 import frysk.proc.Task;
+import frysk.symtab.Symbol;
 import frysk.symtab.SymbolFactory;
 import frysk.isa.registers.RegisterMap;
 
 class LibunwindFrame extends Frame {  
     private static final Log fine = Log.fine(LibunwindFrame.class);
 
-    private ElfSymbol symbol;
+    private Symbol symbol;
   
     /* Identifies this frame by its CFA and frame start address */
     private FrameIdentifier frameIdentifier;
@@ -177,7 +177,7 @@ class LibunwindFrame extends Frame {
     /**
      * Return this frame's symbol; UNKNOWN if there is no symbol.
      */
-    public ElfSymbol getSymbol() {
+    public Symbol getSymbol() {
 	if (symbol == null) {
 	    symbol = SymbolFactory.getSymbol(getTask(), getAdjustedAddress());
 	}
diff --git a/frysk-core/frysk/stack/TestFrameSymbol.java b/frysk-core/frysk/stack/TestFrameSymbol.java
index 818d6ec..c5a8bde 100644
--- a/frysk-core/frysk/stack/TestFrameSymbol.java
+++ b/frysk-core/frysk/stack/TestFrameSymbol.java
@@ -39,7 +39,7 @@
 
 package frysk.stack;
 
-import lib.dwfl.ElfSymbol;
+import frysk.symtab.Symbol;
 import frysk.proc.Task;
 import frysk.stack.Frame;
 import frysk.stack.StackFactory;
@@ -66,7 +66,7 @@ public class TestFrameSymbol
 	// the inner-most frame's symbol matches the expected.
 	Frame frame = StackFactory.createFrame(task);
 
-	ElfSymbol symbol = frame.getSymbol ();
+	Symbol symbol = frame.getSymbol ();
 	assertEquals ("symbol's demangled name", "global_st_size",
 		      symbol.getDemangledName ());
 	assertTrue ("symbol address valid", symbol.getAddress() != 0);
diff --git a/frysk-core/frysk/stack/TestLibFunctionStepFrame.java b/frysk-core/frysk/stack/TestLibFunctionStepFrame.java
index 329dc4b..399ccc1 100644
--- a/frysk-core/frysk/stack/TestLibFunctionStepFrame.java
+++ b/frysk-core/frysk/stack/TestLibFunctionStepFrame.java
@@ -47,8 +47,8 @@ import frysk.config.*;
 import frysk.testbed.*;
 
 import frysk.proc.*;
+import frysk.symtab.*;
 import frysk.rt.*;
-import lib.dwfl.ElfSymbol;
 
 /**
  * Test making sure all frames are available when stepping (twice)
@@ -164,7 +164,7 @@ public class TestLibFunctionStepFrame
   // frame.
   private void assertFooAndMainOuterFrames(String message, Frame frame)
   {
-    ElfSymbol sym = frame.getSymbol();
+    Symbol sym = frame.getSymbol();
     String name = sym.getName();
     boolean ok = name.indexOf("foo") == -1 && name.indexOf("main") == -1;
     if (! ok)
diff --git a/frysk-core/frysk/symtab/ChangeLog b/frysk-core/frysk/symtab/ChangeLog
index b79633d..1617f89 100644
--- a/frysk-core/frysk/symtab/ChangeLog
+++ b/frysk-core/frysk/symtab/ChangeLog
@@ -1,14 +1,5 @@
 2008-03-21  Petr Machata  <pmachata@redhat.com>
 
-	* Symbol.java: Merged with lib.dwfl.ElfSymbol, dropped.
-	* SymbolFactory.java: Use lib.dwfl.ElfSymbol instead of
-	frysk.symtab.Symbol.
-	* TestSymbol.java: Likewise.
-	* UnknownSymbol.java: Likewise.
-	* DwflSymbol.java: Likewise.
-
-2008-03-21  Petr Machata  <pmachata@redhat.com>
-
 	* Symbol.java: Straighten dataflow here: internal data are set via
 	ctor and are final, instead of using "symbol" method for that.
 	(symbol): Two methods of that name erased.
diff --git a/frysk-core/frysk/symtab/DwflSymbol.java b/frysk-core/frysk/symtab/DwflSymbol.java
index 1374bd3..eab98cf 100644
--- a/frysk-core/frysk/symtab/DwflSymbol.java
+++ b/frysk-core/frysk/symtab/DwflSymbol.java
@@ -46,10 +46,8 @@ package frysk.symtab;
  * function names, obtained from debug information such as DWARF.
  */
 
-import lib.dwfl.ElfSymbol;
-
 class DwflSymbol
-    extends ElfSymbol
+    extends Symbol
 {
     // package private constructor.
     DwflSymbol(long address, long size, String name) {
diff --git a/frysk-core/frysk/symtab/DwflSymbol.java b/frysk-core/frysk/symtab/Symbol.java
similarity index 62%
copy from frysk-core/frysk/symtab/DwflSymbol.java
copy to frysk-core/frysk/symtab/Symbol.java
index 1374bd3..fae9612 100644
--- a/frysk-core/frysk/symtab/DwflSymbol.java
+++ b/frysk-core/frysk/symtab/Symbol.java
@@ -1,6 +1,6 @@
 // This file is part of the program FRYSK.
 //
-// Copyright 2007, Red Hat Inc.
+// Copyright 2007, 2008, Red Hat Inc.
 //
 // FRYSK is free software; you can redistribute it and/or modify it
 // under the terms of the GNU General Public License as published by
@@ -39,20 +39,68 @@
 
 package frysk.symtab;
 
+import lib.stdcpp.Demangler;
+
 /**
- * A dwfl based symbol.
+ * The object-file symbol.  Typically obtained by reading ELF
+ * information.
  *
  * Do not confuse this with higher-level symbolic information, such as
  * function names, obtained from debug information such as DWARF.
  */
 
-import lib.dwfl.ElfSymbol;
+public class Symbol {
+
+    private final long address;
+    private final long size;
+    private final String name;
+    protected String demangledName = null;
 
-class DwflSymbol
-    extends ElfSymbol
-{
     // package private constructor.
-    DwflSymbol(long address, long size, String name) {
-	super (address, size, name);
+    Symbol(long address, long size, String name) {
+	this.address = address;
+	this.size = size;
+	this.name = name;
+    }
+
+    /**
+     * Return the address of the symbol.
+     */
+    public long getAddress () {
+	return address;
+    }
+
+    /**
+     * Return the size of the symbol (possibly zero).
+     */
+    public long getSize () {
+	return size;
+    }
+
+    /**
+     * Return the mangled name (the raw string found in the symbol
+     * table).  Or NULL, of the name is unknown.
+     */
+    public String getName () {
+	return name;
+    }
+
+    /**
+     * Return the demangled name, or "" of the name isn't known.
+     *
+     * XXX: Is returning "" better than null?  Sounds like a cheat for
+     * code that should be conditional on the symbol being known.
+     */
+    public String getDemangledName () {
+	if (demangledName == null)
+	    demangledName = Demangler.demangle (getName());
+	return demangledName;
+    }
+
+    /**
+     * Dump the symbol's contents.
+     */
+    public String toString () {
+	return name + "@" + Long.toHexString (address) + ":" + size;
     }
 }
diff --git a/frysk-core/frysk/symtab/SymbolFactory.java b/frysk-core/frysk/symtab/SymbolFactory.java
index 3cae10e..81e4f9e 100644
--- a/frysk-core/frysk/symtab/SymbolFactory.java
+++ b/frysk-core/frysk/symtab/SymbolFactory.java
@@ -50,7 +50,6 @@ import frysk.rsl.LogFactory;
 import lib.dwfl.Dwfl;
 import lib.dwfl.DwflModule;
 import lib.dwfl.SymbolBuilder;
-import lib.dwfl.ElfSymbol;
 
 /**
  * The object-file symbol.  Typically obtained by reading ELF
@@ -67,12 +66,12 @@ public class SymbolFactory
     /**
      * A special unknown symbol.
      */
-    public static final ElfSymbol UNKNOWN = new UnknownSymbol ();
+    public static final Symbol UNKNOWN = new UnknownSymbol ();
 
    /**
     * Return the symbol at the specified address within task.
     */
-    public static ElfSymbol getSymbol(Task task, long address) {
+    public static Symbol getSymbol(Task task, long address) {
 	Dwfl dwfl = DwflCache.getDwfl(task);
 	if (dwfl == null)
 	    return UNKNOWN;
diff --git a/frysk-core/frysk/symtab/TestSymbol.java b/frysk-core/frysk/symtab/TestSymbol.java
index 8058b4d..79bf39a 100644
--- a/frysk-core/frysk/symtab/TestSymbol.java
+++ b/frysk-core/frysk/symtab/TestSymbol.java
@@ -42,7 +42,6 @@ package frysk.symtab;
 import frysk.proc.Task;
 import frysk.testbed.TestLib;
 import frysk.testbed.DaemonBlockedAtSignal;
-import lib.dwfl.ElfSymbol;
 
 public class TestSymbol
     extends TestLib
@@ -63,7 +62,7 @@ public class TestSymbol
     	Task task = daemon.getMainTask();
 
 	long pc = task.getPC();
-	ElfSymbol symbol = SymbolFactory.getSymbol(task, pc);
+	Symbol symbol = SymbolFactory.getSymbol(task, pc);
 	assertEquals ("symbol name", name, symbol.getDemangledName ());
 	assertEquals ("symbol address valid", addressValid,
 		      symbol.getAddress() != 0);
diff --git a/frysk-core/frysk/symtab/UnknownSymbol.java b/frysk-core/frysk/symtab/UnknownSymbol.java
index ebdbf98..13b1933 100644
--- a/frysk-core/frysk/symtab/UnknownSymbol.java
+++ b/frysk-core/frysk/symtab/UnknownSymbol.java
@@ -39,14 +39,12 @@
 
 package frysk.symtab;
 
-import lib.dwfl.ElfSymbol;
-
 /**
  * An unknown-symbol; a singleton.
  */
 
 class UnknownSymbol
-    extends ElfSymbol
+    extends Symbol
 {
     UnknownSymbol() {
 	super(0, -1, "[unknown]");
diff --git a/frysk-core/frysk/testbed/ChangeLog b/frysk-core/frysk/testbed/ChangeLog
index 06ad371..9c2d310 100644
--- a/frysk-core/frysk/testbed/ChangeLog
+++ b/frysk-core/frysk/testbed/ChangeLog
@@ -1,8 +1,3 @@
-2008-03-21  Petr Machata  <pmachata@redhat.com>
-
-	* RegsCase.java: Use lib.dwfl.ElfSymbol instead of
-	frysk.symtab.Symbol.
-
 2008-03-17  Andrew Cagney  <cagney@redhat.com>
 
 	* CoredumpAction.java: Extend ProcBlockObserver.
diff --git a/frysk-core/frysk/testbed/RegsCase.java b/frysk-core/frysk/testbed/RegsCase.java
index 8acaf14..ca97ca0 100644
--- a/frysk-core/frysk/testbed/RegsCase.java
+++ b/frysk-core/frysk/testbed/RegsCase.java
@@ -56,7 +56,7 @@ import java.util.LinkedHashMap;
 import java.util.Iterator;
 import java.math.BigInteger;
 import inua.eio.ByteOrder;
-import lib.dwfl.ElfSymbol;
+import frysk.symtab.Symbol;
 import frysk.symtab.SymbolFactory;
 
 /**
@@ -245,8 +245,8 @@ public abstract class RegsCase extends TestLib {
 	void checkValue(Register register) { }
 	void checkRegister(RegsCase c, Register register) {
 	    BigInteger value = registerValue(c, register);
-	    ElfSymbol check = SymbolFactory.getSymbol(c.task(),
-						      value.longValue());
+	    Symbol check = SymbolFactory.getSymbol(c.task(),
+						   value.longValue());
 	    RegsCase.assertEquals(register.getName(), correct,
 				  check.getName());
 	}
diff --git a/frysk-core/frysk/util/AuxvStringBuilder.java b/frysk-core/frysk/util/AuxvStringBuilder.java
index 865a305..69d0ceb 100644
--- a/frysk-core/frysk/util/AuxvStringBuilder.java
+++ b/frysk-core/frysk/util/AuxvStringBuilder.java
@@ -42,7 +42,7 @@ import inua.eio.ByteBuffer;
 import inua.elf.AT;
 import frysk.proc.Auxv;
 import frysk.proc.Proc;
-import lib.dwfl.ElfSymbol;
+import frysk.symtab.Symbol;
 import frysk.symtab.SymbolFactory;
 
 
@@ -62,8 +62,8 @@ public abstract class AuxvStringBuilder
 	    value = "0x"+Long.toHexString(rawAuxv[i].val);
 	    break;
 	case 9:
-	    ElfSymbol symbol = SymbolFactory.getSymbol(mainProc.getMainTask(),
-						       rawAuxv[i].val);
+	    Symbol symbol = SymbolFactory.getSymbol(mainProc.getMainTask(), 
+		    rawAuxv[i].val);


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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-04-02 15:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-02 15:18 [SCM] master: Reintroduce frysk.symtab.Symbol pmachata

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).