diff options
32 files changed, 6 insertions, 2005 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index e8ff69ab00..87d5018637 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,9 @@ +2012-01-07 Ulrich Drepper <drepper@gmail.com> + + In case anyone cares, the IA-64 architecture could move to ports. + * sysdeps/ia64/*: Removed. + * sysdeps/unix/sysv/linux/ia64/*: Removed. + 2011-12-22 Ulrich Drepper <drepper@gmail.com> * sysdeps/pthread/gai_misc.h (__gai_create_helper_thread): Use diff --git a/nptl/sysdeps/ia64/Makefile b/nptl/sysdeps/ia64/Makefile deleted file mode 100644 index 3229d3f16d..0000000000 --- a/nptl/sysdeps/ia64/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# 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. - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif - -ifeq ($(subdir),nptl) -libpthread-routines += ptw-sysdep ptw-sigblock ptw-sigprocmask -endif diff --git a/nptl/sysdeps/ia64/pthread_spin_lock.c b/nptl/sysdeps/ia64/pthread_spin_lock.c deleted file mode 100644 index 7d25af7c4b..0000000000 --- a/nptl/sysdeps/ia64/pthread_spin_lock.c +++ /dev/null @@ -1,36 +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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include "pthreadP.h" - -int -pthread_spin_lock (lock) - pthread_spinlock_t *lock; -{ - int *p = (int *) lock; - - while (__builtin_expect (__sync_val_compare_and_swap (p, 0, 1), 0)) - { - /* Spin without using the atomic instruction. */ - do - __asm __volatile ("hint @pause" : : : "memory"); - while (*p); - } - return 0; -} diff --git a/nptl/sysdeps/ia64/pthread_spin_trylock.c b/nptl/sysdeps/ia64/pthread_spin_trylock.c deleted file mode 100644 index 0fd8b99b7a..0000000000 --- a/nptl/sysdeps/ia64/pthread_spin_trylock.c +++ /dev/null @@ -1,28 +0,0 @@ -/* 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 <errno.h> -#include "pthreadP.h" - -int -pthread_spin_trylock (lock) - pthread_spinlock_t *lock; -{ - return __sync_val_compare_and_swap ((int *) lock, 0, 1) == 0 ? 0 : EBUSY; -} diff --git a/nptl/sysdeps/ia64/pthread_spin_unlock.c b/nptl/sysdeps/ia64/pthread_spin_unlock.c deleted file mode 100644 index 50d9c5f6a8..0000000000 --- a/nptl/sysdeps/ia64/pthread_spin_unlock.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2003, 2006 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 "pthreadP.h" - - -int -pthread_spin_unlock (pthread_spinlock_t *lock) -{ - __sync_lock_release ((int *) lock); - return 0; -} diff --git a/nptl/sysdeps/ia64/pthreaddef.h b/nptl/sysdeps/ia64/pthreaddef.h deleted file mode 100644 index f2539e2905..0000000000 --- a/nptl/sysdeps/ia64/pthreaddef.h +++ /dev/null @@ -1,43 +0,0 @@ -/* 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. */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (32 * 1024 * 1024) - -/* IA-64 uses a normal stack and a register stack. */ -#define NEED_SEPARATE_REGISTER_STACK - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 16 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 16384 - -/* Alignment requirement for TCB. */ -#define TCB_ALIGNMENT 16 - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME __stack_pointer -register char *__stack_pointer __asm__ ("sp"); - -/* XXX Until we have a better place keep the definitions here. */ - -/* While there is no such syscall. */ -#define __exit_thread_inline(val) \ - INLINE_SYSCALL (exit, 1, (val)) diff --git a/nptl/sysdeps/ia64/tcb-offsets.sym b/nptl/sysdeps/ia64/tcb-offsets.sym deleted file mode 100644 index e1707ab1c8..0000000000 --- a/nptl/sysdeps/ia64/tcb-offsets.sym +++ /dev/null @@ -1,7 +0,0 @@ -#include <sysdep.h> -#include <tls.h> - -PID offsetof (struct pthread, pid) - TLS_PRE_TCB_SIZE -TID offsetof (struct pthread, tid) - TLS_PRE_TCB_SIZE -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) - TLS_PRE_TCB_SIZE -SYSINFO_OFFSET offsetof (tcbhead_t, __private) diff --git a/nptl/sysdeps/ia64/tls.h b/nptl/sysdeps/ia64/tls.h deleted file mode 100644 index c2a092663b..0000000000 --- a/nptl/sysdeps/ia64/tls.h +++ /dev/null @@ -1,186 +0,0 @@ -/* Definition for thread-local data handling. nptl/IA-64 version. - Copyright (C) 2003-2007, 2011 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 _TLS_H -#define _TLS_H 1 - -#include <dl-sysdep.h> -#ifndef __ASSEMBLER__ -# include <stdbool.h> -# include <stddef.h> -# include <stdint.h> -# include <stdlib.h> -# include <list.h> - - -/* Type for the dtv. */ -typedef union dtv -{ - size_t counter; - struct - { - void *val; - bool is_static; - } pointer; -} dtv_t; - - -typedef struct -{ - dtv_t *dtv; - void *__private; -} tcbhead_t; - -register struct pthread *__thread_self __asm__("r13"); - -# define TLS_MULTIPLE_THREADS_IN_TCB 1 - -#else /* __ASSEMBLER__ */ -# include <tcb-offsets.h> -#endif - - -/* Alignment requirement for the stack. */ -#define STACK_ALIGN 16 - -#ifndef __ASSEMBLER__ -/* Get system call information. */ -# include <sysdep.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 (tcbhead_t) - -/* This is the size we need before TCB. - If there is not any room for uintptr_t stack_guard and - uintptr_t pointer_guard in struct pthread's final padding, - we need to put struct pthread 16 byte slower. */ -# define TLS_PRE_TCB_SIZE \ - (sizeof (struct pthread) \ - + (PTHREAD_STRUCT_END_PADDING < 2 * sizeof (uintptr_t) \ - ? ((2 * sizeof (uintptr_t) + __alignof__ (struct pthread) - 1) \ - & ~(__alignof__ (struct pthread) - 1)) \ - : 0)) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* The DTV is allocated at the TP; the TCB is placed elsewhere. */ -# define TLS_DTV_AT_TP 1 - -/* Get the thread descriptor definition. */ -# include <nptl/descr.h> - -/* 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 *)__thread_self)->dtv = (DTV)) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(descr) \ - (((tcbhead_t *) (descr))->dtv) - -#define THREAD_SELF_SYSINFO (((tcbhead_t *) __thread_self)->__private) -#define THREAD_SYSINFO(pd) \ - (((tcbhead_t *) ((char *) (pd) + TLS_PRE_TCB_SIZE))->__private) - -#if defined NEED_DL_SYSINFO -# define INIT_SYSINFO THREAD_SELF_SYSINFO = (void *) GLRO(dl_sysinfo) -#else -# define INIT_SYSINFO NULL -#endif - -/* 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. */ -# define TLS_INIT_TP(thrdescr, secondcall) \ - (__thread_self = (thrdescr), INIT_SYSINFO, NULL) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - (((tcbhead_t *)__thread_self)->dtv) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ((struct pthread *) ((char *) __thread_self - TLS_PRE_TCB_SIZE)) - -/* Magic for libthread_db to know how to do THREAD_SELF. */ -# define DB_THREAD_SELF REGISTER (64, 64, 13 * 8, -TLS_PRE_TCB_SIZE) - -/* Access to data in the thread descriptor is easy. */ -#define THREAD_GETMEM(descr, member) \ - descr->member -#define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -#define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -#define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -/* Set the stack guard field in TCB head. */ -#define THREAD_SET_STACK_GUARD(value) \ - (((uintptr_t *) __thread_self)[-1] = (value)) -#define THREAD_COPY_STACK_GUARD(descr) \ - (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-1] \ - = ((uintptr_t *) __thread_self)[-1]) - -/* Set the pointer guard field in TCB head. */ -#define THREAD_GET_POINTER_GUARD() \ - (((uintptr_t *) __thread_self)[-2]) -#define THREAD_SET_POINTER_GUARD(value) \ - (((uintptr_t *) __thread_self)[-2] = (value)) -#define THREAD_COPY_POINTER_GUARD(descr) \ - (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-2] \ - = THREAD_GET_POINTER_GUARD ()) - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* __ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/Makefile b/nptl/sysdeps/unix/sysv/linux/ia64/Makefile deleted file mode 100644 index ff98f1a494..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -ifeq ($(subdir),nptl) -libpthread-sysdep_routines += __ia64_longjmp unwind_longjmp __sigstack_longjmp -endif diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/Versions b/nptl/sysdeps/unix/sysv/linux/ia64/Versions deleted file mode 100644 index 437c4da28b..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/Versions +++ /dev/null @@ -1,13 +0,0 @@ -libpthread { - GLIBC_2.3.3 { - # Changed PTHREAD_STACK_MIN. - pthread_attr_setstack; pthread_attr_setstacksize; - } -} -librt { - GLIBC_2.3.3 { - # Changed timer_t. - timer_create; timer_delete; timer_getoverrun; timer_gettime; - timer_settime; - } -} diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S b/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S deleted file mode 100644 index a1120d4d72..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/__ia64_longjmp.S +++ /dev/null @@ -1,159 +0,0 @@ -/* Copyright (C) 1999, 2000, 2001, 2004, 2005 Free Software Foundation, Inc. - Contributed by David Mosberger-Tang <davidm@hpl.hp.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.h> -#include <features.h> - -LEAF(__ia64_flush_rbs) - flushrs - mov r9 = ar.rsc // 12 cyc latency - ;; - mov r8 = ar.bsp // 12 cyc latency - ;; - and r16 = ~0x3, r9 // clear ar.rsc.mode - ;; - mov ar.rsc = r16 // put RSE into enforced-lazy mode - ;; - mov r10 = ar.rnat // 5 cyc latency - ret -END(__ia64_flush_rbs) - - -# define pPos p6 /* is rotate count positive? */ -# define pNeg p7 /* is rotate count negative? */ - -/* __ia64_longjmp(__jmp_buf buf, int val, long rnat, long rsc) */ - - -LEAF(__ia64_longjmp) - alloc r8=ar.pfs,4,0,0,0 - add r2=0x98,in0 // r2 <- &jmpbuf.orig_jmp_buf_addr - add r3=0x88,in0 // r3 <- &jmpbuf.ar_bsp - ;; - ld8 r8=[r2] // r8 <- orig_jmp_buf_addr - ld8 r23=[r3],8 // r23 <- jmpbuf.ar_bsp - mov r2=in0 - ;; - // - // Note: we need to redo the "flushrs" here even though it's - // already been done by __ia64_flush_rbs. It is needed to - // ensure that ar.bspstore == ar.bsp. - // - flushrs // flush dirty regs to backing store - ld8 r25=[r3] // r25 <- jmpbuf.ar_unat - sub r8=r8,in0 // r8 <- &orig_jmpbuf - &jmpbuf - ;; - add r3=8,in0 // r3 <- &jmpbuf.r1 - extr.u r8=r8,3,6 // r8 <- (&orig_jmpbuf - &jmpbuf)/8 & 0x3f - ;; - cmp.lt pNeg,pPos=r8,r0 - ;; -(pPos) mov r16=r8 -(pNeg) add r16=64,r8 -(pPos) sub r17=64,r8 -(pNeg) sub r17=r0,r8 - ;; - shr.u r8=r25,r16 - shl r9=r25,r17 - ;; - or r25=r8,r9 - ;; - mov ar.unat=r25 // setup ar.unat (NaT bits for r1, r4-r7, and r12) - ;; - ld8.fill.nta sp=[r2],16 // r12 (sp) - ld8.fill.nta gp=[r3],16 // r1 (gp) - dep r11=-1,r23,3,6 // r11 <- ia64_rse_rnat_addr(jmpbuf.ar_bsp) - ;; - ld8.nta r16=[r2],16 // caller's unat - ld8.nta r17=[r3],16 // fpsr - ;; - ld8.fill.nta r4=[r2],16 // r4 - ld8.fill.nta r5=[r3],16 // r5 (gp) - ;; - ld8.fill.nta r6=[r2],16 // r6 - ld8.fill.nta r7=[r3],16 // r7 - ;; - mov ar.unat=r16 // restore caller's unat - mov ar.fpsr=r17 // restore fpsr - ;; - ld8.nta r16=[r2],16 // b0 - ld8.nta r17=[r3],16 // b1 - ;; - mov ar.bspstore=r23 // restore ar.bspstore - ld8.nta r18=[r2],16 // b2 - ;; - mov ar.rnat=in2 // restore ar.rnat - ld8.nta r19=[r3],16 // b3 - ;; - ld8.nta r20=[r2],16 // b4 - ld8.nta r21=[r3],16 // b5 -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (r16, r24) -#endif - ;; - ld8.nta r11=[r2],16 // ar.pfs - ld8.nta r22=[r3],56 // ar.lc - ;; - ld8.nta r24=[r2],32 // pr - mov ar.rsc=in3 // restore ar.rsc - mov b0=r16 - ;; - ldf.fill.nta f2=[r2],32 - ldf.fill.nta f3=[r3],32 - mov b1=r17 - ;; - ldf.fill.nta f4=[r2],32 - ldf.fill.nta f5=[r3],32 - mov b2=r18 - ;; - ldf.fill.nta f16=[r2],32 - ldf.fill.nta f17=[r3],32 - mov b3=r19 - ;; - ldf.fill.nta f18=[r2],32 - ldf.fill.nta f19=[r3],32 - mov b4=r20 - ;; - ldf.fill.nta f20=[r2],32 - ldf.fill.nta f21=[r3],32 - mov b5=r21 - ;; - ldf.fill.nta f22=[r2],32 - ldf.fill.nta f23=[r3],32 - mov ar.lc=r22 - ;; - ldf.fill.nta f24=[r2],32 - ldf.fill.nta f25=[r3],32 - cmp.eq p8,p9=0,in1 - ;; - ldf.fill.nta f26=[r2],32 - ldf.fill.nta f27=[r3],32 - mov ar.pfs=r11 - ;; - ldf.fill.nta f28=[r2],32 - ldf.fill.nta f29=[r3],32 -(p8) mov r8=1 - ;; - ldf.fill.nta f30=[r2] - ldf.fill.nta f31=[r3] -(p9) mov r8=in1 - - invala // virt. -> phys. regnum mapping may change - mov pr=r24,-1 - ret -END(__ia64_longjmp) diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c b/nptl/sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c deleted file mode 100644 index 8f552eaad4..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/__sigstack_longjmp.c +++ /dev/null @@ -1,168 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang <davidm@hpl.hp.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. */ - -/* The public __longjmp() implementation is limited to jumping within - the same stack. That is, in general it is not possible to use this - __longjmp() implementation to cross from one stack to another. - In constrast, the __sigstack_longjmp() implemented here allows - crossing from the alternate signal stack to the normal stack - as a special case. */ - -#include <assert.h> -#include <setjmp.h> -#include <signal.h> -#include <stdint.h> -#include <stdlib.h> - -#include <sysdep.h> -#include <sys/rse.h> - -#define JB_SP 0 -#define JB_BSP 17 - -struct rbs_flush_values - { - unsigned long bsp; - unsigned long rsc; - unsigned long rnat; - }; - -extern struct rbs_flush_values __ia64_flush_rbs (void); -extern void __ia64_longjmp (__jmp_buf buf, int val, long rnat, long rsc) - __attribute__ ((__noreturn__)); - -static void -copy_rbs (unsigned long *dst, unsigned long *dst_end, unsigned long dst_rnat, - unsigned long *src, unsigned long *src_end, - unsigned long current_rnat) -{ - unsigned long dst_slot, src_rnat = 0, src_slot, *src_rnat_addr, nat_bit; - int first_time = 1; - - while (dst < dst_end) - { - dst_slot = ia64_rse_slot_num (dst); - if (dst_slot == 63) - { - *dst++ = dst_rnat; - dst_rnat = 0; - } - else - { - /* read source value, including NaT bit: */ - src_slot = ia64_rse_slot_num (src); - if (src_slot == 63) - { - /* skip src RNaT slot */ - ++src; - src_slot = 0; - } - if (first_time || src_slot == 0) - { - first_time = 0; - src_rnat_addr = ia64_rse_rnat_addr (src); - if (src_rnat_addr < src_end) - src_rnat = *src_rnat_addr; - else - src_rnat = current_rnat; - } - nat_bit = (src_rnat >> src_slot) & 1; - - assert (src < src_end); - - *dst++ = *src++; - if (nat_bit) - dst_rnat |= (1UL << dst_slot); - else - dst_rnat &= ~(1UL << dst_slot); - } - } - dst_slot = ia64_rse_slot_num (dst); - if (dst_slot > 0) - *ia64_rse_rnat_addr (dst) = dst_rnat; -} - -void -__sigstack_longjmp (__jmp_buf buf, int val) -{ - unsigned long *rbs_base, *bsp, *bspstore, *jb_bsp, jb_sp, ss_sp; - unsigned long ndirty, rnat, load_rnat, *jb_rnat_addr; - struct sigcontext *sc; - stack_t stk; - struct rbs_flush_values c; - - /* put RSE into enforced-lazy mode and return current bsp/rsc/rnat: */ - c = __ia64_flush_rbs (); - - jb_sp = ((unsigned long *) buf)[JB_SP]; - jb_bsp = ((unsigned long **) buf)[JB_BSP]; - - INTERNAL_SYSCALL_DECL (err); - (void) INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &stk); - - ss_sp = (unsigned long) stk.ss_sp; - jb_rnat_addr = ia64_rse_rnat_addr (jb_bsp); - - if ((stk.ss_flags & SS_ONSTACK) == 0 || jb_sp - ss_sp < stk.ss_size) - /* Normal non-stack-crossing longjmp; if the RNaT slot for the bsp - saved in the jump-buffer is the same as the one for the current - BSP, use the current AR.RNAT value, otherwise, load it from the - jump-buffer's RNaT-slot. */ - load_rnat = (ia64_rse_rnat_addr ((unsigned long *) c.bsp) != jb_rnat_addr); - else - { - /* If we are on the alternate signal-stack and the jump-buffer - lies outside the signal-stack, we may need to copy back the - dirty partition which was torn off and saved on the - signal-stack when the signal was delivered. - - Caveat: we assume that the top of the alternate signal-stack - stores the sigcontext structure of the signal that - caused the switch to the signal-stack. This should - be a fairly safe assumption but the kernel _could_ - do things differently.. */ - sc = ((struct sigcontext *) ((ss_sp + stk.ss_size) & -16) - 1); - - /* As a sanity-check, verify that the register-backing-store base - of the alternate signal-stack is where we expect it. */ - rbs_base = (unsigned long *) - ((ss_sp + sizeof (long) - 1) & -sizeof (long)); - - assert ((unsigned long) rbs_base == sc->sc_rbs_base); - - ndirty = ia64_rse_num_regs (rbs_base, rbs_base + (sc->sc_loadrs >> 19)); - bsp = (unsigned long *) sc->sc_ar_bsp; - bspstore = ia64_rse_skip_regs (bsp, -ndirty); - - if (bspstore < jb_bsp) - /* AR.BSPSTORE at the time of the signal was below the value - of AR.BSP saved in the jump-buffer => copy the missing - portion from the torn off dirty partition which got saved - on the alternate signal-stack. */ - copy_rbs (bspstore, jb_bsp, sc->sc_ar_rnat, - rbs_base, (unsigned long *) c.bsp, c.rnat); - - load_rnat = 1; - } - if (load_rnat) - rnat = *jb_rnat_addr; - else - rnat = c.rnat; - __ia64_longjmp (buf, val, rnat, c.rsc); -} diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h b/nptl/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h deleted file mode 100644 index 4b8a035042..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Minimum guaranteed maximum values for system limits. Linux/IA-64 version. - Copyright (C) 1993-1998,2000,2002-2004,2008 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 Library General Public License as - published by the Free Software Foundation; either version 2 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* The kernel header pollutes the namespace with the NR_OPEN symbol - and defines LINK_MAX although filesystems have different maxima. A - similar thing is true for OPEN_MAX: the limit can be changed at - runtime and therefore the macro must not be defined. Remove this - after including the header if necessary. */ -#ifndef NR_OPEN -# define __undef_NR_OPEN -#endif -#ifndef LINK_MAX -# define __undef_LINK_MAX -#endif -#ifndef OPEN_MAX -# define __undef_OPEN_MAX -#endif -#ifndef ARG_MAX -# define __undef_ARG_MAX -#endif - -/* The kernel sources contain a file with all the needed information. */ -#include <linux/limits.h> - -/* Have to remove NR_OPEN? */ -#ifdef __undef_NR_OPEN -# undef NR_OPEN -# undef __undef_NR_OPEN -#endif -/* Have to remove LINK_MAX? */ -#ifdef __undef_LINK_MAX -# undef LINK_MAX -# undef __undef_LINK_MAX -#endif -/* Have to remove OPEN_MAX? */ -#ifdef __undef_OPEN_MAX -# undef OPEN_MAX -# undef __undef_OPEN_MAX -#endif -/* Have to remove ARG_MAX? */ -#ifdef __undef_ARG_MAX -# undef ARG_MAX -# undef __undef_ARG_MAX -#endif - -/* The number of data keys per process. */ -#define _POSIX_THREAD_KEYS_MAX 128 -/* This is the value this implementation supports. */ -#define PTHREAD_KEYS_MAX 1024 - -/* Controlling the iterations of destructors for thread-specific data. */ -#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 -/* Number of iterations this implementation does. */ -#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS - -/* The number of threads per process. */ -#define _POSIX_THREAD_THREADS_MAX 64 -/* We have no predefined limit on the number of threads. */ -#undef PTHREAD_THREADS_MAX - -/* Maximum amount by which a process can descrease its asynchronous I/O - priority level. */ -#define AIO_PRIO_DELTA_MAX 20 - -/* Minimum size for a thread. We are free to choose a reasonable value. */ -#define PTHREAD_STACK_MIN 196608 - -/* Maximum number of timer expiration overruns. */ -#define DELAYTIMER_MAX 2147483647 - -/* Maximum tty name length. */ -#define TTY_NAME_MAX 32 - -/* Maximum login name length. This is arbitrary. */ -#define LOGIN_NAME_MAX 256 - -/* Maximum host name length. */ -#define HOST_NAME_MAX 64 - -/* Maximum message queue priority level. */ -#define MQ_PRIO_MAX 32768 - -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h deleted file mode 100644 index 330717f079..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright (C) 2003, 2004, 2005, 2006, 2007 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. */ - -#ifndef _BITS_PTHREADTYPES_H -#define _BITS_PTHREADTYPES_H 1 - -#define __SIZEOF_PTHREAD_ATTR_T 56 -#define __SIZEOF_PTHREAD_MUTEX_T 40 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 56 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -#define __SIZEOF_PTHREAD_BARRIER_T 32 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 - - -/* Thread identifiers. The structure of the attribute type is not - exposed on purpose. */ -typedef unsigned long int pthread_t; - - -typedef union -{ - char __size[__SIZEOF_PTHREAD_ATTR_T]; - long int __align; -} pthread_attr_t; - - -typedef struct __pthread_internal_list -{ - struct __pthread_internal_list *__prev; - struct __pthread_internal_list *__next; -} __pthread_list_t; - - -/* Data structures for mutex handling. The structure of the attribute - type is not exposed on purpose. */ -typedef union -{ - struct __pthread_mutex_s - { - int __lock; - unsigned int __count; - int __owner; - unsigned int __nusers; - /* KIND must stay at this position in the structure to maintain - binary compatibility. */ - int __kind; - int __spins; - __pthread_list_t __list; -#define __PTHREAD_MUTEX_HAVE_PREV 1 - } __data; - char __size[__SIZEOF_PTHREAD_MUTEX_T]; - long int __align; -} pthread_mutex_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; - int __align; -} pthread_mutexattr_t; - - -/* Data structure for conditional variable handling. The structure of - the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __futex; - __extension__ unsigned long long int __total_seq; - __extension__ unsigned long long int __wakeup_seq; - __extension__ unsigned long long int __woken_seq; - void *__mutex; - unsigned int __nwaiters; - unsigned int __broadcast_seq; - } __data; - char __size[__SIZEOF_PTHREAD_COND_T]; - long int __align; -} pthread_cond_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_CONDATTR_T]; - int __align; -} pthread_condattr_t; - - -/* Keys for thread-specific data */ -typedef unsigned int pthread_key_t; - - -/* Once-only execution */ -typedef int pthread_once_t; - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Data structure for read-write lock variable handling. The - structure of the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __nr_readers; - unsigned int __readers_wakeup; - unsigned int __writer_wakeup; - unsigned int __nr_readers_queued; - unsigned int __nr_writers_queued; - int __writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; - } __data; - char __size[__SIZEOF_PTHREAD_RWLOCK_T]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; - long int __align; -} pthread_rwlockattr_t; -#endif - - -#ifdef __USE_XOPEN2K -/* POSIX spinlock data type. */ -typedef volatile int pthread_spinlock_t; - - -/* POSIX barriers data type. The structure of the type is - deliberately not exposed. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIER_T]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; - int __align; -} pthread_barrierattr_t; -#endif - - -#endif /* bits/pthreadtypes.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/bits/semaphore.h b/nptl/sysdeps/unix/sysv/linux/ia64/bits/semaphore.h deleted file mode 100644 index 0684aebe24..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/bits/semaphore.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@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. */ - -#ifndef _SEMAPHORE_H -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead." -#endif - - -#define __SIZEOF_SEM_T 32 - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/clone2.S b/nptl/sysdeps/unix/sysv/linux/ia64/clone2.S deleted file mode 100644 index 91f28bab37..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/clone2.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 <clone2.S> -#else -# define RESET_PID -# include_next <clone2.S> -#endif diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c b/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c deleted file mode 100644 index cd5f8137d5..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/createthread.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2003, 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.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. */ - -/* Value passed to 'clone' for initialization of the thread register. */ -#define TLS_VALUE ((char *) pd + TLS_PRE_TCB_SIZE) - -#define ARCH_CLONE __clone2 - -/* Get the real implementation. */ -#include <nptl/sysdeps/pthread/createthread.c> diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h b/nptl/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h deleted file mode 100644 index 5c16bd7aea..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/dl-sysdep.h +++ /dev/null @@ -1,77 +0,0 @@ -/* System-specific settings for dynamic linker code. IA-64 version. - Copyright (C) 2003, 2004, 2006, 2008 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 _DL_SYSDEP_H -#define _DL_SYSDEP_H 1 - -/* This macro must be defined to either 0 or 1. - - If 1, then an errno global variable hidden in ld.so will work right with - all the errno-using libc code compiled for ld.so, and there is never a - need to share the errno location with libc. This is appropriate only if - all the libc functions that ld.so uses are called without PLT and always - get the versions linked into ld.so rather than the libc ones. */ - -#ifdef IS_IN_rtld -# define RTLD_PRIVATE_ERRNO 1 -#else -# define RTLD_PRIVATE_ERRNO 0 -#endif - -/* Traditionally system calls have been made using break 0x100000. A - second method was introduced which, if possible, will use the EPC - instruction. To signal the presence and where to find the code the - kernel passes an AT_SYSINFO_EHDR pointer in the auxiliary vector to - the application. */ -#define NEED_DL_SYSINFO 1 -#define USE_DL_SYSINFO 1 - -#if defined NEED_DL_SYSINFO && !defined __ASSEMBLER__ -/* Don't declare this as a function---we want it's entry-point, not - it's function descriptor... */ -extern int _dl_sysinfo_break attribute_hidden; -# define DL_SYSINFO_DEFAULT ((uintptr_t) &_dl_sysinfo_break) -# define DL_SYSINFO_IMPLEMENTATION \ - asm (".text\n\t" \ - ".hidden _dl_sysinfo_break\n\t" \ - ".proc _dl_sysinfo_break\n\t" \ - "_dl_sysinfo_break:\n\t" \ - ".prologue\n\t" \ - ".altrp b6\n\t" \ - ".body\n\t" \ - "break 0x100000;\n\t" \ - "br.ret.sptk.many b6;\n\t" \ - ".endp _dl_sysinfo_break\n\t" \ - ".previous"); -#endif - -/* _dl_argv cannot be attribute_relro, because _dl_start_user - might write into it after _dl_start returns. */ -#define DL_ARGV_NOT_RELRO 1 - - -/* The _dl_discover_osversion function is so far only needed in sysconf - to check for kernels later than 2.6.23. */ -#if !defined __ASSEMBLER__ && __LINUX_KERNEL_VERSION < 0x020617 -/* Get version of the OS. */ -extern int _dl_discover_osversion (void) attribute_hidden; -# define HAVE_DL_DISCOVER_OSVERSION 1 -#endif - -#endif /* dl-sysdep.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/fork.c b/nptl/sysdeps/unix/sysv/linux/ia64/fork.c deleted file mode 100644 index 1502310f1d..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/fork.c +++ /dev/null @@ -1,31 +0,0 @@ -/* 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 <sched.h> -#include <signal.h> -#include <sysdep.h> -#include <tls.h> - - -#define ARCH_FORK() \ - INLINE_SYSCALL (clone2, 6, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, 0, NULL, &THREAD_SELF->tid, NULL) - -#include "../fork.c" diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h deleted file mode 100644 index b419c9a5e1..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h +++ /dev/null @@ -1,295 +0,0 @@ -/* Copyright (C) 2003, 2004, 2006-2008, 2009 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. */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include <time.h> -#include <sys/param.h> -#include <bits/pthreadtypes.h> -#include <ia64intrin.h> -#include <atomic.h> -#include <kernel-features.h> - -#define __NR_futex 1230 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 -#define FUTEX_WAKE_OP 5 -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) -#define FUTEX_LOCK_PI 6 -#define FUTEX_UNLOCK_PI 7 -#define FUTEX_TRYLOCK_PI 8 -#define FUTEX_WAIT_BITSET 9 -#define FUTEX_WAKE_BITSET 10 -#define FUTEX_PRIVATE_FLAG 128 -#define FUTEX_CLOCK_REALTIME 256 - -#define FUTEX_BITSET_MATCH_ANY 0xffffffff - -/* Values for 'private' parameter of locking macros. Yes, the - definition seems to be backwards. But it is not. The bit will be - reversed before passing to the system call. */ -#define LLL_PRIVATE 0 -#define LLL_SHARED FUTEX_PRIVATE_FLAG - - -#if !defined NOT_IN_libc || defined IS_IN_rtld -/* In libc.so or ld.so all futexes are private. */ -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - ((fl) | FUTEX_PRIVATE_FLAG) -# else -# define __lll_private_flag(fl, private) \ - ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) -# endif -#else -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) -# else -# define __lll_private_flag(fl, private) \ - (__builtin_constant_p (private) \ - ? ((private) == 0 \ - ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ - : (fl)) \ - : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ - & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) -# endif -#endif - - -/* Delay in spinlock loop. */ -#define BUSY_WAIT_NOP asm ("hint @pause") - -#define lll_futex_wait(futex, val, private) \ - lll_futex_timed_wait (futex, val, NULL, private) - -#define lll_futex_timed_wait(ftx, val, timespec, private) \ -({ \ - DO_INLINE_SYSCALL(futex, 4, (long) (ftx), \ - __lll_private_flag (FUTEX_WAIT, private), \ - (int) (val), (long) (timespec)); \ - _r10 == -1 ? -_retval : _retval; \ -}) - -#define lll_futex_wake(ftx, nr, private) \ -({ \ - DO_INLINE_SYSCALL(futex, 3, (long) (ftx), \ - __lll_private_flag (FUTEX_WAKE, private), \ - (int) (nr)); \ - _r10 == -1 ? -_retval : _retval; \ -}) - -#define lll_robust_dead(futexv, private) \ -do \ - { \ - int *__futexp = &(futexv); \ - atomic_or (__futexp, FUTEX_OWNER_DIED); \ - DO_INLINE_SYSCALL(futex, 3, (long) __futexp, \ - __lll_private_flag (FUTEX_WAKE, private), 1); \ - } \ -while (0) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(ftx, nr_wake, nr_move, mutex, val, private) \ -({ \ - DO_INLINE_SYSCALL(futex, 6, (long) (ftx), \ - __lll_private_flag (FUTEX_CMP_REQUEUE, private), \ - (int) (nr_wake), (int) (nr_move), (long) (mutex), \ - (int) val); \ - _r10 == -1; \ -}) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(ftx, nr_wake, nr_wake2, ftx2, private) \ -({ \ - DO_INLINE_SYSCALL(futex, 6, (long) (ftx), \ - __lll_private_flag (FUTEX_WAKE_OP, private), \ - (int) (nr_wake), (int) (nr_wake2), (long) (ftx2), \ - FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ - _r10 == -1; \ -}) - - -#define __lll_trylock(futex) \ - (atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0) -#define lll_trylock(futex) __lll_trylock (&(futex)) - - -#define __lll_robust_trylock(futex, id) \ - (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0) -#define lll_robust_trylock(futex, id) \ - __lll_robust_trylock (&(futex), id) - - -#define __lll_cond_trylock(futex) \ - (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0) -#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex)) - - -extern void __lll_lock_wait_private (int *futex) attribute_hidden; -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; - - -#define __lll_lock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, \ - 1, 0), 0)) \ - { \ - if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ - __lll_lock_wait_private (__futex); \ - else \ - __lll_lock_wait (__futex, private); \ - } \ - })) -#define lll_lock(futex, private) __lll_lock (&(futex), private) - - -#define __lll_robust_lock(futex, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ - 0), 0)) \ - __val = __lll_robust_lock_wait (__futex, private); \ - __val; \ - }) -#define lll_robust_lock(futex, id, private) \ - __lll_robust_lock (&(futex), id, private) - - -#define __lll_cond_lock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, 2, \ - 0), 0)) \ - __lll_lock_wait (__futex, private); \ - })) -#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) - - -#define __lll_robust_cond_lock(futex, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - int __id = (id) | FUTEX_WAITERS; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, \ - __id, 0), 0)) \ - __val = __lll_robust_lock_wait (__futex, private); \ - __val; \ - }) -#define lll_robust_cond_lock(futex, id, private) \ - __lll_robust_cond_lock (&(futex), id, private) - - -extern int __lll_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; - - -#define __lll_timedlock(futex, abstime, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, 1, \ - 0), 0)) \ - __val = __lll_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_timedlock(futex, abstime, private) \ - __lll_timedlock (&(futex), abstime, private) - - -#define __lll_robust_timedlock(futex, abstime, id, private) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ - 0), 0)) \ - __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ - __val; \ - }) -#define lll_robust_timedlock(futex, abstime, id, private) \ - __lll_robust_timedlock (&(futex), abstime, id, private) - - -#define __lll_unlock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - int __val = atomic_exchange_rel (__futex, 0); \ - \ - if (__builtin_expect (__val > 1, 0)) \ - lll_futex_wake (__futex, 1, private); \ - })) -#define lll_unlock(futex, private) __lll_unlock(&(futex), private) - - -#define __lll_robust_unlock(futex, private) \ - ((void) ({ \ - int *__futex = (futex); \ - int __val = atomic_exchange_rel (__futex, 0); \ - \ - if (__builtin_expect (__val & FUTEX_WAITERS, 0)) \ - lll_futex_wake (__futex, 1, private); \ - })) -#define lll_robust_unlock(futex, private) \ - __lll_robust_unlock(&(futex), private) - - -#define lll_islocked(futex) \ - (futex != 0) - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - -/* The kernel notifies a process with uses CLONE_CLEARTID via futex - wakeup when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero - afterwards. */ -#define lll_wait_tid(tid) \ - do \ - { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED); \ - } \ - while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __res = 0; \ - if ((tid) != 0) \ - __res = __lll_timedwait_tid (&(tid), (abstime)); \ - __res; \ - }) - -#endif /* lowlevellock.h */ diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c b/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c deleted file mode 100644 index b6d2cec0d0..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/pt-initfini.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Special .init and .fini section support for ia64. NPTL version. - Copyright (C) 2000, 2001, 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. - - 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. */ - -#include <stddef.h> - - -__asm__ ("\n\ -#include \"defs.h\"\n\ -\n\ -/*@HEADER_ENDS*/\n\ -\n\ -/*@_init_PROLOG_BEGINS*/\n\ - .xdata8 \".init_array\",@fptr(__pthread_initialize_minimal_internal)\n\ -/*@_init_PROLOG_ENDS*/\n\ -"); diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/pt-vfork.S b/nptl/sysdeps/unix/sysv/linux/ia64/pt-vfork.S deleted file mode 100644 index a285280038..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/pt-vfork.S +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2000, 2002, 2003, 2004 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. */ - - -#include <sysdep.h> -#define _SIGNAL_H -#include <bits/signum.h> -#include <tcb-offsets.h> - -/* The following are defined in linux/sched.h, which unfortunately */ -/* is not safe for inclusion in an assembly file. */ -#define CLONE_VM 0x00000100 /* set if VM shared between processes */ -#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ - -/* pid_t vfork(void); */ -/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ - -ENTRY(__vfork) - .prologue // work around a GAS bug which triggers if - .body // first .prologue is not at the beginning of proc. - alloc r2=ar.pfs,0,0,2,0 - adds r14=PID,r13 - ;; - ld4 r16=[r14] - ;; - sub r15=0,r16 - mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD - mov out1=0 /* Standard sp value. */ - ;; - st4 [r14]=r15 - DO_CALL (SYS_ify (clone)) - cmp.eq p0,p7=0,r8 - adds r14=PID,r13 - ;; -(p7) ld4 r16=[r14] - cmp.eq p6,p0=-1,r10 - ;; -(p7) sub r15=0,r16 - ;; -(p7) st4 [r14]=r15 -(p6) br.cond.spnt.few __syscall_error - ret -PSEUDO_END(__vfork) - -weak_alias (__vfork, vfork) diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c deleted file mode 100644 index 22e2dd3c0c..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 2003, 2004, 2007 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 "pthreadP.h" -#include <lowlevellock.h> - - -unsigned long int __fork_generation attribute_hidden; - - -static void -clear_once_control (void *arg) -{ - pthread_once_t *once_control = (pthread_once_t *) arg; - - *once_control = 0; - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); -} - - -int -__pthread_once (once_control, init_routine) - pthread_once_t *once_control; - void (*init_routine) (void); -{ - while (1) - { - int oldval, val, newval; - - val = *once_control; - do - { - /* Check if the initialized has already been done. */ - if ((val & 2) != 0) - return 0; - - oldval = val; - newval = (oldval & 3) | __fork_generation | 1; - val = atomic_compare_and_exchange_val_acq (once_control, newval, - oldval); - } - while (__builtin_expect (val != oldval, 0)); - - /* Check if another thread already runs the initializer. */ - if ((oldval & 1) != 0) - { - /* Check whether the initializer execution was interrupted - by a fork. */ - if (((oldval ^ newval) & -4) == 0) - { - /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, newval, LLL_PRIVATE); - continue; - } - } - - /* This thread is the first here. Do the initialization. - Register a cleanup handler so that in case the thread gets - interrupted the initialization can be restarted. */ - pthread_cleanup_push (clear_once_control, once_control); - - init_routine (); - - pthread_cleanup_pop (0); - - - /* Add one to *once_control. */ - atomic_increment (once_control); - - /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); - break; - } - - return 0; -} -weak_alias (__pthread_once, pthread_once) -strong_alias (__pthread_once, __pthread_once_internal) diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h deleted file mode 100644 index 8687ba46ab..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h +++ /dev/null @@ -1,205 +0,0 @@ -/* Copyright (C) 2002, 2003, 2004, 2006, 2011 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 <nptl/pthreadP.h> -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt - -# undef PSEUDO - -# ifndef NOT_IN_libc -# define SYSDEP_CANCEL_ERRNO __libc_errno -# else -# define SYSDEP_CANCEL_ERRNO errno -# endif -# define SYSDEP_CANCEL_ERROR(args) \ -.section .gnu.linkonce.t.__syscall_error_##args, "ax"; \ - .align 32; \ - .proc __syscall_error_##args; \ - .global __syscall_error_##args; \ - .hidden __syscall_error_##args; \ - .size __syscall_error_##args, 64; \ -__syscall_error_##args: \ - .prologue; \ - .regstk args, 5, args, 0; \ - .save ar.pfs, loc0; \ - .save rp, loc1; \ - .body; \ - addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;; \ - ld8 loc4 = [loc4]; \ - mov rp = loc1;; \ - mov r8 = -1; \ - add loc4 = loc4, r13;; \ - st4 [loc4] = loc3; \ - mov ar.pfs = loc0 - -# ifndef USE_DL_SYSINFO - -# define PSEUDO(name, syscall_name, args) \ -.text; \ -ENTRY (name) \ - adds r14 = MULTIPLE_THREADS_OFFSET, r13;; \ - ld4 r14 = [r14]; \ - mov r15 = SYS_ify(syscall_name);; \ - cmp4.ne p6, p7 = 0, r14; \ -(p6) br.cond.spnt .Lpseudo_cancel;; \ - break __BREAK_SYSCALL;; \ - cmp.eq p6,p0=-1,r10; \ -(p6) br.cond.spnt.few __syscall_error; \ - ret;; \ - .endp name; \ - .proc __GC_##name; \ - .globl __GC_##name; \ - .hidden __GC_##name; \ -__GC_##name: \ -.Lpseudo_cancel: \ - .prologue; \ - .regstk args, 5, args, 0; \ - .save ar.pfs, loc0; \ - alloc loc0 = ar.pfs, args, 5, args, 0; \ - .save rp, loc1; \ - mov loc1 = rp;; \ - .body; \ - CENABLE;; \ - mov loc2 = r8; \ - COPY_ARGS_##args \ - mov r15 = SYS_ify(syscall_name); \ - break __BREAK_SYSCALL;; \ - mov loc3 = r8; \ - mov loc4 = r10; \ - mov out0 = loc2; \ - CDISABLE;; \ - cmp.eq p6,p0=-1,loc4; \ -(p6) br.cond.spnt.few __syscall_error_##args; \ - mov r8 = loc3; \ - mov rp = loc1; \ - mov ar.pfs = loc0; \ -.Lpseudo_end: \ - ret; \ - .endp __GC_##name; \ - SYSDEP_CANCEL_ERROR(args) - -# else /* USE_DL_SYSINFO */ - -# define PSEUDO(name, syscall_name, args) \ -.text; \ -ENTRY (name) \ - .prologue; \ - adds r2 = SYSINFO_OFFSET, r13; \ - adds r14 = MULTIPLE_THREADS_OFFSET, r13; \ - .save ar.pfs, r11; \ - mov r11 = ar.pfs;; \ - .body; \ - ld4 r14 = [r14]; \ - ld8 r2 = [r2]; \ - mov r15 = SYS_ify(syscall_name);; \ - cmp4.ne p6, p7 = 0, r14; \ - mov b7 = r2; \ -(p6) br.cond.spnt .Lpseudo_cancel; \ - br.call.sptk.many b6 = b7;; \ - mov ar.pfs = r11; \ - cmp.eq p6,p0 = -1, r10; \ -(p6) br.cond.spnt.few __syscall_error; \ - ret;; \ - .endp name; \ - .proc __GC_##name; \ - .globl __GC_##name; \ - .hidden __GC_##name; \ -__GC_##name: \ -.Lpseudo_cancel: \ - .prologue; \ - .regstk args, 5, args, 0; \ - .save ar.pfs, loc0; \ - alloc loc0 = ar.pfs, args, 5, args, 0; \ - adds loc4 = SYSINFO_OFFSET, r13; \ - .save rp, loc1; \ - mov loc1 = rp;; \ - .body; \ - ld8 loc4 = [loc4]; \ - CENABLE;; \ - mov loc2 = r8; \ - mov b7 = loc4; \ - COPY_ARGS_##args \ - mov r15 = SYS_ify(syscall_name); \ - br.call.sptk.many b6 = b7;; \ - mov loc3 = r8; \ - mov loc4 = r10; \ - mov out0 = loc2; \ - CDISABLE;; \ - cmp.eq p6,p0=-1,loc4; \ -(p6) br.cond.spnt.few __syscall_error_##args; \ - mov r8 = loc3; \ - mov rp = loc1; \ - mov ar.pfs = loc0; \ -.Lpseudo_end: \ - ret; \ - .endp __GC_##name; \ - SYSDEP_CANCEL_ERROR(args) - -# endif /* USE_DL_SYSINFO */ - -# undef PSEUDO_END -# define PSEUDO_END(name) .endp - -# ifdef IS_IN_libpthread -# define CENABLE br.call.sptk.many b0 = __pthread_enable_asynccancel -# define CDISABLE br.call.sptk.many b0 = __pthread_disable_asynccancel -# elif !defined NOT_IN_libc -# define CENABLE br.call.sptk.many b0 = __libc_enable_asynccancel -# define CDISABLE br.call.sptk.many b0 = __libc_disable_asynccancel -# elif defined IS_IN_librt -# define CENABLE br.call.sptk.many b0 = __librt_enable_asynccancel -# define CDISABLE br.call.sptk.many b0 = __librt_disable_asynccancel -# else -# error Unsupported library -# endif - -# define COPY_ARGS_0 /* Nothing */ -# define COPY_ARGS_1 COPY_ARGS_0 mov out0 = in0; -# define COPY_ARGS_2 COPY_ARGS_1 mov out1 = in1; -# define COPY_ARGS_3 COPY_ARGS_2 mov out2 = in2; -# define COPY_ARGS_4 COPY_ARGS_3 mov out3 = in3; -# define COPY_ARGS_5 COPY_ARGS_4 mov out4 = in4; -# define COPY_ARGS_6 COPY_ARGS_5 mov out5 = in5; -# define COPY_ARGS_7 COPY_ARGS_6 mov out6 = in6; - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1) -# else -# define SINGLE_THREAD_P \ - adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14 -# endif - -#elif !defined __ASSEMBLER__ - -# define SINGLE_THREAD_P (1) -# 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/ia64/timer_create.c b/nptl/sysdeps/unix/sysv/linux/ia64/timer_create.c deleted file mode 100644 index 172223af3f..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/timer_create.c +++ /dev/null @@ -1 +0,0 @@ -#include "../x86_64/timer_create.c" diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/timer_delete.c b/nptl/sysdeps/unix/sysv/linux/ia64/timer_delete.c deleted file mode 100644 index 537516e0aa..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/timer_delete.c +++ /dev/null @@ -1 +0,0 @@ -#include "../x86_64/timer_delete.c" diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/timer_getoverr.c b/nptl/sysdeps/unix/sysv/linux/ia64/timer_getoverr.c deleted file mode 100644 index 3f21a73c98..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/timer_getoverr.c +++ /dev/null @@ -1 +0,0 @@ -#include "../x86_64/timer_getoverr.c" diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/timer_gettime.c b/nptl/sysdeps/unix/sysv/linux/ia64/timer_gettime.c deleted file mode 100644 index a50143adc5..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/timer_gettime.c +++ /dev/null @@ -1 +0,0 @@ -#include "../x86_64/timer_gettime.c" diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/timer_settime.c b/nptl/sysdeps/unix/sysv/linux/ia64/timer_settime.c deleted file mode 100644 index 37baeffacc..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/timer_settime.c +++ /dev/null @@ -1 +0,0 @@ -#include "../x86_64/timer_settime.c" diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c b/nptl/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c deleted file mode 100644 index d0c77a62e6..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/unwind-forcedunwind.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2003, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek <jakub@redhat.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; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#include <dlfcn.h> -#include <stdio.h> -#include <unwind.h> -#include <pthreadP.h> - -static _Unwind_Word (*libgcc_s_getbsp) (struct _Unwind_Context *); - -#define ARCH_CANCEL_INIT(handle) \ - ((libgcc_s_getbsp = __libc_dlsym (handle, "_Unwind_GetBSP")) == NULL) - -#include <sysdeps/pthread/unwind-forcedunwind.c> - -_Unwind_Word -_Unwind_GetBSP (struct _Unwind_Context *context) -{ - if (__builtin_expect (libgcc_s_getbsp == NULL, 0)) - pthread_cancel_init (); - - return libgcc_s_getbsp (context); -} diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c b/nptl/sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c deleted file mode 100644 index 7976ff8f15..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/unwind_longjmp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 1991,92,94,95,97,98,2000,02,04 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. */ - -#include <stddef.h> -#include <setjmp.h> -#include <signal.h> -#include <pthreadP.h> -#include <jmpbuf-unwind.h> - -extern void __sigstack_longjmp (__jmp_buf, int) - __attribute__ ((noreturn)); - -/* Like __libc_siglongjmp(), but safe for crossing from alternate - signal stack to normal stack. Needed by NPTL. */ -void -__libc_unwind_longjmp (sigjmp_buf env, int val) -{ - /* Perform any cleanups needed by the frames being unwound. */ - __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME); - - if (env[0].__mask_was_saved) - /* Restore the saved signal mask. */ - (void) __sigprocmask (SIG_SETMASK, &env[0].__saved_mask, - (sigset_t *) NULL); - - /* Call the machine-dependent function to restore machine state. */ - __sigstack_longjmp (env[0].__jmpbuf, val ?: 1); -} -hidden_def (__libc_unwind_longjmp) diff --git a/nptl/sysdeps/unix/sysv/linux/ia64/vfork.S b/nptl/sysdeps/unix/sysv/linux/ia64/vfork.S deleted file mode 100644 index 3bd721f14e..0000000000 --- a/nptl/sysdeps/unix/sysv/linux/ia64/vfork.S +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2000, 2002, 2004 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. */ - - -#include <sysdep.h> -#define _SIGNAL_H -#include <bits/signum.h> -#include <tcb-offsets.h> - -/* The following are defined in linux/sched.h, which unfortunately */ -/* is not safe for inclusion in an assembly file. */ -#define CLONE_VM 0x00000100 /* set if VM shared between processes */ -#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ - -/* pid_t vfork(void); */ -/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ - -ENTRY(__vfork) - .prologue // work around a GAS bug which triggers if - .body // first .prologue is not at the beginning of proc. - alloc r2=ar.pfs,0,0,2,0 - adds r14=PID,r13 - ;; - ld4 r16=[r14] - ;; - sub r15=0,r16 - cmp.eq p6,p0=0,r16 - ;; -(p6) movl r15=0x80000000 - mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD - mov out1=0 /* Standard sp value. */ - ;; - st4 [r14]=r15 - DO_CALL (SYS_ify (clone)) - cmp.eq p6,p0=0,r8 - adds r14=PID,r13 -(p6) br.cond.dptk 1f - ;; - ld4 r15=[r14] - ;; - extr.u r16=r15,0,31 - ;; - cmp.eq p0,p6=0,r16 - ;; -(p6) sub r16=0,r15 - ;; - st4 [r14]=r16 -1: - cmp.eq p6,p0=-1,r10 -(p6) br.cond.spnt.few __syscall_error - ret -PSEUDO_END(__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) |