revert cfi additions to clone on i386/x86_64 to workaround problems in gcc's unwinder code. this is not a bug in glibc, it triggers problems elsewhere. this cfi code does not gain us a whole lot anyways. http://gcc.gnu.org/ml/gcc/2006-12/msg00293.html Index: sysdeps/unix/sysv/linux/i386/clone.S =================================================================== RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/clone.S,v retrieving revision 1.27 retrieving revision 1.26 diff -u -p -r1.27 -r1.26 diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.12.1/sysdeps/unix/sysv/linux/i386/clone.S --- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/clone.S 2006-12-04 00:12:36.000000000 +0100 +++ glibc-2.12.1/sysdeps/unix/sysv/linux/i386/clone.S 2009-11-13 00:49:45.000000000 +0100 @@ -120,9 +120,6 @@ ret L(thread_start): - cfi_startproc; - /* Clearing frame pointer is insufficient, use CFI. */ - cfi_undefined (eip); /* Note: %esi is zero. */ movl %esi,%ebp /* terminate the stack frame */ #ifdef RESET_PID @@ -155,7 +152,6 @@ jmp L(haspid) .previous #endif - cfi_endproc; cfi_startproc PSEUDO_END (BP_SYM (__clone)) diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.12.1/sysdeps/unix/sysv/linux/x86_64/clone.S --- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/x86_64/clone.S 2006-12-04 00:12:36.000000000 +0100 +++ glibc-2.12.1/sysdeps/unix/sysv/linux/x86_64/clone.S 2009-11-13 00:49:45.000000000 +0100 @@ -89,9 +89,6 @@ ret L(thread_start): - cfi_startproc; - /* Clearing frame pointer is insufficient, use CFI. */ - cfi_undefined (rip); /* Clear the frame pointer. The ABI suggests this be done, to mark the outermost frame obviously. */ xorl %ebp, %ebp @@ -116,7 +113,6 @@ /* Call exit with return value from function call. */ movq %rax, %rdi call HIDDEN_JUMPTARGET (_exit) - cfi_endproc; cfi_startproc; PSEUDO_END (BP_SYM (__clone))