root/tools/perf/tests/perf-hooks.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sigsegv_handler
  2. the_hook
  3. test__perf_hooks

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <signal.h>
   3 #include <stdlib.h>
   4 
   5 #include "tests.h"
   6 #include "debug.h"
   7 #include "perf-hooks.h"
   8 
   9 static void sigsegv_handler(int sig __maybe_unused)
  10 {
  11         pr_debug("SIGSEGV is observed as expected, try to recover.\n");
  12         perf_hooks__recover();
  13         signal(SIGSEGV, SIG_DFL);
  14         raise(SIGSEGV);
  15         exit(-1);
  16 }
  17 
  18 
  19 static void the_hook(void *_hook_flags)
  20 {
  21         int *hook_flags = _hook_flags;
  22 
  23         *hook_flags = 1234;
  24 
  25         /* Generate a segfault, test perf_hooks__recover */
  26         raise(SIGSEGV);
  27 }
  28 
  29 int test__perf_hooks(struct test *test __maybe_unused, int subtest __maybe_unused)
  30 {
  31         int hook_flags = 0;
  32 
  33         signal(SIGSEGV, sigsegv_handler);
  34         perf_hooks__set_hook("test", the_hook, &hook_flags);
  35         perf_hooks__invoke_test();
  36 
  37         /* hook is triggered? */
  38         if (hook_flags != 1234) {
  39                 pr_debug("Setting failed: %d (%p)\n", hook_flags, &hook_flags);
  40                 return TEST_FAIL;
  41         }
  42 
  43         /* the buggy hook is removed? */
  44         if (perf_hooks__get_hook("test"))
  45                 return TEST_FAIL;
  46         return TEST_OK;
  47 }

/* [<][>][^][v][top][bottom][index][help] */