From 3432012aefb4b33051991e6623b09e95d624b8da Mon Sep 17 00:00:00 2001 From: Beq Date: Sat, 5 Oct 2024 18:32:06 +0100 Subject: [PATCH] Revert "Attempt to get better file/line info for LL_ERRS..." needs new tpv_havok This reverts commit 205e259d4231dbf8e98be82a0ae2cfe24ae27680. --- indra/llcommon/llerror.cpp | 16 ++++++++++++++++ indra/llcommon/llerror.h | 11 ++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index f4bd6cc293..e04f7e53a9 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1659,3 +1659,19 @@ namespace LLError sLocalizedOutOfMemoryWarning = message; } } + +void crashdriver(void (*callback)(int*)) +{ + // The LLERROR_CRASH macro used to have inline code of the form: + //int* make_me_crash = NULL; + //*make_me_crash = 0; + + // But compilers are getting smart enough to recognize that, so we must + // assign to an address supplied by a separate source file. We could do + // the assignment here in crashdriver() -- but then BugSplat would group + // all LL_ERRS() crashes as the fault of this one function, instead of + // identifying the specific LL_ERRS() source line. So instead, do the + // assignment in a lambda in the caller's source. We just provide the + // nullptr target. + callback(nullptr); +} diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index db0d0f2f4c..e92a607076 100644 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -420,11 +420,9 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; #define LL_NEWLINE '\n' // Use this only in LL_ERRS or in a place that LL_ERRS may not be used -#define LLERROR_CRASH \ -{ \ - int* make_me_crash = (int*)0xDEADBEEFDEADBEEFUL; \ - *make_me_crash = 0; \ - exit(*make_me_crash); \ +#define LLERROR_CRASH \ +{ \ + crashdriver([](int* ptr){ *ptr = 0; exit(*ptr); }); \ } #define LL_ENDL \ @@ -526,4 +524,7 @@ LL_DEBUGS("SomeTag") performs the locking and map-searching ONCE, then caches the result in a static variable. */ +// used by LLERROR_CRASH +void crashdriver(void (*)(int*)); + #endif // LL_LLERROR_H