From f3a8267dabab20b095abe36e4a2be14ccc34b38e Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Mon, 22 Jun 2015 04:10:55 +0300 Subject: xtensa: fix stack frame size for NPTL Cancellable syscalls use call8 to call functions that enable/disable cancellation, thus they cannot use the default FRAMESIZE. Redefine FRAMESIZE for such syscalls. This fixes the following testsuite failure: .... tst-mqueue8 FAIL tst-mqueue8 got 1 expected 0 going to cancel mq_receive in-time in-time mq_receive cancellation succeeded going to cancel mq_receive early Didn't expect signal from child: got `Segmentation fault' Signed-off-by: Max Filippov --- libc/sysdeps/linux/xtensa/sysdep.h | 2 ++ libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libc/sysdeps/linux/xtensa/sysdep.h b/libc/sysdeps/linux/xtensa/sysdep.h index cab4a2f8d..d674084e2 100644 --- a/libc/sysdeps/linux/xtensa/sysdep.h +++ b/libc/sysdeps/linux/xtensa/sysdep.h @@ -72,7 +72,9 @@ #define JUMPTARGET(name) name #endif +#ifndef FRAMESIZE #define FRAMESIZE 16 +#endif #define CALL_MCOUNT /* Do nothing. */ diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h index 6bb2aeb56..f82957d15 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/sysdep-cancel.h @@ -24,7 +24,15 @@ #endif #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt -// FIXME: ENTRY includes an entry instruction, here we'd want entry sp, 48! + +/* CENABLE/CDISABLE in PSEUDO below use call8, stack frame size must be + * at least 32. + */ +#if FRAMESIZE < 32 +#undef FRAMESIZE +#define FRAMESIZE 32 +#endif + # undef PSEUDO # define PSEUDO(name, syscall_name, args) \ .text; \ -- cgit v1.2.3