public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: cagney@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM]  master: Move getCompilationUnit from Dwfl into DwflModule.
Date: Thu, 05 Jun 2008 15:29:00 -0000	[thread overview]
Message-ID: <20080605152934.24772.qmail@sourceware.org> (raw)

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


                 reply	other threads:[~2008-06-05 15:29 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=20080605152934.24772.qmail@sourceware.org \
    --to=cagney@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: link
Be 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).