qemu/tests/plugin/syscall.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2020, Matthias Weckbecker <matthias@weckbecker.name>
   3 *
   4 * License: GNU GPL, version 2 or later.
   5 *   See the COPYING file in the top-level directory.
   6 */
   7#include <inttypes.h>
   8#include <assert.h>
   9#include <stdlib.h>
  10#include <string.h>
  11#include <unistd.h>
  12#include <stdio.h>
  13#include <glib.h>
  14
  15#include <qemu-plugin.h>
  16
  17QEMU_PLUGIN_EXPORT int qemu_plugin_version = QEMU_PLUGIN_VERSION;
  18
  19static void vcpu_syscall(qemu_plugin_id_t id, unsigned int vcpu_index,
  20                         int64_t num, uint64_t a1, uint64_t a2,
  21                         uint64_t a3, uint64_t a4, uint64_t a5,
  22                         uint64_t a6, uint64_t a7, uint64_t a8)
  23{
  24    g_autofree gchar *out = g_strdup_printf("syscall #%" PRIi64 "\n", num);
  25    qemu_plugin_outs(out);
  26}
  27
  28static void vcpu_syscall_ret(qemu_plugin_id_t id, unsigned int vcpu_idx,
  29                             int64_t num, int64_t ret)
  30{
  31    g_autofree gchar *out;
  32    out = g_strdup_printf("syscall #%" PRIi64 " returned -> %" PRIi64 "\n",
  33            num, ret);
  34    qemu_plugin_outs(out);
  35}
  36
  37/* ************************************************************************* */
  38
  39static void plugin_exit(qemu_plugin_id_t id, void *p) {}
  40
  41QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
  42                                           const qemu_info_t *info,
  43                                           int argc, char **argv)
  44{
  45    qemu_plugin_register_vcpu_syscall_cb(id, vcpu_syscall);
  46    qemu_plugin_register_vcpu_syscall_ret_cb(id, vcpu_syscall_ret);
  47    qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
  48    return 0;
  49}
  50