diff options
28 files changed, 1146 insertions, 123 deletions
@@ -1,3 +1,29 @@ +1998-06-30 11:47 Ulrich Drepper <drepper@cygnus.com> + + * include/aio.h: New file. + * posix/Makefile (distribute): Add bits/pthreadtypes.h. + (tests): Build and run annexc program. + * posix/annexc.c: New file. + * posix/bits/posix1_lim.h: Add several more _POSIX_* limits. + * rt/aio.h: Remove __need_timespec_t. We can include the whole time.h. + * rt/aio_misc.c: Include limits.h. + * rt/aio_notify.c: Include errno.h. + * sysdeps/unix/sysv/linux/alpha/bits/types.h: Include pthreadtypes.h. + Define size_t. + * sysdeps/unix/sysv/linux/bits/types.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/types.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Likewise. + * sysdeps/unix/sysv/linux/bits/errno.h: Define ENOTSUP though the + kernel doesn't do this. + * sysdeps/unix/sysv/linux/bits/fcntl.h: Define O_LARGEFILE only if + __USE_LARGEFILE64 is defined. + * sysdeps/unix/sysv/linux/bits/pthreadtypes.h: New file. Empty. + * sysdeps/unix/sysv/linux/bits/sched.h: Define __sched_param struct + if requested. + * sysdeps/unix/sysv/linux/bits/siginifo.h: Protect non-standard names. + + * stdlib/isomac.c: Avoid include_next warning. + 1998-06-29 12:27 Ulrich Drepper <drepper@cygnus.com> * argp/argp.h: Use __PMT instead of __P for function pointer. diff --git a/include/aio.h b/include/aio.h new file mode 100644 index 0000000000..c2a4145a86 --- /dev/null +++ b/include/aio.h @@ -0,0 +1 @@ +#include <rt/aio.h> diff --git a/linuxthreads/attr.c b/linuxthreads/attr.c index d1f605810f..cdd27d6012 100644 --- a/linuxthreads/attr.c +++ b/linuxthreads/attr.c @@ -14,6 +14,7 @@ /* Handling of thread attributes */ +#include <errno.h> #include <unistd.h> #include <sys/param.h> #include "pthread.h" @@ -79,14 +80,14 @@ int pthread_attr_setschedparam(pthread_attr_t *attr, if (param->sched_priority < min_prio || param->sched_priority > max_prio) return EINVAL; - attr->schedparam = *param; + memcpy (&attr->schedparam, param, sizeof (struct sched_param)); return 0; } int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param) { - *param = attr->schedparam; + memcpy (param, &attr->schedparam, sizeof (struct sched_param)); return 0; } diff --git a/linuxthreads/internals.h b/linuxthreads/internals.h index 9d6f2fadcf..d68adeb987 100644 --- a/linuxthreads/internals.h +++ b/linuxthreads/internals.h @@ -17,6 +17,7 @@ /* Includes */ #include <bits/libc-lock.h> /* for _LIBC_TSD_KEY_N */ +#include <limits.h> #include <setjmp.h> #include <signal.h> #include <unistd.h> diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index e69abac009..7d48489f76 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -303,7 +303,8 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, switch(attr->inheritsched) { case PTHREAD_EXPLICIT_SCHED: new_thread->p_start_args.schedpolicy = attr->schedpolicy; - new_thread->p_start_args.schedparam = attr->schedparam; + memcpy (&new_thread->p_start_args.schedparam, &attr->schedparam, + sizeof (struct sched_param)); break; case PTHREAD_INHERIT_SCHED: /* schedpolicy doesn't need to be set, only get priority */ diff --git a/linuxthreads/ptfork.c b/linuxthreads/ptfork.c index 8a7b7972a3..32b1d26d92 100644 --- a/linuxthreads/ptfork.c +++ b/linuxthreads/ptfork.c @@ -14,6 +14,7 @@ /* The "atfork" stuff */ +#include <errno.h> #include <stddef.h> #include <stdlib.h> #include <unistd.h> diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index 4e8a9f1dd7..a7511f7eee 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -14,6 +14,7 @@ /* Thread creation, initialization, and basic low-level routines */ +#include <errno.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> diff --git a/linuxthreads/semaphore.c b/linuxthreads/semaphore.c index 7ca609f6b2..6f79dc0138 100644 --- a/linuxthreads/semaphore.c +++ b/linuxthreads/semaphore.c @@ -14,6 +14,7 @@ /* Semaphores a la POSIX 1003.1b */ +#include <errno.h> #include "pthread.h" #include "semaphore.h" #include "internals.h" diff --git a/linuxthreads/specific.c b/linuxthreads/specific.c index 71f1ede541..12990f454c 100644 --- a/linuxthreads/specific.c +++ b/linuxthreads/specific.c @@ -14,6 +14,7 @@ /* Thread-specific data */ +#include <errno.h> #include <stddef.h> #include <stdlib.h> #include "pthread.h" diff --git a/linuxthreads/spinlock.c b/linuxthreads/spinlock.c index df30c35e6c..2546e2a6e0 100644 --- a/linuxthreads/spinlock.c +++ b/linuxthreads/spinlock.c @@ -14,6 +14,7 @@ /* Internal locks */ +#include <errno.h> #include <sched.h> #include <time.h> #include "pthread.h" diff --git a/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h b/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h new file mode 100644 index 0000000000..20b0bed311 --- /dev/null +++ b/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h @@ -0,0 +1,119 @@ +/* Linuxthreads - a simple clone()-based implementation of Posix */ +/* threads for Linux. */ +/* Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) */ +/* */ +/* This program 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. */ +/* */ +/* This program 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. */ + +#if !defined _BITS_TYPES_H && !defined _PTHREAD_H +# error "Never include <bits/pthreadtypes.h> directly; use <sys/types.h> instead." +#endif + +#ifndef _BITS_PTHREADTYPES_H +#define _BITS_PTHREADTYPES_H 1 + +#define __need_schedparam +#include <bits/sched.h> + +/* Fast locks (not abstract because mutexes and conditions aren't abstract). */ +struct _pthread_fastlock +{ + long int status; /* "Free" or "taken" or head of waiting list */ + int spinlock; /* For compare-and-swap emulation */ +}; + +/* Thread descriptors */ +typedef struct _pthread_descr_struct *_pthread_descr; + + +/* Attributes for threads. */ +typedef struct +{ + int detachstate; + int schedpolicy; + struct __sched_param schedparam; + int inheritsched; + int scope; + size_t guardsize; + int stackaddr_set; + void *stackaddr; + size_t stacksize; +} pthread_attr_t; + + +/* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */ +typedef struct +{ + struct _pthread_fastlock c_lock; /* Protect against concurrent access */ + _pthread_descr c_waiting; /* Threads waiting on this condition */ +} pthread_cond_t; + + +/* Attribute for conditionally variables. */ +typedef struct +{ + int dummy; +} pthread_condattr_t; + +/* Keys for thread-specific data */ +typedef unsigned int pthread_key_t; + + +/* Mutexes (not abstract because of PTHREAD_MUTEX_INITIALIZER). */ +/* (The layout is unnatural to maintain binary compatibility + with earlier releases of LinuxThreads.) */ +typedef struct +{ + int m_reserved; /* Reserved for future use */ + int m_count; /* Depth of recursive locking */ + _pthread_descr m_owner; /* Owner thread (if recursive or errcheck) */ + int m_kind; /* Mutex kind: fast, recursive or errcheck */ + struct _pthread_fastlock m_lock; /* Underlying fast lock */ +} pthread_mutex_t; + + +/* Attribute for mutex. */ +typedef struct +{ + int mutexkind; +} pthread_mutexattr_t; + + +/* Once-only execution */ +typedef int pthread_once_t; + + +#ifdef __USE_UNIX98 +/* Read-write locks. */ +typedef struct +{ + struct _pthread_fastlock rw_lock; /* Lock to guarantee mutual exclusion */ + int rw_readers; /* Number of readers */ + _pthread_descr rw_writer; /* Identity of writer, or NULL if none */ + _pthread_descr rw_read_waiting; /* Threads waiting for reading */ + _pthread_descr rw_write_waiting; /* Threads waiting for writing */ + int rw_kind; /* Reader/Writer preference selection */ + int rw_pshared; /* Shared between processes or not */ +} pthread_rwlock_t; + + +/* Attribute for read-write locks. */ +typedef struct +{ + int lockkind; + int pshared; +} pthread_rwlockattr_t; +#endif + + +/* Thread identifiers */ +typedef unsigned long int pthread_t; + +#endif /* bits/pthreadtypes.h */ diff --git a/linuxthreads/sysdeps/pthread/pthread.h b/linuxthreads/sysdeps/pthread/pthread.h index 7e98123f43..1d402e6329 100644 --- a/linuxthreads/sysdeps/pthread/pthread.h +++ b/linuxthreads/sysdeps/pthread/pthread.h @@ -17,85 +17,34 @@ #include <features.h> -#include <errno.h> -#include <limits.h> #include <sched.h> -#include <unistd.h> +#include <time.h> #define __need_sigset_t #include <signal.h> -#define __need_timespec -#include <time.h> - -/* Linux has no ENOTSUP error code. */ -#ifndef ENOTSUP -#define ENOTSUP EOPNOTSUPP -#endif +#include <bits/pthreadtypes.h> __BEGIN_DECLS -/*** Types ***/ - -/* Thread identifiers */ -typedef unsigned long int pthread_t; - -/* Thread descriptors */ -typedef struct _pthread_descr_struct *_pthread_descr; - -/* Fast locks (not abstract because mutexes and conditions aren't abstract). */ -struct _pthread_fastlock -{ - long int status; /* "Free" or "taken" or head of waiting list */ - int spinlock; /* For compare-and-swap emulation */ -}; - -/* Mutexes (not abstract because of PTHREAD_MUTEX_INITIALIZER). */ -/* (The layout is unnatural to maintain binary compatibility - with earlier releases of LinuxThreads.) */ - -typedef struct -{ - int m_reserved; /* Reserved for future use */ - int m_count; /* Depth of recursive locking */ - _pthread_descr m_owner; /* Owner thread (if recursive or errcheck) */ - int m_kind; /* Mutex kind: fast, recursive or errcheck */ - struct _pthread_fastlock m_lock; /* Underlying fast lock */ -} pthread_mutex_t; +/* Initializers. */ #define PTHREAD_MUTEX_INITIALIZER \ {0, 0, 0, PTHREAD_MUTEX_FAST_NP, {0, 0}} -#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ +#ifdef __USE_GNU +# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ {0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, {0, 0}} - -/* Conditions (not abstract because of PTHREAD_COND_INITIALIZER */ -typedef struct -{ - struct _pthread_fastlock c_lock; /* Protect against concurrent access */ - _pthread_descr c_waiting; /* Threads waiting on this condition */ -} pthread_cond_t; +#endif #define PTHREAD_COND_INITIALIZER {{0, 0}, 0} #ifdef __USE_UNIX98 -/* Read-write locks. */ -typedef struct -{ - struct _pthread_fastlock rw_lock; /* Lock to guarantee mutual exclusion */ - int rw_readers; /* Number of readers */ - _pthread_descr rw_writer; /* Identity of writer, or NULL if none */ - _pthread_descr rw_read_waiting; /* Threads waiting for reading */ - _pthread_descr rw_write_waiting; /* Threads waiting for writing */ - int rw_kind; /* Reader/Writer preference selection */ - int rw_pshared; /* Shared between processes or not */ -} pthread_rwlock_t; - # define PTHREAD_RWLOCK_INITIALIZER \ { {0, 0}, 0, NULL, NULL, NULL, \ PTHREAD_RWLOCK_DEFAULT_NP, PTHREAD_PROCESS_PRIVATE } #endif -/* Attributes */ +/* Values for attributes. */ enum { @@ -121,19 +70,6 @@ enum #define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS }; -typedef struct -{ - int detachstate; - int schedpolicy; - struct sched_param schedparam; - int inheritsched; - int scope; - size_t guardsize; - int stackaddr_set; - void *stackaddr; - size_t stacksize; -} pthread_attr_t; - enum { PTHREAD_MUTEX_FAST_NP, @@ -148,46 +84,22 @@ enum #endif }; -typedef struct -{ - int mutexkind; -} pthread_mutexattr_t; - -typedef struct -{ - int dummy; -} pthread_condattr_t; - -#ifdef __USE_UNIX98 enum { PTHREAD_PROCESS_PRIVATE, -# define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE +#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_SHARED -# define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED +#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED }; +#ifdef __USE_UNIX98 enum { PTHREAD_RWLOCK_PREFER_READER_NP, PTHREAD_RWLOCK_PREFER_WRITER_NP, PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_WRITER_NP }; - -typedef struct -{ - int lockkind; - int pshared; -} pthread_rwlockattr_t; -#endif - -/* Keys for thread-specific data */ - -typedef unsigned int pthread_key_t; - -/* Once-only execution */ - -typedef int pthread_once_t; +#endif /* Unix98 */ #define PTHREAD_ONCE_INIT 0 @@ -592,7 +504,8 @@ extern void _pthread_cleanup_pop __P ((struct _pthread_cleanup_buffer *__buffer, /* Install a cleanup handler as pthread_cleanup_push does, but also saves the current cancellation type and set it to deferred cancellation. */ -#define pthread_cleanup_push_defer_np(routine,arg) \ +#ifdef __USE_GNU +# define pthread_cleanup_push_defer_np(routine,arg) \ { struct _pthread_cleanup_buffer _buffer; \ _pthread_cleanup_push_defer (&_buffer, (routine), (arg)); @@ -604,11 +517,12 @@ extern void _pthread_cleanup_push_defer __P ((struct _pthread_cleanup_buffer *__ restores the cancellation type that was in effect when the matching pthread_cleanup_push_defer was called. */ -#define pthread_cleanup_pop_restore_np(execute) \ +# define pthread_cleanup_pop_restore_np(execute) \ _pthread_cleanup_pop_restore (&_buffer, (execute)); } extern void _pthread_cleanup_pop_restore __P ((struct _pthread_cleanup_buffer *__buffer, int __execute)); +#endif /* Functions for handling signals. */ diff --git a/posix/Makefile b/posix/Makefile index 20c1c2b44c..ae3a40b04c 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -26,7 +26,8 @@ headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \ bits/posix1_lim.h bits/posix2_lim.h bits/posix_opt.h \ bits/local_lim.h tar.h bits/utsname.h bits/confname.h \ bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h \ - bits/sched.h re_comp.h wait.h bits/environments.h cpio.h + bits/sched.h re_comp.h wait.h bits/environments.h cpio.h \ + bits/pthreadtypes.h distribute := confstr.h TESTS TESTS2C.sed testcases.h \ PTESTS PTESTS2C.sed ptestcases.h \ @@ -132,3 +133,11 @@ endif %.gz: % gzip -9v -c $< > $@-tmp mv $@-tmp $@ + +# Run a test on the header files we use. +# XXX Please note that for now we ignore the result of this test. +tests: $(objpfx)annexc + -$(dir $<)$(notdir $<) '$(CC)' '-I../include -I../include -I.. $(+sysdep-includes) -I../include -I../include -I..' > $<.out + +$(objpfx)annexc: annexc.c + $(native-compile) diff --git a/posix/annexc.c b/posix/annexc.c new file mode 100644 index 0000000000..dbc5e28520 --- /dev/null +++ b/posix/annexc.c @@ -0,0 +1,867 @@ +/* Copyright (C) 1998 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 |
