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