Fix: syscalls-extractor: kallsyms_lookup_name no longer available
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 8 Nov 2022 22:13:37 +0000 (17:13 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 17 Nov 2022 17:47:29 +0000 (12:47 -0500)
Since v5.7, kallsyms_lookup_name is no longer available.

In order to re-use the kallsyms wrapper, it is simpler to move the
syscalls extractor module to the `src` directory and gate its
compilation behind a new config option, CONFIG_LTTNG_SYSCALLS_EXTRACTOR.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I55d878dce55827d61035693aaf5865af3c4e775f

Makefile
include/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c [deleted file]
src/Kbuild
src/Kconfig
src/lttng-syscalls-extractor.c [new file with mode: 0644]

index 81bdedac2376381ac523af15a530f20e2b61dc7a..8d25816cc053e03e6d8707fc281b0687bf9b81e9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -33,6 +33,13 @@ modules:
                KCPPFLAGS='$(LKCPPFLAGS)' \
                modules
 
+syscalls_extractor:
+       $(MAKE) -C $(KERNELDIR) M=$(PWD)/src \
+               CONFIG_LTTNG_SYSCALLS_EXTRACTOR=m \
+               CONFIG_LTTNG=m CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m \
+               KCPPFLAGS='$(LKCPPFLAGS)' \
+               modules
+
 modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD)/src \
                CONFIG_LTTNG=m CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m \
diff --git a/include/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c b/include/instrumentation/syscalls/lttng-syscalls-extractor/lttng-syscalls-extractor.c
deleted file mode 100644 (file)
index 8670d25..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
- *
- * lttng-syscalls-extractor.c
- *
- * Dump syscall metadata to console.
- *
- * Copyright 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- * Copyright 2011 EfficiOS Inc.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/list.h>
-#include <linux/err.h>
-#include <linux/slab.h>
-#include <linux/kallsyms.h>
-#include <linux/dcache.h>
-#include <linux/trace_events.h>
-#include <trace/syscall.h>
-#include <asm/syscall.h>
-
-#ifndef CONFIG_FTRACE_SYSCALLS
-#error "You need to set CONFIG_FTRACE_SYSCALLS=y"
-#endif
-
-#ifndef CONFIG_KALLSYMS_ALL
-#error "You need to set CONFIG_KALLSYMS_ALL=y"
-#endif
-
-/*
- * The 'ident' parameter is prepended to each printk line to help
- * extract the proper lines from dmesg.
- */
-static char *ident = "";
-module_param(ident, charp, 0);
-
-static struct syscall_metadata **__start_syscalls_metadata;
-static struct syscall_metadata **__stop_syscalls_metadata;
-
-static __init
-struct syscall_metadata *find_syscall_meta(unsigned long syscall)
-{
-       struct syscall_metadata **iter;
-
-       for (iter = __start_syscalls_metadata;
-                       iter < __stop_syscalls_metadata; iter++) {
-               if ((*iter)->syscall_nr == syscall)
-                       return (*iter);
-       }
-       return NULL;
-}
-
-int init_module(void)
-{
-       struct syscall_metadata *meta;
-       int i;
-
-       __start_syscalls_metadata = (void *) kallsyms_lookup_name("__start_syscalls_metadata");
-       __stop_syscalls_metadata = (void *) kallsyms_lookup_name("__stop_syscalls_metadata");
-
-       printk("%s---START---\n", ident);
-       for (i = 0; i < NR_syscalls; i++) {
-               int j;
-
-               meta = find_syscall_meta(i);
-               if (!meta)
-                       continue;
-               printk("%ssyscall %s nr %d nbargs %d ",
-                       ident, meta->name, meta->syscall_nr, meta->nb_args);
-               printk(KERN_CONT "types: (");
-               for (j = 0; j < meta->nb_args; j++) {
-                       if (j > 0)
-                               printk(KERN_CONT ", ");
-                       printk(KERN_CONT "%s", meta->types[j]);
-               }
-               printk(KERN_CONT ") ");
-               printk(KERN_CONT "args: (");
-               for (j = 0; j < meta->nb_args; j++) {
-                       if (j > 0)
-                               printk(KERN_CONT ", ");
-                       printk(KERN_CONT "%s", meta->args[j]);
-               }
-               printk(KERN_CONT ")\n");
-       }
-       printk("%s---END---\n", ident);
-
-       /*
-        * This module always fails to load.
-        */
-       return -1;
-}
-
-void cleanup_module(void)
-{
-}
-
-MODULE_LICENSE("GPL");
index 7137874fa4c7a0bf0a7ce899ff97a2c340f91aa8..440b61d906a20dfc8404154d56d84b1430a85825 100644 (file)
@@ -150,3 +150,5 @@ lttng-statedump-objs := lttng-statedump-impl.o
 obj-$(CONFIG_LTTNG) += probes/
 obj-$(CONFIG_LTTNG) += lib/
 obj-$(CONFIG_LTTNG) += tests/
+
+obj-$(CONFIG_LTTNG_SYSCALLS_EXTRACTOR) += lttng-syscalls-extractor.o
index a2a7b8f1e925e184efbb289dd2bb66a273f9804e..c1e5781be2374d5a5ef4a4534574edcee58e1574 100644 (file)
@@ -25,4 +25,13 @@ config LTTNG_EXPERIMENTAL_BITWISE_ENUM
 
          If unsure, say N.
 
+config LTTNG_SYSCALLS_EXTRACTOR
+       bool "LTTng syscalls extraction helper"
+       default n
+       depends on LTTNG
+       help
+         Enable the LTTng system call extraction helper which prints the list
+         of enabled system calls, along with their signature, to dmesg. This
+         is not meant for mainline; it is a development helper.
+
 source "lttng/src/tests/Kconfig"
diff --git a/src/lttng-syscalls-extractor.c b/src/lttng-syscalls-extractor.c
new file mode 100644 (file)
index 0000000..3fba1a9
--- /dev/null
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
+ *
+ * lttng-syscalls-extractor.c
+ *
+ * Dump syscall metadata to console.
+ *
+ * Copyright 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright 2011 EfficiOS Inc.
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/err.h>
+#include <linux/slab.h>
+#include <linux/kallsyms.h>
+#include <linux/dcache.h>
+#include <linux/trace_events.h>
+#include <linux/kprobes.h>
+#include <trace/syscall.h>
+#include <asm/syscall.h>
+#include <wrapper/kallsyms.h>
+
+#ifndef CONFIG_FTRACE_SYSCALLS
+#error "You need to set CONFIG_FTRACE_SYSCALLS=y"
+#endif
+
+#ifndef CONFIG_KALLSYMS_ALL
+#error "You need to set CONFIG_KALLSYMS_ALL=y"
+#endif
+
+/*
+ * The 'ident' parameter is prepended to each printk line to help
+ * extract the proper lines from dmesg.
+ */
+static char *ident = "";
+module_param(ident, charp, 0);
+
+static struct syscall_metadata **__start_syscalls_metadata;
+static struct syscall_metadata **__stop_syscalls_metadata;
+
+static __init
+struct syscall_metadata *find_syscall_meta(unsigned long syscall)
+{
+       struct syscall_metadata **iter;
+
+       for (iter = __start_syscalls_metadata;
+                       iter < __stop_syscalls_metadata; iter++) {
+               if ((*iter)->syscall_nr == syscall)
+                       return (*iter);
+       }
+       return NULL;
+}
+
+int init_module(void)
+{
+       struct syscall_metadata *meta;
+       int i;
+
+       __start_syscalls_metadata = (void *) wrapper_kallsyms_lookup_name("__start_syscalls_metadata");
+       __stop_syscalls_metadata = (void *) wrapper_kallsyms_lookup_name("__stop_syscalls_metadata");
+
+       printk("%s---START---\n", ident);
+       for (i = 0; i < NR_syscalls; i++) {
+               int j;
+
+               meta = find_syscall_meta(i);
+               if (!meta)
+                       continue;
+               printk("%ssyscall %s nr %d nbargs %d ",
+                       ident, meta->name, meta->syscall_nr, meta->nb_args);
+               printk(KERN_CONT "types: (");
+               for (j = 0; j < meta->nb_args; j++) {
+                       if (j > 0)
+                               printk(KERN_CONT ", ");
+                       printk(KERN_CONT "%s", meta->types[j]);
+               }
+               printk(KERN_CONT ") ");
+               printk(KERN_CONT "args: (");
+               for (j = 0; j < meta->nb_args; j++) {
+                       if (j > 0)
+                               printk(KERN_CONT ", ");
+                       printk(KERN_CONT "%s", meta->args[j]);
+               }
+               printk(KERN_CONT ")\n");
+       }
+       printk("%s---END---\n", ident);
+
+       /*
+        * This module always fails to load.
+        */
+       return -1;
+}
+
+void cleanup_module(void)
+{
+}
+
+MODULE_LICENSE("GPL");
This page took 0.029597 seconds and 4 git commands to generate.