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