Selaa lähdekoodia

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 <jcmvbkbc@gmail.com>
Max Filippov 10 vuotta sitten
vanhempi
commit
f3a8267dab

+ 2 - 0
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.  */
 
 

+ 9 - 1
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;								      \