public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM]  master: libdwfl: assume that debuginfo of EXEC file has bias of the main file
@ 2008-05-21 20:32 pmachata
  0 siblings, 0 replies; only message in thread
From: pmachata @ 2008-05-21 20:32 UTC (permalink / raw)
  To: frysk-cvs

The branch, master has been updated
       via  fc0e559d9ccf78f7c1f0646d689de31744c29a80 (commit)
       via  7652398e78b3e65ecba716e5dff635e7aa9c9123 (commit)
       via  4af901980aeba45df7d2520ae5433216be0fd0b8 (commit)
       via  8e8f3ec9f762779a488f9ff3e060f01f742b7a90 (commit)
      from  eb91978115196ab2815ba04f4145f65088737050 (commit)

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

- Log -----------------------------------------------------------------
commit fc0e559d9ccf78f7c1f0646d689de31744c29a80
Author: Petr Machata <pmachata@redhat.com>
Date:   Wed May 21 17:19:54 2008 +0200

    libdwfl: assume that debuginfo of EXEC file has bias of the main file

commit 7652398e78b3e65ecba716e5dff635e7aa9c9123
Author: Petr Machata <pmachata@redhat.com>
Date:   Wed May 21 16:46:46 2008 +0200

    Nits in logging

commit 4af901980aeba45df7d2520ae5433216be0fd0b8
Author: Petr Machata <pmachata@redhat.com>
Date:   Wed May 21 16:46:21 2008 +0200

    DwflDieBias member variables final, ctor initializes them

commit 8e8f3ec9f762779a488f9ff3e060f01f742b7a90
Author: Petr Machata <pmachata@redhat.com>
Date:   Thu May 15 21:36:45 2008 +0200

    New logging function

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

Summary of changes:
 frysk-core/frysk/ftrace/TaskTracer.java            |    3 +-
 frysk-core/frysk/symtab/SymbolFactory.java         |    3 +-
 frysk-imports/elfutils/libdwfl/ChangeLog           |    5 +++
 .../elfutils/libdwfl/dwfl_module_getdwarf.c        |   32 ++++++++++++--------
 frysk-sys/frysk/rsl/ChangeLog                      |    4 ++
 frysk-sys/frysk/rsl/Log.java                       |    5 +++
 frysk-sys/lib/dwfl/ChangeLog                       |    7 ++++
 frysk-sys/lib/dwfl/DwflDieBias.java                |    9 ++++-
 frysk-sys/lib/dwfl/cni/Dwfl.cxx                    |   17 ++++------
 frysk-sys/lib/dwfl/cni/DwflModule.cxx              |   11 +++----
 10 files changed, 63 insertions(+), 33 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/ftrace/TaskTracer.java b/frysk-core/frysk/ftrace/TaskTracer.java
index 84e5db9..9afd973 100644
--- a/frysk-core/frysk/ftrace/TaskTracer.java
+++ b/frysk-core/frysk/ftrace/TaskTracer.java
@@ -402,7 +402,8 @@ class TaskTracer
 			     Long addrToken, long bias, ObjectFile objf)
     {
 	long addr = addrToken.longValue();
-	fine.log("Request for tracing address 0x" + Long.toHexString(addr));
+	fine.log("Request for tracing address", addr,
+		 "at", addr+bias);
 	task.requestAddCodeObserver(new AddressObserver(addrToken, objf),
 				    addr + bias);
     }
diff --git a/frysk-core/frysk/symtab/SymbolFactory.java b/frysk-core/frysk/symtab/SymbolFactory.java
index 5becdea..e335f3a 100644
--- a/frysk-core/frysk/symtab/SymbolFactory.java
+++ b/frysk-core/frysk/symtab/SymbolFactory.java
@@ -144,7 +144,8 @@ public class SymbolFactory
 		    DwflSymbol sym
 			= new DwflSymbol(value, size, name, type,
 					 dieBias, module, defined);
-		    finest.log("Symbol", name, "value", value, "type", type);
+		    finest.log("Symbol", name, "value", value,
+			       "type", type, "die", dieBias);
 		    table.put(name, sym);
 		}
 	};
diff --git a/frysk-imports/elfutils/libdwfl/ChangeLog b/frysk-imports/elfutils/libdwfl/ChangeLog
index 9182f49..f72180b 100644
--- a/frysk-imports/elfutils/libdwfl/ChangeLog
+++ b/frysk-imports/elfutils/libdwfl/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-21  Petr Machata  <pmachata@redhat.com>
+
+	* dwfl_module_getdwarf.c (open_elf): Assume that debuginfo of EXEC
+	files has the same bias as the main file.
+
 2008-04-02  Petr Machata  <pmachata@redhat.com>
 
 	* dwfl_module_getdwarf.c (find_debuginfo): Return DWFL_E_CB when
diff --git a/frysk-imports/elfutils/libdwfl/dwfl_module_getdwarf.c b/frysk-imports/elfutils/libdwfl/dwfl_module_getdwarf.c
index 5e84924..663d256 100644
--- a/frysk-imports/elfutils/libdwfl/dwfl_module_getdwarf.c
+++ b/frysk-imports/elfutils/libdwfl/dwfl_module_getdwarf.c
@@ -82,19 +82,25 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file)
     }
 
   file->bias = 0;
-  for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
-    {
-      GElf_Phdr ph_mem;
-      GElf_Phdr *ph = gelf_getphdr (file->elf, i, &ph_mem);
-      if (ph == NULL)
-	goto elf_error;
-      if (ph->p_type == PT_LOAD)
-	{
-	  file->bias = ((mod->low_addr & -ph->p_align)
-			- (ph->p_vaddr & -ph->p_align));
-	  break;
-	}
-    }
+  if (mod->e_type == ET_EXEC && file == &mod->debug)
+    /* Prelink can change ET_EXEC's first loadable address, but it
+       will not touch .text or any section where symbol information is
+       relevant.  Assume debugbias is the same as the main file.  */
+    file->bias = mod->main.bias;
+  else
+    for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i)
+      {
+	GElf_Phdr ph_mem;
+	GElf_Phdr *ph = gelf_getphdr (file->elf, i, &ph_mem);
+	if (ph == NULL)
+	  goto elf_error;
+	if (ph->p_type == PT_LOAD)
+	  {
+	    file->bias = ((mod->low_addr & -ph->p_align)
+			  - (ph->p_vaddr & -ph->p_align));
+	    break;
+	  }
+      }
 
   mod->e_type = ehdr->e_type;
 
diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog
index a7d169c..99c01ef 100644
--- a/frysk-sys/frysk/rsl/ChangeLog
+++ b/frysk-sys/frysk/rsl/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-15  Petr Machata  <pmachata@redhat.com>
+
+	* Log.java (log(String, Object, String, long, String, Object, String, Object)): New.
+
 2008-05-13  Andrew Cagney  <cagney@redhat.com>
 
 	* jni/Log.hxx: Move to frysk/jnixx.
diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Log.java
index 7a71cfe..2b80e33 100644
--- a/frysk-sys/frysk/rsl/Log.java
+++ b/frysk-sys/frysk/rsl/Log.java
@@ -272,6 +272,11 @@ public final class Log {
 	    return;
 	prefix().print(p1).print(p2).print(p3).print(p4).print(p5).print(p6).print(p7).print(p8).suffix();
     }
+    public void log(String p1, Object p2, String p3, long p4, String p5, Object p6, String p7, Object p8) {
+	if (!logging)
+	    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.
 
diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog
index e3789e5..d91bb37 100644
--- a/frysk-sys/lib/dwfl/ChangeLog
+++ b/frysk-sys/lib/dwfl/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-21  Petr Machata  <pmachata@redhat.com>
+
+	* DwflDieBias.java: Make member variables public final, add ctor
+	that initializes them.
+	* cni/Dwfl.cxx (dwfl_getsrc): Adjust to above change.
+	* cni/DwflModule.cxx: Likewise.
+
 2008-05-15  Tim Moore  <timoore@redhat.com>
 
 	* Disassembler.java: New file.
diff --git a/frysk-sys/lib/dwfl/DwflDieBias.java b/frysk-sys/lib/dwfl/DwflDieBias.java
index 6008e83..eeb61c2 100644
--- a/frysk-sys/lib/dwfl/DwflDieBias.java
+++ b/frysk-sys/lib/dwfl/DwflDieBias.java
@@ -44,8 +44,13 @@ import java.util.Iterator;
 
 public class DwflDieBias
 {
-    public DwarfDie die;
-    public long bias;
+    public final DwarfDie die;
+    public final long bias;
+
+    public DwflDieBias(DwarfDie die, long bias) {
+	this.die = die;
+	this.bias = bias;
+    }
 
     public ArrayList getEntryBreakpoints() {
 	ArrayList bps = die.getEntryBreakpoints();
diff --git a/frysk-sys/lib/dwfl/cni/Dwfl.cxx b/frysk-sys/lib/dwfl/cni/Dwfl.cxx
index 900b0a4..7fa53ca 100644
--- a/frysk-sys/lib/dwfl/cni/Dwfl.cxx
+++ b/frysk-sys/lib/dwfl/cni/Dwfl.cxx
@@ -265,17 +265,14 @@ 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::DwflDieBias *retval = new lib::dwfl::DwflDieBias();
-        
-        lib::dwfl::DwflModule* module = lib::dwfl::Dwfl::getModule(addr);
-	retval->die = factory->makeDie((jlong) die, module);
-	retval->bias = (jlong) bias;
-	
-	return retval;
+	  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);
 }
 
 jlong
diff --git a/frysk-sys/lib/dwfl/cni/DwflModule.cxx b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
index d7ea851..4085557 100644
--- a/frysk-sys/lib/dwfl/cni/DwflModule.cxx
+++ b/frysk-sys/lib/dwfl/cni/DwflModule.cxx
@@ -410,12 +410,11 @@ namespace {
 
     if (dwarf_offdie (dwarf, gl->die_offset, die) == NULL)
       throw new lib::dwfl::DwarfException(JvNewStringUTF("failed to get object die"));
-    else {
-      lib::dwfl::DwflDieBias* dwflDieBias = new lib::dwfl::DwflDieBias();
-      dwflDieBias->die = dwfl->factory->makeDie((jlong)die, context->dwflModule);
-      dwflDieBias->bias = context->bias;
-      context->dwflModule->pubNames->add(dwflDieBias);
-    }
+    else
+      {
+	lib::dwfl::DwarfDie *dwdie = dwfl->factory->makeDie((jlong)die, context->dwflModule);
+	context->dwflModule->pubNames->add(new lib::dwfl::DwflDieBias(dwdie, context->bias));
+      }
 
     return DWARF_CB_OK;
   }


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


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

only message in thread, other threads:[~2008-05-21 20:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-21 20:32 [SCM] master: libdwfl: assume that debuginfo of EXEC file has bias of the main file 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).