fix sysvipc structures on powerpc
authorRich Felker <dalias@aerifal.cx>
Tue, 11 Mar 2014 21:01:34 +0000 (17:01 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 11 Mar 2014 21:01:34 +0000 (17:01 -0400)
these have been wrong for a long time and were never detected or
corrected. powerpc needs some gratuitous extra padding/reserved slots
in ipc_perm, big-endian ordering for the padding of time_t slots that
was intended by the kernel folks to allow a transition to 64-bit
time_t, and some minor gratuitous reordering of struct members.

arch/powerpc/bits/ipc.h
arch/powerpc/bits/msg.h
arch/powerpc/bits/sem.h
arch/powerpc/bits/shm.h

index b0bcfa3f6384169e1e67157642c2a65827629dcf..e1bfe2f55400528d5c891af8f4d78b2a6e7a4349 100644 (file)
@@ -7,8 +7,9 @@ struct ipc_perm
        gid_t cgid;
        mode_t mode;
        int __ipc_perm_seq;
-       long __pad1;
-       long __pad2;
+       int __pad1;
+       long long __pad2;
+       long long __pad3;
 };
 
 #define IPC_64 0x100
index 3db8576b782380ebc0bd675b1253072bf8f630b2..a6b9ad5bad8c2b0af4ef91b6c051e9a241be063f 100644 (file)
@@ -1,12 +1,12 @@
 struct msqid_ds
 {
        struct ipc_perm msg_perm;
-       time_t msg_stime;
        int __unused1;
-       time_t msg_rtime;
+       time_t msg_stime;
        int __unused2;
-       time_t msg_ctime;
+       time_t msg_rtime;
        int __unused3;
+       time_t msg_ctime;
        unsigned long msg_cbytes;
        msgqnum_t msg_qnum;
        msglen_t msg_qbytes;
index c629b81ebb2a097b823aae6caac56cf34f2b2dc8..bc2d6d1f514dffc7eafddd5c34adee8c86a34a09 100644 (file)
@@ -1,16 +1,10 @@
 struct semid_ds {
        struct ipc_perm sem_perm;
+       int __unused1;
        time_t sem_otime;
-       time_t __unused1;
+       int  __unused2;
        time_t sem_ctime;
-       time_t __unused2;
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-       unsigned short sem_nsems;
-       char __sem_nsems_pad[sizeof(time_t)-sizeof(short)];
-#else
-       char __sem_nsems_pad[sizeof(time_t)-sizeof(short)];
-       unsigned short sem_nsems;
-#endif
-       time_t __unused3;
-       time_t __unused4;
+       unsigned short __sem_nsems_pad, sem_nsems;
+       long __unused3;
+       long __unused4;
 };
index 547581f1a7f5c6986ba477a824c08cd2ff514bc6..c698ef3455af63bcce505f3fd5201a60e9ab1e97 100644 (file)
@@ -3,13 +3,14 @@
 struct shmid_ds
 {
        struct ipc_perm shm_perm;
-       size_t shm_segsz;
-       time_t shm_atime;
        int __unused1;
-       time_t shm_dtime;
+       time_t shm_atime;
        int __unused2;
-       time_t shm_ctime;
+       time_t shm_dtime;
        int __unused3;
+       time_t shm_ctime;
+       int __unused4;
+       size_t shm_segsz;
        pid_t shm_cpid;
        pid_t shm_lpid;
        unsigned long shm_nattch;