25typedef void (*trace_pc_guard_init_fn)(uint32_t *start, uint32_t *stop);
26typedef void (*trace_pc_guard_fn)(uint32_t *guard, uint64_t edge);
28static trace_pc_guard_init_fn trace_pc_guard_init = NULL;
29static trace_pc_guard_fn trace_pc_guard = NULL;
30static bool did_check_libvoidstar =
false;
31static bool has_libvoidstar =
false;
33static __attribute__((no_sanitize(
"coverage"))) void debug_message_out(const
char *msg) {
42__attribute__((no_sanitize(
"coverage"))) void antithesis_load_libvoidstar() {
46 const char* LIB_PATH =
"/usr/lib/libvoidstar.so";
48 if (did_check_libvoidstar) {
51 debug_message_out(
"TRYING TO LOAD libvoidstar");
52 did_check_libvoidstar =
true;
53 void* shared_lib = dlopen(LIB_PATH, RTLD_NOW);
55 debug_message_out(
"Can not load the Antithesis native library");
59 void* trace_pc_guard_init_sym = dlsym(shared_lib,
"__sanitizer_cov_trace_pc_guard_init");
60 if (!trace_pc_guard_init_sym) {
61 debug_message_out(
"Can not forward calls to libvoidstar for __sanitizer_cov_trace_pc_guard_init");
65 void* trace_pc_guard_sym = dlsym(shared_lib,
"__sanitizer_cov_trace_pc_guard_internal");
66 if (!trace_pc_guard_sym) {
67 debug_message_out(
"Can not forward calls to libvoidstar for __sanitizer_cov_trace_pc_guard");
71 trace_pc_guard_init = (trace_pc_guard_init_fn)(trace_pc_guard_init_sym);
72 trace_pc_guard = (trace_pc_guard_fn)(trace_pc_guard_sym);
73 has_libvoidstar =
true;
74 debug_message_out(
"LOADED libvoidstar");
81#pragma clang diagnostic push
82#pragma clang diagnostic ignored "-Wreserved-identifier"
87void __sanitizer_cov_trace_pc_guard_init(uint32_t *start, uint32_t *stop) {
88 debug_message_out(
"SDK forwarding to libvoidstar for __sanitizer_cov_trace_pc_guard_init()");
89 if (!did_check_libvoidstar) {
90 antithesis_load_libvoidstar();
92 if (has_libvoidstar) {
93 trace_pc_guard_init(start, stop);
102void __sanitizer_cov_trace_pc_guard( uint32_t *guard ) {
103 if (has_libvoidstar) {
104 uint64_t edge = (uint64_t)(__builtin_return_address(0));
105 trace_pc_guard(guard, edge);
113#pragma clang diagnostic pop