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;
openSUSE Build Service is sponsored by