patches/glibc/ports-2.10.1/120-i386-x86_64-revert-clone-cfi.patch
author Daniel Price <daniel.price@gmail.com>
Tue Nov 20 16:59:17 2012 -0800 (2012-11-20)
changeset 3126 333d3e40cbd1
permissions -rw-r--r--
scripts: refine static linking check to better guide the user

The current mechanism to check if static linking is possible, and the mesage
displayed on failure, can be puzzling to the unsuspecting user.

Also, the current implementation is not using the existing infrastructure,
and is thus difficult to enhance with new tests.

So, switch to using the standard CT_DoExecLog infra, and use four tests to
check for the host compiler:
- check we can run it
- check it can build a trivial program
- check it can statically link that program
- check if it statically link with libstdc++

That should cover most of the problems. Hopefully.

(At the same time, fix a typo in a comment)

Signed-off-by: Daniel Price <daniel.price@gmail.com>
[yann.morin.1998@free.fr: split original patch for self-contained changes]
[yann.morin.1998@free.fr: use steps to better see gcc's output]
[yann.morin.1998@free.fr: commit log]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Message-Id: <163f86b5216fc08c672a.1353459722@nipigon.dssd.com>
Patchwork-Id: 200536
     1 revert cfi additions to clone on i386/x86_64 to workaround problems in
     2 gcc's unwinder code.  this is not a bug in glibc, it triggers problems
     3 elsewhere.  this cfi code does not gain us a whole lot anyways.
     4 
     5 http://gcc.gnu.org/ml/gcc/2006-12/msg00293.html
     6 
     7 Index: sysdeps/unix/sysv/linux/i386/clone.S
     8 ===================================================================
     9 RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/clone.S,v
    10 retrieving revision 1.27
    11 retrieving revision 1.26
    12 diff -u -p -r1.27 -r1.26
    13 
    14 diff -durN glibc-2.10.1.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.10.1/sysdeps/unix/sysv/linux/i386/clone.S
    15 --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/i386/clone.S	2006-12-04 00:12:36.000000000 +0100
    16 +++ glibc-2.10.1/sysdeps/unix/sysv/linux/i386/clone.S	2009-11-13 00:49:45.000000000 +0100
    17 @@ -120,9 +120,6 @@
    18  	ret
    19  
    20  L(thread_start):
    21 -	cfi_startproc;
    22 -	/* Clearing frame pointer is insufficient, use CFI.  */
    23 -	cfi_undefined (eip);
    24  	/* Note: %esi is zero.  */
    25  	movl	%esi,%ebp	/* terminate the stack frame */
    26  #ifdef RESET_PID
    27 @@ -155,7 +152,6 @@
    28  	jmp	L(haspid)
    29  	.previous
    30  #endif
    31 -	cfi_endproc;
    32  
    33  	cfi_startproc
    34  PSEUDO_END (BP_SYM (__clone))
    35 diff -durN glibc-2.10.1.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.10.1/sysdeps/unix/sysv/linux/x86_64/clone.S
    36 --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/x86_64/clone.S	2006-12-04 00:12:36.000000000 +0100
    37 +++ glibc-2.10.1/sysdeps/unix/sysv/linux/x86_64/clone.S	2009-11-13 00:49:45.000000000 +0100
    38 @@ -89,9 +89,6 @@
    39  	ret
    40  
    41  L(thread_start):
    42 -	cfi_startproc;
    43 -	/* Clearing frame pointer is insufficient, use CFI.  */
    44 -	cfi_undefined (rip);
    45  	/* Clear the frame pointer.  The ABI suggests this be done, to mark
    46  	   the outermost frame obviously.  */
    47  	xorl	%ebp, %ebp
    48 @@ -116,7 +113,6 @@
    49  	/* Call exit with return value from function call. */
    50  	movq	%rax, %rdi
    51  	call	HIDDEN_JUMPTARGET (_exit)
    52 -	cfi_endproc;
    53  
    54  	cfi_startproc;
    55  PSEUDO_END (BP_SYM (__clone))