diff mbox series

[2/2] linux-user: Move target_struct.h generic definitions to generic/

Message ID 20220107042600.149852-3-richard.henderson@linaro.org
State New
Headers show
Series linux-user: Move target_struct.h generic definitions to generic/ | expand

Commit Message

Richard Henderson Jan. 7, 2022, 4:26 a.m. UTC
Most targets share the same generic ipc structure definitions.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/aarch64/target_structs.h    | 59 +-------------------------
 linux-user/arm/target_structs.h        | 52 +----------------------
 linux-user/cris/target_structs.h       | 59 +-------------------------
 linux-user/generic/target_structs.h    | 58 +++++++++++++++++++++++++
 linux-user/hexagon/target_structs.h    | 55 +-----------------------
 linux-user/i386/target_structs.h       | 59 +-------------------------
 linux-user/m68k/target_structs.h       | 59 +-------------------------
 linux-user/microblaze/target_structs.h | 59 +-------------------------
 linux-user/nios2/target_structs.h      | 59 +-------------------------
 linux-user/openrisc/target_structs.h   | 59 +-------------------------
 linux-user/riscv/target_structs.h      | 47 +-------------------
 linux-user/sh4/target_structs.h        | 59 +-------------------------
 linux-user/x86_64/target_structs.h     | 36 +---------------
 13 files changed, 70 insertions(+), 650 deletions(-)
 create mode 100644 linux-user/generic/target_structs.h

Comments

Laurent Vivier Jan. 8, 2022, 5:58 p.m. UTC | #1
Le 07/01/2022 à 05:26, Richard Henderson a écrit :
> Most targets share the same generic ipc structure definitions.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   linux-user/aarch64/target_structs.h    | 59 +-------------------------
>   linux-user/arm/target_structs.h        | 52 +----------------------
>   linux-user/cris/target_structs.h       | 59 +-------------------------
>   linux-user/generic/target_structs.h    | 58 +++++++++++++++++++++++++
>   linux-user/hexagon/target_structs.h    | 55 +-----------------------
>   linux-user/i386/target_structs.h       | 59 +-------------------------
>   linux-user/m68k/target_structs.h       | 59 +-------------------------
>   linux-user/microblaze/target_structs.h | 59 +-------------------------
>   linux-user/nios2/target_structs.h      | 59 +-------------------------
>   linux-user/openrisc/target_structs.h   | 59 +-------------------------
>   linux-user/riscv/target_structs.h      | 47 +-------------------
>   linux-user/sh4/target_structs.h        | 59 +-------------------------
>   linux-user/x86_64/target_structs.h     | 36 +---------------
>   13 files changed, 70 insertions(+), 650 deletions(-)
>   create mode 100644 linux-user/generic/target_structs.h
> 
> diff --git a/linux-user/aarch64/target_structs.h b/linux-user/aarch64/target_structs.h
> index 7c748344ca..3a06f373c3 100644
> --- a/linux-user/aarch64/target_structs.h
> +++ b/linux-user/aarch64/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * ARM AArch64 specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef AARCH64_TARGET_STRUCTS_H
> -#define AARCH64_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/arm/target_structs.h b/linux-user/arm/target_structs.h
> index 25bf8dd3a5..3a06f373c3 100644
> --- a/linux-user/arm/target_structs.h
> +++ b/linux-user/arm/target_structs.h
> @@ -1,51 +1 @@
> -/*
> - * ARM specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef ARM_TARGET_STRUCTS_H
> -#define ARM_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -    abi_ulong __unused1;
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -    abi_ulong __unused2;
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -    abi_ulong __unused3;
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/cris/target_structs.h b/linux-user/cris/target_structs.h
> index f949d2331e..3a06f373c3 100644
> --- a/linux-user/cris/target_structs.h
> +++ b/linux-user/cris/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * CRIS specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef CRIS_TARGET_STRUCTS_H
> -#define CRIS_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/generic/target_structs.h b/linux-user/generic/target_structs.h
> new file mode 100644
> index 0000000000..09ff858b6e
> --- /dev/null
> +++ b/linux-user/generic/target_structs.h
> @@ -0,0 +1,58 @@
> +/*
> + * Generic structures for linux-user
> + *
> + * Copyright (c) 2013 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +#ifndef GENERIC_TARGET_STRUCTS_H
> +#define GENERIC_TARGET_STRUCTS_H
> +
> +struct target_ipc_perm {
> +    abi_int __key;                      /* Key.  */
> +    abi_uint uid;                       /* Owner's user ID.  */
> +    abi_uint gid;                       /* Owner's group ID.  */
> +    abi_uint cuid;                      /* Creator's user ID.  */
> +    abi_uint cgid;                      /* Creator's group ID.  */
> +    abi_ushort mode;                    /* Read/write permission.  */
> +    abi_ushort __pad1;
> +    abi_ushort __seq;                   /* Sequence number.  */
> +    abi_ushort __pad2;
> +    abi_ulong __unused1;
> +    abi_ulong __unused2;
> +};
> +
> +struct target_shmid_ds {
> +    struct target_ipc_perm shm_perm;    /* operation permission struct */
> +    abi_long shm_segsz;                 /* size of segment in bytes */
> +    abi_ulong shm_atime;                /* time of last shmat() */
> +#if TARGET_ABI_BITS == 32
> +    abi_ulong __unused1;
> +#endif
> +    abi_ulong shm_dtime;                /* time of last shmdt() */
> +#if TARGET_ABI_BITS == 32
> +    abi_ulong __unused2;
> +#endif
> +    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> +#if TARGET_ABI_BITS == 32
> +    abi_ulong __unused3;
> +#endif
> +    abi_int shm_cpid;                   /* pid of creator */
> +    abi_int shm_lpid;                   /* pid of last shmop */
> +    abi_ulong shm_nattch;               /* number of current attaches */
> +    abi_ulong __unused4;
> +    abi_ulong __unused5;
> +};
> +
> +#endif
> diff --git a/linux-user/hexagon/target_structs.h b/linux-user/hexagon/target_structs.h
> index c217d9442a..3a06f373c3 100644
> --- a/linux-user/hexagon/target_structs.h
> +++ b/linux-user/hexagon/target_structs.h
> @@ -1,54 +1 @@
> -/*
> - *  Copyright(c) 2019-2021 Qualcomm Innovation Center, Inc. All Rights Reserved.
> - *
> - *  This program is free software; you can redistribute it and/or modify
> - *  it under the terms of the GNU General Public License as published by
> - *  the Free Software Foundation; either version 2 of the License, or
> - *  (at your option) any later version.
> - *
> - *  This program is distributed in the hope that it will be useful,
> - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - *  GNU General Public License for more details.
> - *
> - *  You should have received a copy of the GNU General Public License
> - *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -/*
> - * Hexagon specific structures for linux-user
> - */
> -#ifndef HEXAGON_TARGET_STRUCTS_H
> -#define HEXAGON_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -    abi_ulong __unused1;
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -    abi_ulong __unused2;
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -    abi_ulong __unused3;
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/i386/target_structs.h b/linux-user/i386/target_structs.h
> index e22847fd20..3a06f373c3 100644
> --- a/linux-user/i386/target_structs.h
> +++ b/linux-user/i386/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * i386 specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef I386_TARGET_STRUCTS_H
> -#define I386_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/m68k/target_structs.h b/linux-user/m68k/target_structs.h
> index e373d481e1..3a06f373c3 100644
> --- a/linux-user/m68k/target_structs.h
> +++ b/linux-user/m68k/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * m68k specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef M68K_TARGET_STRUCTS_H
> -#define M68K_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/microblaze/target_structs.h b/linux-user/microblaze/target_structs.h
> index d08f6a53a8..3a06f373c3 100644
> --- a/linux-user/microblaze/target_structs.h
> +++ b/linux-user/microblaze/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * MicroBlaze specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef MICROBLAZE_TARGET_STRUCTS_H
> -#define MICROBLAZE_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/nios2/target_structs.h b/linux-user/nios2/target_structs.h
> index daa2886f98..3a06f373c3 100644
> --- a/linux-user/nios2/target_structs.h
> +++ b/linux-user/nios2/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * Nios2 specific structures for linux-user
> - *
> - * Copyright (c) 2016 Marek Vasut <marex@denx.de>
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef NIOS2_TARGET_STRUCTS_H
> -#define NIOS2_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/openrisc/target_structs.h b/linux-user/openrisc/target_structs.h
> index e98e2bc799..3a06f373c3 100644
> --- a/linux-user/openrisc/target_structs.h
> +++ b/linux-user/openrisc/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * OpenRISC specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef OPENRISC_TARGET_STRUCTS_H
> -#define OPENRISC_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/riscv/target_structs.h b/linux-user/riscv/target_structs.h
> index ea3e5ed17e..3a06f373c3 100644
> --- a/linux-user/riscv/target_structs.h
> +++ b/linux-user/riscv/target_structs.h
> @@ -1,46 +1 @@
> -/*
> - * RISC-V specific structures for linux-user
> - *
> - * This is a copy of ../aarch64/target_structs.h atm.
> - *
> - */
> -#ifndef RISCV_TARGET_STRUCTS_H
> -#define RISCV_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/sh4/target_structs.h b/linux-user/sh4/target_structs.h
> index 00ac39478b..3a06f373c3 100644
> --- a/linux-user/sh4/target_structs.h
> +++ b/linux-user/sh4/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * SH4 specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef SH4_TARGET_STRUCTS_H
> -#define SH4_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/x86_64/target_structs.h b/linux-user/x86_64/target_structs.h
> index ce367b253b..f1181383c4 100644
> --- a/linux-user/x86_64/target_structs.h
> +++ b/linux-user/x86_64/target_structs.h
> @@ -19,41 +19,7 @@
>   #ifndef X86_64_TARGET_STRUCTS_H
>   #define X86_64_TARGET_STRUCTS_H
>   
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> +#include "../generic/target_structs.h"
>   
>   /* The x86 definition differs from the generic one in that the
>    * two padding fields exist whether the ABI is 32 bits or 64 bits.

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Laurent Vivier Jan. 8, 2022, 6:03 p.m. UTC | #2
Le 07/01/2022 à 05:26, Richard Henderson a écrit :
> Most targets share the same generic ipc structure definitions.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   linux-user/aarch64/target_structs.h    | 59 +-------------------------
>   linux-user/arm/target_structs.h        | 52 +----------------------
>   linux-user/cris/target_structs.h       | 59 +-------------------------
>   linux-user/generic/target_structs.h    | 58 +++++++++++++++++++++++++
>   linux-user/hexagon/target_structs.h    | 55 +-----------------------
>   linux-user/i386/target_structs.h       | 59 +-------------------------
>   linux-user/m68k/target_structs.h       | 59 +-------------------------
>   linux-user/microblaze/target_structs.h | 59 +-------------------------
>   linux-user/nios2/target_structs.h      | 59 +-------------------------
>   linux-user/openrisc/target_structs.h   | 59 +-------------------------
>   linux-user/riscv/target_structs.h      | 47 +-------------------
>   linux-user/sh4/target_structs.h        | 59 +-------------------------
>   linux-user/x86_64/target_structs.h     | 36 +---------------
>   13 files changed, 70 insertions(+), 650 deletions(-)
>   create mode 100644 linux-user/generic/target_structs.h
> 
> diff --git a/linux-user/aarch64/target_structs.h b/linux-user/aarch64/target_structs.h
> index 7c748344ca..3a06f373c3 100644
> --- a/linux-user/aarch64/target_structs.h
> +++ b/linux-user/aarch64/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * ARM AArch64 specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef AARCH64_TARGET_STRUCTS_H
> -#define AARCH64_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/arm/target_structs.h b/linux-user/arm/target_structs.h
> index 25bf8dd3a5..3a06f373c3 100644
> --- a/linux-user/arm/target_structs.h
> +++ b/linux-user/arm/target_structs.h
> @@ -1,51 +1 @@
> -/*
> - * ARM specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef ARM_TARGET_STRUCTS_H
> -#define ARM_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -    abi_ulong __unused1;
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -    abi_ulong __unused2;
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -    abi_ulong __unused3;
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/cris/target_structs.h b/linux-user/cris/target_structs.h
> index f949d2331e..3a06f373c3 100644
> --- a/linux-user/cris/target_structs.h
> +++ b/linux-user/cris/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * CRIS specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef CRIS_TARGET_STRUCTS_H
> -#define CRIS_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/generic/target_structs.h b/linux-user/generic/target_structs.h
> new file mode 100644
> index 0000000000..09ff858b6e
> --- /dev/null
> +++ b/linux-user/generic/target_structs.h
> @@ -0,0 +1,58 @@
> +/*
> + * Generic structures for linux-user
> + *
> + * Copyright (c) 2013 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +#ifndef GENERIC_TARGET_STRUCTS_H
> +#define GENERIC_TARGET_STRUCTS_H
> +
> +struct target_ipc_perm {
> +    abi_int __key;                      /* Key.  */
> +    abi_uint uid;                       /* Owner's user ID.  */
> +    abi_uint gid;                       /* Owner's group ID.  */
> +    abi_uint cuid;                      /* Creator's user ID.  */
> +    abi_uint cgid;                      /* Creator's group ID.  */
> +    abi_ushort mode;                    /* Read/write permission.  */
> +    abi_ushort __pad1;
> +    abi_ushort __seq;                   /* Sequence number.  */
> +    abi_ushort __pad2;
> +    abi_ulong __unused1;
> +    abi_ulong __unused2;
> +};
> +
> +struct target_shmid_ds {
> +    struct target_ipc_perm shm_perm;    /* operation permission struct */
> +    abi_long shm_segsz;                 /* size of segment in bytes */
> +    abi_ulong shm_atime;                /* time of last shmat() */
> +#if TARGET_ABI_BITS == 32
> +    abi_ulong __unused1;
> +#endif
> +    abi_ulong shm_dtime;                /* time of last shmdt() */
> +#if TARGET_ABI_BITS == 32
> +    abi_ulong __unused2;
> +#endif
> +    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> +#if TARGET_ABI_BITS == 32
> +    abi_ulong __unused3;
> +#endif
> +    abi_int shm_cpid;                   /* pid of creator */
> +    abi_int shm_lpid;                   /* pid of last shmop */
> +    abi_ulong shm_nattch;               /* number of current attaches */
> +    abi_ulong __unused4;
> +    abi_ulong __unused5;
> +};
> +
> +#endif
> diff --git a/linux-user/hexagon/target_structs.h b/linux-user/hexagon/target_structs.h
> index c217d9442a..3a06f373c3 100644
> --- a/linux-user/hexagon/target_structs.h
> +++ b/linux-user/hexagon/target_structs.h
> @@ -1,54 +1 @@
> -/*
> - *  Copyright(c) 2019-2021 Qualcomm Innovation Center, Inc. All Rights Reserved.
> - *
> - *  This program is free software; you can redistribute it and/or modify
> - *  it under the terms of the GNU General Public License as published by
> - *  the Free Software Foundation; either version 2 of the License, or
> - *  (at your option) any later version.
> - *
> - *  This program is distributed in the hope that it will be useful,
> - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - *  GNU General Public License for more details.
> - *
> - *  You should have received a copy of the GNU General Public License
> - *  along with this program; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -/*
> - * Hexagon specific structures for linux-user
> - */
> -#ifndef HEXAGON_TARGET_STRUCTS_H
> -#define HEXAGON_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -    abi_ulong __unused1;
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -    abi_ulong __unused2;
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -    abi_ulong __unused3;
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/i386/target_structs.h b/linux-user/i386/target_structs.h
> index e22847fd20..3a06f373c3 100644
> --- a/linux-user/i386/target_structs.h
> +++ b/linux-user/i386/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * i386 specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef I386_TARGET_STRUCTS_H
> -#define I386_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/m68k/target_structs.h b/linux-user/m68k/target_structs.h
> index e373d481e1..3a06f373c3 100644
> --- a/linux-user/m68k/target_structs.h
> +++ b/linux-user/m68k/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * m68k specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef M68K_TARGET_STRUCTS_H
> -#define M68K_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/microblaze/target_structs.h b/linux-user/microblaze/target_structs.h
> index d08f6a53a8..3a06f373c3 100644
> --- a/linux-user/microblaze/target_structs.h
> +++ b/linux-user/microblaze/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * MicroBlaze specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef MICROBLAZE_TARGET_STRUCTS_H
> -#define MICROBLAZE_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/nios2/target_structs.h b/linux-user/nios2/target_structs.h
> index daa2886f98..3a06f373c3 100644
> --- a/linux-user/nios2/target_structs.h
> +++ b/linux-user/nios2/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * Nios2 specific structures for linux-user
> - *
> - * Copyright (c) 2016 Marek Vasut <marex@denx.de>
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef NIOS2_TARGET_STRUCTS_H
> -#define NIOS2_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/openrisc/target_structs.h b/linux-user/openrisc/target_structs.h
> index e98e2bc799..3a06f373c3 100644
> --- a/linux-user/openrisc/target_structs.h
> +++ b/linux-user/openrisc/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * OpenRISC specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef OPENRISC_TARGET_STRUCTS_H
> -#define OPENRISC_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/riscv/target_structs.h b/linux-user/riscv/target_structs.h
> index ea3e5ed17e..3a06f373c3 100644
> --- a/linux-user/riscv/target_structs.h
> +++ b/linux-user/riscv/target_structs.h
> @@ -1,46 +1 @@
> -/*
> - * RISC-V specific structures for linux-user
> - *
> - * This is a copy of ../aarch64/target_structs.h atm.
> - *
> - */
> -#ifndef RISCV_TARGET_STRUCTS_H
> -#define RISCV_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/sh4/target_structs.h b/linux-user/sh4/target_structs.h
> index 00ac39478b..3a06f373c3 100644
> --- a/linux-user/sh4/target_structs.h
> +++ b/linux-user/sh4/target_structs.h
> @@ -1,58 +1 @@
> -/*
> - * SH4 specific structures for linux-user
> - *
> - * Copyright (c) 2013 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2.1 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -#ifndef SH4_TARGET_STRUCTS_H
> -#define SH4_TARGET_STRUCTS_H
> -
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> -
> -#endif
> +#include "../generic/target_structs.h"
> diff --git a/linux-user/x86_64/target_structs.h b/linux-user/x86_64/target_structs.h
> index ce367b253b..f1181383c4 100644
> --- a/linux-user/x86_64/target_structs.h
> +++ b/linux-user/x86_64/target_structs.h
> @@ -19,41 +19,7 @@
>   #ifndef X86_64_TARGET_STRUCTS_H
>   #define X86_64_TARGET_STRUCTS_H
>   
> -struct target_ipc_perm {
> -    abi_int __key;                      /* Key.  */
> -    abi_uint uid;                       /* Owner's user ID.  */
> -    abi_uint gid;                       /* Owner's group ID.  */
> -    abi_uint cuid;                      /* Creator's user ID.  */
> -    abi_uint cgid;                      /* Creator's group ID.  */
> -    abi_ushort mode;                    /* Read/write permission.  */
> -    abi_ushort __pad1;
> -    abi_ushort __seq;                   /* Sequence number.  */
> -    abi_ushort __pad2;
> -    abi_ulong __unused1;
> -    abi_ulong __unused2;
> -};
> -
> -struct target_shmid_ds {
> -    struct target_ipc_perm shm_perm;    /* operation permission struct */
> -    abi_long shm_segsz;                 /* size of segment in bytes */
> -    abi_ulong shm_atime;                /* time of last shmat() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused1;
> -#endif
> -    abi_ulong shm_dtime;                /* time of last shmdt() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused2;
> -#endif
> -    abi_ulong shm_ctime;                /* time of last change by shmctl() */
> -#if TARGET_ABI_BITS == 32
> -    abi_ulong __unused3;
> -#endif
> -    abi_int shm_cpid;                   /* pid of creator */
> -    abi_int shm_lpid;                   /* pid of last shmop */
> -    abi_ulong shm_nattch;               /* number of current attaches */
> -    abi_ulong __unused4;
> -    abi_ulong __unused5;
> -};
> +#include "../generic/target_structs.h"
>   
>   /* The x86 definition differs from the generic one in that the
>    * two padding fields exist whether the ABI is 32 bits or 64 bits.

Applied to my linux-user-for-7.0 branch.

Thanks,
Laurent
diff mbox series

Patch

diff --git a/linux-user/aarch64/target_structs.h b/linux-user/aarch64/target_structs.h
index 7c748344ca..3a06f373c3 100644
--- a/linux-user/aarch64/target_structs.h
+++ b/linux-user/aarch64/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * ARM AArch64 specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef AARCH64_TARGET_STRUCTS_H
-#define AARCH64_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/arm/target_structs.h b/linux-user/arm/target_structs.h
index 25bf8dd3a5..3a06f373c3 100644
--- a/linux-user/arm/target_structs.h
+++ b/linux-user/arm/target_structs.h
@@ -1,51 +1 @@ 
-/*
- * ARM specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef ARM_TARGET_STRUCTS_H
-#define ARM_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-    abi_ulong __unused1;
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-    abi_ulong __unused2;
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-    abi_ulong __unused3;
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/cris/target_structs.h b/linux-user/cris/target_structs.h
index f949d2331e..3a06f373c3 100644
--- a/linux-user/cris/target_structs.h
+++ b/linux-user/cris/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * CRIS specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef CRIS_TARGET_STRUCTS_H
-#define CRIS_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/generic/target_structs.h b/linux-user/generic/target_structs.h
new file mode 100644
index 0000000000..09ff858b6e
--- /dev/null
+++ b/linux-user/generic/target_structs.h
@@ -0,0 +1,58 @@ 
+/*
+ * Generic structures for linux-user
+ *
+ * Copyright (c) 2013 Fabrice Bellard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef GENERIC_TARGET_STRUCTS_H
+#define GENERIC_TARGET_STRUCTS_H
+
+struct target_ipc_perm {
+    abi_int __key;                      /* Key.  */
+    abi_uint uid;                       /* Owner's user ID.  */
+    abi_uint gid;                       /* Owner's group ID.  */
+    abi_uint cuid;                      /* Creator's user ID.  */
+    abi_uint cgid;                      /* Creator's group ID.  */
+    abi_ushort mode;                    /* Read/write permission.  */
+    abi_ushort __pad1;
+    abi_ushort __seq;                   /* Sequence number.  */
+    abi_ushort __pad2;
+    abi_ulong __unused1;
+    abi_ulong __unused2;
+};
+
+struct target_shmid_ds {
+    struct target_ipc_perm shm_perm;    /* operation permission struct */
+    abi_long shm_segsz;                 /* size of segment in bytes */
+    abi_ulong shm_atime;                /* time of last shmat() */
+#if TARGET_ABI_BITS == 32
+    abi_ulong __unused1;
+#endif
+    abi_ulong shm_dtime;                /* time of last shmdt() */
+#if TARGET_ABI_BITS == 32
+    abi_ulong __unused2;
+#endif
+    abi_ulong shm_ctime;                /* time of last change by shmctl() */
+#if TARGET_ABI_BITS == 32
+    abi_ulong __unused3;
+#endif
+    abi_int shm_cpid;                   /* pid of creator */
+    abi_int shm_lpid;                   /* pid of last shmop */
+    abi_ulong shm_nattch;               /* number of current attaches */
+    abi_ulong __unused4;
+    abi_ulong __unused5;
+};
+
+#endif
diff --git a/linux-user/hexagon/target_structs.h b/linux-user/hexagon/target_structs.h
index c217d9442a..3a06f373c3 100644
--- a/linux-user/hexagon/target_structs.h
+++ b/linux-user/hexagon/target_structs.h
@@ -1,54 +1 @@ 
-/*
- *  Copyright(c) 2019-2021 Qualcomm Innovation Center, Inc. All Rights Reserved.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Hexagon specific structures for linux-user
- */
-#ifndef HEXAGON_TARGET_STRUCTS_H
-#define HEXAGON_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-    abi_ulong __unused1;
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-    abi_ulong __unused2;
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-    abi_ulong __unused3;
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/i386/target_structs.h b/linux-user/i386/target_structs.h
index e22847fd20..3a06f373c3 100644
--- a/linux-user/i386/target_structs.h
+++ b/linux-user/i386/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * i386 specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef I386_TARGET_STRUCTS_H
-#define I386_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/m68k/target_structs.h b/linux-user/m68k/target_structs.h
index e373d481e1..3a06f373c3 100644
--- a/linux-user/m68k/target_structs.h
+++ b/linux-user/m68k/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * m68k specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef M68K_TARGET_STRUCTS_H
-#define M68K_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/microblaze/target_structs.h b/linux-user/microblaze/target_structs.h
index d08f6a53a8..3a06f373c3 100644
--- a/linux-user/microblaze/target_structs.h
+++ b/linux-user/microblaze/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * MicroBlaze specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef MICROBLAZE_TARGET_STRUCTS_H
-#define MICROBLAZE_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/nios2/target_structs.h b/linux-user/nios2/target_structs.h
index daa2886f98..3a06f373c3 100644
--- a/linux-user/nios2/target_structs.h
+++ b/linux-user/nios2/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * Nios2 specific structures for linux-user
- *
- * Copyright (c) 2016 Marek Vasut <marex@denx.de>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef NIOS2_TARGET_STRUCTS_H
-#define NIOS2_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/openrisc/target_structs.h b/linux-user/openrisc/target_structs.h
index e98e2bc799..3a06f373c3 100644
--- a/linux-user/openrisc/target_structs.h
+++ b/linux-user/openrisc/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * OpenRISC specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef OPENRISC_TARGET_STRUCTS_H
-#define OPENRISC_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/riscv/target_structs.h b/linux-user/riscv/target_structs.h
index ea3e5ed17e..3a06f373c3 100644
--- a/linux-user/riscv/target_structs.h
+++ b/linux-user/riscv/target_structs.h
@@ -1,46 +1 @@ 
-/*
- * RISC-V specific structures for linux-user
- *
- * This is a copy of ../aarch64/target_structs.h atm.
- *
- */
-#ifndef RISCV_TARGET_STRUCTS_H
-#define RISCV_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/sh4/target_structs.h b/linux-user/sh4/target_structs.h
index 00ac39478b..3a06f373c3 100644
--- a/linux-user/sh4/target_structs.h
+++ b/linux-user/sh4/target_structs.h
@@ -1,58 +1 @@ 
-/*
- * SH4 specific structures for linux-user
- *
- * Copyright (c) 2013 Fabrice Bellard
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef SH4_TARGET_STRUCTS_H
-#define SH4_TARGET_STRUCTS_H
-
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
-
-#endif
+#include "../generic/target_structs.h"
diff --git a/linux-user/x86_64/target_structs.h b/linux-user/x86_64/target_structs.h
index ce367b253b..f1181383c4 100644
--- a/linux-user/x86_64/target_structs.h
+++ b/linux-user/x86_64/target_structs.h
@@ -19,41 +19,7 @@ 
 #ifndef X86_64_TARGET_STRUCTS_H
 #define X86_64_TARGET_STRUCTS_H
 
-struct target_ipc_perm {
-    abi_int __key;                      /* Key.  */
-    abi_uint uid;                       /* Owner's user ID.  */
-    abi_uint gid;                       /* Owner's group ID.  */
-    abi_uint cuid;                      /* Creator's user ID.  */
-    abi_uint cgid;                      /* Creator's group ID.  */
-    abi_ushort mode;                    /* Read/write permission.  */
-    abi_ushort __pad1;
-    abi_ushort __seq;                   /* Sequence number.  */
-    abi_ushort __pad2;
-    abi_ulong __unused1;
-    abi_ulong __unused2;
-};
-
-struct target_shmid_ds {
-    struct target_ipc_perm shm_perm;    /* operation permission struct */
-    abi_long shm_segsz;                 /* size of segment in bytes */
-    abi_ulong shm_atime;                /* time of last shmat() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused1;
-#endif
-    abi_ulong shm_dtime;                /* time of last shmdt() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused2;
-#endif
-    abi_ulong shm_ctime;                /* time of last change by shmctl() */
-#if TARGET_ABI_BITS == 32
-    abi_ulong __unused3;
-#endif
-    abi_int shm_cpid;                   /* pid of creator */
-    abi_int shm_lpid;                   /* pid of last shmop */
-    abi_ulong shm_nattch;               /* number of current attaches */
-    abi_ulong __unused4;
-    abi_ulong __unused5;
-};
+#include "../generic/target_structs.h"
 
 /* The x86 definition differs from the generic one in that the
  * two padding fields exist whether the ABI is 32 bits or 64 bits.