public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Re-use modules when possible. Date: Wed, 04 Jun 2008 19:40:00 -0000 [thread overview] Message-ID: <20080604194038.17926.qmail@sourceware.org> (raw) The branch, master has been updated via ee64fd4e4ff967bddfa2ffc7090ebe4b3d9e1e1f (commit) from a725006dc73a5c978e3c461afc1f6d17fe9483c8 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit ee64fd4e4ff967bddfa2ffc7090ebe4b3d9e1e1f Author: Andrew Cagney <cagney@redhat.com> Date: Wed Jun 4 15:37:33 2008 -0400 Re-use modules when possible. If a pre-existing module is refreshed, re-use that existing module's object. frysk-sys/frysk/rsl/ChangeLog 2008-06-04 Andrew Cagney <cagney@redhat.com> * Log.java (finest(Class)): New. frysk-sys/lib/dwfl/ChangeLog 2008-06-04 Andrew Cagney <cagney@redhat.com> * Dwfl.java (dwfl_addrmodule): Delete. (reportModule): Try to re-use existing modules. * TestDwfl.java (testModuleReuse()): New. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/rsl/ChangeLog | 4 ++++ frysk-sys/frysk/rsl/Log.java | 3 +++ frysk-sys/lib/dwfl/ChangeLog | 6 ++++++ frysk-sys/lib/dwfl/Dwfl.java | 36 +++++++++++++++++++++++++++--------- frysk-sys/lib/dwfl/TestDwfl.java | 15 +++++++++++++++ frysk-sys/lib/dwfl/cni/Dwfl.cxx | 5 ----- 6 files changed, 55 insertions(+), 14 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/rsl/ChangeLog b/frysk-sys/frysk/rsl/ChangeLog index 37ad53b..f611e11 100644 --- a/frysk-sys/frysk/rsl/ChangeLog +++ b/frysk-sys/frysk/rsl/ChangeLog @@ -1,3 +1,7 @@ +2008-06-04 Andrew Cagney <cagney@redhat.com> + + * Log.java (finest(Class)): New. + 2008-05-24 Andrew Cagney <cagney@redhat.com> * Log.java (log(Object,String,long,String,long,String,long)): New. diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Log.java index 0356ab1..1557332 100644 --- a/frysk-sys/frysk/rsl/Log.java +++ b/frysk-sys/frysk/rsl/Log.java @@ -106,6 +106,9 @@ public final class Log { public static Log fine(Class klass) { return LogFactory.fine(klass); } + public static Log finest(Class klass) { + return LogFactory.finest(klass); + } // Static? private static Printer out = new Printer(new PrintWriter(System.out)); diff --git a/frysk-sys/lib/dwfl/ChangeLog b/frysk-sys/lib/dwfl/ChangeLog index 4d4442b..e7bd08d 100644 --- a/frysk-sys/lib/dwfl/ChangeLog +++ b/frysk-sys/lib/dwfl/ChangeLog @@ -1,3 +1,9 @@ +2008-06-04 Andrew Cagney <cagney@redhat.com> + + * Dwfl.java (dwfl_addrmodule): Delete. + (reportModule): Try to re-use existing modules. + * TestDwfl.java (testModuleReuse()): New. + 2008-06-03 Andrew Cagney <cagney@redhat.com> * Dwfl.java (modules, modulesArray, reportBegin, reportModule): diff --git a/frysk-sys/lib/dwfl/Dwfl.java b/frysk-sys/lib/dwfl/Dwfl.java index 676caa6..1e8d52a 100644 --- a/frysk-sys/lib/dwfl/Dwfl.java +++ b/frysk-sys/lib/dwfl/Dwfl.java @@ -46,6 +46,7 @@ import inua.eio.ULong; public class Dwfl { private static final Log fine = Log.fine(Dwfl.class); + private static final Log finest = Log.finest(Dwfl.class); private long pointer; private long callbacks; @@ -166,29 +167,48 @@ public class Dwfl { public void reportBegin() { fine.log(this, "reportBegin"); reportBegin(pointer); + // fill modulesArray with the current modules and then clear + // the set. Will iterate over the old modules so that they + // are re-used. + getModules(); modules.clear(); - modulesArray = null; } private static native void reportBegin(long pointer); + /** * Finish a refresh of the address map. */ public void reportEnd() { fine.log(this, "reportEnd"); reportEnd(pointer); + // Finished; scrub references to old modules. + modulesArray = null; } private static native void reportEnd(long pointer); + /** * Report a mapped component. */ public void reportModule(String moduleName, long low, long high) { fine.log(this, "reportModule", moduleName, "low", low, "high", high); - // XXX: Can elfutils be trusted to return identical module - // addresss across map rebuilds; and not recycle addresses? - // For moment assume not. - long module = reportModule(pointer, moduleName, low, high); - modules.put(new Long(module), new DwflModule(module, this, - moduleName, low, high)); + long modulePointer = reportModule(pointer, moduleName, low, high); + for (int i = 0; i < modulesArray.length; i++) { + DwflModule module = modulesArray[i]; + if (module.getName().equals(moduleName) + && module.lowAddress() == low + && module.highAddress() == high + && module.getPointer() == modulePointer) { + // Could the pointer be changed; will the pointer + // change? + finest.log(this, "reportModule reusing", module); + modules.put(new Long(modulePointer), module); + return; + } + } + DwflModule module = new DwflModule(modulePointer, this, moduleName, + low, high); + finest.log(this, "reportModule creating", module); + modules.put(new Long(modulePointer), module); } private static native long reportModule(long pointer, String moduleName, long low, long high); @@ -293,6 +313,4 @@ public class Dwfl { protected native long dwfl_getsrc (long addr); protected native DwflDieBias dwfl_addrdie (long addr); - - protected native long dwfl_addrmodule (long addr); } diff --git a/frysk-sys/lib/dwfl/TestDwfl.java b/frysk-sys/lib/dwfl/TestDwfl.java index dbc881f..04bf421 100644 --- a/frysk-sys/lib/dwfl/TestDwfl.java +++ b/frysk-sys/lib/dwfl/TestDwfl.java @@ -83,6 +83,21 @@ public class TestDwfl module.getName().equals(moduleName)); } + public void testModuleReuse() { + Dwfl dwfl = new Dwfl(""); + assertNotNull("dwfl", dwfl); + dwfl.reportBegin(); + dwfl.reportModule("module", 0, 1); + dwfl.reportEnd(); + DwflModule module = dwfl.getModule(0); + assertEquals("module name", "module", module.getName()); + // now refresh the info; should get the _same_ module. + dwfl.reportBegin(); + dwfl.reportModule("module", 0, 1); + dwfl.reportEnd(); + assertSame("refreshed module", module, dwfl.getModule(0)); + } + public void testDwflGetModule2() { Dwfl dwfl = new Dwfl(""); diff --git a/frysk-sys/lib/dwfl/cni/Dwfl.cxx b/frysk-sys/lib/dwfl/cni/Dwfl.cxx index ae6358a..6fa85e6 100644 --- a/frysk-sys/lib/dwfl/cni/Dwfl.cxx +++ b/frysk-sys/lib/dwfl/cni/Dwfl.cxx @@ -223,11 +223,6 @@ lib::dwfl::Dwfl::dwfl_addrdie(jlong addr){ } jlong -lib::dwfl::Dwfl::dwfl_addrmodule(jlong addr){ - return (jlong) ::dwfl_addrmodule(DWFL_POINTER, (Dwarf_Addr) addr); -} - -jlong lib::dwfl::Dwfl::dwfl_cumodule(jlong cudie) { Dwfl_Module* module = ::dwfl_cumodule((Dwarf_Die*)cudie); hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-06-04 19:40 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=20080604194038.17926.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: linkBe 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).