public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Straighten dataflow in symtab package
@ 2008-04-01 16:29 pmachata
  0 siblings, 0 replies; only message in thread
From: pmachata @ 2008-04-01 16:29 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  89357dc08ace444dcd728b44da5985eb6b5f2406 (commit)
       via  525f9102034e7598e68b2124042fe67bc814c429 (commit)
       via  15d74182a68f23a3b1bc86cd1fe950e5b8fbbb9d (commit)
      from  ff5c661252807c07e2bd8a43b0bb10a063aa6604 (commit)

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

- Log -----------------------------------------------------------------
commit 89357dc08ace444dcd728b44da5985eb6b5f2406
Author: Petr Machata <pmachata@redhat.com>
Date:   Fri Mar 21 14:47:29 2008 +0100

    Straighten dataflow in symtab package

commit 525f9102034e7598e68b2124042fe67bc814c429
Author: Petr Machata <pmachata@redhat.com>
Date:   Thu Mar 20 23:34:16 2008 +0100

    Use dedicated types for type/binding/visibility in SymbolBuilder

commit 15d74182a68f23a3b1bc86cd1fe950e5b8fbbb9d
Author: Petr Machata <pmachata@redhat.com>
Date:   Fri Mar 21 13:43:03 2008 +0100

    Add new logging functions

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

Summary of changes:
 frysk-core/frysk/proc/ChangeLog                    |    5 ++
 frysk-core/frysk/proc/TestInstructions.java        |    4 +-
 frysk-core/frysk/proc/dead/ChangeLog               |    5 ++
 frysk-core/frysk/proc/dead/TestLinuxCore.java      |    4 +-
 frysk-core/frysk/proc/live/ChangeLog               |   14 ++++
 .../frysk/proc/live/TestTaskObserverCode.java      |    4 +-
 frysk-core/frysk/symtab/ChangeLog                  |   15 ++++
 frysk-core/frysk/symtab/DwflSymbol.java            |    9 +--
 frysk-core/frysk/symtab/Symbol.java                |   16 +---
 frysk-core/frysk/symtab/SymbolFactory.java         |   47 +++++++++---
 frysk-core/frysk/symtab/UnknownSymbol.java         |    2 +-
 frysk-sys/frysk/rsl/ChangeLog                      |   16 ++++
 frysk-sys/frysk/rsl/Log.java                       |   22 ++++++-
 frysk-sys/lib/dwfl/ChangeLog                       |   11 +++
 frysk-sys/lib/dwfl/SymbolBuilder.java              |    6 +-
 frysk-sys/lib/dwfl/cni/DwflModule.cxx              |   73 ++++++++++++--------
 16 files changed, 188 insertions(+), 65 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog
index f9653af..6a11424 100644
--- a/frysk-core/frysk/proc/ChangeLog
+++ b/frysk-core/frysk/proc/ChangeLog
@@ -19,6 +19,11 @@
 	* StressAttachDetachRapidlyForkingMainTask.java: Update.
 	* TestProcTasksObserver.java: Update.
 
+2008-03-20  Petr Machata  <pmachata@redhat.com>
+
+	* TestInstructions.java (Symbol): Pass type, bind, visibility as
+	full-fledged objects.
+
 2008-03-17  Andrew Cagney  <cagney@redhat.com>
 
 	* TestTaskObserver.java (attachDieingTask(int,boolean)): Do not
diff --git a/frysk-core/frysk/proc/TestInstructions.java b/frysk-core/frysk/proc/TestInstructions.java
index 698de98..c91eb3d 100644
--- a/frysk-core/frysk/proc/TestInstructions.java
+++ b/frysk-core/frysk/proc/TestInstructions.java
@@ -111,7 +111,9 @@ public class TestInstructions
     }
 
     public void symbol(String name, long value, long size,
-		       int type, int bind, int visibility)
+		       ElfSymbolType type,
+		       ElfSymbolBinding bind,
+		       ElfSymbolVisibility visibility)
     {
       if (name.equals(this.name))
 	{
diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog
index 78157b4..38def17 100644
--- a/frysk-core/frysk/proc/dead/ChangeLog
+++ b/frysk-core/frysk/proc/dead/ChangeLog
@@ -21,6 +21,11 @@
 	(createProc): Likewise.
 	* LinuxCoreProc.java (getExeFile): New.
 
+2008-03-20  Petr Machata  <pmachata@redhat.com>
+
+	* TestLinuxCore.java (Symbol): Pass type, bind, visibility as
+	full-fledged objects.
+
 2008-03-17  Andrew Cagney  <cagney@redhat.com>
 
 	* DeadProc.java (requestRefresh()): Delete.
diff --git a/frysk-core/frysk/proc/dead/TestLinuxCore.java b/frysk-core/frysk/proc/dead/TestLinuxCore.java
index 4e272f4..3102867 100644
--- a/frysk-core/frysk/proc/dead/TestLinuxCore.java
+++ b/frysk-core/frysk/proc/dead/TestLinuxCore.java
@@ -487,7 +487,9 @@ public class TestLinuxCore extends TestLib {
     }
 
     public void symbol(String name, long value, long size,
-                       int type, int bind, int visibility)
+		       lib.dwfl.ElfSymbolType type,
+		       lib.dwfl.ElfSymbolBinding bind,
+		       lib.dwfl.ElfSymbolVisibility visibility)
     {
       if (name.equals(this.name))
         {
diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog
index 1a63ddd..916c297 100644
--- a/frysk-core/frysk/proc/live/ChangeLog
+++ b/frysk-core/frysk/proc/live/ChangeLog
@@ -6,6 +6,20 @@
 
 	* LinuxPtraceProc.java (getExeFile): New.
 
+2008-03-26  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* Isa.java (setWatchpoint): New Interface
+	(deleteWatchpoint): Ditto.
+	(getWatchpointCount): Ditto.
+	* LinuxX8664.java: Add above interfaces.
+	* LinuxIA32.java: Ditto.
+	* IsaPowerPC.java: Ditto.
+
+2008-03-20  Petr Machata  <pmachata@redhat.com>
+
+	* TestTaskObserverCode.java (Symbol): Pass type, bind, visibility
+	as full-fledged objects.
+
 2008-03-18  Andrew Cagney  <cagney@redhat.com>
 
 	* LinuxPtraceHost.java (removeProc(LinuxPtraceProc)): Replace
diff --git a/frysk-core/frysk/proc/live/TestTaskObserverCode.java b/frysk-core/frysk/proc/live/TestTaskObserverCode.java
index dbb9922..62108f2 100644
--- a/frysk-core/frysk/proc/live/TestTaskObserverCode.java
+++ b/frysk-core/frysk/proc/live/TestTaskObserverCode.java
@@ -355,7 +355,9 @@ public class TestTaskObserverCode extends TestLib
     }
     
     public void symbol(String name, long value, long size,
-		       int type, int bind, int visibility)
+		       lib.dwfl.ElfSymbolType type,
+		       lib.dwfl.ElfSymbolBinding bind,
+		       lib.dwfl.ElfSymbolVisibility visibility)
     {
       if (name.equals(this.name))
 	{
diff --git a/frysk-core/frysk/symtab/ChangeLog b/frysk-core/frysk/symtab/ChangeLog
index d04147d..1617f89 100644
--- a/frysk-core/frysk/symtab/ChangeLog
+++ b/frysk-core/frysk/symtab/ChangeLog
@@ -1,3 +1,18 @@
+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.
+	* DwflSymbol.java: Don't implement SymbolBuilder.
+	* SymbolFactory.java (getSymbol): Implement builder locally.
+	* UnknownSymbol.java: Call super ctor instead of super.symbol.
+
+2008-03-20  Petr Machata  <pmachata@redhat.com>
+
+	* DwflSymbol.java: Pass type, bind, visibility as full-fledged
+	objects.
+	* SymbolFactory.java (getSymbol): Likewise.
+
 2008-03-14  Tim Moore  <timoore@redhat.com>
 
 	* TestSymbol.java (testLocalInGlobal, testNoSymbolAfterGlobal
diff --git a/frysk-core/frysk/symtab/DwflSymbol.java b/frysk-core/frysk/symtab/DwflSymbol.java
index b6035c1..eab98cf 100644
--- a/frysk-core/frysk/symtab/DwflSymbol.java
+++ b/frysk-core/frysk/symtab/DwflSymbol.java
@@ -39,8 +39,6 @@
 
 package frysk.symtab;
 
-import lib.dwfl.SymbolBuilder;
-
 /**
  * A dwfl based symbol.
  *
@@ -50,10 +48,9 @@ import lib.dwfl.SymbolBuilder;
 
 class DwflSymbol
     extends Symbol
-    implements SymbolBuilder
 {
-    public void symbol(String name, long value, long size, int type,
-		       int bind, int visibility) {
-	super.symbol(value, size, name);
+    // package private constructor.
+    DwflSymbol(long address, long size, String name) {
+	super (address, size, name);
     }
 }
diff --git a/frysk-core/frysk/symtab/Symbol.java b/frysk-core/frysk/symtab/Symbol.java
index 617ec8e..767ac5e 100644
--- a/frysk-core/frysk/symtab/Symbol.java
+++ b/frysk-core/frysk/symtab/Symbol.java
@@ -52,25 +52,17 @@ import lib.stdcpp.Demangler;
 public class Symbol
 {
     // The symbol's fields.
-    private long address;
-    private long size;
-    private String name;
+    private final long address;
+    private final long size;
+    private final String name;
     private String demangledName;
 
     // package private constructor.
-    Symbol() {
-    }
-
-    void symbol(long address, long size, String name) {
+    Symbol(long address, long size, String name) {
 	this.address = address;
 	this.size = size;
 	this.name = name;
     }
-    void symbol(long address, String name) {
-	this.address = address;
-	this.size = 0;
-	this.name = name;
-    }
 
     /**
      * Return the address of the symbol.
diff --git a/frysk-core/frysk/symtab/SymbolFactory.java b/frysk-core/frysk/symtab/SymbolFactory.java
index 70ecf22..81e4f9e 100644
--- a/frysk-core/frysk/symtab/SymbolFactory.java
+++ b/frysk-core/frysk/symtab/SymbolFactory.java
@@ -41,8 +41,12 @@
 package frysk.symtab;
 
 import java.util.LinkedList;
-import frysk.proc.Task;
+
 import frysk.dwfl.DwflCache;
+import frysk.proc.Task;
+import frysk.rsl.Log;
+import frysk.rsl.LogFactory;
+
 import lib.dwfl.Dwfl;
 import lib.dwfl.DwflModule;
 import lib.dwfl.SymbolBuilder;
@@ -57,6 +61,8 @@ import lib.dwfl.SymbolBuilder;
 
 public class SymbolFactory
 {
+    private static final Log warning = LogFactory.warning(SymbolFactory.class);
+
     /**
      * A special unknown symbol.
      */
@@ -74,14 +80,29 @@ public class SymbolFactory
 	if (module == null)
 	    return UNKNOWN;
 
-	DwflSymbol symbol = new DwflSymbol();
-	module.getSymbol(address, symbol);
-	if (symbol.getName() == null)
+	class Builder implements SymbolBuilder {
+	    public DwflSymbol symbol = null;
+	    public void symbol(String name, long value, long size,
+			       lib.dwfl.ElfSymbolType type,
+			       lib.dwfl.ElfSymbolBinding bind,
+			       lib.dwfl.ElfSymbolVisibility visibility)
+	    {
+		if (symbol != null)
+		    warning.log("Symbol", name, "reported on address", value,
+				"where symbol was already reported:", symbol.getName());
+		else if (name != null)
+		    symbol = new DwflSymbol (value, size, name);
+	    }
+	}
+	Builder builder = new Builder();
+
+	module.getSymbol(address, builder);
+	if (builder.symbol == null)
 	    return UNKNOWN;
 
-	return symbol;
+	return builder.symbol;
     }
-    
+
     /**
      * Get address list by symbol name.
      * @param task
@@ -94,14 +115,16 @@ public class SymbolFactory
 	final LinkedList addrs = new LinkedList();
 	SymbolBuilder builder = new SymbolBuilder() {
 		public void symbol(String name, long value, long size,
-				   int type, int bind, int visibility) {
-		    addrs.add(new Long(value));		    
-		}	    
+				   lib.dwfl.ElfSymbolType type,
+				   lib.dwfl.ElfSymbolBinding bind,
+				   lib.dwfl.ElfSymbolVisibility visibility)
+		{
+		    addrs.add(new Long(value));
+		}
 	};
-	for (int i = 0; i < modules.length; i++)
-	{
+	for (int i = 0; i < modules.length; i++) {
 	    DwflModule module = modules[i];
-	    module.getSymbolByName(name, builder);	    
+	    module.getSymbolByName(name, builder);
 	}
 	if (addrs.size() == 0)
 	    throw new RuntimeException("Couldn't find symbol " + name);
diff --git a/frysk-core/frysk/symtab/UnknownSymbol.java b/frysk-core/frysk/symtab/UnknownSymbol.java
index 13ca331..314c437 100644
--- a/frysk-core/frysk/symtab/UnknownSymbol.java
+++ b/frysk-core/frysk/symtab/UnknownSymbol.java
@@ -47,7 +47,7 @@ class UnknownSymbol
     extends Symbol
 {
     UnknownSymbol() {
-	super.symbol(0, -1, "[unknown]");
+	super(0, -1, "[unknown]");
     }
     public String getDemangledName () {
 	return "[unknown]";
diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog
index 9389696..27d3ded 100644
--- a/frysk-sys/frysk/rsl/ChangeLog
+++ b/frysk-sys/frysk/rsl/ChangeLog
@@ -1,3 +1,19 @@
+2008-03-31  Petr Machata  <pmachata@redhat.com>
+
+	* Log.java (log(String,Object,String,long,String,long)): New.
+
+2008-03-28  Petr Machata  <pmachata@redhat.com>
+
+	* Log.java (log(String,Object,String,Object,String,long)): New.
+
+2008-03-21  Petr Machata  <pmachata@redhat.com>
+
+	* Log.java (log(String,int,String)): New.
+
+2008-03-21  Petr Machata  <pmachata@redhat.com>
+
+	* Log.java (log(String,Object,String,long,String,Object)): New.
+
 2008-03-17  Andrew Cagney  <cagney@redhat.com>
 
 	* Log.java (log(String,Object,String,Object,String,int)): New.
diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Log.java
index 2ceaac4..1c5d705 100644
--- a/frysk-sys/frysk/rsl/Log.java
+++ b/frysk-sys/frysk/rsl/Log.java
@@ -389,6 +389,11 @@ public final class Log {
     }
 
     // static 3 parameters
+    public void log(String p1, int p2, String p3) {
+	if (!logging)
+	    return;
+	prefix().print(p1).print(p2).print(p3).suffix();
+    }
     public void log(String p1, Object p2, String p3) {
 	if (!logging)
 	    return;
@@ -447,6 +452,21 @@ public final class Log {
 	    return;
 	prefix().print(p1).print(p2).print(p3).print(p4).print(p5).print(p6).suffix();
     }
+    public void log(String p1, Object p2, String p3, Object p4, String p5, long p6) {
+	if (!logging)
+	    return;
+	prefix().print(p1).print(p2).print(p3).print(p4).print(p5).print(p6).suffix();
+    }
+    public void log(String p1, Object p2, String p3, long p4, String p5, Object p6) {
+	if (!logging)
+	    return;
+	prefix().print(p1).print(p2).print(p3).print(p4).print(p5).print(p6).suffix();
+    }
+    public void log(String p1, Object p2, String p3, long p4, String p5, long p6) {
+	if (!logging)
+	    return;
+	prefix().print(p1).print(p2).print(p3).print(p4).print(p5).print(p6).suffix();
+    }
 
     // static 8 parameters
     public void log(String p1, int p2, String p3, Object p4, String p5, Object p6, String p7, int p8) {
@@ -469,7 +489,7 @@ public final class Log {
 	    return;
 	prefix().print(p1).print(p2).print(p3).print(p4).print(p5).print(p6).print(p7).print(p8).suffix();
     }
-    
+
     // Non-static log methods; first parameter is the object.
 
     // dynamic 1 parameter
diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog
index d7fe24a..92193b0 100644
--- a/frysk-sys/lib/dwfl/ChangeLog
+++ b/frysk-sys/lib/dwfl/ChangeLog
@@ -3,6 +3,17 @@
 	* cni/DwflLine.cxx (DwflLine::dwfl_linecomp_dir): added
 	NULL check.
 
+2008-03-20  Petr Machata  <pmachata@redhat.com>
+	
+	* SymbolBuilder.java: Pass type, bind, visibility as full-fledged
+	objects.
+	* cni/DwflModule.cxx (builder_callout): New function, calls
+	builder with the right arguments.
+	(getSymbol): Reindent, call builder_callout
+	(getSymbolByName): call builder_callout
+	(callback): Rename to each_pubname
+	(get_pubnames): Adjust to above
+
 2008-03-13  Tim Moore  <timoore@redhat.com>
 
 	* cni/Dwfl.cxx: Add declaration for elfutils'
diff --git a/frysk-sys/lib/dwfl/SymbolBuilder.java b/frysk-sys/lib/dwfl/SymbolBuilder.java
index d98cb35..9b7e8d1 100644
--- a/frysk-sys/lib/dwfl/SymbolBuilder.java
+++ b/frysk-sys/lib/dwfl/SymbolBuilder.java
@@ -41,6 +41,8 @@ package lib.dwfl;
 
 public interface SymbolBuilder
 {
-  void symbol (String name, long value, long size, int type, int bind,
-	       int visibility);
+  void symbol (String name, long value, long size,
+	       ElfSymbolType type,
+	       ElfSymbolBinding bind,
+	       ElfSymbolVisibility visibility);
 }
diff --git a/frysk-sys/lib/dwfl/cni/DwflModule.cxx b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
index 5cfdd09..e76aef2 100644
--- a/frysk-sys/lib/dwfl/cni/DwflModule.cxx
+++ b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
@@ -51,6 +51,9 @@
 #include "lib/dwfl/ModuleElfBias.h"
 #include "lib/dwfl/SymbolBuilder.h"
 #include "lib/dwfl/Elf.h"
+#include "lib/dwfl/ElfSymbolBinding.h"
+#include "lib/dwfl/ElfSymbolType.h"
+#include "lib/dwfl/ElfSymbolVisibility.h"
 #include "lib/dwfl/DwarfDieFactory.h"
 #include "lib/dwfl/Dwfl.h"
 #include "lib/dwfl/DwException.h"
@@ -112,29 +115,47 @@ lib::dwfl::DwflModule::getLines(jstring filename, jint lineno, jint column)
       return array;
     }
   return 0;
-} 
+}
+
+namespace {
+  void builder_callout(lib::dwfl::SymbolBuilder *symbolBuilder,
+		       jstring name, ::GElf_Sym sym)
+  {
+    using lib::dwfl::ElfSymbolType;
+    using lib::dwfl::ElfSymbolBinding;
+    using lib::dwfl::ElfSymbolVisibility;
+
+    ElfSymbolType * type
+      = ElfSymbolType::intern(ELF64_ST_TYPE(sym.st_info));
+    ElfSymbolBinding * bind
+      = ElfSymbolBinding::intern(ELF64_ST_BIND(sym.st_info));
+    ElfSymbolVisibility * visibility
+      = ElfSymbolVisibility::intern(ELF64_ST_VISIBILITY(sym.st_other));
+
+    symbolBuilder->symbol(name,
+			  sym.st_value,
+			  sym.st_size,
+			  type, bind, visibility);
+  }
+}
 
 void
-lib::dwfl::DwflModule::getSymbol(jlong address, lib::dwfl::SymbolBuilder* symbolBuilder)
+lib::dwfl::DwflModule::getSymbol(jlong address,
+				 lib::dwfl::SymbolBuilder *symbolBuilder)
 {
-	Dwarf_Addr addr = (Dwarf_Addr) address;
-	GElf_Sym closest_sym;
-	
-	const char* methName = dwfl_module_addrsym(DWFL_MODULE_POINTER, addr, 
-                                                   &closest_sym, NULL);
-	
-	jstring jMethodName;
-	if (methName == NULL)	
-		jMethodName = NULL;
-	else
-		jMethodName = JvNewStringUTF(methName);	
-	
-	symbolBuilder->symbol(jMethodName,
-			      closest_sym.st_value, 
-			      closest_sym.st_size,
-			      ELF64_ST_TYPE(closest_sym.st_info),
-			      ELF64_ST_BIND(closest_sym.st_info),
-			      closest_sym.st_other);
+  Dwarf_Addr addr = (Dwarf_Addr) address;
+  GElf_Sym closest_sym;
+
+  const char* methName = dwfl_module_addrsym(DWFL_MODULE_POINTER, addr,
+					     &closest_sym, NULL);
+
+  jstring jMethodName;
+  if (methName == NULL)
+    jMethodName = NULL;
+  else
+    jMethodName = JvNewStringUTF(methName);
+
+  ::builder_callout(symbolBuilder, jMethodName, closest_sym);
 }
 
 void
@@ -151,12 +172,7 @@ lib::dwfl::DwflModule::getSymbolByName(jstring name,
       GElf_Sym sym;
       const char *symName = dwfl_module_getsym(DWFL_MODULE_POINTER, i, &sym, 0);
       if (!::strcmp(rawName, symName))
-	symbolBuilder->symbol(JvNewStringUTF(symName),
-			      sym.st_value,
-			      sym.st_size,
-			      ELF64_ST_TYPE(sym.st_info),
-			      ELF64_ST_BIND(sym.st_info),
-			      sym.st_other);
+	::builder_callout (symbolBuilder, JvNewStringUTF(symName), sym);
     }
 }
 
@@ -205,7 +221,7 @@ lib::dwfl::DwflModule::getDebuginfo()
 }    
 
 static int
-callback (Dwarf *dwarf, Dwarf_Global *gl, void* thisObject)
+each_pubname (Dwarf *dwarf, Dwarf_Global *gl, void* thisObject)
 {
 
   lib::dwfl::DwflModule* dwflModule = (lib::dwfl::DwflModule*)thisObject;
@@ -230,7 +246,8 @@ lib::dwfl::DwflModule::get_pubnames()
   Dwarf_Addr bias;
   ::Dwarf* dwarf = dwfl_module_getdwarf ((Dwfl_Module*)this->pointer, &bias);


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


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

only message in thread, other threads:[~2008-04-01 16:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-04-01 16:29 [SCM] master: Straighten dataflow in symtab package 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).