Update x32 __NR_rt_sigreturn system call number.
authorH.J. Lu <hongjiu.lu@intel.com>
Wed, 3 Aug 2011 04:59:41 +0000 (04:59 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 3 Aug 2011 04:59:41 +0000 (21:59 -0700)
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.

From-SVN: r177229

libgcc/ChangeLog
libgcc/config/i386/linux-unwind.h

index 1685c9fa7c3b6ea8736948fe46a41d6e6e68354f..322b93ec861f3db688e7818b6d2119c775e87111 100644 (file)
@@ -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__>):
index de44823e053f343c3cb774a904e5d53e44b0dfd9..f17a46cc8e7101a0c11d63c2c54f7fc630ec23b4 100644 (file)
@@ -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.