1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 23c8a67f5SJiri Olsa #include <stdbool.h> 3e5e6312bSArnaldo Carvalho de Melo #include <stdlib.h> 43c8a67f5SJiri Olsa #include "tests.h" 53c8a67f5SJiri Olsa #include "dso.h" 63c8a67f5SJiri Olsa #include "debug.h" 73c8a67f5SJiri Olsa 8*b946cd37SJiri Olsa static int test(const char *path, bool alloc_name, bool kmod, 9*b946cd37SJiri Olsa int comp, const char *name) 103c8a67f5SJiri Olsa { 113c8a67f5SJiri Olsa struct kmod_path m; 123c8a67f5SJiri Olsa 133c8a67f5SJiri Olsa memset(&m, 0x0, sizeof(m)); 143c8a67f5SJiri Olsa 153c8a67f5SJiri Olsa TEST_ASSERT_VAL("kmod_path__parse", 16*b946cd37SJiri Olsa !__kmod_path__parse(&m, path, alloc_name)); 173c8a67f5SJiri Olsa 18*b946cd37SJiri Olsa pr_debug("%s - alloc name %d, kmod %d, comp %d, name '%s'\n", 19*b946cd37SJiri Olsa path, alloc_name, m.kmod, m.comp, m.name); 203c8a67f5SJiri Olsa 213c8a67f5SJiri Olsa TEST_ASSERT_VAL("wrong kmod", m.kmod == kmod); 223c8a67f5SJiri Olsa TEST_ASSERT_VAL("wrong comp", m.comp == comp); 233c8a67f5SJiri Olsa 243c8a67f5SJiri Olsa if (name) 253c8a67f5SJiri Olsa TEST_ASSERT_VAL("wrong name", m.name && !strcmp(name, m.name)); 263c8a67f5SJiri Olsa else 273c8a67f5SJiri Olsa TEST_ASSERT_VAL("wrong name", !m.name); 283c8a67f5SJiri Olsa 293c8a67f5SJiri Olsa free(m.name); 303c8a67f5SJiri Olsa return 0; 313c8a67f5SJiri Olsa } 323c8a67f5SJiri Olsa 331f121b03SWang Nan static int test_is_kernel_module(const char *path, int cpumode, bool expect) 341f121b03SWang Nan { 351f121b03SWang Nan TEST_ASSERT_VAL("is_kernel_module", 361f121b03SWang Nan (!!is_kernel_module(path, cpumode)) == (!!expect)); 371f121b03SWang Nan pr_debug("%s (cpumode: %d) - is_kernel_module: %s\n", 381f121b03SWang Nan path, cpumode, expect ? "true" : "false"); 391f121b03SWang Nan return 0; 401f121b03SWang Nan } 411f121b03SWang Nan 42*b946cd37SJiri Olsa #define T(path, an, k, c, n) \ 43*b946cd37SJiri Olsa TEST_ASSERT_VAL("failed", !test(path, an, k, c, n)) 443c8a67f5SJiri Olsa 451f121b03SWang Nan #define M(path, c, e) \ 461f121b03SWang Nan TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e)) 471f121b03SWang Nan 4881f17c90SArnaldo Carvalho de Melo int test__kmod_path__parse(struct test *t __maybe_unused, int subtest __maybe_unused) 493c8a67f5SJiri Olsa { 50*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 51*b946cd37SJiri Olsa T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]"); 52*b946cd37SJiri Olsa T("/xxxx/xxxx/x-x.ko", false , true, 0 , NULL ); 53*b946cd37SJiri Olsa T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]"); 54*b946cd37SJiri Olsa T("/xxxx/xxxx/x-x.ko", false , true, 0 , NULL ); 551f121b03SWang Nan M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true); 561f121b03SWang Nan M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_KERNEL, true); 571f121b03SWang Nan M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_USER, false); 583c8a67f5SJiri Olsa 59805b151aSKim Phillips #ifdef HAVE_ZLIB_SUPPORT 60*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 61*b946cd37SJiri Olsa T("/xxxx/xxxx/x.ko.gz", true , true, 1 , "[x]"); 62*b946cd37SJiri Olsa T("/xxxx/xxxx/x.ko.gz", false , true, 1 , NULL ); 63*b946cd37SJiri Olsa T("/xxxx/xxxx/x.ko.gz", true , true, 1 , "[x]"); 64*b946cd37SJiri Olsa T("/xxxx/xxxx/x.ko.gz", false , true, 1 , NULL ); 651f121b03SWang Nan M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true); 661f121b03SWang Nan M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_KERNEL, true); 671f121b03SWang Nan M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_USER, false); 683c8a67f5SJiri Olsa 69*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 70*b946cd37SJiri Olsa T("/xxxx/xxxx/x.gz", true , false, 1 , "x.gz"); 71*b946cd37SJiri Olsa T("/xxxx/xxxx/x.gz", false , false, 1 , NULL ); 72*b946cd37SJiri Olsa T("/xxxx/xxxx/x.gz", true , false, 1 , "x.gz"); 73*b946cd37SJiri Olsa T("/xxxx/xxxx/x.gz", false , false, 1 , NULL ); 741f121b03SWang Nan M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 751f121b03SWang Nan M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_KERNEL, false); 761f121b03SWang Nan M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_USER, false); 773c8a67f5SJiri Olsa 78*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 79*b946cd37SJiri Olsa T("x.gz", true , false, 1 , "x.gz"); 80*b946cd37SJiri Olsa T("x.gz", false , false, 1 , NULL ); 81*b946cd37SJiri Olsa T("x.gz", true , false, 1 , "x.gz"); 82*b946cd37SJiri Olsa T("x.gz", false , false, 1 , NULL ); 831f121b03SWang Nan M("x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 841f121b03SWang Nan M("x.gz", PERF_RECORD_MISC_KERNEL, false); 851f121b03SWang Nan M("x.gz", PERF_RECORD_MISC_USER, false); 863c8a67f5SJiri Olsa 87*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 88*b946cd37SJiri Olsa T("x.ko.gz", true , true, 1 , "[x]"); 89*b946cd37SJiri Olsa T("x.ko.gz", false , true, 1 , NULL ); 90*b946cd37SJiri Olsa T("x.ko.gz", true , true, 1 , "[x]"); 91*b946cd37SJiri Olsa T("x.ko.gz", false , true, 1 , NULL ); 921f121b03SWang Nan M("x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true); 931f121b03SWang Nan M("x.ko.gz", PERF_RECORD_MISC_KERNEL, true); 941f121b03SWang Nan M("x.ko.gz", PERF_RECORD_MISC_USER, false); 95805b151aSKim Phillips #endif 961f121b03SWang Nan 97*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 98*b946cd37SJiri Olsa T("[test_module]", true , true, false, "[test_module]"); 99*b946cd37SJiri Olsa T("[test_module]", false , true, false, NULL ); 100*b946cd37SJiri Olsa T("[test_module]", true , true, false, "[test_module]"); 101*b946cd37SJiri Olsa T("[test_module]", false , true, false, NULL ); 1021f121b03SWang Nan M("[test_module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true); 1031f121b03SWang Nan M("[test_module]", PERF_RECORD_MISC_KERNEL, true); 1041f121b03SWang Nan M("[test_module]", PERF_RECORD_MISC_USER, false); 1051f121b03SWang Nan 106*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 107*b946cd37SJiri Olsa T("[test.module]", true , true, false, "[test.module]"); 108*b946cd37SJiri Olsa T("[test.module]", false , true, false, NULL ); 109*b946cd37SJiri Olsa T("[test.module]", true , true, false, "[test.module]"); 110*b946cd37SJiri Olsa T("[test.module]", false , true, false, NULL ); 1111f121b03SWang Nan M("[test.module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true); 1121f121b03SWang Nan M("[test.module]", PERF_RECORD_MISC_KERNEL, true); 1131f121b03SWang Nan M("[test.module]", PERF_RECORD_MISC_USER, false); 1141f121b03SWang Nan 115*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 116*b946cd37SJiri Olsa T("[vdso]", true , false, false, "[vdso]"); 117*b946cd37SJiri Olsa T("[vdso]", false , false, false, NULL ); 118*b946cd37SJiri Olsa T("[vdso]", true , false, false, "[vdso]"); 119*b946cd37SJiri Olsa T("[vdso]", false , false, false, NULL ); 1201f121b03SWang Nan M("[vdso]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 1211f121b03SWang Nan M("[vdso]", PERF_RECORD_MISC_KERNEL, false); 1221f121b03SWang Nan M("[vdso]", PERF_RECORD_MISC_USER, false); 1231f121b03SWang Nan 124*b946cd37SJiri Olsa T("[vdso32]", true , false, false, "[vdso32]"); 125*b946cd37SJiri Olsa T("[vdso32]", false , false, false, NULL ); 126*b946cd37SJiri Olsa T("[vdso32]", true , false, false, "[vdso32]"); 127*b946cd37SJiri Olsa T("[vdso32]", false , false, false, NULL ); 128dcaeae4eSAdrian Hunter M("[vdso32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 129dcaeae4eSAdrian Hunter M("[vdso32]", PERF_RECORD_MISC_KERNEL, false); 130dcaeae4eSAdrian Hunter M("[vdso32]", PERF_RECORD_MISC_USER, false); 131dcaeae4eSAdrian Hunter 132*b946cd37SJiri Olsa T("[vdsox32]", true , false, false, "[vdsox32]"); 133*b946cd37SJiri Olsa T("[vdsox32]", false , false, false, NULL ); 134*b946cd37SJiri Olsa T("[vdsox32]", true , false, false, "[vdsox32]"); 135*b946cd37SJiri Olsa T("[vdsox32]", false , false, false, NULL ); 136dcaeae4eSAdrian Hunter M("[vdsox32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 137dcaeae4eSAdrian Hunter M("[vdsox32]", PERF_RECORD_MISC_KERNEL, false); 138dcaeae4eSAdrian Hunter M("[vdsox32]", PERF_RECORD_MISC_USER, false); 139dcaeae4eSAdrian Hunter 140*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 141*b946cd37SJiri Olsa T("[vsyscall]", true , false, false, "[vsyscall]"); 142*b946cd37SJiri Olsa T("[vsyscall]", false , false, false, NULL ); 143*b946cd37SJiri Olsa T("[vsyscall]", true , false, false, "[vsyscall]"); 144*b946cd37SJiri Olsa T("[vsyscall]", false , false, false, NULL ); 1451f121b03SWang Nan M("[vsyscall]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 1461f121b03SWang Nan M("[vsyscall]", PERF_RECORD_MISC_KERNEL, false); 1471f121b03SWang Nan M("[vsyscall]", PERF_RECORD_MISC_USER, false); 1481f121b03SWang Nan 149*b946cd37SJiri Olsa /* path alloc_name kmod comp name */ 150*b946cd37SJiri Olsa T("[kernel.kallsyms]", true , false, false, "[kernel.kallsyms]"); 151*b946cd37SJiri Olsa T("[kernel.kallsyms]", false , false, false, NULL ); 152*b946cd37SJiri Olsa T("[kernel.kallsyms]", true , false, false, "[kernel.kallsyms]"); 153*b946cd37SJiri Olsa T("[kernel.kallsyms]", false , false, false, NULL ); 1541f121b03SWang Nan M("[kernel.kallsyms]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false); 1551f121b03SWang Nan M("[kernel.kallsyms]", PERF_RECORD_MISC_KERNEL, false); 1561f121b03SWang Nan M("[kernel.kallsyms]", PERF_RECORD_MISC_USER, false); 1573c8a67f5SJiri Olsa 1583c8a67f5SJiri Olsa return 0; 1593c8a67f5SJiri Olsa } 160