diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2011-08-03 04:59:41 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2011-08-02 21:59:41 -0700 |
commit | 40f2f11f1f38c4346b843d94a0d8a68a2e7bcd87 (patch) | |
tree | 51165e073966804dc2cfce31c1ecc9326e44158c | |
parent | 16c57fe28099740e06cb761b928b62a5a028bf66 (diff) | |
download | gcc-40f2f11f1f38c4346b843d94a0d8a68a2e7bcd87.zip gcc-40f2f11f1f38c4346b843d94a0d8a68a2e7bcd87.tar.gz gcc-40f2f11f1f38c4346b843d94a0d8a68a2e7bcd87.tar.bz2 |
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.
From-SVN: r177229
-rw-r--r-- | libgcc/ChangeLog | 6 | ||||
-rw-r--r-- | libgcc/config/i386/linux-unwind.h | 9 |
2 files changed, 13 insertions, 2 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 1685c9f..322b93e 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 de44823..f17a46c 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. |