public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: pmachata@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Reintroduce frysk.symtab.Symbol Date: Wed, 02 Apr 2008 15:18:00 -0000 [thread overview] Message-ID: <20080402151831.22709.qmail@sourceware.org> (raw) 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
reply other threads:[~2008-04-02 15:18 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=20080402151831.22709.qmail@sourceware.org \ --to=pmachata@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).