]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
target/xtensa: linux-user: fix sysv IPC structures
authorMax Filippov <jcmvbkbc@gmail.com>
Sun, 1 Apr 2018 17:00:05 +0000 (10:00 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Sun, 1 Apr 2018 21:05:23 +0000 (14:05 -0700)
- make target_ipc_perm fields match kernel definitions for xtensa;
- add target_semid64_ds with proper order of times and reserved fields
  for little/big endian specific for xtensa;
- add missing reserved fields after time fields to the target_shmid_ds;
- fix types of shm_cpid, shm_lpid and shm_nattch fields of
  target_shmid_ds to match kernel definitions for xtensa.

These changes fix guest ipcs output and fix glibc testsuite tests
sysvipc/test-sysvsem and sysvipc/test-sysvshm.

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
linux-user/xtensa/target_structs.h

index 020e20e242fc98d9b560c02a07a997fa9138dee0..1b3d9ca314ff6658b366c99acd40e09f9a83cfc5 100644 (file)
@@ -8,21 +8,44 @@ struct target_ipc_perm {
     abi_uint cuid;                      /* Creator's user ID.  */
     abi_uint cgid;                      /* Creator's group ID.  */
     abi_uint mode;                      /* Read/write permission.  */
-    abi_ushort __seq;                   /* Sequence number.  */
+    abi_ulong __seq;                    /* Sequence number.  */
+    abi_ulong __unused1;
+    abi_ulong __unused2;
+};
+
+struct target_semid64_ds {
+  struct target_ipc_perm sem_perm;
+#ifdef TARGET_WORDS_BIGENDIAN
+  abi_ulong __unused1;
+  abi_ulong sem_otime;
+  abi_ulong __unused2;
+  abi_ulong sem_ctime;
+#else
+  abi_ulong sem_otime;
+  abi_ulong __unused1;
+  abi_ulong sem_ctime;
+  abi_ulong __unused2;
+#endif
+  abi_ulong sem_nsems;
+  abi_ulong __unused3;
+  abi_ulong __unused4;
 };
+#define TARGET_SEMID64_DS
 
 struct target_shmid_ds {
     struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_int shm_segsz;                  /* size of segment in bytes */
+    abi_long shm_segsz;                 /* size of segment in bytes */
     abi_long shm_atime;                 /* time of last shmat() */
+    abi_ulong __unused1;
     abi_long shm_dtime;                 /* time of last shmdt() */
-    abi_long shm_ctime;                 /* time of last change by shmctl() */
-    abi_ushort shm_cpid;                /* pid of creator */
-    abi_ushort shm_lpid;                /* pid of last shmop */
-    abi_ushort shm_nattch;              /* number of current attaches */
-    abi_ushort shm_unused;              /* compatibility */
     abi_ulong __unused2;
+    abi_long shm_ctime;                 /* time of last change by shmctl() */
     abi_ulong __unused3;
+    abi_uint shm_cpid;                  /* pid of creator */
+    abi_uint shm_lpid;                  /* pid of last shmop */
+    abi_ulong shm_nattch;               /* number of current attaches */
+    abi_ulong __unused4;
+    abi_ulong __unused5;
 };
 
 #endif