1  /* HPPA  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     <http://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef _RWLOCK_INTERNAL_H
      21  #define _RWLOCK_INTERNAL_H
      22  
      23  struct __pthread_rwlock_arch_t
      24  {
      25    /* In the old Linuxthreads pthread_rwlock_t, this is the
      26       start of the 4-word 16-byte aligned lock structure. The
      27       next four words are all set to 1 by the Linuxthreads
      28       PTHREAD_RWLOCK_INITIALIZER. We ignore them in NPTL.  */
      29    int __compat_padding[4] __attribute__ ((__aligned__(16)));
      30    unsigned int __readers;
      31    unsigned int __writers;
      32    unsigned int __wrphase_futex;
      33    unsigned int __writers_futex;
      34    unsigned int __pad3;
      35    unsigned int __pad4;
      36    int __cur_writer;
      37    /* An unused word, reserved for future use. It was added
      38       to maintain the location of the flags from the Linuxthreads
      39       layout of this structure.  */
      40    int __reserved1;
      41    /* FLAGS must stay at this position in the structure to maintain
      42       binary compatibility.  */
      43    unsigned char __pad2;
      44    unsigned char __pad1;
      45    unsigned char __shared;
      46    unsigned char __flags;
      47    /* The NPTL pthread_rwlock_t is 4 words smaller than the
      48       Linuxthreads version. One word is in the middle of the
      49       structure, the other three are at the end.  */
      50    int __reserved2;
      51    int __reserved3;
      52    int __reserved4;
      53  };
      54  
      55  #define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
      56    { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, __flags, 0, 0, 0
      57  
      58  #endif