You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
3.3 KiB

#
# Upstream power patch to increase MINSIGSTKSZ and SIGSTKSZ to
# account for the kernel signal frame size increase.
#
# commit f7c399cff5bd04ee9dc117fb6b0f39597dc047c6
# Author: Alan Modra <amodra@gmail.com>
# 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
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SIGNAL_H
+# error "Never include this file directly. Use <signal.h> 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;