diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-12-22 20:10:10 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-12-22 20:10:10 +0000 |
commit | a334319f6530564d22e775935d9c91663623a1b4 (patch) | |
tree | b5877475619e4c938e98757d518bb1e9cbead751 /nptl/sysdeps/unix/sysv/linux/sparc/sparc64 | |
parent | 0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (diff) | |
download | glibc-a334319f6530564d22e775935d9c91663623a1b4.tar glibc-a334319f6530564d22e775935d9c91663623a1b4.tar.gz glibc-a334319f6530564d22e775935d9c91663623a1b4.tar.bz2 glibc-a334319f6530564d22e775935d9c91663623a1b4.zip |
(CFLAGS-tst-align.c): Add -mpreferred-stack-boundary=4.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sparc/sparc64')
4 files changed, 54 insertions, 72 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S deleted file mode 100644 index 675a997e97..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ /dev/null @@ -1,9 +0,0 @@ -/* We want an #include_next, but we are the main source file. - So, #include ourselves and in that incarnation we can use #include_next. */ -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <clone.S> -#else -# define RESET_PID -# include_next <clone.S> -#endif diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S index 8941043c3a..e9018b2e99 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S @@ -21,7 +21,6 @@ #include <tcb-offsets.h> .text - .globl __syscall_error ENTRY(__vfork) ld [%g7 + PID], %o5 sub %g0, %o5, %o4 @@ -29,17 +28,15 @@ ENTRY(__vfork) LOADSYSCALL(vfork) ta 0x6d - bcc,pt %xcc, 2f - mov %o7, %g1 - st %o5, [%g7 + PID] - call __syscall_error - mov %g1, %o7 -2: sub %o1, 1, %o1 + bcs,a,pn %xcc, __syscall_error_handler + st %o5, [%g7 + PID] + SYSCALL_ERROR_HANDLER + sub %o1, 1, %o1 andcc %o0, %o1, %o0 bne,a,pt %icc, 1f st %o5, [%g7 + PID] 1: retl nop -END(__vfork) +PSEUDO_END (__vfork) weak_alias (__vfork, vfork) diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h index 2c76d01715..d8c65aeffd 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. @@ -26,46 +26,49 @@ #if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt # undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - .text; \ - .globl __syscall_error; \ -ENTRY(name) \ - ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\ - brnz,pn %g1, 1f; \ -.type __##syscall_name##_nocancel,@function; \ -.globl __##syscall_name##_nocancel; \ -__##syscall_name##_nocancel: \ - mov SYS_ify(syscall_name), %g1; \ - ta 0x6d; \ - bcc,pt %xcc, 8f; \ - mov %o7, %g1; \ - call __syscall_error; \ - mov %g1, %o7; \ -8: jmpl %o7 + 8, %g0; \ - nop; \ -.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\ -1: save %sp, -192, %sp; \ - cfi_def_cfa_register(%fp); \ - cfi_window_save; \ - cfi_register(%o7, %i7); \ - CENABLE; \ - nop; \ - mov %o0, %l0; \ - COPY_ARGS_##args \ - mov SYS_ify(syscall_name), %g1; \ - ta 0x6d; \ - bcc,pt %xcc, 1f; \ - mov %o0, %l1; \ - CDISABLE; \ - mov %l0, %o0; \ - call __syscall_error; \ - mov %l1, %o0; \ - ba,pt %xcc, 2f; \ - mov -1, %l1; \ -1: CDISABLE; \ - mov %l0, %o0; \ -2: jmpl %i7 + 8, %g0; \ - restore %g0, %l1, %o0; +# define PSEUDO(name, syscall_name, args) \ + .text; \ +ENTRY(name) \ + ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \ + brnz,pn %g1, 1f; \ +.type __##syscall_name##_nocancel,@function; \ +.globl __##syscall_name##_nocancel; \ +__##syscall_name##_nocancel: \ + mov SYS_ify(syscall_name), %g1; \ + ta 0x6d; \ + bcs,pn %xcc, __syscall_error_handler; \ + nop; \ +.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ + .subsection 2; \ +1: save %sp, -192, %sp; \ + CENABLE; \ + nop; \ + mov %o0, %l0; \ + COPY_ARGS_##args \ + mov SYS_ify(syscall_name), %g1; \ + ta 0x6d; \ + bcs,pn %xcc, __syscall_error_handler2; \ + mov %o0, %l1; \ + CDISABLE; \ + mov %l0, %o0; \ + jmpl %i7 + 8, %g0; \ + restore %g0, %l1, %o0; \ + .previous; \ + SYSCALL_ERROR_HANDLER \ + SYSCALL_ERROR_HANDLER2 + +#define SYSCALL_ERROR_HANDLER2 \ +SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \ + .global __errno_location; \ + .type __errno_location,@function; \ + CDISABLE; \ + mov %l0, %o0; \ + call __errno_location; \ + nop; \ + st %l1, [%o0]; \ + jmpl %i7 + 8, %g0; \ + restore %g0, -1, %o0; \ + .previous; # ifdef IS_IN_libpthread # define CENABLE call __pthread_enable_asynccancel @@ -102,9 +105,3 @@ __##syscall_name##_nocancel: \ # define NO_CANCELLATION 1 #endif - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S index 5597574304..d6b2455d43 100644 --- a/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S +++ b/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S @@ -21,7 +21,6 @@ #include <tcb-offsets.h> .text - .globl __syscall_error ENTRY(__vfork) ld [%g7 + PID], %o5 sethi %hi(0x80000000), %o3 @@ -32,18 +31,16 @@ ENTRY(__vfork) LOADSYSCALL(vfork) ta 0x6d - bcc,pt %xcc, 2f - mov %o7, %g1 - st %o5, [%g7 + PID] - call __syscall_error - mov %g1, %o7 -2: sub %o1, 1, %o1 + bcs,a,pn %xcc, __syscall_error_handler + st %o5, [%g7 + PID] + SYSCALL_ERROR_HANDLER + sub %o1, 1, %o1 andcc %o0, %o1, %o0 bne,a,pt %icc, 1f st %o5, [%g7 + PID] 1: retl nop -END(__vfork) +PSEUDO_END (__vfork) libc_hidden_def (__vfork) weak_alias (__vfork, vfork) |