summaryrefslogtreecommitdiff
path: root/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64
diff options
context:
space:
mode:
Diffstat (limited to 'libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64')
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Entries5
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Repository1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Root1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h101
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S64
6 files changed, 173 insertions, 0 deletions
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Entries b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Entries
new file mode 100644
index 000000000..b842c7103
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Entries
@@ -0,0 +1,5 @@
+/Makefile/1.4/Tue Nov 15 14:20:47 2005//
+/pt-sigsuspend.c/1.1/Tue Nov 15 14:20:47 2005//
+/sysdep-cancel.h/1.7/Tue Nov 15 14:20:47 2005//
+/vfork.S/1.6/Tue Nov 15 14:20:47 2005//
+D
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Repository b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Repository
new file mode 100644
index 000000000..a5b0ec61b
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Repository
@@ -0,0 +1 @@
+ports/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Root b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Root
new file mode 100644
index 000000000..ca45c5d4d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/CVS/Root
@@ -0,0 +1 @@
+:pserver:anoncvs@sources.redhat.com:/cvs/glibc
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c
new file mode 100644
index 000000000..d57283ad2
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/pt-sigsuspend.c
@@ -0,0 +1 @@
+#include "../../ia64/pt-sigsuspend.c"
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
new file mode 100644
index 000000000..80834292e
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
@@ -0,0 +1,101 @@
+/* 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.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <sysdep.h>
+#include <tls.h>
+#ifndef __ASSEMBLER__
+# include <linuxthreads/internals.h>
+#endif
+
+#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+
+# undef PSEUDO
+# define PSEUDO(name, syscall_name, args) \
+ .text; \
+ENTRY(name) \
+ ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1; \
+ brnz,pn %g1, 1f; \
+ mov SYS_ify(syscall_name), %g1; \
+ ta 0x6d; \
+ bcs,pn %xcc, __syscall_error_handler; \
+ nop; \
+ .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
+# define CDISABLE call __pthread_disable_asynccancel
+# elif !defined NOT_IN_libc
+# define CENABLE call __libc_enable_asynccancel
+# define CDISABLE call __libc_disable_asynccancel
+# else
+# define CENABLE call __librt_enable_asynccancel
+# define CDISABLE call __librt_disable_asynccancel
+# endif
+
+#define COPY_ARGS_0 /* Nothing */
+#define COPY_ARGS_1 COPY_ARGS_0 mov %i0, %o0;
+#define COPY_ARGS_2 COPY_ARGS_1 mov %i1, %o1;
+#define COPY_ARGS_3 COPY_ARGS_2 mov %i2, %o2;
+#define COPY_ARGS_4 COPY_ARGS_3 mov %i3, %o3;
+#define COPY_ARGS_5 COPY_ARGS_4 mov %i4, %o4;
+#define COPY_ARGS_6 COPY_ARGS_5 mov %i5, %o5;
+
+# ifndef __ASSEMBLER__
+# define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ p_header.data.multiple_threads) == 0, 1)
+# else
+# define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
+# endif
+
+#elif !defined __ASSEMBLER__
+
+/* This code should never be used but we define it anyhow. */
+# define SINGLE_THREAD_P (1)
+
+#endif
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
new file mode 100644
index 000000000..8a6d2771e
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S
@@ -0,0 +1,64 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <sysdep-cancel.h>
+
+#ifdef SHARED
+.LLGETPC0:
+ retl
+ add %o7, %o0, %o0
+#endif
+ENTRY(__vfork)
+#ifdef SHARED
+ mov %o7, %o1
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %o0
+ call .LLGETPC0
+ add %o0, %lo(_GLOBAL_OFFSET_TABLE_+4), %o0
+ sethi %hi(__libc_pthread_functions), %o2
+ mov %o1, %o7
+ or %o2, %lo(__libc_pthread_functions), %o2
+ ldx [%o0 + %o2], %o2
+ ldx [%o2], %o0
+#else
+ .weak pthread_create
+ sethi %hi(pthread_create), %o0
+ or %o0, %lo(pthread_create), %o0
+#endif
+#if defined SHARED && !defined BROKEN_SPARC_WDISP22
+ cmp %o0, 0
+ bne HIDDEN_JUMPTARGET(__fork)
+#else
+ brnz,pn %o0, 1f
+#endif
+ mov __NR_vfork, %g1
+ ta 0x6d
+ bcs,pn %xcc, __syscall_error_handler
+ nop
+ sub %o1, 1, %o1
+ retl
+ and %o0, %o1, %o0
+#if !defined SHARED || defined BROKEN_SPARC_WDISP22
+1: mov %o7, %g1
+ call HIDDEN_JUMPTARGET(__fork)
+ mov %g1, %o7
+#endif
+ SYSCALL_ERROR_HANDLER
+PSEUDO_END (__vfork)
+libc_hidden_def (__vfork)
+weak_alias (__vfork, vfork)