This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: swagiaal: added implemented and tested getPubNames().


The branch, master has been updated
       via  aabe9d8db237353c405ca58827d0026978bc6d26 (commit)
      from  cba1f284ab9d7e1c3f8166601d486a52d7cee5fe (commit)

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

- Log -----------------------------------------------------------------
commit aabe9d8db237353c405ca58827d0026978bc6d26
Author: Sami Wagiaalla <swagiaal@redhat.com>
Date:   Mon Dec 3 12:48:57 2007 -0500

    swagiaal: added implemented and tested getPubNames().
    
    frysk-core/frysk/pkglibdir/ChangeLog
    +2007-12-03  Sami Wagiaalla  <swagiaal@toner.toronto.redhat.com>
    +
    +       * funit-class-static.cxx: Added a def of static_i.
    +
    
    frysk-core/frysk/scopes/ChangeLog
    +2007-12-03  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +       * TestDie.java (testGetPubnames): New test.
    +
    
    frysk-sys/lib/dwfl/ChangeLog
    +2007-12-03  Sami Wagiaalla  <swagiaal@redhat.com>
    +
    +       * DwflModule.java (getPubNames): New function.
    +       * cni/DwflModule.cxx: Implemented get_pubnames
    +       * Dwfl.java: Changed factory from private to protected
    +       final.
    +

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

Summary of changes:
 frysk-core/frysk/pkglibdir/ChangeLog              |    4 ++
 frysk-core/frysk/pkglibdir/funit-class-static.cxx |    2 +
 frysk-core/frysk/scopes/ChangeLog                 |    4 ++
 frysk-core/frysk/scopes/TestDie.java              |   30 +++++++++++++++++-
 frysk-sys/lib/dwfl/ChangeLog                      |    7 ++++
 frysk-sys/lib/dwfl/Dwfl.java                      |    2 +-
 frysk-sys/lib/dwfl/DwflModule.java                |   16 +++++++++-
 frysk-sys/lib/dwfl/cni/DwflModule.cxx             |   36 +++++++++++++++++++++
 8 files changed, 98 insertions(+), 3 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/pkglibdir/ChangeLog b/frysk-core/frysk/pkglibdir/ChangeLog
index f7cda52..22faac1 100644
--- a/frysk-core/frysk/pkglibdir/ChangeLog
+++ b/frysk-core/frysk/pkglibdir/ChangeLog
@@ -1,3 +1,7 @@
+2007-12-03  Sami Wagiaalla  <swagiaal@toner.toronto.redhat.com>
+
+	* funit-class-static.cxx: Added a def of static_i.
+
 2007-12-03  Andrew Cagney  <cagney@redhat.com>
 
 	* funit-regs.S (fxregs): Align to 16-byte boundary.
diff --git a/frysk-core/frysk/pkglibdir/funit-class-static.cxx b/frysk-core/frysk/pkglibdir/funit-class-static.cxx
index c086f74..57e16c4 100644
--- a/frysk-core/frysk/pkglibdir/funit-class-static.cxx
+++ b/frysk-core/frysk/pkglibdir/funit-class-static.cxx
@@ -9,6 +9,8 @@ public:
   void crash();
 };
 
+int A::static_i = 5;
+
 void A::crash(){
   int* a = 0;
   a[0] = 0;  
diff --git a/frysk-core/frysk/scopes/ChangeLog b/frysk-core/frysk/scopes/ChangeLog
index 2f114b5..24470da 100644
--- a/frysk-core/frysk/scopes/ChangeLog
+++ b/frysk-core/frysk/scopes/ChangeLog
@@ -1,3 +1,7 @@
+2007-12-03  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* TestDie.java (testGetPubnames): New test.
+
 2007-11-20  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	* Scope.java (toPrint): Added printing for variable
diff --git a/frysk-core/frysk/scopes/TestDie.java b/frysk-core/frysk/scopes/TestDie.java
index 336f235..9ad5a93 100644
--- a/frysk-core/frysk/scopes/TestDie.java
+++ b/frysk-core/frysk/scopes/TestDie.java
@@ -40,14 +40,20 @@
 package frysk.scopes;
 
 import java.io.File;
+import java.util.Iterator;
+import java.util.LinkedList;
 
 import lib.dwfl.DwAt;
 import lib.dwfl.DwarfDie;
+import lib.dwfl.Dwfl;
+import lib.dwfl.DwflModule;
 import frysk.Config;
-import frysk.debuginfo.ObjectDeclarationSearchEngine;
 import frysk.debuginfo.DebugInfoFrame;
 import frysk.debuginfo.DebugInfoStackFactory;
+import frysk.debuginfo.ObjectDeclarationSearchEngine;
+import frysk.dwfl.DwflCache;
 import frysk.proc.Task;
+import frysk.stack.StackFactory;
 import frysk.testbed.DaemonBlockedAtSignal;
 import frysk.testbed.TestLib;
 import frysk.testbed.TestfileTokenScanner;
@@ -92,6 +98,28 @@ public class TestDie
 	assertNotNull("Found original die", die);
 	assertEquals("Die has correct name", "crash" ,die.getName());
 	
+    }
+    
+    public void testGetPubnames(){
+	String fileName = "funit-class-static";
+	Task task = (new DaemonBlockedAtSignal(fileName)).getMainTask();
+	long pc = StackFactory.createFrame(task).getAdjustedAddress();
+	
+	Dwfl dwfl = DwflCache.getDwfl(task);
+	DwflModule dwflModule = dwfl.getModule(pc);
+	LinkedList pubnames = dwflModule.getPubNames();
+	Iterator iterator = pubnames.iterator();
+	
+	assertEquals("Size of pubnames ", 3, pubnames.size());
+	
+	DwarfDie die = (DwarfDie) iterator.next();
+	assertEquals("Die name", "crash", die.getName());
+	
+	die = (DwarfDie) iterator.next();
+	assertEquals("Die name", "main", die.getName());
+	
+	die = (DwarfDie) iterator.next();
+	assertEquals("Die name", "static_i", die.getName());
 	
     }
 
diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog
index 4e0117e..a1bdd0c 100644
--- a/frysk-sys/lib/dwfl/ChangeLog
+++ b/frysk-sys/lib/dwfl/ChangeLog
@@ -1,3 +1,10 @@
+2007-12-03  Sami Wagiaalla  <swagiaal@redhat.com>
+
+	* DwflModule.java (getPubNames): New function.
+	* cni/DwflModule.cxx: Implemented get_pubnames
+	* Dwfl.java: Changed factory from private to protected
+	final.
+
 2007-11-29  Phil Muldoon  <pmuldoon@redhat.com>
 
 	* cni/ElfPrstatus.cxx (ElfPrstatus::fillMemRegion): Copy
diff --git a/frysk-sys/lib/dwfl/Dwfl.java b/frysk-sys/lib/dwfl/Dwfl.java
index daeb382..313a9f5 100644
--- a/frysk-sys/lib/dwfl/Dwfl.java
+++ b/frysk-sys/lib/dwfl/Dwfl.java
@@ -48,7 +48,7 @@ public class Dwfl {
 
     private DwflModule[] modules;
 
-    private final DwarfDieFactory factory = DwarfDieFactory.getFactory();
+    protected final DwarfDieFactory factory = DwarfDieFactory.getFactory();
   
     public Dwfl() {
 	pointer = dwflBegin();
diff --git a/frysk-sys/lib/dwfl/DwflModule.java b/frysk-sys/lib/dwfl/DwflModule.java
index 85c15c8..def4304 100644
--- a/frysk-sys/lib/dwfl/DwflModule.java
+++ b/frysk-sys/lib/dwfl/DwflModule.java
@@ -39,17 +39,21 @@
 
 package lib.dwfl;
 
+import java.util.LinkedList;
+
 /**
  * A wrapper object around the libdwfl Dwfl_Module structure.
  */
 public class DwflModule
 {
 
+    protected LinkedList pubNames;
+    
     protected long bias;
   
     private long pointer;
 
-    private Dwfl parent;
+    protected final Dwfl parent;
 
     protected String name;
   
@@ -80,6 +84,16 @@ public class DwflModule
 	return module_getelf();
     }
 
+    public LinkedList getPubNames(){
+	if(this.pubNames == null){
+	    this.pubNames = new LinkedList();
+	    get_pubnames();
+	}
+	return pubNames;
+    }
+    
+    private native void get_pubnames();
+    
     /**
      * Get the name of the module.
      *
diff --git a/frysk-sys/lib/dwfl/cni/DwflModule.cxx b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
index a5844fb..3a1113c 100644
--- a/frysk-sys/lib/dwfl/cni/DwflModule.cxx
+++ b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
@@ -46,10 +46,16 @@
 #include <gnu/gcj/RawData.h>
 
 #include "lib/dwfl/DwflModule.h"
+#include "lib/dwfl/DwarfDie.h"
 #include "lib/dwfl/DwflLine.h"
 #include "lib/dwfl/ModuleElfBias.h"
 #include "lib/dwfl/SymbolBuilder.h"
 #include "lib/dwfl/Elf.h"
+#include "lib/dwfl/DwarfDieFactory.h"
+#include "lib/dwfl/Dwfl.h"
+#include "lib/dwfl/DwException.h"
+
+#include "java/util/LinkedList.h"
 
 #define DWFL_MODULE_POINTER (Dwfl_Module *) this->pointer
 
@@ -197,3 +203,33 @@ lib::dwfl::DwflModule::getDebuginfo()
 
   return getName();                 	               		      
 }    
+
+static int
+callback (Dwarf *dwarf, Dwarf_Global *gl, void* thisObject)
+{
+
+  lib::dwfl::DwflModule* dwflModule = (lib::dwfl::DwflModule*)thisObject;
+  lib::dwfl::Dwfl* dwfl = dwflModule->parent;
+  
+  Dwarf_Die *die = (Dwarf_Die*)JvMalloc(sizeof(Dwarf_Die));
+  
+  if (dwarf_offdie (dwarf, gl->die_offset, die) == NULL){
+      throw new lib::dwfl::DwarfException(JvNewStringUTF("failed to get object die"));
+  }else{        
+    lib::dwfl::DwarfDie* dwarfDie = dwfl->factory->makeDie((jlong)die, dwfl);  
+    dwflModule->pubNames->add(dwarfDie);
+    
+  }
+  
+  return DWARF_CB_OK;
+}
+
+void
+lib::dwfl::DwflModule::get_pubnames()
+{
+  Dwarf_Addr bias;
+  ::Dwarf* dwarf = dwfl_module_getdwarf ((Dwfl_Module*)this->pointer, &bias);
+
+  dwarf_getpubnames(dwarf, callback, this,0);
+}
+


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]