From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20889 invoked by alias); 21 May 2008 20:32:50 -0000 Received: (qmail 20857 invoked by uid 9697); 21 May 2008 20:32:49 -0000 Date: Wed, 21 May 2008 20:32:00 -0000 Message-ID: <20080521203249.20842.qmail@sourceware.org> From: pmachata@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: libdwfl: assume that debuginfo of EXEC file has bias of the main file X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: eb91978115196ab2815ba04f4145f65088737050 X-Git-Newrev: fc0e559d9ccf78f7c1f0646d689de31744c29a80 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00267.txt.bz2 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 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 Date: Wed May 21 16:46:46 2008 +0200 Nits in logging commit 4af901980aeba45df7d2520ae5433216be0fd0b8 Author: Petr Machata Date: Wed May 21 16:46:21 2008 +0200 DwflDieBias member variables final, ctor initializes them commit 8e8f3ec9f762779a488f9ff3e060f01f742b7a90 Author: Petr Machata 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 + + * 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 * 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 + + * Log.java (log(String, Object, String, long, String, Object, String, Object)): New. + 2008-05-13 Andrew Cagney * 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 + + * 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 * 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