Skip to content

Commit 04d5641

Browse files
committed
[test]
1 parent f39ce8b commit 04d5641

2 files changed

Lines changed: 41 additions & 4 deletions

File tree

runtime/druntime/src/core/sys/posix/unistd.d

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,21 @@ version (CRuntime_Glibc)
671671
_SC_LEVEL4_CACHE_LINESIZE,
672672

673673
_SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
674-
_SC_RAW_SOCKETS
674+
_SC_RAW_SOCKETS,
675+
_SC_V7_ILP32_OFF32,
676+
_SC_V7_ILP32_OFFBIG,
677+
_SC_V7_LP64_OFF64,
678+
_SC_V7_LPBIG_OFFBIG,
679+
_SC_SS_REPL_MAX,
680+
_SC_TRACE_EVENT_NAME_MAX,
681+
_SC_TRACE_NAME_MAX,
682+
_SC_TRACE_SYS_MAX,
683+
_SC_TRACE_USER_EVENT_MAX,
684+
_SC_XOPEN_STREAMS,
685+
_SC_THREAD_ROBUST_PRIO_INHERIT,
686+
_SC_THREAD_ROBUST_PRIO_PROTECT,
687+
_SC_MINSIGSTKSZ,
688+
_SC_SIGSTKSZ,
675689
}
676690
}
677691
else version (Darwin)

runtime/druntime/src/etc/linux/memoryerror.d

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import ucontext = core.sys.posix.ucontext;
5050

5151
version (MemoryAssertSupported)
5252
{
53+
import core.stdc.stdlib : malloc;
5354
import core.sys.posix.signal : SA_ONSTACK, sigaltstack, SIGSTKSZ, stack_t;
5455
}
5556

@@ -423,10 +424,32 @@ version (MemoryAssertSupported)
423424

424425
// Set up alternate stack, because segfaults can be caused by stack overflow,
425426
// in which case the stack is already exhausted
426-
__gshared ubyte[SIGSTKSZ] altStack;
427+
428+
version (CRuntime_Glibc)
429+
{
430+
// glibc v2.34 switched to a dynamic SIGSTKSZ
431+
import core.sys.posix.unistd : sysconf, _SC_SIGSTKSZ;
432+
433+
auto altStackSize = sysconf(_SC_SIGSTKSZ);
434+
if (altStackSize <= 0)
435+
altStackSize = SIGSTKSZ;
436+
}
437+
else
438+
{
439+
const altStackSize = SIGSTKSZ;
440+
}
441+
442+
__gshared void* altStack; // only allocate once; never free'd
443+
if (!altStack)
444+
{
445+
altStack = malloc(altStackSize);
446+
if (!altStack)
447+
return false;
448+
}
449+
427450
stack_t ss;
428-
ss.ss_sp = altStack.ptr;
429-
ss.ss_size = altStack.length;
451+
ss.ss_sp = altStack;
452+
ss.ss_size = altStackSize;
430453
ss.ss_flags = 0;
431454
if (sigaltstack(&ss, null) == -1)
432455
return false;

0 commit comments

Comments
 (0)