|
@@ -0,0 +1,1347 @@
|
|
|
|
+From d72e888957d32984c56e19e43a3c3b41263c7bb4 Mon Sep 17 00:00:00 2001
|
|
|
|
+From: Waldemar Brodkorb <wbx@openadk.org>
|
|
|
|
+Date: Sat, 6 Sep 2014 14:45:42 +0200
|
|
|
|
+Subject: [PATCH 3/6] linuxthreads: remove unused s390 code
|
|
|
|
+
|
|
|
|
+Cleanup linuxthreads by removing unused s390 code.
|
|
|
|
+
|
|
|
|
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
|
|
|
|
+---
|
|
|
|
+ libc/stdlib/system.c | 3 -
|
|
|
|
+ libpthread/linuxthreads/sysdeps/s390/pspinlock.c | 90 ------------
|
|
|
|
+ .../linuxthreads/sysdeps/s390/s390-32/pt-machine.h | 119 ----------------
|
|
|
|
+ .../linuxthreads/sysdeps/s390/s390-64/pt-machine.h | 124 -----------------
|
|
|
|
+ .../linuxthreads/sysdeps/s390/tcb-offsets.sym | 4 -
|
|
|
|
+ libpthread/linuxthreads/sysdeps/s390/tls.h | 144 -------------------
|
|
|
|
+ .../sysdeps/unix/sysv/linux/s390/bits/typesizes.h | 71 ----------
|
|
|
|
+ .../unix/sysv/linux/s390/s390-32/pt-initfini.c | 153 ---------------------
|
|
|
|
+ .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 136 ------------------
|
|
|
|
+ .../sysdeps/unix/sysv/linux/s390/s390-32/vfork.S | 68 ---------
|
|
|
|
+ .../unix/sysv/linux/s390/s390-64/pt-initfini.c | 136 ------------------
|
|
|
|
+ .../unix/sysv/linux/s390/s390-64/pt-sigsuspend.c | 1 -
|
|
|
|
+ .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 115 ----------------
|
|
|
|
+ .../sysdeps/unix/sysv/linux/s390/s390-64/vfork.S | 53 -------
|
|
|
|
+ 14 files changed, 1217 deletions(-)
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/pspinlock.c
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/tls.h
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
|
|
|
|
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
|
|
|
|
+
|
|
|
|
+diff --git a/libc/stdlib/system.c b/libc/stdlib/system.c
|
|
|
|
+index 8c5d25d..05b6738 100644
|
|
|
|
+--- a/libc/stdlib/system.c
|
|
|
|
++++ b/libc/stdlib/system.c
|
|
|
|
+@@ -91,9 +91,6 @@ libc_hidden_proto(waitpid)
|
|
|
|
+ #elif defined __sparc__
|
|
|
|
+ # define FORK() \
|
|
|
|
+ INLINE_CLONE_SYSCALL (CLONE_PARENT_SETTID | SIGCHLD, 0, &pid, NULL, NULL)
|
|
|
|
+-#elif defined __s390__
|
|
|
|
+-# define FORK() \
|
|
|
|
+- INLINE_SYSCALL (clone, 3, 0, CLONE_PARENT_SETTID | SIGCHLD, &pid)
|
|
|
|
+ #else
|
|
|
|
+ # define FORK() \
|
|
|
|
+ INLINE_SYSCALL (clone, 3, CLONE_PARENT_SETTID | SIGCHLD, 0, &pid)
|
|
|
|
+diff --git a/libpthread/linuxthreads/sysdeps/s390/pspinlock.c b/libpthread/linuxthreads/sysdeps/s390/pspinlock.c
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index be75786..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/s390/pspinlock.c
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,90 +0,0 @@
|
|
|
|
+-/* POSIX spinlock implementation. S/390 version.
|
|
|
|
+- Copyright (C) 2000, 2004 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.
|
|
|
|
+-
|
|
|
|
+- 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, see <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#include <errno.h>
|
|
|
|
+-#include <pthread.h>
|
|
|
|
+-#include "internals.h"
|
|
|
|
+-
|
|
|
|
+-/* This implementation is similar to the one used in the Linux kernel.
|
|
|
|
+- But the kernel is byte instructions for the memory access. This is
|
|
|
|
+- faster but unusable here. The problem is that only 128
|
|
|
|
+- threads/processes could use the spinlock at the same time. If (by
|
|
|
|
+- a design error in the program) a thread/process would hold the
|
|
|
|
+- spinlock for a time long enough to accumulate 128 waiting
|
|
|
|
+- processes, the next one will find a positive value in the spinlock
|
|
|
|
+- and assume it is unlocked. We cannot accept that. */
|
|
|
|
+-
|
|
|
|
+-int
|
|
|
|
+-__pthread_spin_lock (pthread_spinlock_t *lock)
|
|
|
|
+-{
|
|
|
|
+- __asm__ __volatile__(" basr 1,0\n"
|
|
|
|
+- "0: slr 0,0\n"
|
|
|
|
+- " cs 0,1,%1\n"
|
|
|
|
+- " jl 0b\n"
|
|
|
|
+- : "=m" (*lock)
|
|
|
|
+- : "m" (*lock) : "0", "1", "cc" );
|
|
|
|
+- return 0;
|
|
|
|
+-}
|
|
|
|
+-weak_alias (__pthread_spin_lock, pthread_spin_lock)
|
|
|
|
+-
|
|
|
|
+-int
|
|
|
|
+-__pthread_spin_trylock (pthread_spinlock_t *lock)
|
|
|
|
+-{
|
|
|
|
+- int oldval;
|
|
|
|
+-
|
|
|
|
+- __asm__ __volatile__(" slr %1,%1\n"
|
|
|
|
+- " basr 1,0\n"
|
|
|
|
+- "0: cs %1,1,%0"
|
|
|
|
+- : "=m" (*lock), "=&d" (oldval)
|
|
|
|
+- : "m" (*lock) : "1", "cc" );
|
|
|
|
+- return oldval == 0 ? 0 : EBUSY;
|
|
|
|
+-}
|
|
|
|
+-weak_alias (__pthread_spin_trylock, pthread_spin_trylock)
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-int
|
|
|
|
+-__pthread_spin_unlock (pthread_spinlock_t *lock)
|
|
|
|
+-{
|
|
|
|
+- __asm__ __volatile__(" xc 0(4,%0),0(%0)\n"
|
|
|
|
+- " bcr 15,0"
|
|
|
|
+- : : "a" (lock) : "memory" );
|
|
|
|
+- return 0;
|
|
|
|
+-}
|
|
|
|
+-weak_alias (__pthread_spin_unlock, pthread_spin_unlock)
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-int
|
|
|
|
+-__pthread_spin_init (pthread_spinlock_t *lock, int pshared)
|
|
|
|
+-{
|
|
|
|
+- /* We can ignore the `pshared' parameter. Since we are busy-waiting
|
|
|
|
+- all processes which can access the memory location `lock' points
|
|
|
|
+- to can use the spinlock. */
|
|
|
|
+- *lock = 0;
|
|
|
|
+- return 0;
|
|
|
|
+-}
|
|
|
|
+-weak_alias (__pthread_spin_init, pthread_spin_init)
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-int
|
|
|
|
+-__pthread_spin_destroy (pthread_spinlock_t *lock)
|
|
|
|
+-{
|
|
|
|
+- /* Nothing to do. */
|
|
|
|
+- return 0;
|
|
|
|
+-}
|
|
|
|
+-weak_alias (__pthread_spin_destroy, pthread_spin_destroy)
|
|
|
|
+diff --git a/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h b/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 51505a9..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,119 +0,0 @@
|
|
|
|
+-/* Machine-dependent pthreads configuration and inline functions.
|
|
|
|
+- S390 version.
|
|
|
|
+- Copyright (C) 1999, 2000, 2001, 2002, 2003 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.
|
|
|
|
+-
|
|
|
|
+- 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, see <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#ifndef _PT_MACHINE_H
|
|
|
|
+-#define _PT_MACHINE_H 1
|
|
|
|
+-
|
|
|
|
+-#ifndef PT_EI
|
|
|
|
+-# define PT_EI __extern_always_inline
|
|
|
|
+-#endif
|
|
|
|
+-
|
|
|
|
+-extern long int testandset (int *spinlock);
|
|
|
|
+-extern int __compare_and_swap (long int *p, long int oldval, long int newval);
|
|
|
|
+-
|
|
|
|
+-/* For multiprocessor systems, we want to ensure all memory accesses
|
|
|
|
+- are completed before we reset a lock. On other systems, we still
|
|
|
|
+- need to make sure that the compiler has flushed everything to memory. */
|
|
|
|
+-#define MEMORY_BARRIER() __asm__ __volatile__ ("bcr 15,0" : : : "memory")
|
|
|
|
+-
|
|
|
|
+-/* Spinlock implementation; required. */
|
|
|
|
+-PT_EI long int
|
|
|
|
+-testandset (int *spinlock)
|
|
|
|
+-{
|
|
|
|
+- int ret;
|
|
|
|
+-
|
|
|
|
+- __asm__ __volatile__(
|
|
|
|
+- " la 1,%1\n"
|
|
|
|
+- " lhi 0,1\n"
|
|
|
|
+- " l %0,%1\n"
|
|
|
|
+- "0: cs %0,0,0(1)\n"
|
|
|
|
+- " jl 0b"
|
|
|
|
+- : "=&d" (ret), "+m" (*spinlock)
|
|
|
|
+- : : "0", "1", "cc");
|
|
|
|
+-
|
|
|
|
+- return ret;
|
|
|
|
+-}
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-/* Get some notion of the current stack. Need not be exactly the top
|
|
|
|
+- of the stack, just something somewhere in the current frame. */
|
|
|
|
+-#define CURRENT_STACK_FRAME stack_pointer
|
|
|
|
+-register char * stack_pointer __asm__ ("15");
|
|
|
|
+-
|
|
|
|
+-#ifdef __UCLIBC_HAS_TLS__
|
|
|
|
+-/* Return the thread descriptor for the current thread. */
|
|
|
|
+-# define THREAD_SELF ((pthread_descr) __builtin_thread_pointer ())
|
|
|
|
+-
|
|
|
|
+-/* Initialize the thread-unique value. */
|
|
|
|
+-#define INIT_THREAD_SELF(descr, nr) __builtin_set_thread_pointer (descr)
|
|
|
|
+-#else
|
|
|
|
+-/* Return the thread descriptor for the current thread.
|
|
|
|
+- S/390 registers uses access register 0 as "thread register". */
|
|
|
|
+-#define THREAD_SELF ({ \
|
|
|
|
+- register pthread_descr __self; \
|
|
|
|
+- __asm__ ("ear %0,%%a0" : "=d" (__self) ); \
|
|
|
|
+- __self; \
|
|
|
|
+-})
|
|
|
|
+-
|
|
|
|
+-/* Initialize the thread-unique value. */
|
|
|
|
+-#define INIT_THREAD_SELF(descr, nr) ({ \
|
|
|
|
+- __asm__ ("sar %%a0,%0" : : "d" (descr) ); \
|
|
|
|
+-})
|
|
|
|
+-#endif
|
|
|
|
+-
|
|
|
|
+-/* Access to data in the thread descriptor is easy. */
|
|
|
|
+-#define THREAD_GETMEM(descr, member) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member)
|
|
|
|
+-#define THREAD_GETMEM_NC(descr, member) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member)
|
|
|
|
+-#define THREAD_SETMEM(descr, member, value) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member = (value))
|
|
|
|
+-#define THREAD_SETMEM_NC(descr, member, value) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member = (value))
|
|
|
|
+-
|
|
|
|
+-/* We want the OS to assign stack addresses. */
|
|
|
|
+-#define FLOATING_STACKS 1
|
|
|
|
+-
|
|
|
|
+-/* Maximum size of the stack if the rlimit is unlimited. */
|
|
|
|
+-#define ARCH_STACK_MAX_SIZE 8*1024*1024
|
|
|
|
+-
|
|
|
|
+-/* Compare-and-swap for semaphores. */
|
|
|
|
+-
|
|
|
|
+-#define HAS_COMPARE_AND_SWAP
|
|
|
|
+-
|
|
|
|
+-PT_EI int
|
|
|
|
+-__compare_and_swap(long int *p, long int oldval, long int newval)
|
|
|
|
+-{
|
|
|
|
+- int retval;
|
|
|
|
+-
|
|
|
|
+- __asm__ __volatile__(
|
|
|
|
+- " la 1,%1\n"
|
|
|
|
+- " lr 0,%2\n"
|
|
|
|
+- " cs 0,%3,0(1)\n"
|
|
|
|
+- " ipm %0\n"
|
|
|
|
+- " srl %0,28\n"
|
|
|
|
+- "0:"
|
|
|
|
+- : "=&d" (retval), "+m" (*p)
|
|
|
|
+- : "d" (oldval) , "d" (newval)
|
|
|
|
+- : "cc", "0", "1" );
|
|
|
|
+- return retval == 0;
|
|
|
|
+-}
|
|
|
|
+-
|
|
|
|
+-#endif /* pt-machine.h */
|
|
|
|
+diff --git a/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h b/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 4bff85a..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,124 +0,0 @@
|
|
|
|
+-/* Machine-dependent pthreads configuration and inline functions.
|
|
|
|
+- 64 bit S/390 version.
|
|
|
|
+- Copyright (C) 2001, 2002, 2003 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.
|
|
|
|
+-
|
|
|
|
+- 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, see <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#ifndef _PT_MACHINE_H
|
|
|
|
+-#define _PT_MACHINE_H 1
|
|
|
|
+-
|
|
|
|
+-#ifndef PT_EI
|
|
|
|
+-# define PT_EI __extern_always_inline
|
|
|
|
+-#endif
|
|
|
|
+-
|
|
|
|
+-extern long int testandset (int *spinlock);
|
|
|
|
+-extern int __compare_and_swap (long int *p, long int oldval, long int newval);
|
|
|
|
+-
|
|
|
|
+-/* For multiprocessor systems, we want to ensure all memory accesses
|
|
|
|
+- are completed before we reset a lock. On other systems, we still
|
|
|
|
+- need to make sure that the compiler has flushed everything to memory. */
|
|
|
|
+-#define MEMORY_BARRIER() __asm__ __volatile__ ("bcr 15,0" : : : "memory")
|
|
|
|
+-
|
|
|
|
+-/* Spinlock implementation; required. */
|
|
|
|
+-PT_EI long int
|
|
|
|
+-testandset (int *spinlock)
|
|
|
|
+-{
|
|
|
|
+- int ret;
|
|
|
|
+-
|
|
|
|
+- __asm__ __volatile__(
|
|
|
|
+- " la 1,%1\n"
|
|
|
|
+- " lhi 0,1\n"
|
|
|
|
+- " l %0,%1\n"
|
|
|
|
+- "0: cs %0,0,0(1)\n"
|
|
|
|
+- " jl 0b"
|
|
|
|
+- : "=&d" (ret), "+m" (*spinlock)
|
|
|
|
+- : : "0", "1", "cc");
|
|
|
|
+-
|
|
|
|
+- return ret;
|
|
|
|
+-}
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-/* Get some notion of the current stack. Need not be exactly the top
|
|
|
|
+- of the stack, just something somewhere in the current frame. */
|
|
|
|
+-#define CURRENT_STACK_FRAME stack_pointer
|
|
|
|
+-register char * stack_pointer __asm__ ("15");
|
|
|
|
+-
|
|
|
|
+-#ifdef __UCLIBC_HAS_TLS__
|
|
|
|
+-/* Return the thread descriptor for the current thread. */
|
|
|
|
+-# define THREAD_SELF ((pthread_descr) __builtin_thread_pointer ())
|
|
|
|
+-
|
|
|
|
+-/* Initialize the thread-unique value. */
|
|
|
|
+-#define INIT_THREAD_SELF(descr, nr) __builtin_set_thread_pointer (descr)
|
|
|
|
+-#else
|
|
|
|
+-/* Return the thread descriptor for the current thread.
|
|
|
|
+- 64 bit S/390 uses access register 0 and 1 as "thread register". */
|
|
|
|
+-#define THREAD_SELF ({ \
|
|
|
|
+- register pthread_descr __self; \
|
|
|
|
+- __asm__ (" ear %0,%%a0\n" \
|
|
|
|
+- " sllg %0,%0,32\n" \
|
|
|
|
+- " ear %0,%%a1\n" \
|
|
|
|
+- : "=d" (__self) ); \
|
|
|
|
+- __self; \
|
|
|
|
+-})
|
|
|
|
+-
|
|
|
|
+-/* Initialize the thread-unique value. */
|
|
|
|
+-#define INIT_THREAD_SELF(descr, nr) ({ \
|
|
|
|
+- __asm__ (" sar %%a1,%0\n" \
|
|
|
|
+- " srlg 0,%0,32\n" \
|
|
|
|
+- " sar %%a0,0\n" \
|
|
|
|
+- : : "d" (descr) : "0" ); \
|
|
|
|
+-})
|
|
|
|
+-#endif
|
|
|
|
+-
|
|
|
|
+-/* Access to data in the thread descriptor is easy. */
|
|
|
|
+-#define THREAD_GETMEM(descr, member) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member)
|
|
|
|
+-#define THREAD_GETMEM_NC(descr, member) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member)
|
|
|
|
+-#define THREAD_SETMEM(descr, member, value) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member = (value))
|
|
|
|
+-#define THREAD_SETMEM_NC(descr, member, value) \
|
|
|
|
+- ((void) sizeof (descr), THREAD_SELF->member = (value))
|
|
|
|
+-
|
|
|
|
+-/* We want the OS to assign stack addresses. */
|
|
|
|
+-#define FLOATING_STACKS 1
|
|
|
|
+-
|
|
|
|
+-/* Maximum size of the stack if the rlimit is unlimited. */
|
|
|
|
+-#define ARCH_STACK_MAX_SIZE 8*1024*1024
|
|
|
|
+-
|
|
|
|
+-/* Compare-and-swap for semaphores. */
|
|
|
|
+-
|
|
|
|
+-#define HAS_COMPARE_AND_SWAP
|
|
|
|
+-
|
|
|
|
+-PT_EI int
|
|
|
|
+-__compare_and_swap(long int *p, long int oldval, long int newval)
|
|
|
|
+-{
|
|
|
|
+- int retval;
|
|
|
|
+-
|
|
|
|
+- __asm__ __volatile__(
|
|
|
|
+- " lgr 0,%2\n"
|
|
|
|
+- " csg 0,%3,%1\n"
|
|
|
|
+- " ipm %0\n"
|
|
|
|
+- " srl %0,28\n"
|
|
|
|
+- "0:"
|
|
|
|
+- : "=&d" (retval), "+m" (*p)
|
|
|
|
+- : "d" (oldval) , "d" (newval)
|
|
|
|
+- : "cc", "0");
|
|
|
|
+- return retval == 0;
|
|
|
|
+-}
|
|
|
|
+-
|
|
|
|
+-#endif /* pt-machine.h */
|
|
|
|
+diff --git a/libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym b/libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index aee6be2..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,4 +0,0 @@
|
|
|
|
+-#include <sysdep.h>
|
|
|
|
+-#include <tls.h>
|
|
|
|
+-
|
|
|
|
+-MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads)
|
|
|
|
+diff --git a/libpthread/linuxthreads/sysdeps/s390/tls.h b/libpthread/linuxthreads/sysdeps/s390/tls.h
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index d987bdb..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/s390/tls.h
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,144 +0,0 @@
|
|
|
|
+-/* Definitions for thread-local data handling. linuxthreads/s390 version.
|
|
|
|
+- Copyright (C) 2002, 2003, 2005 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, see
|
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#ifndef _TLS_H
|
|
|
|
+-#define _TLS_H
|
|
|
|
+-
|
|
|
|
+-#ifndef __ASSEMBLER__
|
|
|
|
+-
|
|
|
|
+-# include <pt-machine.h>
|
|
|
|
+-# include <stdbool.h>
|
|
|
|
+-# include <stddef.h>
|
|
|
|
+-
|
|
|
|
+-/* Type for the dtv. */
|
|
|
|
+-typedef union dtv
|
|
|
|
+-{
|
|
|
|
+- size_t counter;
|
|
|
|
+- struct
|
|
|
|
+- {
|
|
|
|
+- void *val;
|
|
|
|
+- bool is_static;
|
|
|
|
+- } pointer;
|
|
|
|
+-} dtv_t;
|
|
|
|
+-
|
|
|
|
+-typedef struct
|
|
|
|
+-{
|
|
|
|
+- void *tcb; /* Pointer to the TCB. Not necessary the
|
|
|
|
+- thread descriptor used by libpthread. */
|
|
|
|
+- dtv_t *dtv;
|
|
|
|
+- void *self; /* Pointer to the thread descriptor. */
|
|
|
|
+- int multiple_threads;
|
|
|
|
+-} tcbhead_t;
|
|
|
|
+-
|
|
|
|
+-#else /* __ASSEMBLER__ */
|
|
|
|
+-# include <tcb-offsets.h>
|
|
|
|
+-#endif /* __ASSEMBLER__ */
|
|
|
|
+-
|
|
|
|
+-/* TLS is always supported if the tools support it. There are no
|
|
|
|
+- kernel dependencies. To avoid bothering with the TLS support code
|
|
|
|
+- at all, use configure --without-tls.
|
|
|
|
+-
|
|
|
|
+- We need USE_TLS to be consistently defined, for ldsodefs.h
|
|
|
|
+- conditionals. */
|
|
|
|
+-
|
|
|
|
+-#ifdef HAVE_TLS_SUPPORT
|
|
|
|
+-
|
|
|
|
+-/* Signal that TLS support is available. */
|
|
|
|
+-# define USE_TLS 1
|
|
|
|
+-
|
|
|
|
+-# ifndef __ASSEMBLER__
|
|
|
|
+-/* Get system call information. */
|
|
|
|
+-# include <sysdep.h>
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-/* Get the thread descriptor definition. */
|
|
|
|
+-# include <linuxthreads/descr.h>
|
|
|
|
+-
|
|
|
|
+-/* This is the size of the initial TCB. */
|
|
|
|
+-# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
|
|
|
|
+-
|
|
|
|
+-/* Alignment requirements for the initial TCB. */
|
|
|
|
+-# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
|
|
|
|
+-
|
|
|
|
+-/* This is the size of the TCB. */
|
|
|
|
+-# define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
|
|
|
|
+-
|
|
|
|
+-/* Alignment requirements for the TCB. */
|
|
|
|
+-# define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
|
|
|
|
+-
|
|
|
|
+-/* The TCB can have any size and the memory following the address the
|
|
|
|
+- thread pointer points to is unspecified. Allocate the TCB there. */
|
|
|
|
+-# define TLS_TCB_AT_TP 1
|
|
|
|
+-
|
|
|
|
+-
|
|
|
|
+-/* Install the dtv pointer. The pointer passed is to the element with
|
|
|
|
+- index -1 which contain the length. */
|
|
|
|
+-# define INSTALL_DTV(descr, dtvp) \
|
|
|
|
+- ((tcbhead_t *) (descr))->dtv = (dtvp) + 1
|
|
|
|
+-
|
|
|
|
+-/* Install new dtv for current thread. */
|
|
|
|
+-# define INSTALL_NEW_DTV(dtv) \
|
|
|
|
+- (((tcbhead_t *) __builtin_thread_pointer ())->dtv = (dtv))
|
|
|
|
+-
|
|
|
|
+-/* Return dtv of given thread descriptor. */
|
|
|
|
+-# define GET_DTV(descr) \
|
|
|
|
+- (((tcbhead_t *) (descr))->dtv)
|
|
|
|
+-
|
|
|
|
+-/* Code to initially initialize the thread pointer. This might need
|
|
|
|
+- special attention since 'errno' is not yet available and if the
|
|
|
|
+- operation can cause a failure 'errno' must not be touched.
|
|
|
|
+-
|
|
|
|
+- The value of this macro is null if successful, or an error string. */
|
|
|
|
+-# define TLS_INIT_TP(descr, secondcall) \
|
|
|
|
+- ({ \
|
|
|
|
+- void *_descr = (descr); \
|
|
|
|
+- tcbhead_t *head = _descr; \
|
|
|
|
+- \
|
|
|
|
+- head->tcb = _descr; \
|
|
|
|
+- /* For now the thread descriptor is at the same address. */ \
|
|
|
|
+- head->self = _descr; \
|
|
|
|
+- \
|
|
|
|
+- __builtin_set_thread_pointer (_descr); \
|
|
|
|
+- NULL; \
|
|
|
|
+- })
|
|
|
|
+-
|
|
|
|
+-/* Return the address of the dtv for the current thread. */
|
|
|
|
+-# define THREAD_DTV() \
|
|
|
|
+- (((tcbhead_t *) __builtin_thread_pointer ())->dtv)
|
|
|
|
+-
|
|
|
|
+-# endif /* __ASSEMBLER__ */
|
|
|
|
+-
|
|
|
|
+-#else /* HAVE_TLS_SUPPORT && (FLOATING_STACKS || !IS_IN_libpthread) */
|
|
|
|
+-
|
|
|
|
+-# ifndef __ASSEMBLER__
|
|
|
|
+-
|
|
|
|
+-/* Get the thread descriptor definition. */
|
|
|
|
+-# include <linuxthreads/descr.h>
|
|
|
|
+-
|
|
|
|
+-# define NONTLS_INIT_TP \
|
|
|
|
+- do { \
|
|
|
|
+- static const tcbhead_t nontls_init_tp \
|
|
|
|
+- = { .multiple_threads = 0 }; \
|
|
|
|
+- INIT_THREAD_SELF (&nontls_init_tp, 0); \
|
|
|
|
+- } while (0)
|
|
|
|
+-
|
|
|
|
+-# endif /* __ASSEMBLER__ */
|
|
|
|
+-
|
|
|
|
+-#endif /* HAVE_TLS_SUPPORT && (FLOATING_STACKS || !IS_IN_libpthread) */
|
|
|
|
+-
|
|
|
|
+-#endif /* tls.h */
|
|
|
|
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 6b58825..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,71 +0,0 @@
|
|
|
|
+-/* 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, see
|
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#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/pt-initfini.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index cde4183..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,153 +0,0 @@
|
|
|
|
+-/* 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,
|
|
|
|
+- see <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-/* 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
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 2431129..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,136 +0,0 @@
|
|
|
|
+-/* 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, see
|
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#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
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 078c730..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,68 +0,0 @@
|
|
|
|
+-/* 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, see
|
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#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/pt-initfini.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 136ce54..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,136 +0,0 @@
|
|
|
|
+-/* 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,
|
|
|
|
+- see <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-/* 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
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index d57283a..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1 +0,0 @@
|
|
|
|
+-#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
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index cf3124e..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,115 +0,0 @@
|
|
|
|
+-/* 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, see
|
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#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
|
|
|
|
+deleted file mode 100644
|
|
|
|
+index 109d4f6..0000000
|
|
|
|
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,53 +0,0 @@
|
|
|
|
+-/* 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, see
|
|
|
|
+- <http://www.gnu.org/licenses/>. */
|
|
|
|
+-
|
|
|
|
+-#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)
|
|
|
|
+--
|
|
|
|
+1.8.5.2 (Apple Git-48)
|
|
|
|
+
|