This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Avoid wrong unwind info in clone child


The unwind info attached to the clone function is usually wrong for the
child.  This changes the ppc(64) implementation to terminate the FDE
before the syscall, similar to the i386 implementation.

Andreas.

2006-04-03  Andreas Schwab  <schwab@suse.de>

	* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Terminate FDE
	before syscall.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Likewise.

--- sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S.~1.7.~	2006-01-11 10:24:55.000000000 +0100
+++ sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S	2006-03-26 20:35:33.000000000 +0200
@@ -84,6 +84,10 @@ ENTRY (BP_SYM (__clone))
 	mr	r6,r8
 	mr	r7,r9
 
+	/* End FDE now, because in the child the unwind info will be
+	   wrong.  */
+	cfi_endproc
+
 	/* Do the call.  */
 	DO_CALL(SYS_ify(clone))
 
@@ -138,6 +142,8 @@ L(parent):
 L(badargs):
 	li	r3,EINVAL
 	b	__syscall_error@local
+
+	cfi_startproc
 END (BP_SYM (__clone))
 
 weak_alias (BP_SYM (__clone), BP_SYM (clone))
--- sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S.~1.10.~	2006-03-17 11:37:26.000000000 +0100
+++ sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S	2006-03-31 15:45:48.000000000 +0200
@@ -81,6 +81,10 @@ ENTRY (BP_SYM (__clone))
 	mr	r6,r8
 	mr	r7,r9
 
+	/* End FDE now, because in the child the unwind info will be
+	   wrong.  */
+	cfi_endproc
+
 	/* Do the call.  */
 	DO_CALL(SYS_ify(clone))
 
@@ -132,6 +136,8 @@ L(parent):
 L(badargs):
 	li	r3,EINVAL
 	b	JUMPTARGET(__syscall_error)
+
+	cfi_startproc
 END (BP_SYM (__clone))
 
 weak_alias (BP_SYM (__clone), BP_SYM (clone))

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]