aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/signal_32.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-08-24 22:49:17 +0900
committerPaul Mundt <lethal@linux-sh.org>2009-08-24 22:49:17 +0900
commit12cceb6251c2cd23e936b25eca66be99ba41b081 (patch)
treeb7f62853e67b305519c375162760422fbfc81b8e /arch/sh/kernel/signal_32.c
parentf13327864f94c3a0e6acca923df537d20059639f (diff)
parent05ecd5a1f76c183cca381705b3adb7d77c9a0439 (diff)
downloadkernel_goldelico_gta04-12cceb6251c2cd23e936b25eca66be99ba41b081.zip
kernel_goldelico_gta04-12cceb6251c2cd23e936b25eca66be99ba41b081.tar.gz
kernel_goldelico_gta04-12cceb6251c2cd23e936b25eca66be99ba41b081.tar.bz2
Merge branch 'sh/st-integration'
Diffstat (limited to 'arch/sh/kernel/signal_32.c')
-rw-r--r--arch/sh/kernel/signal_32.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c
index b5afbec..6010750 100644
--- a/arch/sh/kernel/signal_32.c
+++ b/arch/sh/kernel/signal_32.c
@@ -41,6 +41,16 @@ struct fdpic_func_descriptor {
};
/*
+ * The following define adds a 64 byte gap between the signal
+ * stack frame and previous contents of the stack. This allows
+ * frame unwinding in a function epilogue but only if a frame
+ * pointer is used in the function. This is necessary because
+ * current gcc compilers (<4.3) do not generate unwind info on
+ * SH for function epilogues.
+ */
+#define UNWINDGUARD 64
+
+/*
* Atomically swap in the new signal mask, and wait for a signal.
*/
asmlinkage int
@@ -327,7 +337,7 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size)
sp = current->sas_ss_sp + current->sas_ss_size;
}
- return (void __user *)((sp - frame_size) & -8ul);
+ return (void __user *)((sp - (frame_size+UNWINDGUARD)) & -8ul);
}
/* These symbols are defined with the addresses in the vsyscall page.