From 3988f935b8715ddeffc994472c146e62448c8749 Mon Sep 17 00:00:00 2001 From: Peter Crozier Date: Wed, 13 May 2020 13:09:08 +0100 Subject: [PATCH 1/2] Extend YS_DEBUGTRAP to MacOS. --- kernel/log.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/log.h b/kernel/log.h index dee5d44d7..4b60ffb0d 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -86,7 +86,7 @@ YOSYS_NAMESPACE_BEGIN # endif # if __has_builtin(__builtin_debugtrap) # define YS_DEBUGTRAP __builtin_debugtrap() -# elif defined(__unix__) +# elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) # define YS_DEBUGTRAP raise(SIGTRAP) # else # define YS_DEBUGTRAP do {} while(0) @@ -103,6 +103,9 @@ YOSYS_NAMESPACE_BEGIN # define YS_DEBUGTRAP_IF_DEBUGGING do { \ sighandler_t old = signal(SIGTRAP, SIG_IGN); raise(SIGTRAP); signal(SIGTRAP, old); \ } while(0) +#elif defined(__APPLE__) && defined(__MACH__) +// MacOS +#define YS_DEBUGTRAP_IF_DEBUGGING { sig_t old = signal(SIGTRAP, SIG_IGN); raise(SIGTRAP); signal(SIGTRAP, old); } #else # define YS_DEBUGTRAP_IF_DEBUGGING do {} while(0) #endif From 495dcfc812be0f990bee20fc1ac819c72b8b7e47 Mon Sep 17 00:00:00 2001 From: Peter Crozier Date: Wed, 13 May 2020 14:17:00 +0100 Subject: [PATCH 2/2] Consolidate Linux and Mac version of YS_DEBUGTRAP_IF_DEBUGGING. --- kernel/log.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/kernel/log.h b/kernel/log.h index 4b60ffb0d..6c5de78d7 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -97,15 +97,12 @@ YOSYS_NAMESPACE_BEGIN // if a debugger is attached, and does nothing otherwise. #if defined(_WIN32) # define YS_DEBUGTRAP_IF_DEBUGGING do { if (IsDebuggerPresent()) DebugBreak(); } while(0) -#elif defined(__unix__) +# elif defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) // There is no reliable (or portable) *nix equivalent of IsDebuggerPresent(). However, // debuggers will stop when SIGTRAP is raised, even if the action is set to ignore. # define YS_DEBUGTRAP_IF_DEBUGGING do { \ - sighandler_t old = signal(SIGTRAP, SIG_IGN); raise(SIGTRAP); signal(SIGTRAP, old); \ + auto old = signal(SIGTRAP, SIG_IGN); raise(SIGTRAP); signal(SIGTRAP, old); \ } while(0) -#elif defined(__APPLE__) && defined(__MACH__) -// MacOS -#define YS_DEBUGTRAP_IF_DEBUGGING { sig_t old = signal(SIGTRAP, SIG_IGN); raise(SIGTRAP); signal(SIGTRAP, old); } #else # define YS_DEBUGTRAP_IF_DEBUGGING do {} while(0) #endif