From 2a8b04b20f65ab05d0639ba5f95cb28659a5c020 Mon Sep 17 00:00:00 2001 From: Dmitry Chestnykh Date: Thu, 29 Feb 2024 20:11:16 +0300 Subject: libc: restore correct definition of semid_ds struct. Previously the common definition of this structure was broken by a mistake. Restore it correctly for all needed architectures and all use cases. Signed-off-by: Dmitry Chestnykh --- libc/sysdeps/linux/common/bits/sem.h | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/libc/sysdeps/linux/common/bits/sem.h b/libc/sysdeps/linux/common/bits/sem.h index 06a256259..1c0836c6d 100644 --- a/libc/sysdeps/linux/common/bits/sem.h +++ b/libc/sysdeps/linux/common/bits/sem.h @@ -39,22 +39,33 @@ struct semid_ds { struct ipc_perm sem_perm; /* operation permission struct */ - +#if defined(__UCLIBC_USE_TIME64__) unsigned long int __sem_otime_internal_1; unsigned long int __sem_otime_internal_2; +#else + __time_t sem_otime; /* last semop() time */ +#endif +#if (__WORDSIZE == 32 && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__)) || \ + ((defined(__arm__) || defined(__or1k__) || defined(__xtensa__)) && !defined(__UCLIBC_USE_TIME64__)) + unsigned long int __uclibc_unused1; +#endif +#if defined(__UCLIBC_USE_TIME64__) unsigned long int __sem_ctime_internal_1; unsigned long int __sem_ctime_internal_2; -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - unsigned short int sem_nsems; /* number of semaphores in set */ - char __paddind[sizeof(long int) - sizeof(short int)]; #else - char __padding[sizeof(long int) - sizeof(short int)]; - unsigned short int sem_nsems; /* number of semaphores in set */ + __time_t sem_ctime; /* last time changed by semctl() */ #endif - unsigned long int __uclibc_unused3; - unsigned long int __uclibc_unused4; +#if (__WORDSIZE == 32 && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__)) || \ + ((defined(__arm__) || defined(__or1k__) || defined(__xtensa__)) && !defined(__UCLIBC_USE_TIME64__)) + unsigned long int __uclibc_unused2; +#endif + unsigned long int sem_nsems; /* number of semaphores in set */ +#if defined(__UCLIBC_USE_TIME64__) __time_t sem_otime; /* last semop() time */ __time_t sem_ctime; /* last time changed by semctl() */ +#endif + unsigned long int __uclibc_unused3; + unsigned long int __uclibc_unused4; }; /* The user should define a union like the following to use it for arguments -- cgit v1.2.3