diff options
| author | Euclid Linden <euclid@lindenlab.com> | 2021-04-29 18:23:44 +0000 |
|---|---|---|
| committer | Euclid Linden <euclid@lindenlab.com> | 2021-04-29 18:23:44 +0000 |
| commit | 5e757b2841941e8e5a9b918dbae4fd7b36a84896 (patch) | |
| tree | deee2618a9c33681e038845605db6719babd1d77 /indra/llcommon/llexception.cpp | |
| parent | 18316191cd7d1e1f8c3a4940eb5ed6cdf2695575 (diff) | |
| parent | 2386125ae0db3218c620667b05449cd25ee05ad5 (diff) | |
Merged in DV525-merge-6.4.19 (pull request #559)
DRTVWR-525 merge up to 6.4.19
Diffstat (limited to 'indra/llcommon/llexception.cpp')
| -rw-r--r-- | indra/llcommon/llexception.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/indra/llcommon/llexception.cpp b/indra/llcommon/llexception.cpp index 5ce8958687..b584b0ff8b 100644 --- a/indra/llcommon/llexception.cpp +++ b/indra/llcommon/llexception.cpp @@ -24,11 +24,14 @@ // `_GNU_SOURCE` macro or `BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED` if // _Unwind_Backtrace is available without `_GNU_SOURCE`." #define BOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED + #if LL_WINDOWS // On Windows, header-only implementation causes macro collisions -- use // prebuilt library #define BOOST_STACKTRACE_LINK +#include <excpt.h> #endif // LL_WINDOWS + #include <boost/stacktrace.hpp> // other Linden headers #include "llerror.h" @@ -85,3 +88,25 @@ void annotate_exception_(boost::exception& exc) // Anyway, which of us is really going to examine more than 100 frames? exc << errinfo_stacktrace(boost::stacktrace::stacktrace(1, 100)); } + +#if LL_WINDOWS + +// For windows SEH exception handling we sometimes need a filter that will +// separate C++ exceptions from C SEH exceptions +static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific + +U32 msc_exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop) +{ + if (code == STATUS_MSC_EXCEPTION) + { + // C++ exception, go on + return EXCEPTION_CONTINUE_SEARCH; + } + else + { + // handle it + return EXCEPTION_EXECUTE_HANDLER; + } +} + +#endif //LL_WINDOWS |
