Flesh out <sys/msg.h>, <sys/sem.h>, <sys/shm.h>.
Also fix <sys/ipc.h>.
Not useful except to systems/bringup folks for testing. Trivial tests
added, and double-checked under strace to see that things look right.
x86 -- which works differently to everything else -- tested on the host.
Bug: http://b/27952303
Change-Id: I328534e994ae9e90755f545478fba03038c0bb94
diff --git a/libc/kernel/tools/defaults.py b/libc/kernel/tools/defaults.py
index 340af13..87adcd0 100644
--- a/libc/kernel/tools/defaults.py
+++ b/libc/kernel/tools/defaults.py
@@ -59,6 +59,11 @@
"ARG_MAX": "_KERNEL_ARG_MAX",
# The kernel usage of __unused for unused struct fields conflicts with the macro defined in <sys/cdefs.h>.
"__unused": "__linux_unused",
+ # The non-64 stuff is legacy; msqid64_ds/ipc64_perm is what userspace wants.
+ "msqid_ds": "__kernel_legacy_msqid_ds",
+ "semid_ds": "__kernel_legacy_semid_ds",
+ "shmid_ds": "__kernel_legacy_shmid_ds",
+ "ipc_perm": "__kernel_legacy_ipc_perm",
# The kernel's _NSIG/NSIG are one less than the userspace value, so we need to move them aside.
"_NSIG": "_KERNEL__NSIG",
"NSIG": "_KERNEL_NSIG",
diff --git a/libc/kernel/uapi/linux/ipc.h b/libc/kernel/uapi/linux/ipc.h
index 67345ce..5a2ea4d 100644
--- a/libc/kernel/uapi/linux/ipc.h
+++ b/libc/kernel/uapi/linux/ipc.h
@@ -21,7 +21,7 @@
#include <linux/types.h>
#define IPC_PRIVATE ((__kernel_key_t) 0)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-struct ipc_perm {
+struct __kernel_legacy_ipc_perm {
__kernel_key_t key;
__kernel_uid_t uid;
__kernel_gid_t gid;
diff --git a/libc/kernel/uapi/linux/msg.h b/libc/kernel/uapi/linux/msg.h
index b455f0c..a15b499 100644
--- a/libc/kernel/uapi/linux/msg.h
+++ b/libc/kernel/uapi/linux/msg.h
@@ -26,8 +26,8 @@
#define MSG_EXCEPT 020000
#define MSG_COPY 040000
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-struct msqid_ds {
- struct ipc_perm msg_perm;
+struct __kernel_legacy_msqid_ds {
+ struct __kernel_legacy_ipc_perm msg_perm;
struct msg * msg_first;
struct msg * msg_last;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/libc/kernel/uapi/linux/sem.h b/libc/kernel/uapi/linux/sem.h
index 4f3632b..6916556 100644
--- a/libc/kernel/uapi/linux/sem.h
+++ b/libc/kernel/uapi/linux/sem.h
@@ -32,8 +32,8 @@
#define SEM_STAT 18
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define SEM_INFO 19
-struct semid_ds {
- struct ipc_perm sem_perm;
+struct __kernel_legacy_semid_ds {
+ struct __kernel_legacy_ipc_perm sem_perm;
__kernel_time_t sem_otime;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
__kernel_time_t sem_ctime;
@@ -54,7 +54,7 @@
};
union semun {
int val;
- struct semid_ds __user * buf;
+ struct __kernel_legacy_semid_ds __user * buf;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
unsigned short __user * array;
struct seminfo __user * __buf;
diff --git a/libc/kernel/uapi/linux/shm.h b/libc/kernel/uapi/linux/shm.h
index bb7f907..c7e1e53 100644
--- a/libc/kernel/uapi/linux/shm.h
+++ b/libc/kernel/uapi/linux/shm.h
@@ -28,8 +28,8 @@
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define SHMALL (ULONG_MAX - (1UL << 24))
#define SHMSEG SHMMNI
-struct shmid_ds {
- struct ipc_perm shm_perm;
+struct __kernel_legacy_shmid_ds {
+ struct __kernel_legacy_ipc_perm shm_perm;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
int shm_segsz;
__kernel_time_t shm_atime;