Browse Source

time64: fix *ctl functions in mips32eb/mips64

yliu 1 month ago
parent
commit
18ac9aedd5

+ 1 - 1
libc/misc/sysvipc/msgq.c

@@ -26,7 +26,7 @@ int msgctl(int msqid, int cmd, struct msqid_ds *buf)
 {
 {
 #ifdef __NR_msgctl
 #ifdef __NR_msgctl
 	int __ret = __libc_msgctl(msqid, cmd | __IPC_64, buf);
 	int __ret = __libc_msgctl(msqid, cmd | __IPC_64, buf);
-#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__) && (defined(__MIPSEL__) || defined(__riscv))
+#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__) && (defined(__mips) || defined(__riscv))
 	union msqun arg = {.buff = buf};
 	union msqun arg = {.buff = buf};
 	if (arg.__pad != NULL) {
 	if (arg.__pad != NULL) {
 		arg.buff->msg_stime = (__time_t)arg.buff->msg_stime_internal_1 | (__time_t)(arg.buff->msg_stime_internal_2) << 32;
 		arg.buff->msg_stime = (__time_t)arg.buff->msg_stime_internal_1 | (__time_t)(arg.buff->msg_stime_internal_2) << 32;

+ 1 - 1
libc/misc/sysvipc/sem.c

@@ -57,7 +57,7 @@ int semctl(int semid, int semnum, int cmd, ...)
     va_end (ap);
     va_end (ap);
 #ifdef __NR_semctl
 #ifdef __NR_semctl
     int __ret = __semctl(semid, semnum, cmd | __IPC_64, arg.__pad);
     int __ret = __semctl(semid, semnum, cmd | __IPC_64, arg.__pad);
-#if defined(__UCLIBC_USE_TIME64__)
+#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__)
     if (arg.__pad != NULL) {
     if (arg.__pad != NULL) {
         arg.buf->sem_otime = (__time_t)arg.buf->__sem_otime_internal_1 | (__time_t)(arg.buf->__sem_otime_internal_2) << 32;
         arg.buf->sem_otime = (__time_t)arg.buf->__sem_otime_internal_1 | (__time_t)(arg.buf->__sem_otime_internal_2) << 32;
         arg.buf->sem_ctime = (__time_t)arg.buf->__sem_ctime_internal_1 | (__time_t)(arg.buf->__sem_ctime_internal_2) << 32;
         arg.buf->sem_ctime = (__time_t)arg.buf->__sem_ctime_internal_1 | (__time_t)(arg.buf->__sem_ctime_internal_2) << 32;

+ 1 - 1
libc/misc/sysvipc/shm.c

@@ -67,7 +67,7 @@ int shmctl(int shmid, int cmd, struct shmid_ds *buf)
 {
 {
 #ifdef __NR_shmctl
 #ifdef __NR_shmctl
 	int __ret = __syscall_shmctl(shmid, cmd | __IPC_64, buf);
 	int __ret = __syscall_shmctl(shmid, cmd | __IPC_64, buf);
-#if (__WORDSIZE == 32) && defined(__MIPSEL__) && defined(__UCLIBC_USE_TIME64__)
+#if (__WORDSIZE == 32) && defined(__mips) && defined(__UCLIBC_USE_TIME64__)
 	union shmun arg = {.buff = buf};
 	union shmun arg = {.buff = buf};
         if (arg.__pad != NULL) {
         if (arg.__pad != NULL) {
 		arg.buff->shm_atime = (__time_t)arg.buff->shm_atime_internal_1 | (__time_t)(arg.buff->shm_atime_internal_2) << 32;
 		arg.buff->shm_atime = (__time_t)arg.buff->shm_atime_internal_1 | (__time_t)(arg.buff->shm_atime_internal_2) << 32;

+ 58 - 6
libc/sysdeps/linux/mips/bits/msq.h

@@ -35,25 +35,25 @@ typedef unsigned long int msglen_t;
 
 
 /* Structure of record for one message inside the kernel.
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
    The type `struct msg' is opaque.  */
-/* Just for (__WORDSIZE == 32) && (__MIPSEL__) */
+#if (__WORDSIZE == 32) && defined(__MIPSEL__)
 struct msqid_ds
 struct msqid_ds
 {
 {
   struct ipc_perm msg_perm;	/* structure describing operation permission */
   struct ipc_perm msg_perm;	/* structure describing operation permission */
-#if defined(__UCLIBC_USE_TIME64__)
+#  if defined(__UCLIBC_USE_TIME64__)
   unsigned long msg_stime_internal_1;		/* time of last msgsnd command */
   unsigned long msg_stime_internal_1;		/* time of last msgsnd command */
   unsigned long msg_stime_internal_2;
   unsigned long msg_stime_internal_2;
   unsigned long msg_rtime_internal_1;		/* time of last msgrcv command */
   unsigned long msg_rtime_internal_1;		/* time of last msgrcv command */
   unsigned long msg_rtime_internal_2;
   unsigned long msg_rtime_internal_2;
   unsigned long msg_ctime_internal_1;		/* time of last change */
   unsigned long msg_ctime_internal_1;		/* time of last change */
   unsigned long msg_ctime_internal_2;
   unsigned long msg_ctime_internal_2;
-#else
+#  else
   __time_t msg_stime;
   __time_t msg_stime;
   unsigned long int __uclibc_unused1;
   unsigned long int __uclibc_unused1;
   __time_t msg_rtime;
   __time_t msg_rtime;
   unsigned long int __uclibc_unused2;
   unsigned long int __uclibc_unused2;
   __time_t msg_ctime;
   __time_t msg_ctime;
   unsigned long int __uclibc_unused3;
   unsigned long int __uclibc_unused3;
-#endif
+#  endif
   unsigned long int __msg_cbytes; /* current number of bytes on queue */
   unsigned long int __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
@@ -61,13 +61,65 @@ struct msqid_ds
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   unsigned long int __uclibc_unused4;
   unsigned long int __uclibc_unused4;
   unsigned long int __uclibc_unused5;
   unsigned long int __uclibc_unused5;
-#if defined(__UCLIBC_USE_TIME64__)
+#  if defined(__UCLIBC_USE_TIME64__)
   __time_t msg_stime;
   __time_t msg_stime;
   __time_t msg_rtime;
   __time_t msg_rtime;
   __time_t msg_ctime;
   __time_t msg_ctime;
-#endif
+#  endif
 };
 };
 
 
+#elif (__WORDSIZE == 32) && defined(__MIPSEB__)
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+#  if defined(__UCLIBC_USE_TIME64__)
+  unsigned long msg_stime_internal_2;		/* time of last msgsnd command */
+  unsigned long msg_stime_internal_1;
+  unsigned long msg_rtime_internal_2;		/* time of last msgrcv command */
+  unsigned long msg_rtime_internal_1;
+  unsigned long msg_ctime_internal_2;		/* time of last change */
+  unsigned long msg_ctime_internal_1;
+#  else
+  unsigned long int __uclibc_unused1;
+  __time_t msg_stime;
+  unsigned long int __uclibc_unused2;
+  __time_t msg_rtime;
+  unsigned long int __uclibc_unused3;
+  __time_t msg_ctime;
+#  endif
+  unsigned long int __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;		/* number of messages currently on queue */
+  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long int __uclibc_unused4;
+  unsigned long int __uclibc_unused5;
+#  if defined(__UCLIBC_USE_TIME64__)
+  __time_t msg_stime;
+  __time_t msg_rtime;
+  __time_t msg_ctime;
+#  endif
+};
+
+#else
+
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;     /* structure describing operation permission */
+  __time_t msg_stime;           /* time of last msgsnd command */
+  __time_t msg_rtime;           /* time of last msgrcv command */
+  __time_t msg_ctime;           /* time of last change */
+  unsigned long int __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;           /* number of messages currently on queue */
+  msglen_t msg_qbytes;          /* max number of bytes allowed on queue */
+  __pid_t msg_lspid;            /* pid of last msgsnd() */
+  __pid_t msg_lrpid;            /* pid of last msgrcv() */
+  unsigned long int __uclibc_unused4;
+  unsigned long int __uclibc_unused5;
+};
+
+#endif
+
 #ifdef __USE_MISC
 #ifdef __USE_MISC
 
 
 # define msg_cbytes	__msg_cbytes
 # define msg_cbytes	__msg_cbytes

+ 2 - 2
libc/sysdeps/linux/mips/bits/sem.h

@@ -38,7 +38,7 @@
 struct semid_ds
 struct semid_ds
 {
 {
   struct ipc_perm sem_perm;		/* operation permission struct */
   struct ipc_perm sem_perm;		/* operation permission struct */
-#if defined(__UCLIBC_USE_TIME64__)
+#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__)
   unsigned long int __sem_otime_internal_1; /* last semop() time */
   unsigned long int __sem_otime_internal_1; /* last semop() time */
   unsigned long int __sem_ctime_internal_1; /* last time changed by semctl() */
   unsigned long int __sem_ctime_internal_1; /* last time changed by semctl() */
 #else
 #else
@@ -46,7 +46,7 @@ struct semid_ds
   __time_t sem_ctime;			/* last time changed by semctl() */
   __time_t sem_ctime;			/* last time changed by semctl() */
 #endif
 #endif
   unsigned long int sem_nsems;		/* number of semaphores in set */
   unsigned long int sem_nsems;		/* number of semaphores in set */
-#if defined(__UCLIBC_USE_TIME64__)
+#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__)
   unsigned long int __sem_otime_internal_2;
   unsigned long int __sem_otime_internal_2;
   unsigned long int __sem_ctime_internal_2;
   unsigned long int __sem_ctime_internal_2;
   __time_t sem_otime;
   __time_t sem_otime;

+ 2 - 2
libc/sysdeps/linux/mips/bits/shm.h

@@ -46,7 +46,7 @@ struct shmid_ds
   {
   {
     struct ipc_perm shm_perm;		/* operation permission struct */
     struct ipc_perm shm_perm;		/* operation permission struct */
     size_t shm_segsz;			/* size of segment in bytes */
     size_t shm_segsz;			/* size of segment in bytes */
-#if defined(__UCLIBC_USE_TIME64__)
+#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__)
     unsigned long int shm_atime_internal_1;		/* time of last shmat() */
     unsigned long int shm_atime_internal_1;		/* time of last shmat() */
     unsigned long int shm_dtime_internal_1;		/* time of last shmdt() */
     unsigned long int shm_dtime_internal_1;		/* time of last shmdt() */
     unsigned long int shm_ctime_internal_1;		/* time of last change by shmctl() */
     unsigned long int shm_ctime_internal_1;		/* time of last change by shmctl() */
@@ -58,7 +58,7 @@ struct shmid_ds
     __pid_t shm_cpid;			/* pid of creator */
     __pid_t shm_cpid;			/* pid of creator */
     __pid_t shm_lpid;			/* pid of last shmop */
     __pid_t shm_lpid;			/* pid of last shmop */
     shmatt_t shm_nattch;		/* number of current attaches */
     shmatt_t shm_nattch;		/* number of current attaches */
-#if defined(__UCLIBC_USE_TIME64__)
+#if (__WORDSIZE == 32) && defined(__UCLIBC_USE_TIME64__)
     unsigned short int shm_atime_internal_2;		/* time of last shmat() */
     unsigned short int shm_atime_internal_2;		/* time of last shmat() */
     unsigned short int shm_dtime_internal_2;		/* time of last shmdt() */
     unsigned short int shm_dtime_internal_2;		/* time of last shmdt() */
     unsigned short int shm_ctime_internal_2;		/* time of last change by shmctl() */
     unsigned short int shm_ctime_internal_2;		/* time of last change by shmctl() */