public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: Move getCompilationUnit from Dwfl into DwflModule.
@ 2008-06-05 15:29 cagney
  0 siblings, 0 replies; only message in thread
From: cagney @ 2008-06-05 15:29 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  0ef023547a5ee68baa4f7c6fc375dac6f886ddfb (commit)
      from  a6241011ef6b3209bcd45876deb53d62baae19dc (commit)

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

- Log -----------------------------------------------------------------
commit 0ef023547a5ee68baa4f7c6fc375dac6f886ddfb
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Jun 5 11:21:38 2008 -0400

    Move getCompilationUnit from Dwfl into DwflModule.
    
    frysk-sys/lib/dwfl/ChangeLog
    2008-06-05  Andrew Cagney  <cagney@redhat.com>
    
    	* Dwarf.java (Dwarf(long)): Remember that the pointer isn't owned.
    	(finalize()): Check that the pointer is owned.
    	* Dwfl.java (dwfl_addrdie(long)): Delete.
    	(getCompilationUnit()): Use DwflModule.getCompilationUnit().
    	* jni/Dwfl.cxx: Update.
    	* cni/Dwfl.cxx: Update.
    	* DwflModule.java (getCompilationUnit()): New.
    	(getBias(), getDwarf()): New.
    	(dwflModuleAddrdie, dwflModuleGetDwarf, dwflModuleGetBias): New.
    	* cni/DwflModule.cxx: Update.
    	* jni/DwflModule.cxx: Update.
    	* TestDwarfDie.java: Add more logging.

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

Summary of changes:
 frysk-sys/lib/dwfl/ChangeLog          |   13 ++++++++
 frysk-sys/lib/dwfl/Dwarf.java         |   39 ++++++------------------
 frysk-sys/lib/dwfl/Dwfl.java          |    8 +++--
 frysk-sys/lib/dwfl/DwflDieBias.java   |    3 +-
 frysk-sys/lib/dwfl/DwflModule.java    |   30 ++++++++++++++++++
 frysk-sys/lib/dwfl/TestDwarfDie.java  |    6 ++-
 frysk-sys/lib/dwfl/cni/Dwarf.cxx      |    4 +-
 frysk-sys/lib/dwfl/cni/Dwfl.cxx       |   14 ---------
 frysk-sys/lib/dwfl/cni/DwflModule.cxx |   27 ++++++++++++++++-
 frysk-sys/lib/dwfl/jni/Dwarf.cxx      |   15 +++++----
 frysk-sys/lib/dwfl/jni/Dwfl.cxx       |   11 -------
 frysk-sys/lib/dwfl/jni/DwflModule.cxx |   53 +++++++++++++++++++++++++--------
 12 files changed, 139 insertions(+), 84 deletions(-)

First 500 lines of diff:
diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog
index 131249f..4f85078 100644
--- a/frysk-sys/lib/dwfl/ChangeLog
+++ b/frysk-sys/lib/dwfl/ChangeLog
@@ -1,5 +1,18 @@
 2008-06-05  Andrew Cagney  <cagney@redhat.com>
 
+	* Dwarf.java (Dwarf(long)): Remember that the pointer isn't owned.
+	(finalize()): Check that the pointer is owned.
+	* Dwfl.java (dwfl_addrdie(long)): Delete.
+	(getCompilationUnit()): Use DwflModule.getCompilationUnit().
+	* jni/Dwfl.cxx: Update.
+	* cni/Dwfl.cxx: Update.
+	* DwflModule.java (getCompilationUnit()): New.
+	(getBias(), getDwarf()): New.
+	(dwflModuleAddrdie, dwflModuleGetDwarf, dwflModuleGetBias): New.
+	* cni/DwflModule.cxx: Update.
+	* jni/DwflModule.cxx: Update.
+	* TestDwarfDie.java: Add more logging.
+	
 	* TestElf.java (checkAuxv): Use indexed word accessors.
 
 2008-06-04  Andrew Cagney  <cagney@redhat.com>
diff --git a/frysk-sys/lib/dwfl/Dwarf.java b/frysk-sys/lib/dwfl/Dwarf.java
index 8779d0e..2c93a44 100644
--- a/frysk-sys/lib/dwfl/Dwarf.java
+++ b/frysk-sys/lib/dwfl/Dwarf.java
@@ -43,42 +43,22 @@ import java.util.LinkedList;
 
 public class Dwarf {
 	
+    private final boolean owner;
     private long pointer;
 	
     public Dwarf(Elf elf, DwarfCommand cmd, ElfSection section){
 	dwarf_begin_elf(elf.getPointer(), cmd.getValue(), (section == null) ? 0 : section.getPointer());
+	owner = true;
     }
 	
     public Dwarf(String file, DwarfCommand cmd){
 	dwarf_begin(file, cmd.getValue());
+	owner = true;
     }
 	
-    //	public DwarfDie[] getFunctions(){
-    //		long[] vals = dwarf_get_functions();
-    //		if(vals == null || vals.length == 0)
-    //			return new DwarfDie[0];
-    //		
-    //		DwarfDie[] dwarfs = new DwarfDie[vals.length];
-    //		for(int i = 0; i < vals.length; i++){
-    //			if(vals[i] == 0)
-    //				dwarfs[i] = null;
-    //			else
-    //				dwarfs[i] = new DwarfDie(vals[i]);
-    //		}
-    //		
-    //		return dwarfs;
-    //	}
-    //	
-    //	public DwarfDie getDIEByAddr(long address){
-    //		long val = dwarf_addrdie(address);
-    //		if(val == 0)
-    //			return null;
-    //		
-    //		return new DwarfDie(val);
-    //	}
-	
-    protected Dwarf(long pointer){
+    Dwarf(long pointer){
 	this.pointer = pointer;
+	owner = false;
     }
 	
     protected long getPointer(){
@@ -86,8 +66,12 @@ public class Dwarf {
     }
 	
     protected void finalize(){
-	dwarf_end();
+	if (owner && pointer != 0) {
+	    dwarfEnd(pointer);
+	    pointer = 0;
+	}
     }
+    private static native int dwarfEnd(long pointer);
 	
     public String[] getSourceFiles(){
 	return get_source_files();
@@ -110,7 +94,4 @@ public class Dwarf {
     protected native void dwarf_begin(String file, int command);
     protected native String[] get_source_files();
     protected native LinkedList get_cu_by_name(String name);
-    protected native int dwarf_end();
-    //	protected native long[] dwarf_get_functions();
-    //	protected native long dwarf_addrdie(long addr);
 }
diff --git a/frysk-sys/lib/dwfl/Dwfl.java b/frysk-sys/lib/dwfl/Dwfl.java
index 73cbd33..79a83ba 100644
--- a/frysk-sys/lib/dwfl/Dwfl.java
+++ b/frysk-sys/lib/dwfl/Dwfl.java
@@ -94,7 +94,11 @@ public class Dwfl {
     }
 
     public DwflDieBias getCompilationUnit (long addr) {
-	return dwfl_addrdie(addr);
+	DwflModule module = getModule(addr);
+	if (module == null) {
+	    return null;
+	}
+	return module.getCompilationUnit(addr);
     }
 
     long getPointer () {
@@ -304,6 +308,4 @@ public class Dwfl {
     // protected native long[] dwfl_get_modules();
     // protected native long[] dwfl_getdwarf();
     protected native long dwfl_getsrc (long addr);
-  
-    protected native DwflDieBias dwfl_addrdie (long addr);
 }
diff --git a/frysk-sys/lib/dwfl/DwflDieBias.java b/frysk-sys/lib/dwfl/DwflDieBias.java
index eeb61c2..7b9d790 100644
--- a/frysk-sys/lib/dwfl/DwflDieBias.java
+++ b/frysk-sys/lib/dwfl/DwflDieBias.java
@@ -42,8 +42,7 @@ package lib.dwfl;
 import java.util.ArrayList;
 import java.util.Iterator;
 
-public class DwflDieBias
-{
+public class DwflDieBias {
     public final DwarfDie die;
     public final long bias;
 
diff --git a/frysk-sys/lib/dwfl/DwflModule.java b/frysk-sys/lib/dwfl/DwflModule.java
index aca5a9d..0a28094 100644
--- a/frysk-sys/lib/dwfl/DwflModule.java
+++ b/frysk-sys/lib/dwfl/DwflModule.java
@@ -146,4 +146,34 @@ public class DwflModule {
 	return get_cu_dies();
     }
     private native LinkedList get_cu_dies();
+
+    public DwflDieBias getCompilationUnit(long addr) {
+	// Find the die, grab the bias as it flies by.
+	long diePointer = dwflModuleAddrdie(pointer, addr);
+	DwarfDie die = parent.factory.makeDie(diePointer, this);
+	// XXX: Should just pass the module.
+	return new DwflDieBias(die, getBias());
+    }
+    private static native long dwflModuleAddrdie(long pointer, long addr);
+
+    public Dwarf getDwarf() {
+	if (dwarf == null) {
+	    long dwarfPointer = dwflModuleGetDwarf(pointer);
+	    if (dwarfPointer != 0) {
+		dwarf = new Dwarf(dwarfPointer);
+	    }
+	}
+	return dwarf;
+    }
+    private Dwarf dwarf;
+    private static native long dwflModuleGetDwarf(long pointer);
+
+    public long getBias() {
+	if (bias == -1) {
+	    bias = dwflModuleGetBias(pointer);
+	}
+	return bias;
+    }
+    private long bias = -1;
+    private static native long dwflModuleGetBias(long pointer);
 }
diff --git a/frysk-sys/lib/dwfl/TestDwarfDie.java b/frysk-sys/lib/dwfl/TestDwarfDie.java
index 35342e4..f127e52 100644
--- a/frysk-sys/lib/dwfl/TestDwarfDie.java
+++ b/frysk-sys/lib/dwfl/TestDwarfDie.java
@@ -90,8 +90,10 @@ public class TestDwarfDie extends TestCase {
 	assertNotNull(dwfl);
 	long addr = LocalMemory.getCodeAddr();
 
-	DwarfDie cuDie = dwfl.getCompilationUnit(addr).die;
-	assertNotNull(cuDie);
+	DwflDieBias dwflDie = dwfl.getCompilationUnit(addr);
+	assertNotNull("dwflDie", dwflDie);
+	DwarfDie cuDie = dwflDie.die;
+	assertNotNull("cuDie", cuDie);
 	    
 	DwarfDie die = cuDie.getScopes(addr)[0];
 	DwflModule dwflModule = die.getModule();
diff --git a/frysk-sys/lib/dwfl/cni/Dwarf.cxx b/frysk-sys/lib/dwfl/cni/Dwarf.cxx
index 02d00a2..3a41775 100644
--- a/frysk-sys/lib/dwfl/cni/Dwarf.cxx
+++ b/frysk-sys/lib/dwfl/cni/Dwarf.cxx
@@ -53,7 +53,7 @@
 
 using namespace java::lang;
 
-#define DWARF_POINTER (::Dwarf *) this->pointer
+#define DWARF_POINTER ((::Dwarf *) pointer)
 
 void
 lib::dwfl::Dwarf::dwarf_begin_elf(jlong elf, jint command,
@@ -172,6 +172,6 @@ lib::dwfl::Dwarf::get_source_files()
 }
 
 jint 
-lib::dwfl::Dwarf::dwarf_end(){
+lib::dwfl::Dwarf::dwarfEnd(jlong pointer){
   return ::dwarf_end(DWARF_POINTER);
 }
diff --git a/frysk-sys/lib/dwfl/cni/Dwfl.cxx b/frysk-sys/lib/dwfl/cni/Dwfl.cxx
index a258287..bba5dd0 100644
--- a/frysk-sys/lib/dwfl/cni/Dwfl.cxx
+++ b/frysk-sys/lib/dwfl/cni/Dwfl.cxx
@@ -207,17 +207,3 @@ jlong
 lib::dwfl::Dwfl::dwfl_getsrc(jlong addr){
   return (jlong) ::dwfl_getsrc(DWFL_POINTER, (::Dwarf_Addr) addr);
 }
-
-lib::dwfl::DwflDieBias *
-lib::dwfl::Dwfl::dwfl_addrdie(jlong addr){
-  Dwarf_Addr bias;
-  Dwarf_Die *die = ::dwfl_addrdie(DWFL_POINTER, (::Dwarf_Addr) addr, &bias);
-
-  if(die == NULL)
-    return NULL;
-
-  lib::dwfl::DwflModule *module = lib::dwfl::Dwfl::getModule(addr);
-  lib::dwfl::DwarfDie *dwdie = factory->makeDie((jlong) die, module);
-
-  return new lib::dwfl::DwflDieBias(dwdie, (jlong)bias);
-}
diff --git a/frysk-sys/lib/dwfl/cni/DwflModule.cxx b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
index 66dfc30..33ea0b4 100644
--- a/frysk-sys/lib/dwfl/cni/DwflModule.cxx
+++ b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
@@ -62,7 +62,7 @@
 
 #include "java/util/LinkedList.h"
 
-#define DWFL_MODULE_POINTER (Dwfl_Module *) this->pointer
+#define DWFL_MODULE_POINTER ((Dwfl_Module *) pointer)
 
 lib::dwfl::ModuleElfBias*
 lib::dwfl::DwflModule::module_getelf()
@@ -473,3 +473,28 @@ lib::dwfl::DwflModule::get_cu_dies()
 	  
   return list;
 }
+
+jlong
+lib::dwfl::DwflModule::dwflModuleAddrdie(jlong pointer, jlong addr) {
+  Dwarf_Addr bias;
+  ::Dwarf_Die *die = ::dwfl_module_addrdie(DWFL_MODULE_POINTER,
+					   (Dwarf_Addr)addr, &bias);
+  return (jlong)die;
+}
+
+jlong
+lib::dwfl::DwflModule::dwflModuleGetDwarf(jlong pointer) {
+  Dwarf_Addr bias;
+  ::Dwarf* dwarf = ::dwfl_module_getdwarf(DWFL_MODULE_POINTER, &bias);
+  return (jlong)dwarf;
+}
+
+jlong
+lib::dwfl::DwflModule::dwflModuleGetBias(jlong pointer) {
+  Dwarf_Addr bias;
+  ::Dwarf* dwarf = ::dwfl_module_getdwarf(DWFL_MODULE_POINTER, &bias);
+  if (dwarf != NULL)
+    return (jlong) bias;
+  else
+    return -1;
+}
diff --git a/frysk-sys/lib/dwfl/jni/Dwarf.cxx b/frysk-sys/lib/dwfl/jni/Dwarf.cxx
index 4a9bbf4..b4eafdf 100644
--- a/frysk-sys/lib/dwfl/jni/Dwarf.cxx
+++ b/frysk-sys/lib/dwfl/jni/Dwarf.cxx
@@ -53,7 +53,8 @@
 using namespace java::lang;
 using namespace java::util;
 
-#define DWARF_POINTER ((::Dwarf *) GetPointer(env))
+#define DWARF_POINTER_FIXME ((::Dwarf *) GetPointer(env))
+#define DWARF_POINTER ((::Dwarf *) pointer)
 
 void
 lib::dwfl::Dwarf::dwarf_begin_elf(jnixx::env env, jlong elf, jint command,
@@ -83,10 +84,10 @@ lib::dwfl::Dwarf::get_cu_by_name(jnixx::env env, String name) {
   Dwarf_Die cudie_mem;
   size_t hsize;
 	  
-  while (dwarf_nextcu(DWARF_POINTER, old_offset = offset,
+  while (dwarf_nextcu(DWARF_POINTER_FIXME, old_offset = offset,
 		      &offset, &hsize, NULL, NULL, NULL) == 0) {
 		
-      Dwarf_Die *cudie = dwarf_offdie(DWARF_POINTER, old_offset + hsize,
+      Dwarf_Die *cudie = dwarf_offdie(DWARF_POINTER_FIXME, old_offset + hsize,
 				      &cudie_mem);
       const char *die_name = dwarf_diename (cudie);
       String die_name_string = String::NewStringUTF(env, die_name);
@@ -118,7 +119,7 @@ lib::dwfl::Dwarf::get_source_files(jnixx::env env) {
   
   // Allocate Dwarf_Files for each compile unit
   cu_cnt = 0;
-  while (dwarf_nextcu(DWARF_POINTER, old_offset = offset, &offset, 
+  while (dwarf_nextcu(DWARF_POINTER_FIXME, old_offset = offset, &offset, 
 		      &hsize, NULL, NULL, NULL) == 0) {
     cu_cnt += 1;
   }
@@ -128,10 +129,10 @@ lib::dwfl::Dwarf::get_source_files(jnixx::env env) {
   // Fill Dwarf_Files
   cu_cnt = 0;
   offset = 0;
-  while (dwarf_nextcu(DWARF_POINTER, old_offset = offset, &offset, 
+  while (dwarf_nextcu(DWARF_POINTER_FIXME, old_offset = offset, &offset, 
 		      &hsize, NULL, NULL, NULL) == 0) {
       size_t fcnt = 0;
-      Dwarf_Die *cudie = dwarf_offdie (DWARF_POINTER, old_offset + hsize, &cudie_mem);
+      Dwarf_Die *cudie = dwarf_offdie (DWARF_POINTER_FIXME, old_offset + hsize, &cudie_mem);
       if (dwarf_getsrcfiles (cudie, &files[cu_cnt], &fcnt) != 0)
 	continue;
       nfiles[cu_cnt] = fcnt;
@@ -161,6 +162,6 @@ lib::dwfl::Dwarf::get_source_files(jnixx::env env) {
 }
 
 jint 
-lib::dwfl::Dwarf::dwarf_end(jnixx::env env){
+lib::dwfl::Dwarf::dwarfEnd(jnixx::env env, long pointer){
   return ::dwarf_end(DWARF_POINTER);
 }
diff --git a/frysk-sys/lib/dwfl/jni/Dwfl.cxx b/frysk-sys/lib/dwfl/jni/Dwfl.cxx
index 216b0c1..50d7357 100644
--- a/frysk-sys/lib/dwfl/jni/Dwfl.cxx
+++ b/frysk-sys/lib/dwfl/jni/Dwfl.cxx
@@ -190,14 +190,3 @@ jlong
 lib::dwfl::Dwfl::dwfl_getsrc(jnixx::env env, jlong addr){
   return (jlong) ::dwfl_getsrc(DWFL_POINTER_FIXME, (::Dwarf_Addr) addr);
 }
-
-lib::dwfl::DwflDieBias
-lib::dwfl::Dwfl::dwfl_addrdie(jnixx::env env, jlong addr){
-  Dwarf_Addr bias;
-  Dwarf_Die *die = ::dwfl_addrdie(DWFL_POINTER_FIXME, (::Dwarf_Addr) addr, &bias);
-  if(die == NULL)
-    return lib::dwfl::DwflDieBias(env, NULL);
-  lib::dwfl::DwflModule module = lib::dwfl::Dwfl::getModule(env, addr);
-  lib::dwfl::DwarfDie dwdie = GetFactory(env).makeDie(env, (jlong) die, module);
-  return lib::dwfl::DwflDieBias::New(env, dwdie, (jlong)bias);
-}
diff --git a/frysk-sys/lib/dwfl/jni/DwflModule.cxx b/frysk-sys/lib/dwfl/jni/DwflModule.cxx
index a32750e..039916c 100644
--- a/frysk-sys/lib/dwfl/jni/DwflModule.cxx
+++ b/frysk-sys/lib/dwfl/jni/DwflModule.cxx
@@ -47,12 +47,13 @@
 
 using namespace java::lang;
 
-#define DWFL_MODULE_POINTER ((Dwfl_Module *) GetPointer(env))
+#define DWFL_MODULE_POINTER_FIXME ((Dwfl_Module *) GetPointer(env))
+#define DWFL_MODULE_POINTER ((Dwfl_Module *) pointer)
 
 lib::dwfl::ModuleElfBias
 lib::dwfl::DwflModule::module_getelf(jnixx::env env) {
   Dwarf_Addr bias = 0;
-  ::Elf *elf = dwfl_module_getelf(DWFL_MODULE_POINTER, &bias);
+  ::Elf *elf = dwfl_module_getelf(DWFL_MODULE_POINTER_FIXME, &bias);
   if(elf == NULL)
     return lib::dwfl::ModuleElfBias(env, NULL);
 		
@@ -70,7 +71,7 @@ lib::dwfl::DwflModule::getLines(jnixx::env env, String jfilename,
   jstringUTFChars filename = jstringUTFChars(env, jfilename);
   ::Dwfl_Line **srcsp = 0;
   size_t nsrcs = 0;
-  int result = ::dwfl_module_getsrc_file(DWFL_MODULE_POINTER,
+  int result = ::dwfl_module_getsrc_file(DWFL_MODULE_POINTER_FIXME,
 					 filename.elements(), lineno,
 					 column, &srcsp, &nsrcs);
   if (result < 0) {
@@ -111,7 +112,7 @@ lib::dwfl::DwflModule::getSymbol(jnixx::env env, jlong address,
   Dwarf_Addr addr = (Dwarf_Addr) address;
   GElf_Sym closest_sym;
 
-  const char* methName = dwfl_module_addrsym(DWFL_MODULE_POINTER, addr,
+  const char* methName = dwfl_module_addrsym(DWFL_MODULE_POINTER_FIXME, addr,
 					     &closest_sym, NULL);
 
   String jMethodName;
@@ -126,13 +127,13 @@ lib::dwfl::DwflModule::getSymbol(jnixx::env env, jlong address,
 void
 lib::dwfl::DwflModule::getSymtab(jnixx::env env,
 				 lib::dwfl::SymbolBuilder symbolBuilder) {
-  int count = ::dwfl_module_getsymtab(DWFL_MODULE_POINTER);
+  int count = ::dwfl_module_getsymtab(DWFL_MODULE_POINTER_FIXME);
   if (count < 0)
     return;
 
   for (int i = 0; i < count; ++i) {
     ::GElf_Sym sym;
-    char const* name = ::dwfl_module_getsym(DWFL_MODULE_POINTER,
+    char const* name = ::dwfl_module_getsym(DWFL_MODULE_POINTER_FIXME,
 					    i, &sym, NULL);
     String jname = String::NewStringUTF(env, name);
     ::builder_callout(env, symbolBuilder, jname, &sym);
@@ -145,7 +146,7 @@ lib::dwfl::DwflModule::getPLTEntries(jnixx::env env,
 				     lib::dwfl::SymbolBuilder symbolBuilder) {
   GElf_Addr bias;
 
-  ::Elf *elf = ::dwfl_module_getelf(DWFL_MODULE_POINTER, &bias);
+  ::Elf *elf = ::dwfl_module_getelf(DWFL_MODULE_POINTER_FIXME, &bias);
   ::GElf_Ehdr ehdr;
   if (::gelf_getehdr (elf, &ehdr) == NULL)
     return;
@@ -288,10 +289,10 @@ void
 lib::dwfl::DwflModule::getSymbolByName(jnixx::env env, String jname,
 				       lib::dwfl::SymbolBuilder symbolBuilder) {
   jstringUTFChars name = jstringUTFChars(env, jname);
-  int numSymbols = dwfl_module_getsymtab(DWFL_MODULE_POINTER);
+  int numSymbols = dwfl_module_getsymtab(DWFL_MODULE_POINTER_FIXME);
   for (int i = 0; i < numSymbols; i++) {
     GElf_Sym sym;
-    const char *symName = dwfl_module_getsym(DWFL_MODULE_POINTER, i, &sym, 0);
+    const char *symName = dwfl_module_getsym(DWFL_MODULE_POINTER_FIXME, i, &sym, 0);
     if (!::strcmp(name.elements(), symName)) {
       String jsym = String::NewStringUTF(env, symName);
       ::builder_callout(env, symbolBuilder, jsym, &sym);
@@ -304,7 +305,7 @@ void
 lib::dwfl::DwflModule::setUserData(jnixx::env env, Object data) {
   void **userdata = NULL;
   fprintf(stderr, "user data is %p\n", userdata);
-  dwfl_module_info(DWFL_MODULE_POINTER, &userdata, NULL, NULL, NULL, NULL, NULL,
+  dwfl_module_info(DWFL_MODULE_POINTER_FIXME, &userdata, NULL, NULL, NULL, NULL, NULL,
                    NULL);
   *userdata = data._object;
 }
@@ -320,14 +321,14 @@ lib::dwfl::DwflModule::getDebuginfo(jnixx::env env) {
   }	
   Dwarf_Addr bias;
 
-  if (dwfl_module_getdwarf (DWFL_MODULE_POINTER, &bias) == NULL) {
+  if (dwfl_module_getdwarf (DWFL_MODULE_POINTER_FIXME, &bias) == NULL) {
     // Case where debuginfo not installed or available
     return String(env, NULL);
   }
   
   // Get the path to debuginfo file
   const char* debuginfo_fname = NULL;  
-  dwfl_module_info (DWFL_MODULE_POINTER, 
+  dwfl_module_info (DWFL_MODULE_POINTER_FIXME, 
                     NULL, NULL, NULL, NULL, NULL, NULL,
                     &debuginfo_fname);   
 
@@ -375,7 +376,7 @@ each_pubname(Dwarf *dwarf, Dwarf_Global *gl, void* data) {
 void
 lib::dwfl::DwflModule::get_pubnames(jnixx::env env) {
   Dwarf_Addr bias;
-  ::Dwarf* dwarf = ::dwfl_module_getdwarf(DWFL_MODULE_POINTER, &bias);
+  ::Dwarf* dwarf = ::dwfl_module_getdwarf(DWFL_MODULE_POINTER_FIXME, &bias);
 
   if (dwarf != NULL) {
     ::each_pubname_context ctx(env, *this, bias);
@@ -397,3 +398,29 @@ lib::dwfl::DwflModule::offdie(jnixx::env env, jlong die, jlong offset) {
    
   return dwarfDie;
 }
+
+jlong
+lib::dwfl::DwflModule::dwflModuleAddrdie(jnixx::env env, jlong pointer,
+					 jlong addr) {
+  Dwarf_Addr bias;
+  ::Dwarf_Die *die = ::dwfl_module_addrdie(DWFL_MODULE_POINTER,
+					   (Dwarf_Addr)addr, &bias);
+  return (jlong)die;
+}
+
+jlong
+lib::dwfl::DwflModule::dwflModuleGetDwarf(jnixx::env env, jlong pointer) {
+  Dwarf_Addr bias;
+  ::Dwarf* dwarf = ::dwfl_module_getdwarf(DWFL_MODULE_POINTER, &bias);
+  return (jlong)dwarf;
+}
+
+jlong
+lib::dwfl::DwflModule::dwflModuleGetBias(jnixx::env env, jlong pointer) {
+  Dwarf_Addr bias;
+  ::Dwarf* dwarf = ::dwfl_module_getdwarf(DWFL_MODULE_POINTER, &bias);
+  if (dwarf != NULL)
+    return (jlong) bias;
+  else
+    return -1;
+}


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


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

only message in thread, other threads:[~2008-06-05 15:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-06-05 15:29 [SCM] master: Move getCompilationUnit from Dwfl into DwflModule cagney

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