diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-06-21 04:35:29 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-06-21 04:35:29 +0000 |
commit | 697568d1b48a497024bca234483a157cee79c7a2 (patch) | |
tree | 890f34b715a2a1fdbeaa1307e676e49ea15d3632 | |
parent | 1b97149de806a27fe8f52cd5841c252df168a5b8 (diff) | |
download | glibc-697568d1b48a497024bca234483a157cee79c7a2.zip glibc-697568d1b48a497024bca234483a157cee79c7a2.tar.gz glibc-697568d1b48a497024bca234483a157cee79c7a2.tar.bz2 |
Update.
2000-06-20 Jes Sorensen <jes@linuxcare.com>
* sysdeps/unix/sysv/linux/ia64/syscalls.list: New file.
2000-06-20 Jes Sorensen <jes@linuxcare.com>
* sysdeps/unix/sysv/linux/ia64/machine-gmon.h: New file.
* sysdeps/unix/sysv/linux/ia64/profil-counter.h: New file.
2000-06-20 David Mosberger-Tang <davidm@hpl.hp.com>
* sysdeps/unix/sysv/linux/ia64/getpagesize.c: New file.
2000-06-20 Jes Sorensen <jes@linuxcare.com>
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Fix typo.
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | linuxthreads/ChangeLog | 13 | ||||
-rw-r--r-- | linuxthreads/Examples/ex9.c | 94 | ||||
-rw-r--r-- | linuxthreads/Makefile | 5 | ||||
-rw-r--r-- | linuxthreads/Versions | 3 | ||||
-rw-r--r-- | linuxthreads/barrier.c | 125 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/bits/pthreadtypes.h | 14 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/pthread.h | 30 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/timer_create.c | 16 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/timer_delete.c | 15 | ||||
-rw-r--r-- | linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h | 3 | ||||
-rw-r--r-- | linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/getpagesize.c | 46 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/machine-gmon.h | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/profil-counter.h | 27 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/sys/ucontext.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/syscalls.list | 77 |
17 files changed, 497 insertions, 19 deletions
@@ -1,3 +1,20 @@ +2000-06-20 Jes Sorensen <jes@linuxcare.com> + + * sysdeps/unix/sysv/linux/ia64/syscalls.list: New file. + +2000-06-20 Jes Sorensen <jes@linuxcare.com> + + * sysdeps/unix/sysv/linux/ia64/machine-gmon.h: New file. + * sysdeps/unix/sysv/linux/ia64/profil-counter.h: New file. + +2000-06-20 David Mosberger-Tang <davidm@hpl.hp.com> + + * sysdeps/unix/sysv/linux/ia64/getpagesize.c: New file. + +2000-06-20 Jes Sorensen <jes@linuxcare.com> + + * sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Fix typo. + 2000-06-20 Ulrich Drepper <drepper@redhat.com> * locale/programs/ld-collate.c (insert_value): Now take string and diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index b79ee3f..965ac05 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,16 @@ +2000-06-20 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/posix_opt.h: Define _POSIX_BARRIERS. + * sysdeps/unix/sysv/linux/i386/bits/posix_opt.h: Likewise. + + * Makefile (libpthread-routines): Add barrier. + (tests): Add ex9. Add rule to build ex9. + * Versions: Export barrier functions. + * barrier.c: New file. + * Examples/ex9.c: New file. + * sysdeps/pthread/pthread.h: Add barrier data types and declarations. + * sysdeps/pthread/bits/pthreadtypes.h: Likewise. + 2000-06-19 H.J. Lu <hjl@gnu.org> * spinlock.h (HAS_COMPARE_AND_SWAP): Defined if diff --git a/linuxthreads/Examples/ex9.c b/linuxthreads/Examples/ex9.c new file mode 100644 index 0000000..0c08741 --- /dev/null +++ b/linuxthreads/Examples/ex9.c @@ -0,0 +1,94 @@ +/* Tests for pthread_barrier_* functions. + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by Kaz Kylheku <kaz@ashi.footprints.net>, 2000. + + 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. */ + +#include <errno.h> +#include <error.h> +#include <stdio.h> +#include <stdlib.h> +#include <pthread.h> + +#define NUM_THREADS 10 +#define NUM_ITERS 500 + +static void *thread (void *); +static pthread_barrier_t barrier; + +int +main (void) +{ + pthread_t th; + int i; + + if (pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1) != 0) + error (EXIT_FAILURE, 0, "cannot initialize barrier"); + + for (i = 0; i < NUM_THREADS; i++) + { + if (pthread_create (&th, NULL, thread, NULL) != 0) + error (EXIT_FAILURE, 0, "cannot create thread"); + } + + (void) thread (NULL); + /* notreached */ + return 0; +} + + +static void * +thread (void *arg) +{ + int i; + pthread_t self = pthread_self (); + static pthread_t last_serial_thread; + static int linecount; /* protected by flockfile(stdout) */ + + for (i = 0; i < NUM_ITERS; i++) + { + switch (pthread_barrier_wait (&barrier)) + { + case 0: + flockfile (stdout); + printf ("%04d: non-serial thread %lu\n", ++linecount, + (unsigned long) self); + funlockfile (stdout); + break; + case PTHREAD_BARRIER_SERIAL_THREAD: + flockfile (stdout); + printf ("%04d: serial thread %lu\n", ++linecount, + (unsigned long) self); + funlockfile (stdout); + last_serial_thread = self; + break; + default: + /* Huh? */ + error (EXIT_FAILURE, 0, "unexpected return value from barrier wait"); + } + } + + if (pthread_equal (self, last_serial_thread)) + { + flockfile (stdout); + printf ("%04d: last serial thread %lu terminating process\n", + ++linecount, (unsigned long) self); + funlockfile (stdout); + exit (0); + } + + pthread_exit(NULL); +} diff --git a/linuxthreads/Makefile b/linuxthreads/Makefile index 6e9f814..1b4ecc0 100644 --- a/linuxthreads/Makefile +++ b/linuxthreads/Makefile @@ -35,10 +35,10 @@ extra-libs-others := $(extra-libs) libpthread-routines := attr cancel condvar join manager mutex ptfork \ ptlongjmp pthread signals specific errno lockfile \ semaphore spinlock wrapsyscall rwlock pt-machine \ - oldsemaphore events getcpuclockid pspinlock + oldsemaphore events getcpuclockid pspinlock barrier vpath %.c Examples -tests = ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 joinrace +tests = ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 joinrace include ../Rules @@ -68,4 +68,5 @@ $(objpfx)ex5: $(libpthread) $(objpfx)ex6: $(libpthread) $(objpfx)ex7: $(libpthread) $(objpfx)ex8: $(libpthread) +$(objpfx)ex9: $(libpthread) $(objpfx)joinrace: $(libpthread) diff --git a/linuxthreads/Versions b/linuxthreads/Versions index 327e62e..48f62ae 100644 --- a/linuxthreads/Versions +++ b/linuxthreads/Versions @@ -135,6 +135,9 @@ libpthread { pthread_spin_destroy; pthread_spin_init; pthread_spin_lock; pthread_spin_trylock; pthread_spin_unlock; pthread_getcpuclockid; + pthread_barrier_destroy; pthread_barrier_init; pthread_barrier_wait; + pthread_barrierattr_destroy; pthread_barrierattr_init; + pthread_barrierattr_getpshared; pthread_barrierattr_setpshared; # Extensions. pthread_yield; diff --git a/linuxthreads/barrier.c b/linuxthreads/barrier.c new file mode 100644 index 0000000..1293bad --- /dev/null +++ b/linuxthreads/barrier.c @@ -0,0 +1,125 @@ +/* POSIX barrier implementation for LinuxThreads. + Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Kaz Kylheku <kaz@ashi.footprints.net>, 2000. + + 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. */ + +#include <errno.h> +#include "pthread.h" +#include "internals.h" +#include "spinlock.h" +#include "queue.h" +#include "restart.h" + +int +pthread_barrier_wait(pthread_barrier_t *barrier) +{ + pthread_descr self = thread_self(); + pthread_descr temp_wake_queue, th; + int result = 0; + + __pthread_lock(&barrier->__ba_lock, self); + + /* If the required number of threads have achieved rendezvous... */ + if (barrier->__ba_present >= barrier->__ba_required - 1) + { + /* ... then this last caller shall be the serial thread */ + result = PTHREAD_BARRIER_SERIAL_THREAD; + /* Copy and clear wait queue and reset barrier. */ + temp_wake_queue = barrier->__ba_waiting; + barrier->__ba_waiting = NULL; + barrier->__ba_present = 0; + } + else + { + result = 0; + barrier->__ba_present++; + enqueue(&barrier->__ba_waiting, self); + } + + __pthread_unlock(&barrier->__ba_lock); + + if (result == 0) + { + /* Non-serial threads have to suspend */ + suspend(self); + /* We don't bother dealing with cancellation because the POSIX + spec for barriers doesn't mention that pthread_barrier_wait + is a cancellation point. */ + } + else + { + /* Serial thread wakes up all others. */ + while ((th = dequeue(&temp_wake_queue)) != NULL) + restart(th); + } + + return result; +} + +int +pthread_barrier_init(pthread_barrier_t *barrier, + const pthread_barrierattr_t *attr, + unsigned int count) +{ + if (count == 0) + return EINVAL; + + __pthread_init_lock(&barrier->__ba_lock); + barrier->__ba_required = count; + barrier->__ba_present = 0; + barrier->__ba_waiting = NULL; + return 0; +} + +int +pthread_barrier_destroy(pthread_barrier_t *barrier) +{ + if (barrier->__ba_waiting != NULL) return EBUSY; + return 0; +} + +int +pthread_barrierattr_init(pthread_barrierattr_t *attr) +{ + attr->__pshared = PTHREAD_PROCESS_PRIVATE; + return 0; +} + +int +pthread_barrierattr_destroy(pthread_barrierattr_t *attr) +{ + return 0; +} + +int +__pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, + int *pshared) +{ + *pshared = attr->__pshared; + return 0; +} + +int +pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) +{ + if (pshared != PTHREAD_PROCESS_PRIVATE && pshared != PTHREAD_PROCESS_SHARED) + return EINVAL; + + attr->__pshared = pshared; + return 0; +} diff --git a/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h b/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h index 99e56d2..a53889f 100644 --- a/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h +++ b/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h @@ -118,6 +118,20 @@ typedef struct #ifdef __USE_XOPEN2K /* POSIX spinlock data type. */ typedef volatile int pthread_spinlock_t; + +/* POSIX barrier. */ +typedef struct { + struct _pthread_fastlock __ba_lock; /* Lock to guarantee mutual exclusion */ + int __ba_required; /* Threads needed for completion */ + int __ba_present; /* Threads waiting */ + _pthread_descr __ba_waiting; /* Queue of waiting threads */ +} pthread_barrier_t; + +/* barrier attribute */ +typedef struct { + int __pshared; +} pthread_barrierattr_t; + #endif diff --git a/linuxthreads/sysdeps/pthread/pthread.h b/linuxthreads/sysdeps/pthread/pthread.h index e82c4de..da39e7a 100644 --- a/linuxthreads/sysdeps/pthread/pthread.h +++ b/linuxthreads/sysdeps/pthread/pthread.h @@ -109,6 +109,13 @@ enum #define PTHREAD_ONCE_INIT 0 +/* Special constants */ + +#ifdef __USE_XOPEN2K +/* -1 is distinct from 0 and all errno constants */ +# define PTHREAD_BARRIER_SERIAL_THREAD -1 +#endif + /* Cleanup buffers */ struct _pthread_cleanup_buffer @@ -414,7 +421,7 @@ extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, #endif #ifdef __USE_XOPEN2K -/* The IEEE Std. 10003.1j-2000 introduces functions to implement +/* The IEEE Std. 1003.1j-2000 introduces functions to implement spinlocks. */ /* Initialize the spinlock LOCK. If PSHARED is nonzero the spinlock can @@ -433,6 +440,27 @@ extern int pthread_spin_trylock (pthread_spinlock_t *__lock) __THROW; /* Release spinlock LOCK. */ extern int pthread_spin_unlock (pthread_spinlock_t *__lock) __THROW; + + +/* Barriers are a also a new feature in 1003.1j-2000. */ + +extern int pthread_barrier_init (pthread_barrier_t *__barrier, + __const pthread_barrierattr_t *__attr, + unsigned int __count) __THROW; + +extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) __THROW; + +extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) __THROW; + +extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) __THROW; + +extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *__attr, + int *__pshared) __THROW; + +extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, + int __pshared) __THROW; + +extern int pthread_barrier_wait (pthread_barrier_t *__barrier) __THROW; #endif diff --git a/linuxthreads/sysdeps/pthread/timer_create.c b/linuxthreads/sysdeps/pthread/timer_create.c index cbefb91..1dccd30 100644 --- a/linuxthreads/sysdeps/pthread/timer_create.c +++ b/linuxthreads/sysdeps/pthread/timer_create.c @@ -46,7 +46,7 @@ timer_create (clock_id, evp, timerid) #endif ) { - errno = EINVAL; + __set_errno (EINVAL); return -1; } @@ -54,7 +54,7 @@ timer_create (clock_id, evp, timerid) if (__timer_init_failed) { - errno = ENOMEM; + __set_errno (ENOMEM); return -1; } @@ -63,7 +63,7 @@ timer_create (clock_id, evp, timerid) newtimer = __timer_alloc (); if (__builtin_expect (newtimer == NULL, 0)) { - errno = EAGAIN; + __set_errno (EAGAIN); goto unlock_bail; } @@ -106,13 +106,13 @@ timer_create (clock_id, evp, timerid) break; #endif } - + if (! thread->exists) { if (__builtin_expect (__timer_thread_start (thread), 1) < 0) { - errno = EAGAIN; + __set_errno (EAGAIN); goto unlock_bail; } } @@ -138,7 +138,7 @@ timer_create (clock_id, evp, timerid) /* Out of luck; no threads are available. */ if (__builtin_expect (thread == NULL, 0)) { - errno = EAGAIN; + __set_errno (EAGAIN); goto unlock_bail; } @@ -146,13 +146,13 @@ timer_create (clock_id, evp, timerid) if (! thread->exists && __builtin_expect (! __timer_thread_start (thread), 0)) { - errno = EAGAIN; + __set_errno (EAGAIN); goto unlock_bail; } break; default: - errno = EINVAL; + __set_errno (EINVAL); goto unlock_bail; } diff --git a/linuxthreads/sysdeps/pthread/timer_delete.c b/linuxthreads/sysdeps/pthread/timer_delete.c index 4636bf7..b7d59fe 100644 --- a/linuxthreads/sysdeps/pthread/timer_delete.c +++ b/linuxthreads/sysdeps/pthread/timer_delete.c @@ -36,9 +36,9 @@ timer_delete (timerid) pthread_mutex_lock (&__timer_mutex); timer = timer_id2ptr (timerid); - if (timer == NULL || !timer->inuse) + if (! timer_valid (timer)) /* Invalid timer ID or the timer is not in use. */ - errno = EINVAL; + __set_errno (EINVAL); else { if (timer->armed) @@ -50,16 +50,17 @@ timer_delete (timerid) the mutex is unlocked and timer_delete is aborted. */ pthread_cleanup_push (__timer_mutex_cancel_handler, &__timer_mutex); - /* If timer is currently being serviced, wait for it to finish. */ - while (thread->current_timer == timer) - pthread_cond_wait (&thread->cond, &__timer_mutex); + /* If timer is currently being serviced, wait for it to finish. */ + while (thread->current_timer == timer) + pthread_cond_wait (&thread->cond, &__timer_mutex); - pthread_cleanup_pop (0); + pthread_cleanup_pop (0); } /* Remove timer from whatever queue it may be on and deallocate it. */ + timer->inuse = TIMER_DELETED; list_unlink_ip (&timer->links); - __timer_dealloc (timer); + timer_delref (timer); retval = 0; } diff --git a/linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h b/linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h index 1fde101..a1b5f04 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h +++ b/linuxthreads/sysdeps/unix/sysv/linux/bits/posix_opt.h @@ -131,4 +131,7 @@ /* We have POSIX timers. */ #define _POSIX_TIMERS 1 +/* The barrier functions are available. */ +#define _POSIX_BARRIERS 200912L + #endif /* posix_opt.h */ diff --git a/linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h b/linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h index d31206b..19acebb 100644 --- a/linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h +++ b/linuxthreads/sysdeps/unix/sysv/linux/i386/bits/posix_opt.h @@ -140,4 +140,7 @@ /* We have POSIX timers. */ #define _POSIX_TIMERS 1 +/* The barrier functions are available. */ +#define _POSIX_BARRIERS 200912L + #endif /* posix_opt.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/getpagesize.c b/sysdeps/unix/sysv/linux/ia64/getpagesize.c new file mode 100644 index 0000000..4a5c2eb --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/getpagesize.c @@ -0,0 +1,46 @@ +/* Copyright (C) 1999, 2000 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. */ + +#include <unistd.h> +#include <sys/param.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +/* Return the system page size. The return value will depend on how + the kernel is configured. A program must use this call to + determine the page size to ensure proper alignment for calls such + as mmap and friends. --davidm 99/11/30 */ + +/* If we are not a static program, this value is collected from the system + via the AT_PAGESZ auxiliary argument. If we are a static program, we + use the getpagesize system call. */ + +extern size_t _dl_pagesize; + +extern size_t __syscall_getpagesize (void); + +int +__getpagesize () +{ + if (_dl_pagesize == 0) + _dl_pagesize = INLINE_SYSCALL (getpagesize, 0); + return _dl_pagesize; +} + +weak_alias (__getpagesize, getpagesize) diff --git a/sysdeps/unix/sysv/linux/ia64/machine-gmon.h b/sysdeps/unix/sysv/linux/ia64/machine-gmon.h new file mode 100644 index 0000000..96a1623 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/machine-gmon.h @@ -0,0 +1,26 @@ +/* Machine-specific calling sequence for `mcount' profiling function. IA-64. + Copyright (C) 1995, 1996, 1997, 2000 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. */ + +#define _MCOUNT_DECL(from, self) \ + void __mcount (u_long from, u_long self) + +/* Call __mcount with our the return PC for our caller, and the return + PC our caller will return to. Empty since we use an assembly stub + instead. */ +#define MCOUNT diff --git a/sysdeps/unix/sysv/linux/ia64/profil-counter.h b/sysdeps/unix/sysv/linux/ia64/profil-counter.h new file mode 100644 index 0000000..1cc0390 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/profil-counter.h @@ -0,0 +1,27 @@ +/* Machine-dependent SIGPROF signal handler. IA-64 version. + Copyright (C) 1996, 1997, 2000 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. */ + +/* In many Unix systems signal handlers are called like this + and the interrupted PC is easily findable in the `struct sigcontext'. */ + +static void +profil_counter (int signr, int code, struct sigcontext *scp) +{ + profil_count ((void *) scp->sc_ip); +} diff --git a/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h b/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h index 37ee977..c7adaca 100644 --- a/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/ia64/sys/ucontext.h @@ -54,7 +54,7 @@ typedef struct unsigned long int ss_flags; /* Save state flags. */ unsigned long int br_1, br_2, br_3, br_4, br_5; /* Branch registers. */ unsigned long int p_regs; /* Predicates. */ -} mcountext_; +} mcontext_t; typedef struct ucontext diff --git a/sysdeps/unix/sysv/linux/ia64/syscalls.list b/sysdeps/unix/sysv/linux/ia64/syscalls.list new file mode 100644 index 0000000..dab59dc --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/syscalls.list @@ -0,0 +1,77 @@ +# File name Caller Syscall name # args Strong name Weak names + +umount2 - umount 2 __umount2 umount2 + +# Whee! 64-bit systems naturally implement llseek. +llseek EXTRA lseek 3 __llseek llseek __lseek64 lseek64 +pread - pread 4 __syscall_pread __syscall_pread64 __pread pread __pread64 pread64 +pwrite - pwrite 4 __syscall_pwrite __syscall_pwrite64 __pwrite pwrite __pwrite64 pwrite64 +fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64 +statfs - statfs 2 __statfs statfs statfs64 +mmap - mmap 6 __mmap mmap __mmap64 mmap64 +getpeername - getpeername 3 __getpeername getpeername +getpriority - getpriority 2 __getpriority getpriority + +# semaphore and shm system calls +msgctl - msgctl 3 __msgctl msgctl +msgget - msgget 2 __msgget msgget +msgrcv - msgrcv 5 __msgrcv msgrcv +msgsnd - msgsnd 4 __msgsnd msgsnd +shmat - shmat 3 __shmat shmat +shmctl - shmctl 3 __shmctl shmctl +shmdt - shmdt 1 __shmdt shmdt +shmget - shmget 3 __shmget shmget +semop - semop 3 __semop semop +semget - semget 3 __semget semget +semctl - semctl 4 __semctl semctl + +# proper socket implementations: +accept - accept 3 __libc_accept __accept accept +bind - bind 3 __bind bind +connect - connect 3 __libc_connect __connect connect +getpeername - getpeername 3 __getpeername getpeername +getsockname - getsockname 3 __getsockname getsockname +getsockopt - getsockopt 5 __getsockopt getsockopt +listen - listen 2 __listen listen +recv - recv 4 __libc_recv __recv recv +recvfrom - recvfrom 6 __libc_recvfrom __recvfrom recvfrom +recvmsg - recvmsg 3 __libc_recvmsg recvmsg +send - send 4 __libc_send __send send +sendmsg - sendmsg 3 __libc_sendmsg sendmsg +sendto - sendto 6 __libc_sendto __sendto sendto +setsockopt - setsockopt 5 __setsockopt setsockopt +socket - socket 3 __socket socket +socketpair - socketpair 4 __socketpair socketpair + +# DIG-compliant access to PCI configuration space: +pciconfig_read EXTRA pciconfig_read 5 pciconfig_read +pciconfig_write EXTRA pciconfig_write 5 pciconfig_write + +ptrace - ptrace 4 __ptrace ptrace +shutdown - shutdown 2 __shutdown shutdown +sysctl - _sysctl 6 __sysctl sysctl + +getresuid - getresuid 3 getresuid +getresgid - getresgid 3 getresgid + +rt_sigaction EXTRA rt_sigaction 4 __syscall_rt_sigaction rt_sigaction +rt_sigpending EXTRA rt_sigpending 2 __syscall_rt_sigpending rt_sigpending +rt_sigprocmask EXTRA rt_sigprocmask 4 __syscall_rt_sigprocmask rt_sigprocmask +rt_sigqueueinfo EXTRA rt_sigqueueinfo 3 __syscall_rt_sigqueueinfo rt_sigqueueinfo +rt_sigsuspend EXTRA rt_sigsuspend 2 __syscall_rt_sigsuspend rt_sigsuspend +rt_sigtimedwait EXTRA rt_sigtimedwait 4 __syscall_rt_sigtimedwait rt_sigtimedwait + +# System calls with wrappers. +s_execve execve execve 3 __syscall_execve +s_getcwd getcwd getcwd 2 __syscall_getcwd getcwd +s_getdents getdents getdents 3 __syscall_getdents getdents +sys_mknod xmknod mknod 3 __syscall_mknod +sys_readv readv readv 3 __syscall_readv +sys_writev writev writev 3 __syscall_writev +s_getpagesize getpagesize getpagesize 0 __syscall_getpagesize +s_poll poll poll 3 __syscall_poll +s_reboot reboot reboot 3 __syscall_reboot +s_ustat ustat ustat 2 __syscall_ustat +s_stat xstat stat 2 __syscall_stat +s_lstat lxstat lstat 2 __syscall_lstat +s_fstat fxstat fstat 2 __syscall_fstat |