about summary refs log tree commit diff
path: root/frida_mode/src/seccomp/seccomp_atomic.c
blob: c2042f97bff70dda13e16058c967339881658440 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#if defined(__linux__) && !defined(__ANDROID__)

  #include <stdbool.h>
  #include <stdio.h>

  #include "debug.h"

void seccomp_atomic_set(volatile bool *ptr, bool val) {

  if (!__sync_bool_compare_and_swap(ptr, !val, val)) {

    FATAL("Failed to set event");

  }

}

bool seccomp_atomic_try_set(volatile bool *ptr, bool val) {

  return __sync_bool_compare_and_swap(ptr, !val, val);

}

void seccomp_atomic_wait(volatile bool *ptr, bool val) {

  while (!__sync_bool_compare_and_swap(ptr, val, !val))
    ;

}

#endif