Source: catch
Version: 1.12.1-1.1
Followup-For: Bug #993515
Control: tags -1 patch
Upstream prepared a patch for catch2, PR#2317
https://github.com/catchorg/Catch2/pull/2317
dolfin uses a vendored copy of the merged catch.hpp. I prepared a
patch for it (attached), which could be adapted for the catch package.
Index: dolfin/test/unit/cpp/catch/catch.hpp
===================================================================
--- dolfin.orig/test/unit/cpp/catch/catch.hpp 2022-02-04 16:06:38.000000000
+0100
+++ dolfin/test/unit/cpp/catch/catch.hpp 2022-02-04 16:26:46.752782223
+0100
@@ -6472,6 +6472,17 @@
int id;
const char* name;
};
+
+// 32kb for the alternate stack seems to be sufficient. However, this value
+ // is experimentally determines, so that's not guaranteed.
+#if defined(_SC_SIGSTKSZ_SOURCE) || defined(_GNU_SOURCE)
+ // on glibc > 2.33 this is no longer constant, see
+ //
https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS;h=85e84fe53699fe9e392edffa993612ce08b2954a;hb=HEAD
+ static constexpr std::size_t sigStackSize = 32768;
+#else
+ static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 :
MINSIGSTKSZ;
+#endif
+
extern SignalDefs signalDefs[];
SignalDefs signalDefs[] = {
{ SIGINT, "SIGINT - Terminal interrupt signal" },
@@ -6487,7 +6498,7 @@
static bool isSet;
static struct sigaction oldSigActions
[sizeof(signalDefs)/sizeof(SignalDefs)];
static stack_t oldSigStack;
- static char altStackMem[SIGSTKSZ];
+ static char altStackMem[sigStackSize];
static void handleSignal( int sig ) {
std::string name = "<unknown signal>";
@@ -6507,7 +6518,7 @@
isSet = true;
stack_t sigStack;
sigStack.ss_sp = altStackMem;
- sigStack.ss_size = SIGSTKSZ;
+ sigStack.ss_size = sigStackSize;
sigStack.ss_flags = 0;
sigaltstack(&sigStack, &oldSigStack);
struct sigaction sa = { 0 };
@@ -6538,7 +6549,7 @@
bool FatalConditionHandler::isSet = false;
struct sigaction
FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] =
{};
stack_t FatalConditionHandler::oldSigStack = {};
- char FatalConditionHandler::altStackMem[SIGSTKSZ] = {};
+ char FatalConditionHandler::altStackMem[sigStackSize] = {};
} // namespace Catch