glibc (2.38)

(root)/
include/
bits/
struct_rwlock.h
       1  /* x86 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    unsigned int __readers;
      26    unsigned int __writers;
      27    unsigned int __wrphase_futex;
      28    unsigned int __writers_futex;
      29    unsigned int __pad3;
      30    unsigned int __pad4;
      31  #ifdef __x86_64__
      32    int __cur_writer;
      33    int __shared;
      34    signed char __rwelision;
      35  # ifdef  __ILP32__
      36    unsigned char __pad1[3];
      37  #  define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0 }
      38  # else
      39    unsigned char __pad1[7];
      40  #  define __PTHREAD_RWLOCK_ELISION_EXTRA 0, { 0, 0, 0, 0, 0, 0, 0 }
      41  # endif
      42    unsigned long int __pad2;
      43    /* FLAGS must stay at this position in the structure to maintain
      44       binary compatibility.  */
      45    unsigned int __flags;
      46  #else /* __x86_64__  */
      47    /* FLAGS must stay at this position in the structure to maintain
      48       binary compatibility.  */
      49    unsigned char __flags;
      50    unsigned char __shared;
      51    signed char __rwelision;
      52    unsigned char __pad2;
      53    int __cur_writer;
      54  #endif
      55  };
      56  
      57  #ifdef __x86_64__
      58  # define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
      59    0, 0, 0, 0, 0, 0, 0, 0, __PTHREAD_RWLOCK_ELISION_EXTRA, 0, __flags
      60  #else
      61  # define __PTHREAD_RWLOCK_INITIALIZER(__flags) \
      62    0, 0, 0, 0, 0, 0, __flags, 0, 0, 0, 0
      63  #endif
      64  
      65  #endif