From a295050e60affe0bb55fc2d46637314c0822f35d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 16 Nov 2009 21:34:00 +0100 Subject: PR10010 Support $globals in shared libraries. * dwflpp.cxx (dwflpp::emit_address): Enable task finder and emit a _stp_module_relocate for the ".dynamic" section when seeing a user-space dso address. * runtime/sym.c (_stp_mod_sec_lookup): Remove .dynamic section addr cheat. (_stp_tf_mmap_cb): Add cheat here. --- runtime/sym.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'runtime/sym.c') diff --git a/runtime/sym.c b/runtime/sym.c index 0baa1a5e..61282183 100644 --- a/runtime/sym.c +++ b/runtime/sym.c @@ -45,6 +45,11 @@ static int _stp_tf_mmap_cb(struct stap_task_finder_target *tgt, path); #endif module = _stp_modules[i]; + // cheat... + if ((strcmp(".dynamic", + module->sections[0].name) == 0) + && module->sections[0].addr == 0) + module->sections[0].addr = addr; break; } } @@ -138,8 +143,6 @@ static struct _stp_module *_stp_mod_sec_lookup(unsigned long addr, *sec = &m->sections[0]; // XXX check actual section and relocate dbug_sym(1, "found section %s in module %s at 0x%lx\n", m->sections[0].name, m->name, vm_start); - if (strcmp(".dynamic", m->sections[0].name) == 0) - m->sections[0].addr = vm_start; // cheat... return m; } } -- cgit From 110a589704c72327ba80aaf75bff496a6b6334f6 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 17 Nov 2009 09:24:41 +0100 Subject: Explain "cheat" comment in sym.c (_stp_tf_mmap_cb). We are abusing the "first" section address here to indicate where the module (actually first segment) is loaded (which is why we are ignoring the offset). It would be good to redesign the stp_module/stp_section data structures to better align with the actual memory mappings we are interested in (especially the "section" naming is slightly confusing since what we really seem to mean are elf segments (which can contain multiple elf sections). * runtime/sym.c (_stp_tf_mmap_cb): Add cheat comment. --- runtime/sym.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'runtime/sym.c') diff --git a/runtime/sym.c b/runtime/sym.c index 61282183..fd9863dd 100644 --- a/runtime/sym.c +++ b/runtime/sym.c @@ -46,6 +46,17 @@ static int _stp_tf_mmap_cb(struct stap_task_finder_target *tgt, #endif module = _stp_modules[i]; // cheat... + // We are abusing the "first" section address + // here to indicate where the module (actually + // first segment) is loaded (which is why we + // are ignoring the offset). It would be good + // to redesign the stp_module/stp_section + // data structures to better align with the + // actual memory mappings we are interested + // in (especially the "section" naming is + // slightly confusing since what we really + // seem to mean are elf segments (which can + // contain multiple elf sections). if ((strcmp(".dynamic", module->sections[0].name) == 0) && module->sections[0].addr == 0) -- cgit