patches/glibc/linuxthreads-2.3.2/alpha_cfi1.patch
changeset 1 eeea35fbf182
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/patches/glibc/linuxthreads-2.3.2/alpha_cfi1.patch	Sat Feb 24 11:00:05 2007 +0000
     1.3 @@ -0,0 +1,136 @@
     1.4 +Retrieved with
     1.5 +$ wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S.diff?r1=1.5&r2=1.6&cvsroot=glibc'
     1.6 +$ wget 'http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h.diff?r1=1.3&r2=1.4&cvsroot=glibc'
     1.7 +
     1.8 +Might fix problem building with binutils-2.14.90.0.8/gcc-3.3.3 that was not
     1.9 +present with binutils-2.13.90.0.18/gcc-3.3.2:
    1.10 +
    1.11 +../linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S: Assembler messages:
    1.12 +../linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S:63: Warning: .ent
    1.13 +directive without matching .end
    1.14 +../linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S:63: Error: can't resolve
    1.15 +`0' {.text section} - `L0^A' {.text section}
    1.16 +make[2]: ***
    1.17 +[/home/dkegel/wk/crosstool-0.26-pre3/build/alpha-unknown-linux-gnu/gcc-3.3-20040112-glibc-2.3.2/build-glibc/posix/vfork.o]
    1.18 +Error 1
    1.19 +make[2]: Leaving directory
    1.20 +`/home/dkegel/wk/crosstool-0.26-pre3/build/alpha-unknown-linux-gnu/gcc-3.3-20040112-glibc-2.3.2/glibc-2.3.2/posix'
    1.21 +make[1]: *** [posix/subdir_lib] Error 2
    1.22 +make[1]: Leaving directory
    1.23 +`/home/dkegel/wk/crosstool-0.26-pre3/build/alpha-unknown-linux-gnu/gcc-3.3-20040112-glibc-2.3.2/glibc-2.3.2'
    1.24 +make: *** [all] Error 2
    1.25 +
    1.26 +See also alpha_cfi2.patch
    1.27 +
    1.28 +===================================================================
    1.29 +RCS file: /cvs/glibc/libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S,v
    1.30 +retrieving revision 1.5
    1.31 +retrieving revision 1.6
    1.32 +diff -u -r1.5 -r1.6
    1.33 +--- libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S	2003/02/11 06:27:53	1.5
    1.34 ++++ libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S	2003/06/06 05:51:03	1.6
    1.35 +@@ -19,12 +19,13 @@
    1.36 + 
    1.37 + #include <sysdep-cancel.h>
    1.38 + 
    1.39 +-	.globl __vfork
    1.40 +         .align 4
    1.41 +-        .ent __vfork,0
    1.42 +-__LABEL(__vfork)
    1.43 ++	.globl	__vfork
    1.44 ++	.type	__vfork, @function
    1.45 ++	.usepv	__vfork, std
    1.46 ++	cfi_startproc
    1.47 ++__vfork:
    1.48 + 	ldgp	gp, 0(pv)
    1.49 +-	.prologue 1
    1.50 + 	PSEUDO_PROF
    1.51 + 
    1.52 + #ifdef SHARED
    1.53 +@@ -46,18 +47,24 @@
    1.54 + 	   fork and vfork object files.  */
    1.55 + $do_fork:
    1.56 + 	subq	sp, 16, sp
    1.57 ++	cfi_adjust_cfa_offset(16)
    1.58 + 	stq	ra, 0(sp)
    1.59 ++	cfi_offset(ra, -16)
    1.60 + 	jsr	ra, HIDDEN_JUMPTARGET (__fork)
    1.61 + 	ldgp	gp, 0(ra)
    1.62 + 	ldq	ra, 0(sp)
    1.63 + 	addq	sp, 16, sp
    1.64 ++	cfi_restore(ra)
    1.65 ++	cfi_adjust_cfa_offset(-16)
    1.66 + 	ret
    1.67 + 
    1.68 + $syscall_error:
    1.69 + 	SYSCALL_ERROR_HANDLER
    1.70 + #endif
    1.71 + 
    1.72 +-PSEUDO_END(__vfork)
    1.73 ++	cfi_endproc
    1.74 ++	.size __vfork, .-__vfork
    1.75 ++
    1.76 + libc_hidden_def (__vfork)
    1.77 + 
    1.78 + weak_alias (__vfork, vfork)
    1.79 +===================================================================
    1.80 +RCS file: /cvs/glibc/libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h,v
    1.81 +retrieving revision 1.3
    1.82 +retrieving revision 1.4
    1.83 +diff -u -r1.3 -r1.4
    1.84 +--- libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h	2003/01/12 19:26:41	1.3
    1.85 ++++ libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h	2003/06/06 05:51:03	1.4
    1.86 +@@ -40,10 +40,11 @@
    1.87 + # define PSEUDO(name, syscall_name, args)			\
    1.88 + 	.globl name;						\
    1.89 + 	.align 4;						\
    1.90 +-	.ent name, 0;						\
    1.91 ++	.type name, @function;					\
    1.92 ++	.usepv name, std;					\
    1.93 ++	cfi_startproc;						\
    1.94 + __LABEL(name)							\
    1.95 + 	ldgp	gp, 0(pv);					\
    1.96 +-	.prologue 1;						\
    1.97 + 	PSEUDO_PROF;						\
    1.98 + 	PSEUDO_PREPARE_ARGS					\
    1.99 + 	SINGLE_THREAD_P(t0);					\
   1.100 +@@ -55,7 +56,9 @@
   1.101 + 	.subsection 2;						\
   1.102 + __LABEL($pseudo_cancel)						\
   1.103 + 	subq	sp, 64, sp;					\
   1.104 ++	cfi_def_cfa_offset(64);					\
   1.105 + 	stq	ra, 0(sp);					\
   1.106 ++	cfi_offset(ra, -64);					\
   1.107 + 	SAVE_ARGS_##args;					\
   1.108 + 	CENABLE;						\
   1.109 + 	LOAD_ARGS_##args;					\
   1.110 +@@ -67,19 +70,27 @@
   1.111 + 	ldq	ra, 0(sp);					\
   1.112 + 	ldq	v0, 8(sp);					\
   1.113 + 	addq	sp, 64, sp;					\
   1.114 ++	cfi_remember_state;					\
   1.115 ++	cfi_restore(ra);					\
   1.116 ++	cfi_def_cfa_offset(0);					\
   1.117 + 	ret;							\
   1.118 ++	cfi_restore_state;					\
   1.119 + __LABEL($multi_error)						\
   1.120 + 	CDISABLE;						\
   1.121 + 	ldq	ra, 0(sp);					\
   1.122 + 	ldq	v0, 8(sp);					\
   1.123 + 	addq	sp, 64, sp;					\
   1.124 ++	cfi_restore(ra);					\
   1.125 ++	cfi_def_cfa_offset(0);					\
   1.126 + __LABEL($syscall_error)						\
   1.127 + 	SYSCALL_ERROR_HANDLER;					\
   1.128 +-	END(name);						\
   1.129 + 	.previous
   1.130 + 
   1.131 + # undef PSEUDO_END
   1.132 +-# define PSEUDO_END(sym)
   1.133 ++# define PSEUDO_END(sym)					\
   1.134 ++	.subsection 2;						\
   1.135 ++	cfi_endproc;						\
   1.136 ++	.size sym, .-sym
   1.137 + 
   1.138 + # define SAVE_ARGS_0	/* Nothing.  */
   1.139 + # define SAVE_ARGS_1	SAVE_ARGS_0; stq a0, 8(sp)