aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/init.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-04-20 14:17:42 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-04-20 14:17:42 +0200
commit8737a29a325411b422a550958bd4a01613c5a48f (patch)
tree4bebcf3a2e3f9d1be7744405c508ced9f3c8cbad /gcc/ada/init.c
parent85087bcb0d17eeb4d3621f7b4baa954fb17e96d1 (diff)
downloadgcc-8737a29a325411b422a550958bd4a01613c5a48f.zip
gcc-8737a29a325411b422a550958bd4a01613c5a48f.tar.gz
gcc-8737a29a325411b422a550958bd4a01613c5a48f.tar.bz2
[multiple changes]
2009-04-20 Robert Dewar <dewar@adacore.com> * sinfo.ads: Minor comment fixes * exp_disp.adb: Minor reformatting * gnat1drv.adb: Minor reformatting * output.adb: Minor reformatting * s-vxwext-kernel.ads: Minor reformatting * sem.ads: Minor reformatting * sem.adb: Minor reformatting * sem_elim.adb: Minor reformatting * uname.ads: Minor reformatting 2009-04-20 Eric Botcazou <ebotcazou@adacore.com> * init.c (__gnat_adjust_context_for_raise): On x86{-64}/Linux, add a small dope of 4 words to the adjustment to the stack pointer. 2009-04-20 Thomas Quinot <quinot@adacore.com> * xoscons.adb: generate C header s-oscons.h in addition to s-oscons.ads. * socket.c: On VMS, use s-oscons.h. * sem_ch3.adb: Minor reformatting * exp_ch9.adb: Minor reformatting From-SVN: r146401
Diffstat (limited to 'gcc/ada/init.c')
-rw-r--r--gcc/ada/init.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 59aabf2..16a9662 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -592,20 +592,21 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
by the time the EH return is executed.
We therefore adjust the saved value of the stack pointer by the size
- of one page, in order to make sure that it points to an accessible
- address in case it's used as the target CFA. The stack checking code
- guarantees that this page is unused by the time this happens. */
+ of one page + a small dope of 4 words, in order to make sure that it
+ points to an accessible address in case it's used as the target CFA.
+ The stack checking code guarantees that this address is unused by the
+ time this happens. */
#if defined (i386)
unsigned long pattern = *(unsigned long *)mcontext->gregs[REG_EIP];
/* The pattern is "orl $0x0,(%esp)" for a probe in 32-bit mode. */
if (signo == SIGSEGV && pattern == 0x00240c83)
- mcontext->gregs[REG_ESP] += 4096;
+ mcontext->gregs[REG_ESP] += 4096 + 4 * sizeof (unsigned long);
#elif defined (__x86_64__)
unsigned long pattern = *(unsigned long *)mcontext->gregs[REG_RIP];
/* The pattern is "orq $0x0,(%rsp)" for a probe in 64-bit mode. */
if (signo == SIGSEGV && (pattern & 0xffffffffff) == 0x00240c8348)
- mcontext->gregs[REG_RSP] += 4096;
+ mcontext->gregs[REG_RSP] += 4096 + 4 * sizeof (unsigned long);
#elif defined (__ia64__)
/* ??? The IA-64 unwinder doesn't compensate for signals. */
mcontext->sc_ip++;