Rename "tsc" to "timestamp"
[lttng-modules.git] / src / lttng-syscalls-extractor.c
CommitLineData
b7cdc182 1/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
9f36eaed 2 *
886d51a3
MD
3 * lttng-syscalls-extractor.c
4 *
5 * Dump syscall metadata to console.
6 *
e709527c 7 * Copyright 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
396fa37a 8 * Copyright 2011 EfficiOS Inc.
5fee13fd
MD
9 */
10
11#include <linux/module.h>
12#include <linux/kernel.h>
13#include <linux/types.h>
14#include <linux/list.h>
15#include <linux/err.h>
16#include <linux/slab.h>
17#include <linux/kallsyms.h>
18#include <linux/dcache.h>
e709527c 19#include <linux/trace_events.h>
d504ea73 20#include <linux/kprobes.h>
5fee13fd 21#include <trace/syscall.h>
7801e9f4 22#include <asm/syscall.h>
d504ea73 23#include <wrapper/kallsyms.h>
5fee13fd
MD
24
25#ifndef CONFIG_FTRACE_SYSCALLS
26#error "You need to set CONFIG_FTRACE_SYSCALLS=y"
27#endif
28
bc55cda3
MD
29#ifndef CONFIG_KALLSYMS_ALL
30#error "You need to set CONFIG_KALLSYMS_ALL=y"
31#endif
32
e709527c
MJ
33/*
34 * The 'ident' parameter is prepended to each printk line to help
35 * extract the proper lines from dmesg.
36 */
37static char *ident = "";
38module_param(ident, charp, 0);
39
5fee13fd
MD
40static struct syscall_metadata **__start_syscalls_metadata;
41static struct syscall_metadata **__stop_syscalls_metadata;
42
43static __init
44struct syscall_metadata *find_syscall_meta(unsigned long syscall)
45{
46 struct syscall_metadata **iter;
47
48 for (iter = __start_syscalls_metadata;
49 iter < __stop_syscalls_metadata; iter++) {
50 if ((*iter)->syscall_nr == syscall)
51 return (*iter);
52 }
53 return NULL;
54}
55
56int init_module(void)
57{
58 struct syscall_metadata *meta;
59 int i;
60
d504ea73
JG
61 __start_syscalls_metadata = (void *) wrapper_kallsyms_lookup_name("__start_syscalls_metadata");
62 __stop_syscalls_metadata = (void *) wrapper_kallsyms_lookup_name("__stop_syscalls_metadata");
5fee13fd 63
e709527c 64 printk("%s---START---\n", ident);
5fee13fd
MD
65 for (i = 0; i < NR_syscalls; i++) {
66 int j;
67
68 meta = find_syscall_meta(i);
69 if (!meta)
70 continue;
e709527c
MJ
71 printk("%ssyscall %s nr %d nbargs %d ",
72 ident, meta->name, meta->syscall_nr, meta->nb_args);
73 printk(KERN_CONT "types: (");
5fee13fd
MD
74 for (j = 0; j < meta->nb_args; j++) {
75 if (j > 0)
e709527c
MJ
76 printk(KERN_CONT ", ");
77 printk(KERN_CONT "%s", meta->types[j]);
5fee13fd 78 }
e709527c
MJ
79 printk(KERN_CONT ") ");
80 printk(KERN_CONT "args: (");
5fee13fd
MD
81 for (j = 0; j < meta->nb_args; j++) {
82 if (j > 0)
e709527c
MJ
83 printk(KERN_CONT ", ");
84 printk(KERN_CONT "%s", meta->args[j]);
5fee13fd 85 }
e709527c 86 printk(KERN_CONT ")\n");
5fee13fd 87 }
e709527c 88 printk("%s---END---\n", ident);
5fee13fd 89
e709527c
MJ
90 /*
91 * This module always fails to load.
92 */
5fee13fd
MD
93 return -1;
94}
95
96void cleanup_module(void)
97{
1e543e7c 98}
5fee13fd
MD
99
100MODULE_LICENSE("GPL");
This page took 0.059868 seconds and 4 git commands to generate.