From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) by sourceware.org (Postfix) with ESMTPS id A6E0F3858D35 for ; Thu, 9 Jul 2020 00:14:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A6E0F3858D35 IronPort-SDR: ND0/qwGOM0kwvqt/APeefFDwzAx4VeewLVdVgd9jU8p2fMxjbVMzviqxivDKXwOS+2gZ/NB0ZT CqIG1NMdnXYIefiNGiatx8Tqd6YIdumAAiVTDoe8e8mrX2u2mEtkOfll0I7eHsXFeUJ+9VYWUh mVwm4oKQNTLpo62hCqCxMHp2QD9TWyfI6mpqKcz4/27cCI1x7ZU2oZK8Pqs3CI+fRQsW6Hp+SQ zsZIRsFw9TvY4b20lg3BARjvbWuZG9Nve+YaA4Ffiv4zUUj+SNCwFYP/W5sbINfAWnEvcI4j6s qqY= X-IronPort-AV: E=Sophos;i="5.75,329,1589212800"; d="scan'208";a="143297587" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 09 Jul 2020 08:14:19 +0800 IronPort-SDR: ruz4q4KQB8qXzc5AtblEjZog7PZB2uk0j6m0VG0tIGfk0CSgCzeY2kDEixVU5OBH160cyJ81cF AXffxnAW9r1/8KJYgRUdq/fwe/04oyJt0= Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2020 17:02:23 -0700 IronPort-SDR: 5krnBMe0DUZaaiXGwId/NNSN4ITUSS7bMgI84+6xgvRC87rHG6Dq3RGiZEjt8jttwxbu9atKE6 zRc9xD+EJobA== WDCIronportException: Internal Received: from unknown (HELO redsun52) ([10.149.66.28]) by uls-op-cesaip01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jul 2020 17:14:18 -0700 Date: Thu, 9 Jul 2020 01:14:15 +0100 (BST) From: "Maciej W. Rozycki" To: Alistair Francis cc: libc-alpha@sourceware.org Subject: Re: [PATCH v2 07/18] RISC-V: nptl: update default pthread-offsets.h In-Reply-To: <25ef7709e4468a35cc42607cfc0f233d4cec3c25.1591201405.git.alistair.francis@wdc.com> Message-ID: References: <25ef7709e4468a35cc42607cfc0f233d4cec3c25.1591201405.git.alistair.francis@wdc.com> User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 00:14:22 -0000 On Wed, 3 Jun 2020, Alistair Francis via Libc-alpha wrote: > diff --git a/sysdeps/riscv/nptl/pthread-offsets.h b/sysdeps/riscv/nptl/pthread-offsets.h > index 31f0587bec..a85c752a1f 100644 > --- a/sysdeps/riscv/nptl/pthread-offsets.h > +++ b/sysdeps/riscv/nptl/pthread-offsets.h > @@ -1,3 +1,12 @@ > -#define __PTHREAD_MUTEX_KIND_OFFSET 16 > +#if __WORDSIZE == 64 > +# define __PTHREAD_MUTEX_KIND_OFFSET 16 > +#else > +# define __PTHREAD_MUTEX_KIND_OFFSET 12 > +#endif OK, we have: typedef union { struct __pthread_mutex_s __data; char __size[__SIZEOF_PTHREAD_MUTEX_T]; long int __align; } pthread_mutex_t; and then: struct __pthread_mutex_s { int __lock __LOCK_ALIGNMENT; unsigned int __count; int __owner; #if __WORDSIZE == 64 unsigned int __nusers; #endif int __kind; #if __WORDSIZE != 64 unsigned int __nusers; #endif which means the `__nusers' and `__kind' members are swapped between 64-bit and 32-bit hosts. Which I find kind of weird (what for?), but the offset of `__kind' changes accordingly and the values are correct. > -#define __PTHREAD_RWLOCK_FLAGS_OFFSET 48 > + > +#if __WORDSIZE == 64 > +# define __PTHREAD_RWLOCK_FLAGS_OFFSET 48 > +#else > +# define __PTHREAD_RWLOCK_FLAGS_OFFSET 24 > +#endif Likewise (as from 09/18): typedef union { struct __pthread_rwlock_arch_t __data; char __size[__SIZEOF_PTHREAD_RWLOCK_T]; long int __align; } pthread_rwlock_t; and: 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; #if __riscv_xlen == 64 int __cur_writer; int __shared; unsigned long int __pad1; unsigned long int __pad2; unsigned int __flags; #else # if __BYTE_ORDER == __BIG_ENDIAN unsigned char __pad1; unsigned char __pad2; unsigned char __shared; unsigned char __flags; # else unsigned char __flags; unsigned char __shared; unsigned char __pad1; unsigned char __pad2; # endif int __cur_writer; #endif }; so here we have 48 for RV64, 24 for RV32/LE, and 27 for RV/BE, meaning that your change is wrong. Please fix that. Also I think this change makes no sense at this point or indeed on its own as there's been no RV32 support added to as at this commit yet, meaning that the offsets would become inconsistent. Please fold it into 09/18. Maciej