diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-12-13 15:20:32 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-12-16 14:27:25 +0100 |
commit | 749cd2ca7893702f762de9d9852a39973eb044a0 (patch) | |
tree | b49f025bb86f10220b87f3832cfefed404740b45 | |
parent | a28296e778ad464d2ba6289446668c3d0dcf1236 (diff) | |
download | glibc-749cd2ca7893702f762de9d9852a39973eb044a0.zip glibc-749cd2ca7893702f762de9d9852a39973eb044a0.tar.gz glibc-749cd2ca7893702f762de9d9852a39973eb044a0.tar.bz2 |
htl: Get sem_open/sem_close/sem_unlink support [BZ #25524]
This just moves the existing nptl implementation to reuse as it is in
htl.
-rw-r--r-- | htl/Makefile | 4 | ||||
-rw-r--r-- | htl/semaphoreP.h | 49 | ||||
-rw-r--r-- | sysdeps/htl/sem-close.c | 31 | ||||
-rw-r--r-- | sysdeps/htl/sem-open.c | 31 | ||||
-rw-r--r-- | sysdeps/htl/sem-unlink.c | 31 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/Makefile | 7 | ||||
-rw-r--r-- | sysdeps/pthread/sem_close.c (renamed from nptl/sem_close.c) | 0 | ||||
-rw-r--r-- | sysdeps/pthread/sem_open.c (renamed from nptl/sem_open.c) | 0 | ||||
-rw-r--r-- | sysdeps/pthread/sem_unlink.c (renamed from nptl/sem_unlink.c) | 0 |
9 files changed, 51 insertions, 102 deletions
diff --git a/htl/Makefile b/htl/Makefile index 901deae..7eccd7a 100644 --- a/htl/Makefile +++ b/htl/Makefile @@ -128,8 +128,8 @@ libpthread-routines := pt-attr pt-attr-destroy pt-attr-getdetachstate \ pt-getschedparam pt-setschedparam pt-setschedprio \ pt-yield \ \ - sem-close sem-destroy sem-getvalue sem-init sem-open \ - sem-post sem-timedwait sem-trywait sem-unlink \ + sem_close sem-destroy sem-getvalue sem-init sem_open \ + sem-post sem-timedwait sem-trywait sem_unlink \ sem-wait sem-waitfast \ \ shm-directory \ diff --git a/htl/semaphoreP.h b/htl/semaphoreP.h new file mode 100644 index 0000000..2273212 --- /dev/null +++ b/htl/semaphoreP.h @@ -0,0 +1,49 @@ +/* Copyright (C) 2002-2020 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, see + <https://www.gnu.org/licenses/>. */ + +#include <semaphore.h> +#include "pt-internal.h" + +#define SEM_SHM_PREFIX "sem." + +/* Keeping track of currently used mappings. */ +struct inuse_sem +{ + dev_t dev; + ino_t ino; + int refcnt; + sem_t *sem; + char name[0]; +}; + + +/* The search tree for existing mappings. */ +extern void *__sem_mappings attribute_hidden; + +/* Lock to protect the search tree. */ +extern int __sem_mappings_lock attribute_hidden; + + +/* Comparison function for search in tree with existing mappings. */ +extern int __sem_search (const void *a, const void *b) attribute_hidden; + +static inline void __new_sem_open_init (struct new_sem *sem, unsigned value) +{ + /* This always is a shared semaphore. */ + *sem = (struct new_sem) __SEMAPHORE_INITIALIZER (1, value); +} diff --git a/sysdeps/htl/sem-close.c b/sysdeps/htl/sem-close.c deleted file mode 100644 index e568758..0000000 --- a/sysdeps/htl/sem-close.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Close a named semaphore. Generic version. - Copyright (C) 2005-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <semaphore.h> -#include <errno.h> - -#include <pt-internal.h> - -int -__sem_close (sem_t *sem) -{ - errno = EOPNOTSUPP; - return -1; -} - -strong_alias (__sem_close, sem_close); diff --git a/sysdeps/htl/sem-open.c b/sysdeps/htl/sem-open.c deleted file mode 100644 index 682f0e1..0000000 --- a/sysdeps/htl/sem-open.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Open a named semaphore. Generic version. - Copyright (C) 2005-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <semaphore.h> -#include <errno.h> - -#include <pt-internal.h> - -sem_t * -__sem_open (const char *name, int open_flags, ...) -{ - errno = ENOSYS; - return SEM_FAILED; -} - -strong_alias (__sem_open, sem_open); diff --git a/sysdeps/htl/sem-unlink.c b/sysdeps/htl/sem-unlink.c deleted file mode 100644 index c92c831..0000000 --- a/sysdeps/htl/sem-unlink.c +++ /dev/null @@ -1,31 +0,0 @@ -/* Unlink a named semaphore. Generic version. - Copyright (C) 2005-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <semaphore.h> -#include <errno.h> - -#include <pt-internal.h> - -int -__sem_unlink (const char *name) -{ - errno = EOPNOTSUPP; - return -1; -} - -strong_alias (__sem_unlink, sem_unlink); diff --git a/sysdeps/mach/hurd/i386/Makefile b/sysdeps/mach/hurd/i386/Makefile index d056e06..7400ea9 100644 --- a/sysdeps/mach/hurd/i386/Makefile +++ b/sysdeps/mach/hurd/i386/Makefile @@ -129,13 +129,6 @@ test-xfail-tst-signal2 = yes test-xfail-tst-cond24 = yes test-xfail-tst-cond25 = yes -# For bug 25524 -# (sem_open support) -test-xfail-tst-sem4 = yes -test-xfail-tst-sem7 = yes -test-xfail-tst-sem8 = yes -test-xfail-tst-sem9 = yes - # For bug 25563 # (robust support against dead threads) test-xfail-tst-robust1 = yes diff --git a/nptl/sem_close.c b/sysdeps/pthread/sem_close.c index 5eea0e1..5eea0e1 100644 --- a/nptl/sem_close.c +++ b/sysdeps/pthread/sem_close.c diff --git a/nptl/sem_open.c b/sysdeps/pthread/sem_open.c index 634bdf7..634bdf7 100644 --- a/nptl/sem_open.c +++ b/sysdeps/pthread/sem_open.c diff --git a/nptl/sem_unlink.c b/sysdeps/pthread/sem_unlink.c index 41fbb2c..41fbb2c 100644 --- a/nptl/sem_unlink.c +++ b/sysdeps/pthread/sem_unlink.c |