Add missing SPDX license identifiers to uprobes
[lttng-modules.git] / wrapper / uprobes.h
1 /* SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1)
2 *
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 *
12 */
13
14 #ifndef _LTTNG_WRAPPER_UPROBES_H
15 #define _LTTNG_WRAPPER_UPROBES_H
16
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
25 static inline
26 int wrapper_uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)
27 {
28 return uprobe_register(inode, offset, uc);
29 }
30
31 static inline
32 void 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
40 static inline
41 int 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
55 static inline
56 void 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. */
72 struct uprobe_consumer {};
73
74 #endif
75 #endif
This page took 0.038689 seconds and 4 git commands to generate.