summaryrefslogtreecommitdiff
path: root/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390
diff options
context:
space:
mode:
Diffstat (limited to 'libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390')
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Entries3
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Repository1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Root1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Entries2
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Repository1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Root1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h72
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Entries4
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Repository1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Root1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c154
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h137
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S69
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Entries5
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Repository1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Root1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c137
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c1
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h116
-rw-r--r--libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S54
20 files changed, 762 insertions, 0 deletions
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Entries b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Entries
new file mode 100644
index 000000000..535fd3aea
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Entries
@@ -0,0 +1,3 @@
+D/bits////
+D/s390-32////
+D/s390-64////
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Repository b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Repository
new file mode 100644
index 000000000..294321382
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Repository
@@ -0,0 +1 @@
+ports/linuxthreads/sysdeps/unix/sysv/linux/s390
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Root b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Root
new file mode 100644
index 000000000..ca45c5d4d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/CVS/Root
@@ -0,0 +1 @@
+:pserver:anoncvs@sources.redhat.com:/cvs/glibc
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Entries b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Entries
new file mode 100644
index 000000000..dc5fee511
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Entries
@@ -0,0 +1,2 @@
+/typesizes.h/1.3/Tue Nov 15 14:20:47 2005//
+D
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Repository b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Repository
new file mode 100644
index 000000000..370c0ee15
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Repository
@@ -0,0 +1 @@
+ports/linuxthreads/sysdeps/unix/sysv/linux/s390/bits
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Root b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Root
new file mode 100644
index 000000000..ca45c5d4d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/CVS/Root
@@ -0,0 +1 @@
+:pserver:anoncvs@sources.redhat.com:/cvs/glibc
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
new file mode 100644
index 000000000..bee7639f0
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
@@ -0,0 +1,72 @@
+/* bits/typesizes.h -- underlying types for *_t. Linux/s390 version.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ 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. */
+
+#ifndef _BITS_TYPES_H
+# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef _BITS_TYPESIZES_H
+#define _BITS_TYPESIZES_H 1
+
+/* See <bits/types.h> for the meaning of these macros. This file exists so
+ that <bits/types.h> need not vary across different GNU platforms. */
+
+#define __DEV_T_TYPE __UQUAD_TYPE
+#define __UID_T_TYPE __U32_TYPE
+#define __GID_T_TYPE __U32_TYPE
+#define __INO_T_TYPE __ULONGWORD_TYPE
+#define __INO64_T_TYPE __UQUAD_TYPE
+#define __MODE_T_TYPE __U32_TYPE
+#define __NLINK_T_TYPE __UWORD_TYPE
+#define __OFF_T_TYPE __SLONGWORD_TYPE
+#define __OFF64_T_TYPE __SQUAD_TYPE
+#define __PID_T_TYPE __S32_TYPE
+#define __RLIM_T_TYPE __ULONGWORD_TYPE
+#define __RLIM64_T_TYPE __UQUAD_TYPE
+#define __BLKCNT_T_TYPE __SLONGWORD_TYPE
+#define __BLKCNT64_T_TYPE __SQUAD_TYPE
+#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
+#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
+#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
+#define __FSFILCNT64_T_TYPE __UQUAD_TYPE
+#define __ID_T_TYPE __U32_TYPE
+#define __CLOCK_T_TYPE __SLONGWORD_TYPE
+#define __TIME_T_TYPE __SLONGWORD_TYPE
+#define __USECONDS_T_TYPE __U32_TYPE
+#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE
+#define __DADDR_T_TYPE __S32_TYPE
+#define __SWBLK_T_TYPE __SLONGWORD_TYPE
+#define __KEY_T_TYPE __S32_TYPE
+#define __CLOCKID_T_TYPE __S32_TYPE
+#define __TIMER_T_TYPE __S32_TYPE
+#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
+#define __FSID_T_TYPE struct { int __val[2]; }
+#if defined __GNUC__ && __GNUC__ <= 2
+/* Compatibility with g++ 2.95.x. */
+#define __SSIZE_T_TYPE __SWORD_TYPE
+#else
+/* size_t is unsigned long int on s390 -m31. */
+#define __SSIZE_T_TYPE __SLONGWORD_TYPE
+#endif
+
+/* Number of descriptors that can fit in an `fd_set'. */
+#define __FD_SETSIZE 1024
+
+
+#endif /* bits/typesizes.h */
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Entries b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Entries
new file mode 100644
index 000000000..96047de0b
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Entries
@@ -0,0 +1,4 @@
+/pt-initfini.c/1.3/Tue Nov 15 14:20:47 2005//
+/sysdep-cancel.h/1.5/Tue Nov 15 14:20:47 2005//
+/vfork.S/1.4/Tue Nov 15 14:20:47 2005//
+D
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Repository b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Repository
new file mode 100644
index 000000000..8294e87aa
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Repository
@@ -0,0 +1 @@
+ports/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Root b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Root
new file mode 100644
index 000000000..ca45c5d4d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/CVS/Root
@@ -0,0 +1 @@
+:pserver:anoncvs@sources.redhat.com:/cvs/glibc
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
new file mode 100644
index 000000000..b7d901c4c
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
@@ -0,0 +1,154 @@
+/* Special .init and .fini section support for S/390.
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+
+ * crti.s puts a function prologue at the beginning of the
+ .init and .fini sections and defines global symbols for
+ those addresses, so they can be called as functions.
+
+ * crtn.s puts the corresponding function epilogues
+ in the .init and .fini sections. */
+
+__asm__ ("\
+\n\
+#include \"defs.h\"\n\
+\n\
+/*@HEADER_ENDS*/\n\
+\n\
+/*@TESTS_BEGIN*/\n\
+\n\
+/*@TESTS_END*/\n\
+\n\
+/*@_init_PROLOG_BEGINS*/\n\
+\n\
+ .section .init\n\
+#NO_APP\n\
+ .align 4\n\
+.globl _init\n\
+ .type _init,@function\n\
+_init:\n\
+# leaf function 0\n\
+# automatics 0\n\
+# outgoing args 0\n\
+# need frame pointer 0\n\
+# call alloca 0\n\
+# has varargs 0\n\
+# incoming args (stack) 0\n\
+# function length 36\n\
+ STM 6,15,24(15)\n\
+ BRAS 13,.LTN1_0\n\
+.LT1_0:\n\
+.LC13:\n\
+ .long __pthread_initialize_minimal@PLT-.LT1_0\n\
+.LC14:\n\
+ .long __gmon_start__@GOT\n\
+.LC15:\n\
+ .long _GLOBAL_OFFSET_TABLE_-.LT1_0\n\
+.LTN1_0:\n\
+ LR 1,15\n\
+ AHI 15,-96\n\
+ ST 1,0(15)\n\
+ L 12,.LC15-.LT1_0(13)\n\
+ AR 12,13\n\
+ L 1,.LC13-.LT1_0(13)\n\
+ LA 1,0(1,13)\n\
+ BASR 14,1\n\
+ L 1,.LC14-.LT1_0(13)\n\
+ L 1,0(1,12)\n\
+ LTR 1,1\n\
+ JE .L22\n\
+ BASR 14,1\n\
+.L22:\n\
+#APP\n\
+ .align 4,0x07\n\
+ END_INIT\n\
+\n\
+/*@_init_PROLOG_ENDS*/\n\
+\n\
+/*@_init_EPILOG_BEGINS*/\n\
+ .align 4\n\
+ .section .init\n\
+#NO_APP\n\
+ .align 4\n\
+ L 4,152(15)\n\
+ LM 6,15,120(15)\n\
+ BR 4\n\
+#APP\n\
+ END_INIT\n\
+\n\
+/*@_init_EPILOG_ENDS*/\n\
+\n\
+/*@_fini_PROLOG_BEGINS*/\n\
+ .section .fini\n\
+#NO_APP\n\
+ .align 4\n\
+.globl _fini\n\
+ .type _fini,@function\n\
+_fini:\n\
+# leaf function 0\n\
+# automatics 0\n\
+# outgoing args 0\n\
+# need frame pointer 0\n\
+# call alloca 0\n\
+# has varargs 0\n\
+# incoming args (stack) 0\n\
+# function length 30\n\
+ STM 6,15,24(15)\n\
+ BRAS 13,.LTN2_0\n\
+.LT2_0:\n\
+.LC17:\n\
+ .long _GLOBAL_OFFSET_TABLE_-.LT2_0\n\
+.LTN2_0:\n\
+ LR 1,15\n\
+ AHI 15,-96\n\
+ ST 1,0(15)\n\
+ L 12,.LC17-.LT2_0(13)\n\
+ AR 12,13\n\
+#APP\n\
+ .align 4,0x07\n\
+ END_FINI\n\
+\n\
+/*@_fini_PROLOG_ENDS*/\n\
+\n\
+/*@_fini_EPILOG_BEGINS*/\n\
+ .align 4\n\
+ .section .fini\n\
+#NO_APP\n\
+ .align 4\n\
+ L 4,152(15)\n\
+ LM 6,15,120(15)\n\
+ BR 4\n\
+#APP\n\
+ END_FINI\n\
+\n\
+/*@_fini_EPILOG_ENDS*/\n\
+\n\
+/*@TRAILER_BEGINS*/\
+");
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
new file mode 100644
index 000000000..06f7aed7d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
@@ -0,0 +1,137 @@
+/* Copyright (C) 2003, 2004 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.h>
+#include <tls.h>
+#ifndef __ASSEMBLER__
+# include <linuxthreads/internals.h>
+#endif
+
+#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+
+# if !defined NOT_IN_libc || defined IS_IN_libpthread
+
+# define PSEUDO_CANCEL(name, syscall_name, args) \
+L(pseudo_cancel): \
+ STM_##args \
+ stm %r12,%r15,48(%r15); \
+ lr %r14,%r15; \
+ ahi %r15,-96; \
+ st %r14,0(%r15); \
+ basr %r13,0; \
+0: l %r1,1f-0b(%r13); \
+ bas %r14,0(%r1,%r13); \
+ lr %r0,%r2; \
+ LM_##args \
+ DO_CALL(syscall_name, args); \
+ l %r1,2f-0b(%r13); \
+ lr %r12,%r2; \
+ lr %r2,%r0; \
+ bas %r14,0(%r1,%r13); \
+ lr %r2,%r12; \
+ lm %r12,%r15,48+96(%r15); \
+ j L(pseudo_check); \
+1: .long CENABLE-0b; \
+2: .long CDISABLE-0b;
+
+# else /* !libc.so && !libpthread.so */
+
+# define PSEUDO_CANCEL(name, syscall_name, args) \
+L(pseudo_cancel): \
+ STM_##args \
+ stm %r11,%r15,44(%r15); \
+ lr %r14,%r15; \
+ ahi %r15,-96; \
+ st %r14,0(%r15); \
+ basr %r13,0; \
+0: l %r12,3f-0b(%r13); \
+ l %r1,1f-0b(%r13); \
+ la %r12,0(%r12,%r13); \
+ bas %r14,0(%r1,%r13); \
+ lr %r0,%r2; \
+ LM_##args \
+ DO_CALL(syscall_name, args); \
+ l %r1,2f-0b(%r13); \
+ lr %r11,%r2; \
+ lr %r2,%r0; \
+ bas %r14,0(%r1,%r13); \
+ lr %r2,%r11; \
+ lm %r11,%r15,44+96(%r15); \
+ j L(pseudo_check); \
+1: .long CENABLE@PLT-0b; \
+2: .long CDISABLE@PLT-0b; \
+3: .long _GLOBAL_OFFSET_TABLE_-0b;
+
+# endif
+
+# undef PSEUDO
+# define PSEUDO(name, syscall_name, args) \
+ .text; \
+PSEUDO_CANCEL(name, syscall_name, args) \
+ENTRY(name) \
+ SINGLE_THREAD_P(%r1) \
+ jne L(pseudo_cancel); \
+ DO_CALL(syscall_name, args); \
+L(pseudo_check): \
+ lhi %r4,-4095; \
+ clr %r2,%r4; \
+ jnl SYSCALL_ERROR_LABEL; \
+L(pseudo_end):
+
+# ifdef IS_IN_libpthread
+# define CENABLE __pthread_enable_asynccancel
+# define CDISABLE __pthread_disable_asynccancel
+# elif !defined NOT_IN_libc
+# define CENABLE __libc_enable_asynccancel
+# define CDISABLE __libc_disable_asynccancel
+# else
+# define CENABLE __librt_enable_asynccancel
+# define CDISABLE __librt_disable_asynccancel
+# endif
+
+#define STM_0 /* Nothing */
+#define STM_1 st %r2,8(%r15);
+#define STM_2 stm %r2,%r3,8(%r15);
+#define STM_3 stm %r2,%r4,8(%r15);
+#define STM_4 stm %r2,%r5,8(%r15);
+#define STM_5 stm %r2,%r5,8(%r15);
+
+#define LM_0 /* Nothing */
+#define LM_1 l %r2,8+96(%r15);
+#define LM_2 lm %r2,%r3,8+96(%r15);
+#define LM_3 lm %r2,%r4,8+96(%r15);
+#define LM_4 lm %r2,%r5,8+96(%r15);
+#define LM_5 lm %r2,%r5,8+96(%r15);
+
+# ifndef __ASSEMBLER__
+# define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ p_header.data.multiple_threads) == 0, 1)
+# else
+# define SINGLE_THREAD_P(reg) \
+ ear reg,%a0; \
+ icm reg,15,MULTIPLE_THREADS_OFFSET(reg);
+# 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/s390/s390-32/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
new file mode 100644
index 000000000..6dfeca86d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
@@ -0,0 +1,69 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ 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>
+#define _ERRNO_H 1
+#include <bits/errno.h>
+
+/* Clone the calling process, but without copying the whole address space.
+ The calling process is suspended until the new process exits or is
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+
+ENTRY (__vfork)
+ basr %r1,0
+0:
+#ifdef SHARED
+ al %r1,4f-0b(%r1)
+ l %r1,0(%r1)
+ ltr %r1,%r1
+#else
+ icm %r1,15,4f-0b(%r1)
+#endif
+ jne 1f
+
+ /* Do vfork system call. */
+ svc SYS_ify (vfork)
+
+ /* Check for error. */
+ lhi %r4,-4095
+ clr %r2,%r4
+ jnl SYSCALL_ERROR_LABEL
+
+ /* Normal return. */
+ br %r14
+1:
+ basr %r1,0
+2:
+ al %r1,3f-2b(%r1)
+ br %r1
+3:
+ .long HIDDEN_JUMPTARGET(__fork)-2b
+4:
+#ifdef SHARED
+ .long __libc_pthread_functions-0b
+#else
+ .weak pthread_create
+ .long pthread_create
+#endif
+PSEUDO_END(__vfork)
+
+libc_hidden_def (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Entries b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Entries
new file mode 100644
index 000000000..c969fbcdb
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Entries
@@ -0,0 +1,5 @@
+/pt-initfini.c/1.3/Tue Nov 15 14:20:47 2005//
+/pt-sigsuspend.c/1.1/Tue Nov 15 14:20:47 2005//
+/sysdep-cancel.h/1.6/Tue Nov 15 14:20:47 2005//
+/vfork.S/1.4/Tue Nov 15 14:20:47 2005//
+D
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Repository b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Repository
new file mode 100644
index 000000000..ba9b38d45
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Repository
@@ -0,0 +1 @@
+ports/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Root b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Root
new file mode 100644
index 000000000..ca45c5d4d
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/CVS/Root
@@ -0,0 +1 @@
+:pserver:anoncvs@sources.redhat.com:/cvs/glibc
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
new file mode 100644
index 000000000..540443e6a
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
@@ -0,0 +1,137 @@
+/* Special .init and .fini section support for 64 bit S/390.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+ Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+ This file is part of the GNU C Library.
+
+ 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ 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; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* This file is compiled into assembly code which is then munged by a sed
+ script into two files: crti.s and crtn.s.
+
+ * crti.s puts a function prologue at the beginning of the
+ .init and .fini sections and defines global symbols for
+ those addresses, so they can be called as functions.
+
+ * crtn.s puts the corresponding function epilogues
+ in the .init and .fini sections. */
+
+__asm__ ("\
+\n\
+#include \"defs.h\"\n\
+\n\
+/*@HEADER_ENDS*/\n\
+\n\
+/*@TESTS_BEGIN*/\n\
+\n\
+/*@TESTS_END*/\n\
+\n\
+/*@_init_PROLOG_BEGINS*/\n\
+\n\
+ .section .init\n\
+#NO_APP\n\
+ .align 4\n\
+.globl _init\n\
+ .type _init,@function\n\
+_init:\n\
+# leaf function 0\n\
+# automatics 0\n\
+# outgoing args 0\n\
+# need frame pointer 0\n\
+# call alloca 0\n\
+# has varargs 0\n\
+# incoming args (stack) 0\n\
+# function length 36\n\
+ STMG 6,15,48(15)\n\
+ LGR 1,15\n\
+ AGHI 15,-160\n\
+ STG 1,0(15)\n\
+ LARL 12,_GLOBAL_OFFSET_TABLE_\n\
+ BRASL 14,__pthread_initialize_minimal@PLT\n\
+ LARL 1,__gmon_start__@GOTENT\n\
+ LG 1,0(1)\n\
+ LTGR 1,1\n\
+ JE .L22\n\
+ BASR 14,1\n\
+.L22:\n\
+#APP\n\
+ .align 4,0x07\n\
+ END_INIT\n\
+\n\
+/*@_init_PROLOG_ENDS*/\n\
+\n\
+/*@_init_EPILOG_BEGINS*/\n\
+ .align 4\n\
+ .section .init\n\
+#NO_APP\n\
+ .align 4\n\
+ LG 4,272(15)\n\
+ LMG 6,15,208(15)\n\
+ BR 4\n\
+#APP\n\
+ END_INIT\n\
+\n\
+/*@_init_EPILOG_ENDS*/\n\
+\n\
+/*@_fini_PROLOG_BEGINS*/\n\
+ .section .fini\n\
+#NO_APP\n\
+ .align 4\n\
+.globl _fini\n\
+ .type _fini,@function\n\
+_fini:\n\
+# leaf function 0\n\
+# automatics 0\n\
+# outgoing args 0\n\
+# need frame pointer 0\n\
+# call alloca 0\n\
+# has varargs 0\n\
+# incoming args (stack) 0\n\
+# function length 30\n\
+ STMG 6,15,48(15)\n\
+ LGR 1,15\n\
+ AGHI 15,-160\n\
+ STG 1,0(15)\n\
+ LARL 12,_GLOBAL_OFFSET_TABLE_\n\
+#APP\n\
+ .align 4,0x07\n\
+ END_FINI\n\
+\n\
+/*@_fini_PROLOG_ENDS*/\n\
+\n\
+/*@_fini_EPILOG_BEGINS*/\n\
+ .align 4\n\
+ .section .fini\n\
+#NO_APP\n\
+ .align 4\n\
+ LG 4,272(15)\n\
+ LMG 6,15,208(15)\n\
+ BR 4\n\
+#APP\n\
+ END_FINI\n\
+\n\
+/*@_fini_EPILOG_ENDS*/\n\
+\n\
+/*@TRAILER_BEGINS*/\n\
+ ");
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
new file mode 100644
index 000000000..d57283ad2
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
@@ -0,0 +1 @@
+#include "../../ia64/pt-sigsuspend.c"
diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
new file mode 100644
index 000000000..f71ef3f68
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
@@ -0,0 +1,116 @@
+/* Copyright (C) 2003, 2004 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.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; \
+L(pseudo_cancel): \
+ STM_##args \
+ stmg %r13,%r15,104(%r15); \
+ lgr %r14,%r15; \
+ aghi %r15,-160; \
+ stg %r14,0(%r15); \
+ brasl %r14,CENABLE; \
+ lgr %r0,%r2; \
+ LM_##args \
+ DO_CALL(syscall_name, args); \
+ lgr %r13,%r2; \
+ lgr %r2,%r0; \
+ brasl %r14,CDISABLE; \
+ lgr %r2,%r13; \
+ lmg %r13,%r15,104+160(%r15); \
+ j L(pseudo_check); \
+ENTRY(name) \
+ SINGLE_THREAD_P \
+ jne L(pseudo_cancel); \
+ DO_CALL(syscall_name, args); \
+L(pseudo_check): \
+ lghi %r4,-4095; \
+ clgr %r2,%r4; \
+ jgnl SYSCALL_ERROR_LABEL; \
+L(pseudo_end):
+
+# ifdef IS_IN_libpthread
+# define CENABLE __pthread_enable_asynccancel
+# define CDISABLE __pthread_disable_asynccancel
+# define __local_multiple_threads __pthread_multiple_threads
+# elif !defined NOT_IN_libc
+# define CENABLE __libc_enable_asynccancel
+# define CDISABLE __libc_disable_asynccancel
+# define __local_multiple_threads __libc_multiple_threads
+# else
+# define CENABLE __librt_enable_asynccancel@PLT
+# define CDISABLE __librt_disable_asynccancel@PLT
+# endif
+
+#define STM_0 /* Nothing */
+#define STM_1 stg %r2,16(%r15);
+#define STM_2 stmg %r2,%r3,16(%r15);
+#define STM_3 stmg %r2,%r4,16(%r15);
+#define STM_4 stmg %r2,%r5,16(%r15);
+#define STM_5 stmg %r2,%r5,16(%r15);
+
+#define LM_0 /* Nothing */
+#define LM_1 lg %r2,16+160(%r15);
+#define LM_2 lmg %r2,%r3,16+160(%r15);
+#define LM_3 lmg %r2,%r4,16+160(%r15);
+#define LM_4 lmg %r2,%r5,16+160(%r15);
+#define LM_5 lmg %r2,%r5,16+160(%r15);
+
+# if !defined NOT_IN_libc || defined IS_IN_libpthread
+# ifndef __ASSEMBLER__
+extern int __local_multiple_threads attribute_hidden;
+# define SINGLE_THREAD_P \
+ __builtin_expect (__local_multiple_threads == 0, 1)
+# else
+# define SINGLE_THREAD_P \
+ larl %r1,__local_multiple_threads; \
+ icm %r0,15,0(%r1);
+# endif
+
+# else
+
+# ifndef __ASSEMBLER__
+# define SINGLE_THREAD_P \
+ __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+ p_header.data.multiple_threads) == 0, 1)
+# else
+# define SINGLE_THREAD_P \
+ ear %r1,%a0; \
+ sllg %r1,%r1,32; \
+ ear %r1,%a1; \
+ icm %r1,15,MULTIPLE_THREADS_OFFSET(%r1);
+# endif
+
+# 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/s390/s390-64/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
new file mode 100644
index 000000000..199f0017f
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
@@ -0,0 +1,54 @@
+/* Copyright (C) 2003 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+ 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>
+#define _ERRNO_H 1
+#include <bits/errno.h>
+
+/* Clone the calling process, but without copying the whole address space.
+ The calling process is suspended until the new process exits or is
+ replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
+ and the process ID of the new process to the old process. */
+
+ENTRY (__vfork)
+#ifdef SHARED
+ larl %r1,__libc_pthread_functions
+ lg %r1,0(%r1)
+#else
+ .weak pthread_create
+ larl %r1,pthread_create
+#endif
+ ltgr %r1,%r1
+ jgne HIDDEN_JUMPTARGET(__fork)
+
+ /* Do vfork system call. */
+ svc SYS_ify (vfork)
+
+ /* Check for error. */
+ lghi %r4,-4095
+ clgr %r2,%r4
+ jgnl SYSCALL_ERROR_LABEL
+
+ /* Normal return. */
+ br %r14
+PSEUDO_END(__vfork)
+
+libc_hidden_def (__vfork)
+
+weak_alias (__vfork, vfork)