Le 01/04/2018 à 21:24, Max Filippov a écrit : > - 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; > - fix order of times and reserved fields of target_shmid_ds for > little/big endian; > - 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. > > Signed-off-by: Max Filippov <jcmvb...@gmail.com> > --- > linux-user/xtensa/target_structs.h | 44 > ++++++++++++++++++++++++++++++++------ > 1 file changed, 38 insertions(+), 6 deletions(-) > > diff --git a/linux-user/xtensa/target_structs.h > b/linux-user/xtensa/target_structs.h > index 020e20e242fc..a3c854b53731 100644 > --- a/linux-user/xtensa/target_structs.h > +++ b/linux-user/xtensa/target_structs.h > @@ -8,21 +8,53 @@ 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; > };
ok, looks like ipc64_perm in arch/xtensa/include/uapi/asm/ipcbuf.h > +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 > + ok, looks like semid64_ds in arch/xtensa/include/uapi/asm/sembuf.h > 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 */ > +#ifdef TARGET_WORDS_BIGENDIAN > + abi_ulong __unused1; > abi_long shm_atime; /* time of last shmat() */ > + abi_ulong __unused2; > abi_long shm_dtime; /* time of last shmdt() */ > + abi_ulong __unused3; > 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 */ > +#else > + abi_long shm_atime; /* time of last shmat() */ > + abi_ulong __unused1; > + abi_long shm_dtime; /* time of last shmdt() */ > abi_ulong __unused2; > + abi_long shm_ctime; /* time of last change by shmctl() */ > abi_ulong __unused3; > +#endif > + 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; > }; This is weird: shmid64_ds in arch/xtensa/include/uapi/asm/shmbuf.h has two part like yours, but both parts have exactly the same fields order. Could you explain? Thanks, Laurent