Skip to content

Commit 4f0b0bf

Browse files
committed
Cherry-pick gtest fix for asan tests.
Summary: google/googletest@681454d Clone+exec death test allocates a single page of stack to run chdir + exec on. This is not enough when gtest is built with ASan and run on particular hardware. With ASan on x86_64, ExecDeathTestChildMain has frame size of 1728 bytes. Call to chdir() in ExecDeathTestChildMain ends up in _dl_runtime_resolve_xsavec, which attempts to save register state on the stack; according to cpuid(0xd) XSAVE register save area size is 2568 on my machine. This results in something like this in all death tests: Result: died but not with expected error. ... [ DEATH ] AddressSanitizer:DEADLYSIGNAL [ DEATH ] ================================================================= [ DEATH ] ==178637==ERROR: AddressSanitizer: stack-overflow on address ... PiperOrigin-RevId: 278709790 Reviewers: pcc Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D70332
1 parent 4a80117 commit 4f0b0bf

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

llvm/utils/unittest/googletest/src/gtest-death-test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ static pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) {
10701070

10711071
if (!use_fork) {
10721072
static const bool stack_grows_down = StackGrowsDown();
1073-
const size_t stack_size = getpagesize();
1073+
const size_t stack_size = getpagesize() * 2;
10741074
// MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.
10751075
void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE,
10761076
MAP_ANON | MAP_PRIVATE, -1, 0);

0 commit comments

Comments
 (0)