Detailed system call tracing (TRACE_EVENT() generation for integer support)
[lttng-modules.git] / instrumentation / syscalls / lttng-syscalls-extractor / lttng-syscalls-extractor.c
CommitLineData
5fee13fd
MD
1/*
2 * Copyright 2011 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
3 * Copyright 2011 - Julien Desfossez <julien.desfossez@polymtl.ca>
4 *
5 * Dump syscall metadata to console.
6 *
7 * GPLv2 license.
8 */
9
10#include <linux/module.h>
11#include <linux/kernel.h>
12#include <linux/types.h>
13#include <linux/list.h>
14#include <linux/err.h>
15#include <linux/slab.h>
16#include <linux/kallsyms.h>
17#include <linux/dcache.h>
18#include <linux/ftrace_event.h>
19#include <trace/syscall.h>
20
21#ifndef CONFIG_FTRACE_SYSCALLS
22#error "You need to set CONFIG_FTRACE_SYSCALLS=y"
23#endif
24
25static struct syscall_metadata **__start_syscalls_metadata;
26static struct syscall_metadata **__stop_syscalls_metadata;
27
28static __init
29struct syscall_metadata *find_syscall_meta(unsigned long syscall)
30{
31 struct syscall_metadata **iter;
32
33 for (iter = __start_syscalls_metadata;
34 iter < __stop_syscalls_metadata; iter++) {
35 if ((*iter)->syscall_nr == syscall)
36 return (*iter);
37 }
38 return NULL;
39}
40
41int init_module(void)
42{
43 struct syscall_metadata *meta;
44 int i;
45
46 __start_syscalls_metadata = (void *) kallsyms_lookup_name("__start_syscalls_metadata");
47 __stop_syscalls_metadata = (void *) kallsyms_lookup_name("__stop_syscalls_metadata");
48
49 for (i = 0; i < NR_syscalls; i++) {
50 int j;
51
52 meta = find_syscall_meta(i);
53 if (!meta)
54 continue;
55 printk("syscall %s nr %d nbargs %d ",
56 meta->name, meta->syscall_nr, meta->nb_args);
57 printk("types: (");
58 for (j = 0; j < meta->nb_args; j++) {
59 if (j > 0)
60 printk(", ");
61 printk("%s", meta->types[j]);
62 }
63 printk(") ");
64 printk("args: (");
65 for (j = 0; j < meta->nb_args; j++) {
66 if (j > 0)
67 printk(", ");
68 printk("%s", meta->args[j]);
69 }
70 printk(")\n");
71 }
72 printk("SUCCESS\n");
73
74 return -1;
75}
76
77void cleanup_module(void)
78{
79}
80
81MODULE_LICENSE("GPL");
This page took 0.025953 seconds and 4 git commands to generate.