fix sysvipc structures on powerpc

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.
This commit is contained in:
Rich Felker 2014-03-11 17:01:34 -04:00
parent f6e2f7e13f
commit ad66ae93d0
4 changed files with 16 additions and 20 deletions

View File

@ -7,8 +7,9 @@ struct ipc_perm
gid_t cgid; gid_t cgid;
mode_t mode; mode_t mode;
int __ipc_perm_seq; int __ipc_perm_seq;
long __pad1; int __pad1;
long __pad2; long long __pad2;
long long __pad3;
}; };
#define IPC_64 0x100 #define IPC_64 0x100

View File

@ -1,12 +1,12 @@
struct msqid_ds struct msqid_ds
{ {
struct ipc_perm msg_perm; struct ipc_perm msg_perm;
time_t msg_stime;
int __unused1; int __unused1;
time_t msg_rtime; time_t msg_stime;
int __unused2; int __unused2;
time_t msg_ctime; time_t msg_rtime;
int __unused3; int __unused3;
time_t msg_ctime;
unsigned long msg_cbytes; unsigned long msg_cbytes;
msgqnum_t msg_qnum; msgqnum_t msg_qnum;
msglen_t msg_qbytes; msglen_t msg_qbytes;

View File

@ -1,16 +1,10 @@
struct semid_ds { struct semid_ds {
struct ipc_perm sem_perm; struct ipc_perm sem_perm;
int __unused1;
time_t sem_otime; time_t sem_otime;
time_t __unused1; int __unused2;
time_t sem_ctime; time_t sem_ctime;
time_t __unused2; unsigned short __sem_nsems_pad, sem_nsems;
#if __BYTE_ORDER == __LITTLE_ENDIAN long __unused3;
unsigned short sem_nsems; long __unused4;
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;
}; };

View File

@ -3,13 +3,14 @@
struct shmid_ds struct shmid_ds
{ {
struct ipc_perm shm_perm; struct ipc_perm shm_perm;
size_t shm_segsz;
time_t shm_atime;
int __unused1; int __unused1;
time_t shm_dtime; time_t shm_atime;
int __unused2; int __unused2;
time_t shm_ctime; time_t shm_dtime;
int __unused3; int __unused3;
time_t shm_ctime;
int __unused4;
size_t shm_segsz;
pid_t shm_cpid; pid_t shm_cpid;
pid_t shm_lpid; pid_t shm_lpid;
unsigned long shm_nattch; unsigned long shm_nattch;