File systemtap-handle-v4.5-kernel.patch of Package systemtap.2327
From: David Smith <dsmith@redhat.com>
Date: Tue Feb 16 11:06:58 2016 -0600
Subject: Handle v4.5 kernel
Git-commit 64ffc49b5deb57e19e94f67f9878f5c03e617775
References: bsc#977306
Signed-off-by: Tony Jones <tonyj@suse.de>
Fix PR19644 by updating the runtime to handle linux 4.5 commit 8244062ef1.
* runtime/transport/symbols.c (_stp_module_update_self): Handle kernel
change moving module symbol table information into a 'struct
mod_kallsyms'.
* runtime/linux/autoconf-mod_kallsyms.c: New autoconf test.
* buildrun.cxx (compile_pass): Add autoconf test for 'struct
mod_kallsyms'.
---
buildrun.cxx | 2 ++
runtime/linux/autoconf-mod_kallsyms.c | 3 +++
runtime/transport/symbols.c | 9 ++++++++-
3 files changed, 13 insertions(+), 1 deletion(-)
--- a/buildrun.cxx
+++ b/buildrun.cxx
@@ -418,6 +418,8 @@ compile_pass (systemtap_session& s)
output_autoconf(s, o, "autoconf-tracepoint-strings.c", "STAPCONF_TRACEPOINT_STRINGS", NULL);
+ output_autoconf(s, o, "autoconf-mod_kallsyms.c", "STAPCONF_MOD_KALLSYMS", NULL);
+
o << module_cflags << " += -include $(STAPCONF_HEADER)" << endl;
for (unsigned i=0; i<s.c_macros.size(); i++)
--- /dev/null
+++ b/runtime/linux/autoconf-mod_kallsyms.c
@@ -0,0 +1,3 @@
+#include <linux/module.h>
+
+struct mod_kallsyms mk;
--- a/runtime/transport/symbols.c
+++ b/runtime/transport/symbols.c
@@ -206,10 +206,17 @@ static int _stp_module_update_self (void
found_eh_frame = true;
}
else if (!strcmp(".symtab", attr->name)) {
- _stp_module_self.sections[0].static_addr = attr->address;
+#ifdef STAPCONF_MOD_KALLSYMS
+ struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms);
+ if (attr->address == (unsigned long) kallsyms->symtab)
+ _stp_module_self.sections[0].size =
+ kallsyms->num_symtab * sizeof(kallsyms->symtab[0]);
+#else
if (attr->address == (unsigned long) mod->symtab)
_stp_module_self.sections[0].size =
mod->num_symtab * sizeof(mod->symtab[0]);
+#endif
+ _stp_module_self.sections[0].static_addr = attr->address;
}
else if (!strcmp(".text", attr->name)) {
_stp_module_self.sections[1].static_addr = attr->address;