blob: 148dd31cc2019fcc0d40231d1a9c0465dcb795e1 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Jiri Olsa3c8a67f2015-02-05 15:40:25 +01002#include <stdbool.h>
Arnaldo Carvalho de Meloe5e63122016-07-22 12:12:49 -03003#include <stdlib.h>
Jiri Olsa3c8a67f2015-02-05 15:40:25 +01004#include "tests.h"
5#include "dso.h"
6#include "debug.h"
7
8static int test(const char *path, bool alloc_name, bool alloc_ext,
9 bool kmod, bool comp, const char *name, const char *ext)
10{
11 struct kmod_path m;
12
13 memset(&m, 0x0, sizeof(m));
14
15 TEST_ASSERT_VAL("kmod_path__parse",
16 !__kmod_path__parse(&m, path, alloc_name, alloc_ext));
17
18 pr_debug("%s - alloc name %d, alloc ext %d, kmod %d, comp %d, name '%s', ext '%s'\n",
19 path, alloc_name, alloc_ext, m.kmod, m.comp, m.name, m.ext);
20
21 TEST_ASSERT_VAL("wrong kmod", m.kmod == kmod);
22 TEST_ASSERT_VAL("wrong comp", m.comp == comp);
23
24 if (ext)
25 TEST_ASSERT_VAL("wrong ext", m.ext && !strcmp(ext, m.ext));
26 else
27 TEST_ASSERT_VAL("wrong ext", !m.ext);
28
29 if (name)
30 TEST_ASSERT_VAL("wrong name", m.name && !strcmp(name, m.name));
31 else
32 TEST_ASSERT_VAL("wrong name", !m.name);
33
34 free(m.name);
35 free(m.ext);
36 return 0;
37}
38
Wang Nan1f121b02015-06-03 08:52:21 +000039static int test_is_kernel_module(const char *path, int cpumode, bool expect)
40{
41 TEST_ASSERT_VAL("is_kernel_module",
42 (!!is_kernel_module(path, cpumode)) == (!!expect));
43 pr_debug("%s (cpumode: %d) - is_kernel_module: %s\n",
44 path, cpumode, expect ? "true" : "false");
45 return 0;
46}
47
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010048#define T(path, an, ae, k, c, n, e) \
49 TEST_ASSERT_VAL("failed", !test(path, an, ae, k, c, n, e))
50
Wang Nan1f121b02015-06-03 08:52:21 +000051#define M(path, c, e) \
52 TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))
53
Arnaldo Carvalho de Melo81f17c92017-08-03 15:16:31 -030054int test__kmod_path__parse(struct test *t __maybe_unused, int subtest __maybe_unused)
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010055{
56 /* path alloc_name alloc_ext kmod comp name ext */
57 T("/xxxx/xxxx/x-x.ko", true , true , true, false, "[x_x]", NULL);
58 T("/xxxx/xxxx/x-x.ko", false , true , true, false, NULL , NULL);
59 T("/xxxx/xxxx/x-x.ko", true , false , true, false, "[x_x]", NULL);
60 T("/xxxx/xxxx/x-x.ko", false , false , true, false, NULL , NULL);
Wang Nan1f121b02015-06-03 08:52:21 +000061 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
62 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_KERNEL, true);
63 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_USER, false);
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010064
Kim Phillips805b1512017-05-03 13:14:02 +010065#ifdef HAVE_ZLIB_SUPPORT
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010066 /* path alloc_name alloc_ext kmod comp name ext */
67 T("/xxxx/xxxx/x.ko.gz", true , true , true, true, "[x]", "gz");
68 T("/xxxx/xxxx/x.ko.gz", false , true , true, true, NULL , "gz");
69 T("/xxxx/xxxx/x.ko.gz", true , false , true, true, "[x]", NULL);
70 T("/xxxx/xxxx/x.ko.gz", false , false , true, true, NULL , NULL);
Wang Nan1f121b02015-06-03 08:52:21 +000071 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
72 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
73 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_USER, false);
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010074
75 /* path alloc_name alloc_ext kmod comp name ext */
76 T("/xxxx/xxxx/x.gz", true , true , false, true, "x.gz" ,"gz");
77 T("/xxxx/xxxx/x.gz", false , true , false, true, NULL ,"gz");
78 T("/xxxx/xxxx/x.gz", true , false , false, true, "x.gz" , NULL);
79 T("/xxxx/xxxx/x.gz", false , false , false, true, NULL , NULL);
Wang Nan1f121b02015-06-03 08:52:21 +000080 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
81 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_KERNEL, false);
82 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_USER, false);
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010083
84 /* path alloc_name alloc_ext kmod comp name ext */
85 T("x.gz", true , true , false, true, "x.gz", "gz");
86 T("x.gz", false , true , false, true, NULL , "gz");
87 T("x.gz", true , false , false, true, "x.gz", NULL);
88 T("x.gz", false , false , false, true, NULL , NULL);
Wang Nan1f121b02015-06-03 08:52:21 +000089 M("x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
90 M("x.gz", PERF_RECORD_MISC_KERNEL, false);
91 M("x.gz", PERF_RECORD_MISC_USER, false);
Jiri Olsa3c8a67f2015-02-05 15:40:25 +010092
93 /* path alloc_name alloc_ext kmod comp name ext */
94 T("x.ko.gz", true , true , true, true, "[x]", "gz");
95 T("x.ko.gz", false , true , true, true, NULL , "gz");
96 T("x.ko.gz", true , false , true, true, "[x]", NULL);
97 T("x.ko.gz", false , false , true, true, NULL , NULL);
Wang Nan1f121b02015-06-03 08:52:21 +000098 M("x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
99 M("x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
100 M("x.ko.gz", PERF_RECORD_MISC_USER, false);
Kim Phillips805b1512017-05-03 13:14:02 +0100101#endif
Wang Nan1f121b02015-06-03 08:52:21 +0000102
103 /* path alloc_name alloc_ext kmod comp name ext */
104 T("[test_module]", true , true , true, false, "[test_module]", NULL);
105 T("[test_module]", false , true , true, false, NULL , NULL);
106 T("[test_module]", true , false , true, false, "[test_module]", NULL);
107 T("[test_module]", false , false , true, false, NULL , NULL);
108 M("[test_module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
109 M("[test_module]", PERF_RECORD_MISC_KERNEL, true);
110 M("[test_module]", PERF_RECORD_MISC_USER, false);
111
112 /* path alloc_name alloc_ext kmod comp name ext */
113 T("[test.module]", true , true , true, false, "[test.module]", NULL);
114 T("[test.module]", false , true , true, false, NULL , NULL);
115 T("[test.module]", true , false , true, false, "[test.module]", NULL);
116 T("[test.module]", false , false , true, false, NULL , NULL);
117 M("[test.module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
118 M("[test.module]", PERF_RECORD_MISC_KERNEL, true);
119 M("[test.module]", PERF_RECORD_MISC_USER, false);
120
121 /* path alloc_name alloc_ext kmod comp name ext */
122 T("[vdso]", true , true , false, false, "[vdso]", NULL);
123 T("[vdso]", false , true , false, false, NULL , NULL);
124 T("[vdso]", true , false , false, false, "[vdso]", NULL);
125 T("[vdso]", false , false , false, false, NULL , NULL);
126 M("[vdso]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
127 M("[vdso]", PERF_RECORD_MISC_KERNEL, false);
128 M("[vdso]", PERF_RECORD_MISC_USER, false);
129
Adrian Hunterdcaeae42018-06-04 15:56:53 +0300130 T("[vdso32]", true , true , false, false, "[vdso32]", NULL);
131 T("[vdso32]", false , true , false, false, NULL , NULL);
132 T("[vdso32]", true , false , false, false, "[vdso32]", NULL);
133 T("[vdso32]", false , false , false, false, NULL , NULL);
134 M("[vdso32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
135 M("[vdso32]", PERF_RECORD_MISC_KERNEL, false);
136 M("[vdso32]", PERF_RECORD_MISC_USER, false);
137
138 T("[vdsox32]", true , true , false, false, "[vdsox32]", NULL);
139 T("[vdsox32]", false , true , false, false, NULL , NULL);
140 T("[vdsox32]", true , false , false, false, "[vdsox32]", NULL);
141 T("[vdsox32]", false , false , false, false, NULL , NULL);
142 M("[vdsox32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
143 M("[vdsox32]", PERF_RECORD_MISC_KERNEL, false);
144 M("[vdsox32]", PERF_RECORD_MISC_USER, false);
145
Wang Nan1f121b02015-06-03 08:52:21 +0000146 /* path alloc_name alloc_ext kmod comp name ext */
147 T("[vsyscall]", true , true , false, false, "[vsyscall]", NULL);
148 T("[vsyscall]", false , true , false, false, NULL , NULL);
149 T("[vsyscall]", true , false , false, false, "[vsyscall]", NULL);
150 T("[vsyscall]", false , false , false, false, NULL , NULL);
151 M("[vsyscall]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
152 M("[vsyscall]", PERF_RECORD_MISC_KERNEL, false);
153 M("[vsyscall]", PERF_RECORD_MISC_USER, false);
154
155 /* path alloc_name alloc_ext kmod comp name ext */
156 T("[kernel.kallsyms]", true , true , false, false, "[kernel.kallsyms]", NULL);
157 T("[kernel.kallsyms]", false , true , false, false, NULL , NULL);
158 T("[kernel.kallsyms]", true , false , false, false, "[kernel.kallsyms]", NULL);
159 T("[kernel.kallsyms]", false , false , false, false, NULL , NULL);
160 M("[kernel.kallsyms]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
161 M("[kernel.kallsyms]", PERF_RECORD_MISC_KERNEL, false);
162 M("[kernel.kallsyms]", PERF_RECORD_MISC_USER, false);
Jiri Olsa3c8a67f2015-02-05 15:40:25 +0100163
164 return 0;
165}