summaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-03 04:59:41 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2011-08-03 04:59:41 +0000
commitb57de711b93569e986b89f1b4ed0be97d1ea0bf9 (patch)
tree51165e073966804dc2cfce31c1ecc9326e44158c /libgcc
parentd751bb784b56e455af1abb35362147e9c94855d9 (diff)
downloadgcc-b57de711b93569e986b89f1b4ed0be97d1ea0bf9.tar.gz
Update x32 __NR_rt_sigreturn system call number.
2011-08-02 H.J. Lu <hongjiu.lu@intel.com> * config/i386/linux-unwind.h (RT_SIGRETURN_SYSCALL): New. (x86_64_fallback_frame_state): Use RT_SIGRETURN_SYSCALL and long long to check rt_sigreturn syscall. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177229 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog6
-rw-r--r--libgcc/config/i386/linux-unwind.h9
2 files changed, 13 insertions, 2 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 1685c9fa7c3..322b93ec861 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/i386/linux-unwind.h (RT_SIGRETURN_SYSCALL): New.
+ (x86_64_fallback_frame_state): Use RT_SIGRETURN_SYSCALL and
+ long long to check rt_sigreturn syscall.
+
2011-08-02 Alan Modra <amodra@gmail.com>
* config/rs6000/linux-unwind.h (frob_update_context <__powerpc64__>):
diff --git a/libgcc/config/i386/linux-unwind.h b/libgcc/config/i386/linux-unwind.h
index de44823e053..f17a46cc8e7 100644
--- a/libgcc/config/i386/linux-unwind.h
+++ b/libgcc/config/i386/linux-unwind.h
@@ -44,9 +44,14 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
struct sigcontext *sc;
long new_cfa;
- /* movq __NR_rt_sigreturn, %rax ; syscall */
+ /* movq $__NR_rt_sigreturn, %rax ; syscall. */
+#ifdef __LP64__
+#define RT_SIGRETURN_SYSCALL 0x050f0000000fc0c7ULL
+#else
+#define RT_SIGRETURN_SYSCALL 0x050f40002006c0c7ULL
+#endif
if (*(unsigned char *)(pc+0) == 0x48
- && *(unsigned long *)(pc+1) == 0x050f0000000fc0c7)
+ && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL)
{
struct ucontext *uc_ = context->cfa;
/* The void * cast is necessary to avoid an aliasing warning.