Просмотр исходного кода

m68k: fix struct semid_ds layout for TIME64

m68k has no arch-specific sembuf.h and uses the asm-generic 32-bit
semid64_ds: the y2038-split layout (sem_otime, sem_otime_high, sem_ctime,
sem_ctime_high, then sem_nsems at sem_perm + 16). bits/sem.h omitted m68k
from the arch list that drops __uclibc_unused1/2 under __UCLIBC_USE_TIME64__,
so the TIME64 build placed sem_nsems 8 bytes too far and semctl(IPC_STAT)
returned the wrong sem_nsems (the sem test on m68k/kernel-5.4 failed with
"incorrect sem_nsems").

Add __m68k__ to that list, like arc/arm/csky/i386/microblaze/or1k/xtensa/
riscv.

Verified on m68k/TIME64 against linux-5.4.259 under qemu-system-m68k: the sem
test passes.

Signed-off-by: Ramin Moussavi <ramin.moussavi@yacoub.de>
ramin 2 дней назад
Родитель
Сommit
2063e00954
1 измененных файлов с 4 добавлено и 4 удалено
  1. 4 4
      libc/sysdeps/linux/common/bits/sem.h

+ 4 - 4
libc/sysdeps/linux/common/bits/sem.h

@@ -45,8 +45,8 @@ struct semid_ds
 #else
   __time_t sem_otime;			/* last semop() time */
 #endif
-#if (__WORDSIZE == 32 && !defined(__ARC64_ARCH32__) && !defined(__arc__) && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__) && !defined(__riscv) && !defined(__csky__) && !defined(__i386__) && !defined(__microblaze__)) || \
-    ((defined(__ARC64_ARCH32__) || defined(__arc__) || defined(__arm__) || defined(__or1k__) || defined(__xtensa__) || defined(__riscv) || defined(__csky__) || defined(__i386__) || defined(__microblaze__)) && !defined(__UCLIBC_USE_TIME64__))
+#if (__WORDSIZE == 32 && !defined(__ARC64_ARCH32__) && !defined(__arc__) && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__) && !defined(__riscv) && !defined(__csky__) && !defined(__i386__) && !defined(__microblaze__) && !defined(__m68k__)) || \
+    ((defined(__ARC64_ARCH32__) || defined(__arc__) || defined(__arm__) || defined(__or1k__) || defined(__xtensa__) || defined(__riscv) || defined(__csky__) || defined(__i386__) || defined(__microblaze__) || defined(__m68k__)) && !defined(__UCLIBC_USE_TIME64__))
   unsigned long int __uclibc_unused1;
 #endif
 #if defined(__UCLIBC_USE_TIME64__)
@@ -55,8 +55,8 @@ struct semid_ds
 #else
   __time_t sem_ctime;			/* last time changed by semctl() */
 #endif
-#if (__WORDSIZE == 32 && !defined(__ARC64_ARCH32__) && !defined(__arc__) && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__) && !defined(__riscv) && !defined(__csky__) && !defined(__i386__) && !defined(__microblaze__)) || \
-    ((defined(__ARC64_ARCH32__) || defined(__arc__) || defined(__arm__) || defined(__or1k__) || defined(__xtensa__) || defined(__riscv) || defined(__csky__) || defined(__i386__) || defined(__microblaze__)) && !defined(__UCLIBC_USE_TIME64__))
+#if (__WORDSIZE == 32 && !defined(__ARC64_ARCH32__) && !defined(__arc__) && !defined(__arm__) && !defined(__or1k__) && !defined(__xtensa__) && !defined(__riscv) && !defined(__csky__) && !defined(__i386__) && !defined(__microblaze__) && !defined(__m68k__)) || \
+    ((defined(__ARC64_ARCH32__) || defined(__arc__) || defined(__arm__) || defined(__or1k__) || defined(__xtensa__) || defined(__riscv) || defined(__csky__) || defined(__i386__) || defined(__microblaze__) || defined(__m68k__)) && !defined(__UCLIBC_USE_TIME64__))
   unsigned long int __uclibc_unused2;
 #endif
   unsigned long int sem_nsems;		/* number of semaphores in set */