diff options
author | Chung-Lin Tang <cltang@codesourcery.com> | 2010-09-08 15:49:50 -0700 |
---|---|---|
committer | Petr Baudis <pasky@suse.cz> | 2010-11-09 02:14:32 +0100 |
commit | e6ff4b8b261116ccf2867bc91891ad8f3f33ea24 (patch) | |
tree | 40691d08feaa0f986216d6d3ffed392322cb1da4 | |
parent | 254fea5e8ff6b6823858dc5404e5e68a621d5a60 (diff) | |
download | glibc-e6ff4b8b261116ccf2867bc91891ad8f3f33ea24.tar.gz glibc-e6ff4b8b261116ccf2867bc91891ad8f3f33ea24.tar.xz glibc-e6ff4b8b261116ccf2867bc91891ad8f3f33ea24.zip |
Fix _FORITY_SOURCE version of longjmp for Linux/x86-64.
(cherry picked from commit c044aa75354b48d4b7aaffe465706282192e54c2)
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S | 26 |
2 files changed, 23 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog index 2985e2dde6..4461b2def5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-09-08 Chung-Lin Tang <cltang@codesourcery.com> + Ulrich Drepper <drepper@redhat.com> + + [BZ #11968] + * sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S + (____longjmp_chk): Use %ebx for saving value across system call. + Add unwind info. + 2010-08-31 Mike Frysinger <vapier@gentoo.org> * sysdeps/unix/sysv/linux/x86_64/sys/epoll.h: Fix typo. diff --git a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S index 5e11540fd4..da35115b9f 100644 --- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc. +/* Copyright (C) 2001,2004,2005,2006,2009,2010 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -49,9 +49,9 @@ longjmp_msg: .text ENTRY(____longjmp_chk) /* Restore registers. */ - movq (JB_RSP*8)(%rdi),%r8 - movq (JB_RBP*8)(%rdi),%r9 - movq (JB_PC*8)(%rdi),%rdx + movq (JB_RSP*8)(%rdi), %r8 + movq (JB_RBP*8)(%rdi), %r9 + movq (JB_PC*8)(%rdi), %rdx #ifdef PTR_DEMANGLE PTR_DEMANGLE (%r8) PTR_DEMANGLE (%r9) @@ -63,7 +63,9 @@ ENTRY(____longjmp_chk) /* Save function parameters. */ movq %rdi, %r10 - movl %esi, %ecx + cfi_register (%rdi, %r10) + movl %esi, %ebx + cfi_register (%rsi, %rbx) xorl %edi, %edi leaq -24(%rsp), %rsi @@ -84,7 +86,9 @@ ENTRY(____longjmp_chk) .Lfail: CALL_FAIL .Lok2: movq %r10, %rdi - movl %ecx, %esi + cfi_restore (%rdi) + movl %ebx, %esi + cfi_restore (%rsi) .Lok: /* We add unwind information for the target here. */ cfi_def_cfa(%rdi, 0) @@ -96,11 +100,11 @@ ENTRY(____longjmp_chk) cfi_offset(%r13,JB_R13*8) cfi_offset(%r14,JB_R14*8) cfi_offset(%r15,JB_R15*8) - movq (JB_RBX*8)(%rdi),%rbx - movq (JB_R12*8)(%rdi),%r12 - movq (JB_R13*8)(%rdi),%r13 - movq (JB_R14*8)(%rdi),%r14 - movq (JB_R15*8)(%rdi),%r15 + movq (JB_RBX*8)(%rdi), %rbx + movq (JB_R12*8)(%rdi), %r12 + movq (JB_R13*8)(%rdi), %r13 + movq (JB_R14*8)(%rdi), %r14 + movq (JB_R15*8)(%rdi), %r15 /* Set return value for setjmp. */ movl %esi, %eax movq %r8,%rsp |