# # Upstream power patch to increase MINSIGSTKSZ and SIGSTKSZ to # account for the kernel signal frame size increase. # # commit f7c399cff5bd04ee9dc117fb6b0f39597dc047c6 # Author: Alan Modra # Date: Sat Aug 17 18:37:18 2013 +0930 # # PowerPC SIGSTKSZ # http://sourceware.org/ml/libc-alpha/2013-08/msg00093.html # # This copies the sparc version of sigstack.h, which gives powerpc # #define MINSIGSTKSZ 4096 # #define SIGSTKSZ 16384 # # Before the VSX changes, struct rt_sigframe size was 1920 plus 128 for # __SIGNAL_FRAMESIZE giving ppc64 exactly the default MINSIGSTKSZ of # 2048. # # After VSX, ucontext increased by 256 bytes. Oops, we're over # MINSIGSTKSZ, so powerpc has been using the wrong value for quite a # while. Add another ucontext for TM and rt_sigframe is now at 3872, # giving actual MINSIGSTKSZ of 4000. # # The glibc testcase that I was looking at was tst-cancel21, which # allocates 2*SIGSTKSZ (not because the test is trying to be # conservative, but because the test actually has nested signal stack # frames). We blew the allocation by 48 bytes when using current # mainline gcc to compile glibc (le ppc64). # # The required stack depth in _dl_lookup_symbol_x from the top of the # next signal frame was 10944 bytes. I guess you'd want to add 288 to # that, implying an actual SIGSTKSZ of 11232. # # * sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h: New file. # diff --git glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h new file mode 100644 index 0000000..33be9e8 --- /dev/null +++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h @@ -0,0 +1,54 @@ +/* sigstack, sigaltstack definitions. + Copyright (C) 1998-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SIGNAL_H +# error "Never include this file directly. Use instead" +#endif + + +/* Structure describing a signal stack (obsolete). */ +struct sigstack + { + void *ss_sp; /* Signal stack pointer. */ + int ss_onstack; /* Nonzero if executing on this stack. */ + }; + + +/* Possible values for `ss_flags.'. */ +enum +{ + SS_ONSTACK = 1, +#define SS_ONSTACK SS_ONSTACK + SS_DISABLE +#define SS_DISABLE SS_DISABLE +}; + +/* Minimum stack size for a signal handler. */ +#define MINSIGSTKSZ 4096 + +/* System default stack size. */ +#define SIGSTKSZ 16384 + + +/* Alternate, preferred interface. */ +typedef struct sigaltstack + { + void *ss_sp; + int ss_flags; + size_t ss_size; + } stack_t;