this repo has no description
1#ifndef _XTRACE_LOCK_H_
2#define _XTRACE_LOCK_H_
3
4#include <darling/emulation/linux_premigration/ext/futex.h>
5#include <stdint.h>
6
7#include "base.h"
8
9// we also have to implement our own locks, because we can't rely on libplatform's or libpthread's locks
10// so we implement our own on top of Linux futexes
11
12XTRACE_DECLARATIONS_C_BEGIN
13
14//
15// lock
16//
17
18typedef struct xtrace_lock {
19 uint32_t state;
20} xtrace_lock_t;
21
22#define XTRACE_LOCK_INITIALIZER {0}
23
24XTRACE_INLINE
25void xtrace_lock_init(xtrace_lock_t* lock) {
26 lock->state = 0;
27};
28
29void xtrace_lock_lock(xtrace_lock_t* lock);
30void xtrace_lock_unlock(xtrace_lock_t* lock);
31
32//
33// once
34//
35
36typedef struct xtrace_once {
37 uint32_t state;
38} xtrace_once_t;
39
40typedef void (*xtrace_once_callback)(void);
41
42#define XTRACE_ONCE_INITIALIZER {0}
43
44XTRACE_INLINE
45void xtrace_once_init(xtrace_once_t* once) {
46 once->state = 0;
47};
48
49void xtrace_once(xtrace_once_t* once, xtrace_once_callback callback);
50
51XTRACE_DECLARATIONS_C_END
52
53#endif // _XTRACE_LOCK_H_