diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2017-11-09 19:41:02 -0200 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-11-26 13:53:36 +0000 |
commit | 7df8af43ad1cd8ce527444de50bee6f35eebe071 (patch) | |
tree | ebc286926fa33ca713f4cc4ad386aef0d094ae62 /sysdeps/riscv | |
parent | 1c3f9acf1f1f75faa7a28bf39af64afda93839ac (diff) | |
download | glibc-7df8af43ad1cd8ce527444de50bee6f35eebe071.tar.gz glibc-7df8af43ad1cd8ce527444de50bee6f35eebe071.tar.xz glibc-7df8af43ad1cd8ce527444de50bee6f35eebe071.zip |
nptl: Add struct_rwlock.h
This patch adds a new generic __pthread_rwlock_arch_t definition meant to be used by new ports. Its layout mimics the current usage on some 64 bits ports and it allows some ports to use the generic definition. The arch __pthread_rwlock_arch_t definition is moved from pthreadtypes-arch.h to another arch-specific header (struct_rwlock.h). Also the static intialization macro for pthread_rwlock_t is set to use an arch defined on (__PTHREAD_RWLOCK_INITIALIZER) which simplifies its implementation. The default pthread_rwlock_t layout differs from current ports with: 1. Internal layout is the same for 32 bits and 64 bits. 2. Internal flag is an unsigned short so it should not required additional padding to align for word boundary (if it is the case for the ABI). Checked with a build on affected abis. Change-Id: I776a6a986c23199929d28a3dcd30272db21cd1d0
Diffstat (limited to 'sysdeps/riscv')
-rw-r--r-- | sysdeps/riscv/nptl/bits/pthreadtypes-arch.h | 19 | ||||
-rw-r--r-- | sysdeps/riscv/nptl/bits/struct_rwlock.h | 45 |
2 files changed, 45 insertions, 19 deletions
diff --git a/sysdeps/riscv/nptl/bits/pthreadtypes-arch.h b/sysdeps/riscv/nptl/bits/pthreadtypes-arch.h index 31f46ecbde..330c302fd2 100644 --- a/sysdeps/riscv/nptl/bits/pthreadtypes-arch.h +++ b/sysdeps/riscv/nptl/bits/pthreadtypes-arch.h @@ -38,23 +38,4 @@ #define __LOCK_ALIGNMENT #define __ONCE_ALIGNMENT -/* There is a lot of padding in this structure. While it's not strictly - necessary on RISC-V, we're going to leave it in to be on the safe side in - case it's needed in the future. Most other architectures have the padding, - so this gives us the same extensibility as everyone else has. */ -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - int __cur_writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - unsigned int __flags; -}; - #endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/riscv/nptl/bits/struct_rwlock.h b/sysdeps/riscv/nptl/bits/struct_rwlock.h new file mode 100644 index 0000000000..65a094eedc --- /dev/null +++ b/sysdeps/riscv/nptl/bits/struct_rwlock.h @@ -0,0 +1,45 @@ +/* RISC-V internal rwlock struct definitions. + Copyright (C) 2019 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _RWLOCK_INTERNAL_H +#define _RWLOCK_INTERNAL_H + +/* There is a lot of padding in this structure. While it's not strictly + necessary on RISC-V, we're going to leave it in to be on the safe side in + case it's needed in the future. Most other architectures have the padding, + so this gives us the same extensibility as everyone else has. */ +struct __pthread_rwlock_arch_t +{ + unsigned int __readers; + unsigned int __writers; + unsigned int __wrphase_futex; + unsigned int __writers_futex; + unsigned int __pad3; + unsigned int __pad4; + int __cur_writer; + int __shared; + unsigned long int __pad1; + unsigned long int __pad2; + unsigned int __flags; +}; + +#define __PTHREAD_RWLOCK_INITIALIZER(__flags) \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags + +#endif |