6 #if __BYTE_ORDER != __BIG_ENDIAN
7 #undef SYSCALL_IPC_BROKEN_MODE
10 int shmctl(int id
, int cmd
, struct shmid_ds
*buf
)
13 struct shmid_ds out
, *orig
;
15 out
= (struct shmid_ds
){0};
20 #ifdef SYSCALL_IPC_BROKEN_MODE
24 tmp
.shm_perm
.mode
*= 0x10000U
;
29 int r
= __syscall(SYS_shmctl
, id
, IPC_CMD(cmd
), buf
);
31 int r
= __syscall(SYS_ipc
, IPCOP_shmctl
, id
, IPC_CMD(cmd
), 0, buf
, 0);
33 #ifdef SYSCALL_IPC_BROKEN_MODE
34 if (r
>= 0) switch (cmd
| IPC_TIME64
) {
38 buf
->shm_perm
.mode
>>= 16;
42 if (r
>= 0 && (cmd
&IPC_TIME64
)) {
45 IPC_HILO(buf
, shm_atime
);
46 IPC_HILO(buf
, shm_dtime
);
47 IPC_HILO(buf
, shm_ctime
);
50 return __syscall_ret(r
);