From: Judah Caruso Date: Fri, 15 Dec 2023 02:04:52 +0000 (-0700) Subject: improve debugger support on mac X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=0bc36684423af8c17b81ae5df29577941099887e;p=onyx.git improve debugger support on mac --- diff --git a/interpreter/include/ovm_debug.h b/interpreter/include/ovm_debug.h index 91ff48a2..4a343a03 100644 --- a/interpreter/include/ovm_debug.h +++ b/interpreter/include/ovm_debug.h @@ -2,9 +2,46 @@ #define _OVM_DEBUG_H #include "bh.h" -#include #include +#if defined(_BH_LINUX) + #include + + typedef dispatch_semaphore_t semaphore; + + static inline semaphore* semaphore_create(const char *name, int oflag, mode_t mode, unsigned int value) { + return sem_open(name, flags, mode, value); + } + + static inline void semaphore_wait(semaphore* sem) { + sem_wait(sem); + } + + static inline void semaphore_post(semaphore* sem) { + sem_post(sem); + } +#elif defined(_BH_DARWIN) + #include + + typedef dispatch_semaphore_t semaphore; + + static inline semaphore* semaphore_create(const char *name, int oflag, mode_t mode, unsigned int value) { + semaphore* sem = bh_alloc(bh_heap_allocator(), sizeof(semaphore)); + *sem = dispatch_semaphore_create(value); + return sem; + } + + static inline void semaphore_wait(semaphore* sem) { + dispatch_semaphore_wait(*sem, DISPATCH_TIME_FOREVER); + } + + static inline void semaphore_post(semaphore* sem) { + dispatch_semaphore_signal(*sem); + } +#else + #error "Unsupported platform" +#endif + typedef struct debug_loc_info_t { u32 file_id; u32 line; @@ -275,7 +312,7 @@ typedef struct debug_thread_state_t { b32 started; i32 run_count; - sem_t* wait_semaphore; + semaphore* wait_semaphore; bool pause_at_next_line; i32 pause_within; diff --git a/interpreter/src/debug/debug_host.c b/interpreter/src/debug/debug_host.c index 8fc18523..163ff89e 100644 --- a/interpreter/src/debug/debug_host.c +++ b/interpreter/src/debug/debug_host.c @@ -49,7 +49,7 @@ u32 debug_host_register_thread(debug_state_t *debug, ovm_state_t *ovm_state) { char name_buf[256]; bh_bprintf(name_buf, 256, "/ovm_thread_%d", new_thread->id); - new_thread->wait_semaphore = sem_open(name_buf, O_CREAT, 0664, 0); + new_thread->wait_semaphore = semaphore_create(name_buf, O_CREAT, 0664, 0); new_thread->state_change_write_fd = debug->state_change_pipes[1]; diff --git a/interpreter/src/debug/debug_thread.c b/interpreter/src/debug/debug_thread.c index 4ce70915..867f9ef5 100644 --- a/interpreter/src/debug/debug_thread.c +++ b/interpreter/src/debug/debug_thread.c @@ -92,11 +92,11 @@ static char *parse_string(debug_state_t *debug, struct msg_parse_ctx_t *ctx) { static void resume_thread(debug_thread_state_t *thread) { thread->run_count = -1; - sem_post(thread->wait_semaphore); + semaphore_post(thread->wait_semaphore); } static void resume_thread_slow(debug_thread_state_t *thread) { - sem_post(thread->wait_semaphore); + semaphore_post(thread->wait_semaphore); } static u32 get_stack_frame_instruction_pointer(debug_state_t *debug, debug_thread_state_t *thread, ovm_stack_frame_t *frame) { diff --git a/interpreter/src/vm/vm.c b/interpreter/src/vm/vm.c index 27cfde8d..e959c62a 100644 --- a/interpreter/src/vm/vm.c +++ b/interpreter/src/vm/vm.c @@ -4,6 +4,7 @@ #include #include + #if defined(__arm64__) #include #elif defined(__x86_64__) @@ -460,7 +461,7 @@ static void __ovm_trigger_exception(ovm_state_t *state) { state->debug->pause_reason = debug_pause_exception; assert(write(state->debug->state_change_write_fd, "1", 1)); - sem_wait(state->debug->wait_semaphore); + semaphore_wait(state->debug->wait_semaphore); } } @@ -515,7 +516,7 @@ static void __ovm_debug_hook(ovm_engine_t *engine, ovm_state_t *state) { should_wait: assert(write(state->debug->state_change_write_fd, "1", 1)); - sem_wait(state->debug->wait_semaphore); + semaphore_wait(state->debug->wait_semaphore); state->debug->state = debug_state_running; shouldnt_wait: