wrapper: powerpc64: fix kernel crash caused by do_get_kallsyms
[lttng-modules.git] / src / wrapper / kallsyms.c
index d284876407a0396dbe9a3cd22f574961653b5dbf..93017adc87a6ab40cec47989df3659e56a92b2f1 100644 (file)
@@ -39,10 +39,26 @@ unsigned long do_get_kallsyms(void)
        memset(&probe, 0, sizeof(probe));
        probe.pre_handler = dummy_kprobe_handler;
        probe.symbol_name = "kallsyms_lookup_name";
+#ifdef PPC64_ELF_ABI_v2
+       /*
+        * With powerpc64 ABIv2, we need the global entry point of
+        * kallsyms_lookup_name to call it later, while kprobe_register would
+        * automatically adjust the global entry point to the local entry point,
+        * when a kprobe was registered at a function entry. So we add 4 bytes
+        * which is the length of one instruction to kallsyms_lookup_name to
+        * avoid the adjustment.
+        */
+       probe.offset = 4;
+#endif
        ret = register_kprobe(&probe);
        if (ret)
                return 0;
+#ifdef PPC64_ELF_ABI_v2
+       /* Substract 4 bytes to get what we originally want */
+       addr = (unsigned long)(((char *)probe.addr) - 4);
+#else
        addr = (unsigned long)probe.addr;
+#endif
 #ifdef CONFIG_ARM
 #ifdef CONFIG_THUMB2_KERNEL
        if (addr)
This page took 0.024196 seconds and 4 git commands to generate.