Add missing SPDX license identifiers to uprobes
[lttng-modules.git] / wrapper / uprobes.h
CommitLineData
8134eb60
MJ
1/* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
2 *
149b9a9d
YB
3 * wrapper/uprobes.h
4 *
5 * wrapper around uprobes. Using KALLSYMS to get its address when
6 * available, else we need to have a kernel that exports this function to GPL
7 * modules.
8 *
9 * Copyright (C) 2013 Yannick Brosseau <yannick.brosseau@gmail.com>
10 * Copyright (C) 2017 Francis Deslauriers <francis.deslauriers@efficios.com>
11 *
149b9a9d
YB
12 */
13
8134eb60
MJ
14#ifndef _LTTNG_WRAPPER_UPROBES_H
15#define _LTTNG_WRAPPER_UPROBES_H
16
149b9a9d
YB
17#include <linux/version.h>
18
19#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0))
20#include <linux/uprobes.h>
21
22/* Use kallsym lookup for version before 3.9. */
23#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
24
25static inline
26int wrapper_uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
27{
28 return uprobe_register(inode, offset, uc);
29}
30
31static inline
32void wrapper_uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
33{
34 uprobe_unregister(inode, offset, uc);
35}
36
37#else /* Version < 3.9, use kallsym lookup. */
38#include "kallsyms.h"
39
40static inline
41int wrapper_uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
42{
43 int (*uprobe_register_sym)(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
44
45 uprobe_register_sym = (void *) kallsyms_lookup_funcptr("uprobe_register");
46
47 if (uprobe_register_sym) {
48 return uprobe_register_sym(inode, offset, uc);
49 } else {
50 printk(KERN_WARNING "LTTng: uprobe_register symbol lookup failed.\n");
51 return -EINVAL;
52 }
53}
54
55static inline
56void wrapper_uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
57{
58 int (*uprobe_unregister_sym)(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
59
60 uprobe_unregister_sym = (void *) kallsyms_lookup_funcptr("uprobe_unregister");
61
62 if (uprobe_unregister_sym) {
63 uprobe_unregister_sym(inode, offset, uc);
64 } else {
65 printk(KERN_WARNING "LTTng: uprobe_unregister symbol lookup failed.\n");
66 WARN_ON(1);
67 }
68}
69#endif
70#else
71/* Version < 3.5, before uprobe was added. */
72struct uprobe_consumer {};
73
74#endif
75#endif
This page took 0.02465 seconds and 4 git commands to generate.