(root)/
glibc-2.38/
sysdeps/
riscv/
nptl/
bits/
struct_rwlock.h
       1  /* RISC-V internal rwlock struct definitions.
       2     Copyright (C) 2019-2023 Free Software Foundation, Inc.
       3  
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef _RWLOCK_INTERNAL_H
      21  #define _RWLOCK_INTERNAL_H
      22  
      23  /* There is a lot of padding in this structure.  While it's not strictly
      24     necessary on RISC-V, we're going to leave it in to be on the safe side in
      25     case it's needed in the future.  Most other architectures have the padding,
      26     so this gives us the same extensibility as everyone else has.  */
      27  struct __pthread_rwlock_arch_t
      28  {
      29    unsigned int __readers;
      30    unsigned int __writers;
      31    unsigned int __wrphase_futex;
      32    unsigned int __writers_futex;
      33    unsigned int __pad3;
      34    unsigned int __pad4;
      35  #if __WORDSIZE == 64
      36    int __cur_writer;
      37    int __shared;
      38    unsigned long int __pad1;
      39    unsigned long int __pad2;
      40    unsigned int __flags;
      41  #else
      42  # if __BYTE_ORDER == __BIG_ENDIAN
      43    unsigned char __pad1;
      44    unsigned char __pad2;
      45    unsigned char __shared;
      46    unsigned char __flags;
      47  # else
      48    unsigned char __flags;
      49    unsigned char __shared;
      50    unsigned char __pad1;
      51    unsigned char __pad2;
      52  # endif
      53    int __cur_writer;
      54  #endif
      55  };
      56  
      57  #if __WORDSIZE == 64
      58  # define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
      59    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags
      60  #elif __BYTE_ORDER == __BIG_ENDIAN
      61  # define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
      62    0, 0, 0, 0, 0, 0, 0, 0, 0, __flags, 0
      63  #else
      64  # define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
      65    0, 0, 0, 0, 0, 0, __flags, 0, 0, 0, 0
      66  #endif
      67  
      68  #endif