0004-display-system-call-name.patch 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. From 4991eba23caacc1bea3387c07086a06309d0b902 Mon Sep 17 00:00:00 2001
  2. From: "max.ma" <max.ma@starfivetech.com>
  3. Date: Tue, 19 Jul 2022 23:20:26 -0700
  4. Subject: [PATCH 4/6] display system call name
  5. ---
  6. tests/plugin/syscall.c | 332 ++++++++++++++++++++++++++++++++++++++++-
  7. 1 file changed, 330 insertions(+), 2 deletions(-)
  8. diff --git a/tests/plugin/syscall.c b/tests/plugin/syscall.c
  9. index 96040c578f..976f87624e 100644
  10. --- a/tests/plugin/syscall.c
  11. +++ b/tests/plugin/syscall.c
  12. @@ -11,9 +11,331 @@
  13. #include <unistd.h>
  14. #include <stdio.h>
  15. #include <glib.h>
  16. +#include <time.h>
  17. #include <qemu-plugin.h>
  18. +typedef struct {
  19. + const char * name;
  20. + int id;
  21. +} syscall_item_t;
  22. +
  23. +static const syscall_item_t syscall_tbl[] = {
  24. +{"__NR_accept", 202},
  25. +{"__NR_accept4", 242},
  26. +{"__NR_acct", 89},
  27. +{"__NR_add_key", 217},
  28. +{"__NR_adjtimex", 171},
  29. +{"__NR_bind", 200},
  30. +{"__NR_bpf", 280},
  31. +{"__NR_brk", 214},
  32. +{"__NR_capget", 90},
  33. +{"__NR_capset", 91},
  34. +{"__NR_chdir", 49},
  35. +{"__NR_chroot", 51},
  36. +{"__NR_clock_adjtime", 266},
  37. +{"__NR_clock_getres", 114},
  38. +{"__NR_clock_gettime", 113},
  39. +{"__NR_clock_nanosleep", 115},
  40. +{"__NR_clock_settime", 112},
  41. +{"__NR_clone", 220},
  42. +{"__NR_clone3", 435},
  43. +{"__NR_close", 57},
  44. +{"__NR_close_range", 436},
  45. +{"__NR_connect", 203},
  46. +{"__NR_copy_file_range", 285},
  47. +{"__NR_delete_module", 106},
  48. +{"__NR_dup", 23},
  49. +{"__NR_dup3", 24},
  50. +{"__NR_epoll_create1", 20},
  51. +{"__NR_epoll_ctl", 21},
  52. +{"__NR_epoll_pwait", 22},
  53. +{"__NR_epoll_pwait2", 441},
  54. +{"__NR_eventfd2", 19},
  55. +{"__NR_execve", 221},
  56. +{"__NR_execveat", 281},
  57. +{"__NR_exit", 93},
  58. +{"__NR_exit_group", 94},
  59. +{"__NR_faccessat", 48},
  60. +{"__NR_faccessat2", 439},
  61. +{"__NR_fadvise64", 223},
  62. +{"__NR_fallocate", 47},
  63. +{"__NR_fanotify_init", 262},
  64. +{"__NR_fanotify_mark", 263},
  65. +{"__NR_fchdir", 50},
  66. +{"__NR_fchmod", 52},
  67. +{"__NR_fchmodat", 53},
  68. +{"__NR_fchown", 55},
  69. +{"__NR_fchownat", 54},
  70. +{"__NR_fcntl", 25},
  71. +{"__NR_fdatasync", 83},
  72. +{"__NR_fgetxattr", 10},
  73. +{"__NR_finit_module", 273},
  74. +{"__NR_flistxattr", 13},
  75. +{"__NR_flock", 32},
  76. +{"__NR_fremovexattr", 16},
  77. +{"__NR_fsconfig", 431},
  78. +{"__NR_fsetxattr", 7},
  79. +{"__NR_fsmount", 432},
  80. +{"__NR_fsopen", 430},
  81. +{"__NR_fspick", 433},
  82. +{"__NR_fstat", 80},
  83. +{"__NR_fstatfs", 44},
  84. +{"__NR_fsync", 82},
  85. +{"__NR_ftruncate", 46},
  86. +{"__NR_futex", 98},
  87. +{"__NR_get_mempolicy", 236},
  88. +{"__NR_get_robust_list", 100},
  89. +{"__NR_getcpu", 168},
  90. +{"__NR_getcwd", 17},
  91. +{"__NR_getdents64", 61},
  92. +{"__NR_getegid", 177},
  93. +{"__NR_geteuid", 175},
  94. +{"__NR_getgid", 176},
  95. +{"__NR_getgroups", 158},
  96. +{"__NR_getitimer", 102},
  97. +{"__NR_getpeername", 205},
  98. +{"__NR_getpgid", 155},
  99. +{"__NR_getpid", 172},
  100. +{"__NR_getppid", 173},
  101. +{"__NR_getpriority", 141},
  102. +{"__NR_getrandom", 278},
  103. +{"__NR_getresgid", 150},
  104. +{"__NR_getresuid", 148},
  105. +{"__NR_getrlimit", 163},
  106. +{"__NR_getrusage", 165},
  107. +{"__NR_getsid", 156},
  108. +{"__NR_getsockname", 204},
  109. +{"__NR_getsockopt", 209},
  110. +{"__NR_gettid", 178},
  111. +{"__NR_gettimeofday", 169},
  112. +{"__NR_getuid", 174},
  113. +{"__NR_getxattr", 8},
  114. +{"__NR_init_module", 105},
  115. +{"__NR_inotify_add_watch", 27},
  116. +{"__NR_inotify_init1", 26},
  117. +{"__NR_inotify_rm_watch", 28},
  118. +{"__NR_io_cancel", 3},
  119. +{"__NR_io_destroy", 1},
  120. +{"__NR_io_getevents", 4},
  121. +{"__NR_io_pgetevents", 292},
  122. +{"__NR_io_setup", 0},
  123. +{"__NR_io_submit", 2},
  124. +{"__NR_io_uring_enter", 426},
  125. +{"__NR_io_uring_register", 427},
  126. +{"__NR_io_uring_setup", 425},
  127. +{"__NR_ioctl", 29},
  128. +{"__NR_ioprio_get", 31},
  129. +{"__NR_ioprio_set", 30},
  130. +{"__NR_kcmp", 272},
  131. +{"__NR_kexec_file_load", 294},
  132. +{"__NR_kexec_load", 104},
  133. +{"__NR_keyctl", 219},
  134. +{"__NR_kill", 129},
  135. +{"__NR_landlock_add_rule", 445},
  136. +{"__NR_landlock_create_ruleset", 444},
  137. +{"__NR_landlock_restrict_self", 446},
  138. +{"__NR_lgetxattr", 9},
  139. +{"__NR_linkat", 37},
  140. +{"__NR_listen", 201},
  141. +{"__NR_listxattr", 11},
  142. +{"__NR_llistxattr", 12},
  143. +{"__NR_lookup_dcookie", 18},
  144. +{"__NR_lremovexattr", 15},
  145. +{"__NR_lseek", 62},
  146. +{"__NR_lsetxattr", 6},
  147. +{"__NR_madvise", 233},
  148. +{"__NR_mbind", 235},
  149. +{"__NR_membarrier", 283},
  150. +{"__NR_memfd_create", 279},
  151. +{"__NR_migrate_pages", 238},
  152. +{"__NR_mincore", 232},
  153. +{"__NR_mkdirat", 34},
  154. +{"__NR_mknodat", 33},
  155. +{"__NR_mlock", 228},
  156. +{"__NR_mlock2", 284},
  157. +{"__NR_mlockall", 230},
  158. +{"__NR_mmap", 222},
  159. +{"__NR_mount", 40},
  160. +{"__NR_mount_setattr", 442},
  161. +{"__NR_move_mount", 429},
  162. +{"__NR_move_pages", 239},
  163. +{"__NR_mprotect", 226},
  164. +{"__NR_mq_getsetattr", 185},
  165. +{"__NR_mq_notify", 184},
  166. +{"__NR_mq_open", 180},
  167. +{"__NR_mq_timedreceive", 183},
  168. +{"__NR_mq_timedsend", 182},
  169. +{"__NR_mq_unlink", 181},
  170. +{"__NR_mremap", 216},
  171. +{"__NR_msgctl", 187},
  172. +{"__NR_msgget", 186},
  173. +{"__NR_msgrcv", 188},
  174. +{"__NR_msgsnd", 189},
  175. +{"__NR_msync", 227},
  176. +{"__NR_munlock", 229},
  177. +{"__NR_munlockall", 231},
  178. +{"__NR_munmap", 215},
  179. +{"__NR_name_to_handle_at", 264},
  180. +{"__NR_nanosleep", 101},
  181. +{"__NR_newfstatat", 79},
  182. +{"__NR_nfsservctl", 42},
  183. +{"__NR_open_by_handle_at", 265},
  184. +{"__NR_open_tree", 428},
  185. +{"__NR_openat", 56},
  186. +{"__NR_openat2", 437},
  187. +{"__NR_perf_event_open", 241},
  188. +{"__NR_personality", 92},
  189. +{"__NR_pidfd_getfd", 438},
  190. +{"__NR_pidfd_open", 434},
  191. +{"__NR_pidfd_send_signal", 424},
  192. +{"__NR_pipe2", 59},
  193. +{"__NR_pivot_root", 41},
  194. +{"__NR_pkey_alloc", 289},
  195. +{"__NR_pkey_free", 290},
  196. +{"__NR_pkey_mprotect", 288},
  197. +{"__NR_ppoll", 73},
  198. +{"__NR_prctl", 167},
  199. +{"__NR_pread64", 67},
  200. +{"__NR_preadv", 69},
  201. +{"__NR_preadv2", 286},
  202. +{"__NR_prlimit64", 261},
  203. +{"__NR_process_madvise", 440},
  204. +{"__NR_process_vm_readv", 270},
  205. +{"__NR_process_vm_writev", 271},
  206. +{"__NR_pselect6", 72},
  207. +{"__NR_ptrace", 117},
  208. +{"__NR_pwrite64", 68},
  209. +{"__NR_pwritev", 70},
  210. +{"__NR_pwritev2", 287},
  211. +{"__NR_quotactl", 60},
  212. +{"__NR_quotactl_fd", 443},
  213. +{"__NR_read", 63},
  214. +{"__NR_readahead", 213},
  215. +{"__NR_readlinkat", 78},
  216. +{"__NR_readv", 65},
  217. +{"__NR_reboot", 142},
  218. +{"__NR_recvfrom", 207},
  219. +{"__NR_recvmmsg", 243},
  220. +{"__NR_recvmsg", 212},
  221. +{"__NR_remap_file_pages", 234},
  222. +{"__NR_removexattr", 14},
  223. +{"__NR_renameat2", 276},
  224. +{"__NR_request_key", 218},
  225. +{"__NR_restart_syscall", 128},
  226. +{"__NR_riscv_flush_icache", 259},
  227. +{"__NR_rseq", 293},
  228. +{"__NR_rt_sigaction", 134},
  229. +{"__NR_rt_sigpending", 136},
  230. +{"__NR_rt_sigprocmask", 135},
  231. +{"__NR_rt_sigqueueinfo", 138},
  232. +{"__NR_rt_sigreturn", 139},
  233. +{"__NR_rt_sigsuspend", 133},
  234. +{"__NR_rt_sigtimedwait", 137},
  235. +{"__NR_rt_tgsigqueueinfo", 240},
  236. +{"__NR_sched_get_priority_max", 125},
  237. +{"__NR_sched_get_priority_min", 126},
  238. +{"__NR_sched_getaffinity", 123},
  239. +{"__NR_sched_getattr", 275},
  240. +{"__NR_sched_getparam", 121},
  241. +{"__NR_sched_getscheduler", 120},
  242. +{"__NR_sched_rr_get_interval", 127},
  243. +{"__NR_sched_setaffinity", 122},
  244. +{"__NR_sched_setattr", 274},
  245. +{"__NR_sched_setparam", 118},
  246. +{"__NR_sched_setscheduler", 119},
  247. +{"__NR_sched_yield", 124},
  248. +{"__NR_seccomp", 277},
  249. +{"__NR_semctl", 191},
  250. +{"__NR_semget", 190},
  251. +{"__NR_semop", 193},
  252. +{"__NR_semtimedop", 192},
  253. +{"__NR_sendfile", 71},
  254. +{"__NR_sendmmsg", 269},
  255. +{"__NR_sendmsg", 211},
  256. +{"__NR_sendto", 206},
  257. +{"__NR_set_mempolicy", 237},
  258. +{"__NR_set_robust_list", 99},
  259. +{"__NR_set_tid_address", 96},
  260. +{"__NR_setdomainname", 162},
  261. +{"__NR_setfsgid", 152},
  262. +{"__NR_setfsuid", 151},
  263. +{"__NR_setgid", 144},
  264. +{"__NR_setgroups", 159},
  265. +{"__NR_sethostname", 161},
  266. +{"__NR_setitimer", 103},
  267. +{"__NR_setns", 268},
  268. +{"__NR_setpgid", 154},
  269. +{"__NR_setpriority", 140},
  270. +{"__NR_setregid", 143},
  271. +{"__NR_setresgid", 149},
  272. +{"__NR_setresuid", 147},
  273. +{"__NR_setreuid", 145},
  274. +{"__NR_setrlimit", 164},
  275. +{"__NR_setsid", 157},
  276. +{"__NR_setsockopt", 208},
  277. +{"__NR_settimeofday", 170},
  278. +{"__NR_setuid", 146},
  279. +{"__NR_setxattr", 5},
  280. +{"__NR_shmat", 196},
  281. +{"__NR_shmctl", 195},
  282. +{"__NR_shmdt", 197},
  283. +{"__NR_shmget", 194},
  284. +{"__NR_shutdown", 210},
  285. +{"__NR_sigaltstack", 132},
  286. +{"__NR_signalfd4", 74},
  287. +{"__NR_socket", 198},
  288. +{"__NR_socketpair", 199},
  289. +{"__NR_splice", 76},
  290. +{"__NR_statfs", 43},
  291. +{"__NR_statx", 291},
  292. +{"__NR_swapoff", 225},
  293. +{"__NR_swapon", 224},
  294. +{"__NR_symlinkat", 36},
  295. +{"__NR_sync", 81},
  296. +{"__NR_sync_file_range", 84},
  297. +{"__NR_syncfs", 267},
  298. +{"__NR_sysinfo", 179},
  299. +{"__NR_syslog", 116},
  300. +{"__NR_tee 77",},
  301. +{"__NR_tgkill", 131},
  302. +{"__NR_timer_create", 107},
  303. +{"__NR_timer_delete", 111},
  304. +{"__NR_timer_getoverrun", 109},
  305. +{"__NR_timer_gettime", 108},
  306. +{"__NR_timer_settime", 110},
  307. +{"__NR_timerfd_create", 85},
  308. +{"__NR_timerfd_gettime", 87},
  309. +{"__NR_timerfd_settime", 86},
  310. +{"__NR_times", 153},
  311. +{"__NR_tkill", 130},
  312. +{"__NR_truncate", 45},
  313. +{"__NR_umask", 166},
  314. +{"__NR_umount2", 39},
  315. +{"__NR_uname", 160},
  316. +{"__NR_unlinkat", 35},
  317. +{"__NR_unshare", 97},
  318. +{"__NR_userfaultfd", 282},
  319. +{"__NR_utimensat", 88},
  320. +{"__NR_vhangup", 58},
  321. +{"__NR_vmsplice", 75},
  322. +{"__NR_wait4", 260},
  323. +{"__NR_waitid", 95},
  324. +{"__NR_write", 64},
  325. +{"__NR_writev", 66},
  326. +};
  327. +
  328. +
  329. +static const char * get_syscall_name(int64_t num)
  330. +{
  331. + unsigned int i;
  332. + for (i = 0; i < sizeof(syscall_tbl)/sizeof(syscall_item_t); i++) {
  333. + if (syscall_tbl[i].id == num)
  334. + return syscall_tbl[i].name;
  335. + }
  336. + return "unknown syscall";
  337. +}
  338. +
  339. QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
  340. typedef struct {
  341. @@ -51,7 +373,10 @@ static void vcpu_syscall(qemu_plugin_id_t id, unsigned int vcpu_index,
  342. entry->calls++;
  343. g_mutex_unlock(&lock);
  344. } else {
  345. - g_autofree gchar *out = g_strdup_printf("syscall #%" PRIi64 "\n", num);
  346. + time_t t;
  347. + time(&t);
  348. + g_autofree gchar *out = g_strdup_printf("time:%s syscall: %s\n", ctime(&t),
  349. + get_syscall_name(num));
  350. qemu_plugin_outs(out);
  351. }
  352. }
  353. @@ -70,8 +395,11 @@ static void vcpu_syscall_ret(qemu_plugin_id_t id, unsigned int vcpu_idx,
  354. }
  355. g_mutex_unlock(&lock);
  356. } else {
  357. + time_t t;
  358. + time(&t);
  359. g_autofree gchar *out = g_strdup_printf(
  360. - "syscall #%" PRIi64 " returned -> %" PRIi64 "\n", num, ret);
  361. + "time:%s syscall #%" PRIi64 " returned -> %" PRIi64 "\n",
  362. + ctime(&t), num, ret);
  363. qemu_plugin_outs(out);
  364. }
  365. }
  366. --
  367. 2.25.1