Fixed Windows/MSVC compilation.

This commit is contained in:
2024-06-26 10:05:32 +02:00
parent b10f250945
commit b1fa99428e
8 changed files with 41 additions and 5 deletions

View File

@@ -3,9 +3,19 @@
#include <optional>
#include <string>
#include <backtrace.h>
#include "../detect.hpp"
#if MIJIN_COMPILER == MIJIN_COMPILER_CLANG || MIJIN_COMPILER == MIJIN_COMPILER_GCC
#define MIJIN_USE_LIBBACKTRACE 1
#else
#define MIJIN_USE_LIBBACKTRACE 0
#endif
#if MIJIN_USE_LIBBACKTRACE
#include <backtrace.h>
#endif
namespace mijin
{
namespace
@@ -38,6 +48,7 @@ thread_local Optional<Stacktrace> gCurrentExceptionStackTrace;
// internal functions
//
#if MIJIN_USE_LIBBACKTRACE
int backtraceFullCallback(void* data, std::uintptr_t programCounter, const char* filename, int lineno, const char* function)
{
BacktraceData& btData = *static_cast<BacktraceData*>(data);
@@ -57,6 +68,7 @@ void backtraceErrorCallback(void* data, const char* msg, int /* errnum */)
}
thread_local backtrace_state* gBacktraceState = nullptr;
#endif // MIJIN_USE_LIBBACKTRACE
} // namespace
//
@@ -65,6 +77,7 @@ thread_local backtrace_state* gBacktraceState = nullptr;
Result<Stacktrace> captureStacktrace(unsigned skipFrames) noexcept
{
#if MIJIN_USE_LIBBACKTRACE
BacktraceData btData;
if (gBacktraceState == nullptr)
{
@@ -85,6 +98,10 @@ Result<Stacktrace> captureStacktrace(unsigned skipFrames) noexcept
}
return Stacktrace(std::move(btData.stackframes));
#else // MIJIN_USE_LIBBACKTRACE
(void) skipFrames;
return {}; // TODO
#endif // MIJIN_USE_LIBBACKTRACE
}
const Optional<Stacktrace>& getExceptionStacktrace() noexcept