Retrieved with $ 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' $ 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' Might fix problem building with binutils-2.14.90.0.8/gcc-3.3.3 that was not present with binutils-2.13.90.0.18/gcc-3.3.2: ../linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S: Assembler messages: ../linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S:63: Warning: .ent directive without matching .end ../linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S:63: Error: can't resolve `0' {.text section} - `L0^A' {.text section} make[2]: *** [/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] Error 1 make[2]: Leaving directory `/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' make[1]: *** [posix/subdir_lib] Error 2 make[1]: Leaving directory `/home/dkegel/wk/crosstool-0.26-pre3/build/alpha-unknown-linux-gnu/gcc-3.3-20040112-glibc-2.3.2/glibc-2.3.2' make: *** [all] Error 2 See also alpha_cfi2.patch =================================================================== RCS file: /cvs/glibc/libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S 2003/02/11 06:27:53 1.5 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/vfork.S 2003/06/06 05:51:03 1.6 @@ -19,12 +19,13 @@ #include - .globl __vfork .align 4 - .ent __vfork,0 -__LABEL(__vfork) + .globl __vfork + .type __vfork, @function + .usepv __vfork, std + cfi_startproc +__vfork: ldgp gp, 0(pv) - .prologue 1 PSEUDO_PROF #ifdef SHARED @@ -46,18 +47,24 @@ fork and vfork object files. */ $do_fork: subq sp, 16, sp + cfi_adjust_cfa_offset(16) stq ra, 0(sp) + cfi_offset(ra, -16) jsr ra, HIDDEN_JUMPTARGET (__fork) ldgp gp, 0(ra) ldq ra, 0(sp) addq sp, 16, sp + cfi_restore(ra) + cfi_adjust_cfa_offset(-16) ret $syscall_error: SYSCALL_ERROR_HANDLER #endif -PSEUDO_END(__vfork) + cfi_endproc + .size __vfork, .-__vfork + libc_hidden_def (__vfork) weak_alias (__vfork, vfork) =================================================================== RCS file: /cvs/glibc/libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2003/01/12 19:26:41 1.3 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h 2003/06/06 05:51:03 1.4 @@ -40,10 +40,11 @@ # define PSEUDO(name, syscall_name, args) \ .globl name; \ .align 4; \ - .ent name, 0; \ + .type name, @function; \ + .usepv name, std; \ + cfi_startproc; \ __LABEL(name) \ ldgp gp, 0(pv); \ - .prologue 1; \ PSEUDO_PROF; \ PSEUDO_PREPARE_ARGS \ SINGLE_THREAD_P(t0); \ @@ -55,7 +56,9 @@ .subsection 2; \ __LABEL($pseudo_cancel) \ subq sp, 64, sp; \ + cfi_def_cfa_offset(64); \ stq ra, 0(sp); \ + cfi_offset(ra, -64); \ SAVE_ARGS_##args; \ CENABLE; \ LOAD_ARGS_##args; \ @@ -67,19 +70,27 @@ ldq ra, 0(sp); \ ldq v0, 8(sp); \ addq sp, 64, sp; \ + cfi_remember_state; \ + cfi_restore(ra); \ + cfi_def_cfa_offset(0); \ ret; \ + cfi_restore_state; \ __LABEL($multi_error) \ CDISABLE; \ ldq ra, 0(sp); \ ldq v0, 8(sp); \ addq sp, 64, sp; \ + cfi_restore(ra); \ + cfi_def_cfa_offset(0); \ __LABEL($syscall_error) \ SYSCALL_ERROR_HANDLER; \ - END(name); \ .previous # undef PSEUDO_END -# define PSEUDO_END(sym) +# define PSEUDO_END(sym) \ + .subsection 2; \ + cfi_endproc; \ + .size sym, .-sym # define SAVE_ARGS_0 /* Nothing. */ # define SAVE_ARGS_1 SAVE_ARGS_0; stq a0, 8(sp)