From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22758 invoked by alias); 2 Apr 2008 15:18:34 -0000 Received: (qmail 22724 invoked by uid 9697); 2 Apr 2008 15:18:31 -0000 Date: Wed, 02 Apr 2008 15:18:00 -0000 Message-ID: <20080402151831.22709.qmail@sourceware.org> From: pmachata@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Reintroduce frysk.symtab.Symbol X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 01599825dd70ecd7ddaf5024197ed355f66bbcb0 X-Git-Newrev: faa0a714fa42575226a1d6cd805d8541929beca1 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00019.txt.bz2 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 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 - - * TestDebugInfoStackTrace: Use lib.dwfl.ElfSymbol instead of - frysk.symtab.Symbol. - 2008-03-19 Mark Wielaard * 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 - - * DisassembleCommand.java: Use lib.dwfl.ElfSymbol instead of - frysk.symtab.Symbol. - 2008-03-20 Andrew Cagney * 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 - - * 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 * 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 - * 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 - * 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 - - * RegsCase.java: Use lib.dwfl.ElfSymbol instead of - frysk.symtab.Symbol. - 2008-03-17 Andrew Cagney * 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