diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-04-20 14:17:42 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2009-04-20 14:17:42 +0200 |
commit | 8737a29a325411b422a550958bd4a01613c5a48f (patch) | |
tree | 4bebcf3a2e3f9d1be7744405c508ced9f3c8cbad /gcc/ada/init.c | |
parent | 85087bcb0d17eeb4d3621f7b4baa954fb17e96d1 (diff) | |
download | gcc-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.c | 11 |
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++; |