about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S2
-rw-r--r--sysdeps/x86_64/__longjmp.S12
3 files changed, 17 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index b9023aedc5..fe4918e4cb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-01-11  Andreas Jaeger  <aj@suse.de>
+
+	* sysdeps/x86_64/__longjmp.S: Add cfi directives.
+
 2004-01-10  Andreas Jaeger  <aj@suse.de>
 
 	* sysdeps/unix/sysv/linux/x86_64/__start_context.S: Add cfi directives.
@@ -2999,7 +3003,7 @@
 	CFI directives.
 	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
 	(__CLONE_SYSCALL_STRING): Define.
- 	* sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_CLONE_SYSCALL):
+	* sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_CLONE_SYSCALL):
 	Define.
 	* sysdeps/unix/sysv/linux/sparc/system.c: New file.
 
diff --git a/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S b/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S
index bec622ecee..25d1d3f96a 100644
--- a/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S
+++ b/linuxthreads/sysdeps/unix/sysv/linux/x86_64/vfork.S
@@ -47,7 +47,7 @@ ENTRY (__vfork)
 
 	/* Push back the return PC.  */
 	pushq	%rdi
-	cfi_adjust_cfa_offset(-7)
+	cfi_adjust_cfa_offset(8)
 
 	cmpl	$-4095, %eax
 	jae SYSCALL_ERROR_LABEL		/* Branch forward if it failed.  */
diff --git a/sysdeps/x86_64/__longjmp.S b/sysdeps/x86_64/__longjmp.S
index 1962b7f1aa..9ed480c540 100644
--- a/sysdeps/x86_64/__longjmp.S
+++ b/sysdeps/x86_64/__longjmp.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2004 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
@@ -27,6 +27,16 @@
    void __longjmp (__jmp_buf env, int val).  */
 ENTRY(__longjmp)
 	/* Restore registers.  */
+	/* We add unwind information for the target here.  */
+	cfi_def_cfa(%rdi, 0)
+	cfi_offset(%rbx,JB_RBX*8)
+	cfi_offset(%rbp,JB_RBP*8)
+	cfi_offset(%r12,JB_R12*8)
+	cfi_offset(%r13,JB_R13*8)
+	cfi_offset(%r14,JB_R14*8)
+	cfi_offset(%r15,JB_R15*8)
+	cfi_offset(%rsp,JB_RSP*8)
+	cfi_offset(%rip,JB_PC*8)
 	movq (JB_RBX*8)(%rdi),%rbx
 	movq (JB_RBP*8)(%rdi),%rbp
 	movq (JB_R12*8)(%rdi),%r12