mirror of
https://git.yoctoproject.org/poky
synced 2026-02-28 04:19:40 +01:00
Fixes
../../m4-1.4.18/lib/c-stack.c:55:26: error: missing binary operator before token "("
55 | #elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
| ^~~~~~~~
(From OE-Core rev: 44ca8edd622782733d507e20a3d5ee9e44eb8be4)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
85 lines
2.9 KiB
Diff
85 lines
2.9 KiB
Diff
From 69238f15129f35eb4756ad8e2004e0d7907cb175 Mon Sep 17 00:00:00 2001
|
|
From: Khem Raj <raj.khem@gmail.com>
|
|
Date: Fri, 30 Apr 2021 17:40:36 -0700
|
|
Subject: [PATCH] c-stack: stop using SIGSTKSZ
|
|
|
|
This patch is required with glibc 2.34+
|
|
based on gnulib [1]
|
|
|
|
[1] https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=f9e2b20a12a230efa30f1d479563ae07d276a94b
|
|
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
---
|
|
lib/c-stack.c | 22 +++++++++++++---------
|
|
1 file changed, 13 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/lib/c-stack.c b/lib/c-stack.c
|
|
index 5353c08..863f764 100644
|
|
--- a/lib/c-stack.c
|
|
+++ b/lib/c-stack.c
|
|
@@ -51,13 +51,14 @@
|
|
typedef struct sigaltstack stack_t;
|
|
#endif
|
|
#ifndef SIGSTKSZ
|
|
-# define SIGSTKSZ 16384
|
|
-#elif HAVE_LIBSIGSEGV && SIGSTKSZ < 16384
|
|
+#define get_sigstksz() (16384)
|
|
+#elif HAVE_LIBSIGSEGV
|
|
/* libsigsegv 2.6 through 2.8 have a bug where some architectures use
|
|
more than the Linux default of an 8k alternate stack when deciding
|
|
if a fault was caused by stack overflow. */
|
|
-# undef SIGSTKSZ
|
|
-# define SIGSTKSZ 16384
|
|
+#define get_sigstksz() ((SIGSTKSZ) < 16384 ? 16384 : (SIGSTKSZ))
|
|
+#else
|
|
+#define get_sigstksz() ((SIGSTKSZ))
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
@@ -131,7 +132,8 @@ die (int signo)
|
|
/* Storage for the alternate signal stack. */
|
|
static union
|
|
{
|
|
- char buffer[SIGSTKSZ];
|
|
+ /* allocate buffer with size from get_sigstksz() */
|
|
+ char *buffer;
|
|
|
|
/* These other members are for proper alignment. There's no
|
|
standard way to guarantee stack alignment, but this seems enough
|
|
@@ -203,10 +205,11 @@ c_stack_action (void (*action) (int))
|
|
program_error_message = _("program error");
|
|
stack_overflow_message = _("stack overflow");
|
|
|
|
+ alternate_signal_stack.buffer = malloc(get_sigstksz());
|
|
/* Always install the overflow handler. */
|
|
if (stackoverflow_install_handler (overflow_handler,
|
|
alternate_signal_stack.buffer,
|
|
- sizeof alternate_signal_stack.buffer))
|
|
+ get_sigstksz()))
|
|
{
|
|
errno = ENOTSUP;
|
|
return -1;
|
|
@@ -279,14 +282,15 @@ c_stack_action (void (*action) (int))
|
|
stack_t st;
|
|
struct sigaction act;
|
|
st.ss_flags = 0;
|
|
+ alternate_signal_stack.buffer = malloc(get_sigstksz());
|
|
# if SIGALTSTACK_SS_REVERSED
|
|
/* Irix mistakenly treats ss_sp as the upper bound, rather than
|
|
lower bound, of the alternate stack. */
|
|
- st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *);
|
|
- st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *);
|
|
+ st.ss_sp = alternate_signal_stack.buffer + get_sigstksz() - sizeof (void *);
|
|
+ st.ss_size = get_sigstksz() - sizeof (void *);
|
|
# else
|
|
st.ss_sp = alternate_signal_stack.buffer;
|
|
- st.ss_size = sizeof alternate_signal_stack.buffer;
|
|
+ st.ss_size = get_sigstksz();
|
|
# endif
|
|
r = sigaltstack (&st, NULL);
|
|
if (r != 0)
|
|
--
|
|
2.31.1
|
|
|