diff mbox series

[v2,2/3] linux-user: Add missing termbits types and values definitions

Message ID 20200723210233.349690-3-Filip.Bozuta@syrmia.com
State New
Headers show
Series Adding support for printing contents of 'struct termios' which is used by ioctls of group 'ioctl_tty' | expand

Commit Message

Filip Bozuta July 23, 2020, 9:02 p.m. UTC
This patch introduces missing target types ('target_flag_t', 'target_cc_t',
'target_speed_t') in a few 'termibts.h' header files. Also, two missing
values ('TARGET_IUTF8' and 'TARGET_EXTPROC') were also added. These values
were also added in file 'syscall.c' in bitmask tables 'iflag_tbl[]' and
'lflag_tbl[]' which are used to convert values of 'struct termios' between
target and host.

Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
---
 linux-user/alpha/termbits.h   |  1 +
 linux-user/cris/termbits.h    | 18 ++++++++----
 linux-user/hppa/termbits.h    | 17 +++++++----
 linux-user/mips/termbits.h    | 17 +++++++----
 linux-user/ppc/termbits.h     | 21 ++++++++------
 linux-user/sh4/termbits.h     | 19 +++++++++----
 linux-user/sparc/termbits.h   | 18 ++++++++----
 linux-user/sparc64/termbits.h | 18 ++++++++----
 linux-user/syscall.c          | 34 +++++++++++-----------
 linux-user/xtensa/termbits.h  | 53 ++++++++++++++++++-----------------
 10 files changed, 130 insertions(+), 86 deletions(-)

Comments

Max Filippov July 23, 2020, 9:25 p.m. UTC | #1
On Thu, Jul 23, 2020 at 2:04 PM Filip Bozuta <Filip.Bozuta@syrmia.com> wrote:
>
> This patch introduces missing target types ('target_flag_t', 'target_cc_t',
> 'target_speed_t') in a few 'termibts.h' header files. Also, two missing
> values ('TARGET_IUTF8' and 'TARGET_EXTPROC') were also added. These values
> were also added in file 'syscall.c' in bitmask tables 'iflag_tbl[]' and
> 'lflag_tbl[]' which are used to convert values of 'struct termios' between
> target and host.
>
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  linux-user/alpha/termbits.h   |  1 +
>  linux-user/cris/termbits.h    | 18 ++++++++----
>  linux-user/hppa/termbits.h    | 17 +++++++----
>  linux-user/mips/termbits.h    | 17 +++++++----
>  linux-user/ppc/termbits.h     | 21 ++++++++------
>  linux-user/sh4/termbits.h     | 19 +++++++++----
>  linux-user/sparc/termbits.h   | 18 ++++++++----
>  linux-user/sparc64/termbits.h | 18 ++++++++----
>  linux-user/syscall.c          | 34 +++++++++++-----------
>  linux-user/xtensa/termbits.h  | 53 ++++++++++++++++++-----------------
>  10 files changed, 130 insertions(+), 86 deletions(-)

Curious why you did it to some targets, but not to others?
E.g. the following headers have similar definitions:
linux-user/aarch64/termbits.h
linux-user/arm/termbits.h
linux-user/i386/termbits.h
linux-user/m68k/termbits.h
linux-user/microblaze/termbits.h
linux-user/nios2/termbits.h
linux-user/riscv/termbits.h
linux-user/s390x/termbits.h
linux-user/tilegx/termbits.h
Max Filippov July 23, 2020, 9:27 p.m. UTC | #2
On Thu, Jul 23, 2020 at 2:25 PM Max Filippov <jcmvbkbc@gmail.com> wrote:
>
> On Thu, Jul 23, 2020 at 2:04 PM Filip Bozuta <Filip.Bozuta@syrmia.com> wrote:
> >
> > This patch introduces missing target types ('target_flag_t', 'target_cc_t',
> > 'target_speed_t') in a few 'termibts.h' header files. Also, two missing
> > values ('TARGET_IUTF8' and 'TARGET_EXTPROC') were also added. These values
> > were also added in file 'syscall.c' in bitmask tables 'iflag_tbl[]' and
> > 'lflag_tbl[]' which are used to convert values of 'struct termios' between
> > target and host.
> >
> > Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> > ---
> >  linux-user/alpha/termbits.h   |  1 +
> >  linux-user/cris/termbits.h    | 18 ++++++++----
> >  linux-user/hppa/termbits.h    | 17 +++++++----
> >  linux-user/mips/termbits.h    | 17 +++++++----
> >  linux-user/ppc/termbits.h     | 21 ++++++++------
> >  linux-user/sh4/termbits.h     | 19 +++++++++----
> >  linux-user/sparc/termbits.h   | 18 ++++++++----
> >  linux-user/sparc64/termbits.h | 18 ++++++++----
> >  linux-user/syscall.c          | 34 +++++++++++-----------
> >  linux-user/xtensa/termbits.h  | 53 ++++++++++++++++++-----------------
> >  10 files changed, 130 insertions(+), 86 deletions(-)
>
> Curious why you did it to some targets, but not to others?
> E.g. the following headers have similar definitions:
> linux-user/aarch64/termbits.h
> linux-user/arm/termbits.h
> linux-user/i386/termbits.h
> linux-user/m68k/termbits.h
> linux-user/microblaze/termbits.h
> linux-user/nios2/termbits.h
> linux-user/riscv/termbits.h
> linux-user/s390x/termbits.h
> linux-user/tilegx/termbits.h

Never mind, I got this email before the other that adds generic headers...

Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Laurent Vivier Aug. 7, 2020, 1:13 p.m. UTC | #3
Le 23/07/2020 à 23:02, Filip Bozuta a écrit :
> This patch introduces missing target types ('target_flag_t', 'target_cc_t',
> 'target_speed_t') in a few 'termibts.h' header files. Also, two missing
> values ('TARGET_IUTF8' and 'TARGET_EXTPROC') were also added. These values
> were also added in file 'syscall.c' in bitmask tables 'iflag_tbl[]' and
> 'lflag_tbl[]' which are used to convert values of 'struct termios' between
> target and host.
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  linux-user/alpha/termbits.h   |  1 +
>  linux-user/cris/termbits.h    | 18 ++++++++----
>  linux-user/hppa/termbits.h    | 17 +++++++----
>  linux-user/mips/termbits.h    | 17 +++++++----
>  linux-user/ppc/termbits.h     | 21 ++++++++------
>  linux-user/sh4/termbits.h     | 19 +++++++++----
>  linux-user/sparc/termbits.h   | 18 ++++++++----
>  linux-user/sparc64/termbits.h | 18 ++++++++----
>  linux-user/syscall.c          | 34 +++++++++++-----------
>  linux-user/xtensa/termbits.h  | 53 ++++++++++++++++++-----------------
>  10 files changed, 130 insertions(+), 86 deletions(-)
> 
> diff --git a/linux-user/alpha/termbits.h b/linux-user/alpha/termbits.h
> index a71425174a..4a4b1e96f2 100644
> --- a/linux-user/alpha/termbits.h
> +++ b/linux-user/alpha/termbits.h
> @@ -159,6 +159,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00800000
>  #define TARGET_PENDIN	0x20000000
>  #define TARGET_IEXTEN	0x00000400
> +#define TARGET_EXTPROC  0x10000000
>  
>  #define TARGET_FIOCLEX		TARGET_IO('f', 1)
>  #define TARGET_FIONCLEX	TARGET_IO('f', 2)
> diff --git a/linux-user/cris/termbits.h b/linux-user/cris/termbits.h
> index 475ee70fed..0c8d8fc051 100644
> --- a/linux-user/cris/termbits.h
> +++ b/linux-user/cris/termbits.h
> @@ -5,13 +5,17 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
>  /* c_iflag bits */
> @@ -29,6 +33,7 @@ struct target_termios {
>  #define TARGET_IXANY   0004000
>  #define TARGET_IXOFF   0010000
>  #define TARGET_IMAXBEL 0020000
> +#define TARGET_IUTF8   0040000
>  
>  /* c_oflag bits */
>  #define TARGET_OPOST   0000001
> @@ -118,6 +123,7 @@ struct target_termios {
>  #define TARGET_FLUSHO  0010000
>  #define TARGET_PENDIN  0040000
>  #define TARGET_IEXTEN  0100000
> +#define TARGET_EXTPROC 0200000
>  
>  /* c_cc character offsets */
>  #define TARGET_VINTR	0
> diff --git a/linux-user/hppa/termbits.h b/linux-user/hppa/termbits.h
> index 8fba839dd4..11fd4eed62 100644
> --- a/linux-user/hppa/termbits.h
> +++ b/linux-user/hppa/termbits.h
> @@ -5,13 +5,17 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
>  /* c_iflag bits */
> @@ -120,6 +124,7 @@ struct target_termios {
>  #define TARGET_FLUSHO  0010000
>  #define TARGET_PENDIN  0040000
>  #define TARGET_IEXTEN  0100000
> +#define TARGET_EXTPROC 0200000
>  
>  /* c_cc character offsets */
>  #define TARGET_VINTR    0
> diff --git a/linux-user/mips/termbits.h b/linux-user/mips/termbits.h
> index 3287cf6df8..e8b4b58d87 100644
> --- a/linux-user/mips/termbits.h
> +++ b/linux-user/mips/termbits.h
> @@ -5,13 +5,17 @@
>  
>  #define TARGET_NCCS 23
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
>  /* c_iflag bits */
> @@ -133,6 +137,7 @@ struct target_termios {
>  #define TARGET_PENDIN  0040000
>  #define TARGET_TOSTOP  0100000
>  #define TARGET_ITOSTOP TARGET_TOSTOP
> +#define TARGET_EXTPROC 0200000
>  
>  /* c_cc character offsets */
>  #define TARGET_VINTR	0
> diff --git a/linux-user/ppc/termbits.h b/linux-user/ppc/termbits.h
> index 19e4c6eda8..7066d1e552 100644
> --- a/linux-user/ppc/termbits.h
> +++ b/linux-user/ppc/termbits.h
> @@ -5,15 +5,19 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned int c_ispeed;		/* input speed */
> -    unsigned int c_ospeed;		/* output speed */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
> +    target_speed_t c_ispeed;               /* input speed */
> +    target_speed_t c_ospeed;               /* output speed */
>  };
>  
>  /* c_cc character offsets */
> @@ -158,6 +162,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00800000
>  #define TARGET_PENDIN	0x20000000
>  #define TARGET_IEXTEN	0x00000400
> +#define TARGET_EXTPROC  0x10000000
>  
>  /* ioctls */
>  
> diff --git a/linux-user/sh4/termbits.h b/linux-user/sh4/termbits.h
> index dd125b6a2b..f91b5c51cf 100644
> --- a/linux-user/sh4/termbits.h
> +++ b/linux-user/sh4/termbits.h
> @@ -5,15 +5,20 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -	unsigned int c_iflag;			/* input mode flags */
> -	unsigned int c_oflag;			/* output mode flags */
> -	unsigned int c_cflag;			/* control mode flags */
> -	unsigned int c_lflag;			/* local mode flags */
> -	unsigned char c_line;			/* line discipline */
> -	unsigned char c_cc[TARGET_NCCS];	/* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  /* c_cc characters */
>  #define TARGET_VINTR 0
>  #define TARGET_VQUIT 1
> @@ -150,6 +155,8 @@ struct target_termios {
>  #define TARGET_FLUSHO	0010000
>  #define TARGET_PENDIN	0040000
>  #define TARGET_IEXTEN	0100000
> +#define TARGET_EXTPROC  0200000
> +
>  
>  /* tcflow() and TCXONC use these */
>  #define TARGET_TCOOFF		0
> diff --git a/linux-user/sparc/termbits.h b/linux-user/sparc/termbits.h
> index f85219ed71..704bee1c42 100644
> --- a/linux-user/sparc/termbits.h
> +++ b/linux-user/sparc/termbits.h
> @@ -5,15 +5,20 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  /* c_cc characters */
>  #define TARGET_VINTR    0
>  #define TARGET_VQUIT    1
> @@ -170,6 +175,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00002000
>  #define TARGET_PENDIN	0x00004000
>  #define TARGET_IEXTEN	0x00008000
> +#define TARGET_EXTPROC  0x00010000
>  
>  /* ioctls */
>  
> diff --git a/linux-user/sparc64/termbits.h b/linux-user/sparc64/termbits.h
> index 11b5abcf84..1ab1e80db5 100644
> --- a/linux-user/sparc64/termbits.h
> +++ b/linux-user/sparc64/termbits.h
> @@ -5,15 +5,20 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  /* c_cc characters */
>  #define TARGET_VINTR    0
>  #define TARGET_VQUIT    1
> @@ -170,6 +175,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00002000
>  #define TARGET_PENDIN	0x00004000
>  #define TARGET_IEXTEN	0x00008000
> +#define TARGET_EXTPROC  0x00010000
>  
>  /* ioctls */
>  
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 24d915f0ff..e815f14bac 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5508,6 +5508,7 @@ static const bitmask_transtbl iflag_tbl[] = {
>          { TARGET_IXANY, TARGET_IXANY, IXANY, IXANY },
>          { TARGET_IXOFF, TARGET_IXOFF, IXOFF, IXOFF },
>          { TARGET_IMAXBEL, TARGET_IMAXBEL, IMAXBEL, IMAXBEL },
> +        { TARGET_IUTF8, TARGET_IUTF8, IUTF8, IUTF8},
>          { 0, 0, 0, 0 }
>  };
>  
> @@ -5575,22 +5576,23 @@ static const bitmask_transtbl cflag_tbl[] = {
>  };
>  
>  static const bitmask_transtbl lflag_tbl[] = {
> -	{ TARGET_ISIG, TARGET_ISIG, ISIG, ISIG },
> -	{ TARGET_ICANON, TARGET_ICANON, ICANON, ICANON },
> -	{ TARGET_XCASE, TARGET_XCASE, XCASE, XCASE },
> -	{ TARGET_ECHO, TARGET_ECHO, ECHO, ECHO },
> -	{ TARGET_ECHOE, TARGET_ECHOE, ECHOE, ECHOE },
> -	{ TARGET_ECHOK, TARGET_ECHOK, ECHOK, ECHOK },
> -	{ TARGET_ECHONL, TARGET_ECHONL, ECHONL, ECHONL },
> -	{ TARGET_NOFLSH, TARGET_NOFLSH, NOFLSH, NOFLSH },
> -	{ TARGET_TOSTOP, TARGET_TOSTOP, TOSTOP, TOSTOP },
> -	{ TARGET_ECHOCTL, TARGET_ECHOCTL, ECHOCTL, ECHOCTL },
> -	{ TARGET_ECHOPRT, TARGET_ECHOPRT, ECHOPRT, ECHOPRT },
> -	{ TARGET_ECHOKE, TARGET_ECHOKE, ECHOKE, ECHOKE },
> -	{ TARGET_FLUSHO, TARGET_FLUSHO, FLUSHO, FLUSHO },
> -	{ TARGET_PENDIN, TARGET_PENDIN, PENDIN, PENDIN },
> -	{ TARGET_IEXTEN, TARGET_IEXTEN, IEXTEN, IEXTEN },
> -	{ 0, 0, 0, 0 }
> +  { TARGET_ISIG, TARGET_ISIG, ISIG, ISIG },
> +  { TARGET_ICANON, TARGET_ICANON, ICANON, ICANON },
> +  { TARGET_XCASE, TARGET_XCASE, XCASE, XCASE },
> +  { TARGET_ECHO, TARGET_ECHO, ECHO, ECHO },
> +  { TARGET_ECHOE, TARGET_ECHOE, ECHOE, ECHOE },
> +  { TARGET_ECHOK, TARGET_ECHOK, ECHOK, ECHOK },
> +  { TARGET_ECHONL, TARGET_ECHONL, ECHONL, ECHONL },
> +  { TARGET_NOFLSH, TARGET_NOFLSH, NOFLSH, NOFLSH },
> +  { TARGET_TOSTOP, TARGET_TOSTOP, TOSTOP, TOSTOP },
> +  { TARGET_ECHOCTL, TARGET_ECHOCTL, ECHOCTL, ECHOCTL },
> +  { TARGET_ECHOPRT, TARGET_ECHOPRT, ECHOPRT, ECHOPRT },
> +  { TARGET_ECHOKE, TARGET_ECHOKE, ECHOKE, ECHOKE },
> +  { TARGET_FLUSHO, TARGET_FLUSHO, FLUSHO, FLUSHO },
> +  { TARGET_PENDIN, TARGET_PENDIN, PENDIN, PENDIN },
> +  { TARGET_IEXTEN, TARGET_IEXTEN, IEXTEN, IEXTEN },
> +  { TARGET_EXTPROC, TARGET_EXTPROC, EXTPROC, EXTPROC},
> +  { 0, 0, 0, 0 }
>  };
>  
>  static void target_to_host_termios (void *dst, const void *src)
> diff --git a/linux-user/xtensa/termbits.h b/linux-user/xtensa/termbits.h
> index d1e09e61a6..2a603ecae6 100644
> --- a/linux-user/xtensa/termbits.h
> +++ b/linux-user/xtensa/termbits.h
> @@ -15,40 +15,40 @@
>  
>  #include <linux/posix_types.h>
>  
> -typedef unsigned char   cc_t;
> -typedef unsigned int    speed_t;
> -typedef unsigned int    tcflag_t;
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
>  
> -#define TARGET_NCCS 19
>  struct target_termios {
> -    tcflag_t c_iflag;       /* input mode flags */
> -    tcflag_t c_oflag;       /* output mode flags */
> -    tcflag_t c_cflag;       /* control mode flags */
> -    tcflag_t c_lflag;       /* local mode flags */
> -    cc_t c_line;            /* line discipline */
> -    cc_t c_cc[TARGET_NCCS]; /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  struct target_termios2 {
> -    tcflag_t c_iflag;       /* input mode flags */
> -    tcflag_t c_oflag;       /* output mode flags */
> -    tcflag_t c_cflag;       /* control mode flags */
> -    tcflag_t c_lflag;       /* local mode flags */
> -    cc_t c_line;            /* line discipline */
> -    cc_t c_cc[TARGET_NCCS]; /* control characters */
> -    speed_t c_ispeed;       /* input speed */
> -    speed_t c_ospeed;       /* output speed */
> +    target_tcflag_t c_iflag;       /* input mode flags */
> +    target_tcflag_t c_oflag;       /* output mode flags */
> +    target_tcflag_t c_cflag;       /* control mode flags */
> +    target_tcflag_t c_lflag;       /* local mode flags */
> +    target_cc_t c_line;            /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS]; /* control characters */
> +    target_speed_t c_ispeed;       /* input speed */
> +    target_speed_t c_ospeed;       /* output speed */
>  };
>  
>  struct target_ktermios {
> -    tcflag_t c_iflag;       /* input mode flags */
> -    tcflag_t c_oflag;       /* output mode flags */
> -    tcflag_t c_cflag;       /* control mode flags */
> -    tcflag_t c_lflag;       /* local mode flags */
> -    cc_t c_line;            /* line discipline */
> -    cc_t c_cc[TARGET_NCCS]; /* control characters */
> -    speed_t c_ispeed;       /* input speed */
> -    speed_t c_ospeed;       /* output speed */
> +    target_tcflag_t c_iflag;       /* input mode flags */
> +    target_tcflag_t c_oflag;       /* output mode flags */
> +    target_tcflag_t c_cflag;       /* control mode flags */
> +    target_tcflag_t c_lflag;       /* local mode flags */
> +    target_cc_t c_line;            /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS]; /* control characters */
> +    target_speed_t c_ispeed;       /* input speed */
> +    target_speed_t c_ospeed;       /* output speed */
>  };
>  
>  /* c_cc characters */
> @@ -195,6 +195,7 @@ struct target_ktermios {
>  #define TARGET_FLUSHO   0010000
>  #define TARGET_PENDIN   0040000
>  #define TARGET_IEXTEN   0100000
> +#define TARGET_EXTPROC  0200000
>  
>  /* tcflow() and TCXONC use these */
>  
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Laurent Vivier Aug. 24, 2020, 8:39 p.m. UTC | #4
Le 23/07/2020 à 23:02, Filip Bozuta a écrit :
> This patch introduces missing target types ('target_flag_t', 'target_cc_t',
> 'target_speed_t') in a few 'termibts.h' header files. Also, two missing
> values ('TARGET_IUTF8' and 'TARGET_EXTPROC') were also added. These values
> were also added in file 'syscall.c' in bitmask tables 'iflag_tbl[]' and
> 'lflag_tbl[]' which are used to convert values of 'struct termios' between
> target and host.
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  linux-user/alpha/termbits.h   |  1 +
>  linux-user/cris/termbits.h    | 18 ++++++++----
>  linux-user/hppa/termbits.h    | 17 +++++++----
>  linux-user/mips/termbits.h    | 17 +++++++----
>  linux-user/ppc/termbits.h     | 21 ++++++++------
>  linux-user/sh4/termbits.h     | 19 +++++++++----
>  linux-user/sparc/termbits.h   | 18 ++++++++----
>  linux-user/sparc64/termbits.h | 18 ++++++++----
>  linux-user/syscall.c          | 34 +++++++++++-----------
>  linux-user/xtensa/termbits.h  | 53 ++++++++++++++++++-----------------
>  10 files changed, 130 insertions(+), 86 deletions(-)
> 
> diff --git a/linux-user/alpha/termbits.h b/linux-user/alpha/termbits.h
> index a71425174a..4a4b1e96f2 100644
> --- a/linux-user/alpha/termbits.h
> +++ b/linux-user/alpha/termbits.h
> @@ -159,6 +159,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00800000
>  #define TARGET_PENDIN	0x20000000
>  #define TARGET_IEXTEN	0x00000400
> +#define TARGET_EXTPROC  0x10000000
>  
>  #define TARGET_FIOCLEX		TARGET_IO('f', 1)
>  #define TARGET_FIONCLEX	TARGET_IO('f', 2)
> diff --git a/linux-user/cris/termbits.h b/linux-user/cris/termbits.h
> index 475ee70fed..0c8d8fc051 100644
> --- a/linux-user/cris/termbits.h
> +++ b/linux-user/cris/termbits.h
> @@ -5,13 +5,17 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
>  /* c_iflag bits */
> @@ -29,6 +33,7 @@ struct target_termios {
>  #define TARGET_IXANY   0004000
>  #define TARGET_IXOFF   0010000
>  #define TARGET_IMAXBEL 0020000
> +#define TARGET_IUTF8   0040000
>  
>  /* c_oflag bits */
>  #define TARGET_OPOST   0000001
> @@ -118,6 +123,7 @@ struct target_termios {
>  #define TARGET_FLUSHO  0010000
>  #define TARGET_PENDIN  0040000
>  #define TARGET_IEXTEN  0100000
> +#define TARGET_EXTPROC 0200000
>  
>  /* c_cc character offsets */
>  #define TARGET_VINTR	0
> diff --git a/linux-user/hppa/termbits.h b/linux-user/hppa/termbits.h
> index 8fba839dd4..11fd4eed62 100644
> --- a/linux-user/hppa/termbits.h
> +++ b/linux-user/hppa/termbits.h
> @@ -5,13 +5,17 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
>  /* c_iflag bits */
> @@ -120,6 +124,7 @@ struct target_termios {
>  #define TARGET_FLUSHO  0010000
>  #define TARGET_PENDIN  0040000
>  #define TARGET_IEXTEN  0100000
> +#define TARGET_EXTPROC 0200000
>  
>  /* c_cc character offsets */
>  #define TARGET_VINTR    0
> diff --git a/linux-user/mips/termbits.h b/linux-user/mips/termbits.h
> index 3287cf6df8..e8b4b58d87 100644
> --- a/linux-user/mips/termbits.h
> +++ b/linux-user/mips/termbits.h
> @@ -5,13 +5,17 @@
>  
>  #define TARGET_NCCS 23
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
>  /* c_iflag bits */
> @@ -133,6 +137,7 @@ struct target_termios {
>  #define TARGET_PENDIN  0040000
>  #define TARGET_TOSTOP  0100000
>  #define TARGET_ITOSTOP TARGET_TOSTOP
> +#define TARGET_EXTPROC 0200000
>  
>  /* c_cc character offsets */
>  #define TARGET_VINTR	0
> diff --git a/linux-user/ppc/termbits.h b/linux-user/ppc/termbits.h
> index 19e4c6eda8..7066d1e552 100644
> --- a/linux-user/ppc/termbits.h
> +++ b/linux-user/ppc/termbits.h
> @@ -5,15 +5,19 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned int c_ispeed;		/* input speed */
> -    unsigned int c_ospeed;		/* output speed */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
> +    target_speed_t c_ispeed;               /* input speed */
> +    target_speed_t c_ospeed;               /* output speed */
>  };
>  
>  /* c_cc character offsets */
> @@ -158,6 +162,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00800000
>  #define TARGET_PENDIN	0x20000000
>  #define TARGET_IEXTEN	0x00000400
> +#define TARGET_EXTPROC  0x10000000
>  
>  /* ioctls */
>  
> diff --git a/linux-user/sh4/termbits.h b/linux-user/sh4/termbits.h
> index dd125b6a2b..f91b5c51cf 100644
> --- a/linux-user/sh4/termbits.h
> +++ b/linux-user/sh4/termbits.h
> @@ -5,15 +5,20 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -	unsigned int c_iflag;			/* input mode flags */
> -	unsigned int c_oflag;			/* output mode flags */
> -	unsigned int c_cflag;			/* control mode flags */
> -	unsigned int c_lflag;			/* local mode flags */
> -	unsigned char c_line;			/* line discipline */
> -	unsigned char c_cc[TARGET_NCCS];	/* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  /* c_cc characters */
>  #define TARGET_VINTR 0
>  #define TARGET_VQUIT 1
> @@ -150,6 +155,8 @@ struct target_termios {
>  #define TARGET_FLUSHO	0010000
>  #define TARGET_PENDIN	0040000
>  #define TARGET_IEXTEN	0100000
> +#define TARGET_EXTPROC  0200000
> +
>  
>  /* tcflow() and TCXONC use these */
>  #define TARGET_TCOOFF		0
> diff --git a/linux-user/sparc/termbits.h b/linux-user/sparc/termbits.h
> index f85219ed71..704bee1c42 100644
> --- a/linux-user/sparc/termbits.h
> +++ b/linux-user/sparc/termbits.h
> @@ -5,15 +5,20 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  /* c_cc characters */
>  #define TARGET_VINTR    0
>  #define TARGET_VQUIT    1
> @@ -170,6 +175,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00002000
>  #define TARGET_PENDIN	0x00004000
>  #define TARGET_IEXTEN	0x00008000
> +#define TARGET_EXTPROC  0x00010000
>  
>  /* ioctls */
>  
> diff --git a/linux-user/sparc64/termbits.h b/linux-user/sparc64/termbits.h
> index 11b5abcf84..1ab1e80db5 100644
> --- a/linux-user/sparc64/termbits.h
> +++ b/linux-user/sparc64/termbits.h
> @@ -5,15 +5,20 @@
>  
>  #define TARGET_NCCS 19
>  
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
> +
>  struct target_termios {
> -    unsigned int c_iflag;               /* input mode flags */
> -    unsigned int c_oflag;               /* output mode flags */
> -    unsigned int c_cflag;               /* control mode flags */
> -    unsigned int c_lflag;               /* local mode flags */
> -    unsigned char c_line;                    /* line discipline */
> -    unsigned char c_cc[TARGET_NCCS];                /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  /* c_cc characters */
>  #define TARGET_VINTR    0
>  #define TARGET_VQUIT    1
> @@ -170,6 +175,7 @@ struct target_termios {
>  #define TARGET_FLUSHO	0x00002000
>  #define TARGET_PENDIN	0x00004000
>  #define TARGET_IEXTEN	0x00008000
> +#define TARGET_EXTPROC  0x00010000
>  
>  /* ioctls */
>  
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 24d915f0ff..e815f14bac 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5508,6 +5508,7 @@ static const bitmask_transtbl iflag_tbl[] = {
>          { TARGET_IXANY, TARGET_IXANY, IXANY, IXANY },
>          { TARGET_IXOFF, TARGET_IXOFF, IXOFF, IXOFF },
>          { TARGET_IMAXBEL, TARGET_IMAXBEL, IMAXBEL, IMAXBEL },
> +        { TARGET_IUTF8, TARGET_IUTF8, IUTF8, IUTF8},
>          { 0, 0, 0, 0 }
>  };
>  
> @@ -5575,22 +5576,23 @@ static const bitmask_transtbl cflag_tbl[] = {
>  };
>  
>  static const bitmask_transtbl lflag_tbl[] = {
> -	{ TARGET_ISIG, TARGET_ISIG, ISIG, ISIG },
> -	{ TARGET_ICANON, TARGET_ICANON, ICANON, ICANON },
> -	{ TARGET_XCASE, TARGET_XCASE, XCASE, XCASE },
> -	{ TARGET_ECHO, TARGET_ECHO, ECHO, ECHO },
> -	{ TARGET_ECHOE, TARGET_ECHOE, ECHOE, ECHOE },
> -	{ TARGET_ECHOK, TARGET_ECHOK, ECHOK, ECHOK },
> -	{ TARGET_ECHONL, TARGET_ECHONL, ECHONL, ECHONL },
> -	{ TARGET_NOFLSH, TARGET_NOFLSH, NOFLSH, NOFLSH },
> -	{ TARGET_TOSTOP, TARGET_TOSTOP, TOSTOP, TOSTOP },
> -	{ TARGET_ECHOCTL, TARGET_ECHOCTL, ECHOCTL, ECHOCTL },
> -	{ TARGET_ECHOPRT, TARGET_ECHOPRT, ECHOPRT, ECHOPRT },
> -	{ TARGET_ECHOKE, TARGET_ECHOKE, ECHOKE, ECHOKE },
> -	{ TARGET_FLUSHO, TARGET_FLUSHO, FLUSHO, FLUSHO },
> -	{ TARGET_PENDIN, TARGET_PENDIN, PENDIN, PENDIN },
> -	{ TARGET_IEXTEN, TARGET_IEXTEN, IEXTEN, IEXTEN },
> -	{ 0, 0, 0, 0 }
> +  { TARGET_ISIG, TARGET_ISIG, ISIG, ISIG },
> +  { TARGET_ICANON, TARGET_ICANON, ICANON, ICANON },
> +  { TARGET_XCASE, TARGET_XCASE, XCASE, XCASE },
> +  { TARGET_ECHO, TARGET_ECHO, ECHO, ECHO },
> +  { TARGET_ECHOE, TARGET_ECHOE, ECHOE, ECHOE },
> +  { TARGET_ECHOK, TARGET_ECHOK, ECHOK, ECHOK },
> +  { TARGET_ECHONL, TARGET_ECHONL, ECHONL, ECHONL },
> +  { TARGET_NOFLSH, TARGET_NOFLSH, NOFLSH, NOFLSH },
> +  { TARGET_TOSTOP, TARGET_TOSTOP, TOSTOP, TOSTOP },
> +  { TARGET_ECHOCTL, TARGET_ECHOCTL, ECHOCTL, ECHOCTL },
> +  { TARGET_ECHOPRT, TARGET_ECHOPRT, ECHOPRT, ECHOPRT },
> +  { TARGET_ECHOKE, TARGET_ECHOKE, ECHOKE, ECHOKE },
> +  { TARGET_FLUSHO, TARGET_FLUSHO, FLUSHO, FLUSHO },
> +  { TARGET_PENDIN, TARGET_PENDIN, PENDIN, PENDIN },
> +  { TARGET_IEXTEN, TARGET_IEXTEN, IEXTEN, IEXTEN },
> +  { TARGET_EXTPROC, TARGET_EXTPROC, EXTPROC, EXTPROC},
> +  { 0, 0, 0, 0 }
>  };
>  
>  static void target_to_host_termios (void *dst, const void *src)
> diff --git a/linux-user/xtensa/termbits.h b/linux-user/xtensa/termbits.h
> index d1e09e61a6..2a603ecae6 100644
> --- a/linux-user/xtensa/termbits.h
> +++ b/linux-user/xtensa/termbits.h
> @@ -15,40 +15,40 @@
>  
>  #include <linux/posix_types.h>
>  
> -typedef unsigned char   cc_t;
> -typedef unsigned int    speed_t;
> -typedef unsigned int    tcflag_t;
> +typedef unsigned char   target_cc_t;        /* cc_t */
> +typedef unsigned int    target_speed_t;     /* speed_t */
> +typedef unsigned int    target_tcflag_t;    /* tcflag_t */
>  
> -#define TARGET_NCCS 19
>  struct target_termios {
> -    tcflag_t c_iflag;       /* input mode flags */
> -    tcflag_t c_oflag;       /* output mode flags */
> -    tcflag_t c_cflag;       /* control mode flags */
> -    tcflag_t c_lflag;       /* local mode flags */
> -    cc_t c_line;            /* line discipline */
> -    cc_t c_cc[TARGET_NCCS]; /* control characters */
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
>  };
>  
> +
>  struct target_termios2 {
> -    tcflag_t c_iflag;       /* input mode flags */
> -    tcflag_t c_oflag;       /* output mode flags */
> -    tcflag_t c_cflag;       /* control mode flags */
> -    tcflag_t c_lflag;       /* local mode flags */
> -    cc_t c_line;            /* line discipline */
> -    cc_t c_cc[TARGET_NCCS]; /* control characters */
> -    speed_t c_ispeed;       /* input speed */
> -    speed_t c_ospeed;       /* output speed */
> +    target_tcflag_t c_iflag;       /* input mode flags */
> +    target_tcflag_t c_oflag;       /* output mode flags */
> +    target_tcflag_t c_cflag;       /* control mode flags */
> +    target_tcflag_t c_lflag;       /* local mode flags */
> +    target_cc_t c_line;            /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS]; /* control characters */
> +    target_speed_t c_ispeed;       /* input speed */
> +    target_speed_t c_ospeed;       /* output speed */
>  };
>  
>  struct target_ktermios {
> -    tcflag_t c_iflag;       /* input mode flags */
> -    tcflag_t c_oflag;       /* output mode flags */
> -    tcflag_t c_cflag;       /* control mode flags */
> -    tcflag_t c_lflag;       /* local mode flags */
> -    cc_t c_line;            /* line discipline */
> -    cc_t c_cc[TARGET_NCCS]; /* control characters */
> -    speed_t c_ispeed;       /* input speed */
> -    speed_t c_ospeed;       /* output speed */
> +    target_tcflag_t c_iflag;       /* input mode flags */
> +    target_tcflag_t c_oflag;       /* output mode flags */
> +    target_tcflag_t c_cflag;       /* control mode flags */
> +    target_tcflag_t c_lflag;       /* local mode flags */
> +    target_cc_t c_line;            /* line discipline */
> +    target_cc_t c_cc[TARGET_NCCS]; /* control characters */
> +    target_speed_t c_ispeed;       /* input speed */
> +    target_speed_t c_ospeed;       /* output speed */
>  };
>  
>  /* c_cc characters */
> @@ -195,6 +195,7 @@ struct target_ktermios {
>  #define TARGET_FLUSHO   0010000
>  #define TARGET_PENDIN   0040000
>  #define TARGET_IEXTEN   0100000
> +#define TARGET_EXTPROC  0200000
>  
>  /* tcflow() and TCXONC use these */
>  
>
Applied to my linux-user-for-5.2 branch.

Thanks,
Laurent
diff mbox series

Patch

diff --git a/linux-user/alpha/termbits.h b/linux-user/alpha/termbits.h
index a71425174a..4a4b1e96f2 100644
--- a/linux-user/alpha/termbits.h
+++ b/linux-user/alpha/termbits.h
@@ -159,6 +159,7 @@  struct target_termios {
 #define TARGET_FLUSHO	0x00800000
 #define TARGET_PENDIN	0x20000000
 #define TARGET_IEXTEN	0x00000400
+#define TARGET_EXTPROC  0x10000000
 
 #define TARGET_FIOCLEX		TARGET_IO('f', 1)
 #define TARGET_FIONCLEX	TARGET_IO('f', 2)
diff --git a/linux-user/cris/termbits.h b/linux-user/cris/termbits.h
index 475ee70fed..0c8d8fc051 100644
--- a/linux-user/cris/termbits.h
+++ b/linux-user/cris/termbits.h
@@ -5,13 +5,17 @@ 
 
 #define TARGET_NCCS 19
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-    unsigned int c_iflag;               /* input mode flags */
-    unsigned int c_oflag;               /* output mode flags */
-    unsigned int c_cflag;               /* control mode flags */
-    unsigned int c_lflag;               /* local mode flags */
-    unsigned char c_line;                    /* line discipline */
-    unsigned char c_cc[TARGET_NCCS];                /* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
 /* c_iflag bits */
@@ -29,6 +33,7 @@  struct target_termios {
 #define TARGET_IXANY   0004000
 #define TARGET_IXOFF   0010000
 #define TARGET_IMAXBEL 0020000
+#define TARGET_IUTF8   0040000
 
 /* c_oflag bits */
 #define TARGET_OPOST   0000001
@@ -118,6 +123,7 @@  struct target_termios {
 #define TARGET_FLUSHO  0010000
 #define TARGET_PENDIN  0040000
 #define TARGET_IEXTEN  0100000
+#define TARGET_EXTPROC 0200000
 
 /* c_cc character offsets */
 #define TARGET_VINTR	0
diff --git a/linux-user/hppa/termbits.h b/linux-user/hppa/termbits.h
index 8fba839dd4..11fd4eed62 100644
--- a/linux-user/hppa/termbits.h
+++ b/linux-user/hppa/termbits.h
@@ -5,13 +5,17 @@ 
 
 #define TARGET_NCCS 19
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-    unsigned int c_iflag;               /* input mode flags */
-    unsigned int c_oflag;               /* output mode flags */
-    unsigned int c_cflag;               /* control mode flags */
-    unsigned int c_lflag;               /* local mode flags */
-    unsigned char c_line;                    /* line discipline */
-    unsigned char c_cc[TARGET_NCCS];                /* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
 /* c_iflag bits */
@@ -120,6 +124,7 @@  struct target_termios {
 #define TARGET_FLUSHO  0010000
 #define TARGET_PENDIN  0040000
 #define TARGET_IEXTEN  0100000
+#define TARGET_EXTPROC 0200000
 
 /* c_cc character offsets */
 #define TARGET_VINTR    0
diff --git a/linux-user/mips/termbits.h b/linux-user/mips/termbits.h
index 3287cf6df8..e8b4b58d87 100644
--- a/linux-user/mips/termbits.h
+++ b/linux-user/mips/termbits.h
@@ -5,13 +5,17 @@ 
 
 #define TARGET_NCCS 23
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-    unsigned int c_iflag;               /* input mode flags */
-    unsigned int c_oflag;               /* output mode flags */
-    unsigned int c_cflag;               /* control mode flags */
-    unsigned int c_lflag;               /* local mode flags */
-    unsigned char c_line;                    /* line discipline */
-    unsigned char c_cc[TARGET_NCCS];                /* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
 /* c_iflag bits */
@@ -133,6 +137,7 @@  struct target_termios {
 #define TARGET_PENDIN  0040000
 #define TARGET_TOSTOP  0100000
 #define TARGET_ITOSTOP TARGET_TOSTOP
+#define TARGET_EXTPROC 0200000
 
 /* c_cc character offsets */
 #define TARGET_VINTR	0
diff --git a/linux-user/ppc/termbits.h b/linux-user/ppc/termbits.h
index 19e4c6eda8..7066d1e552 100644
--- a/linux-user/ppc/termbits.h
+++ b/linux-user/ppc/termbits.h
@@ -5,15 +5,19 @@ 
 
 #define TARGET_NCCS 19
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-    unsigned int c_iflag;               /* input mode flags */
-    unsigned int c_oflag;               /* output mode flags */
-    unsigned int c_cflag;               /* control mode flags */
-    unsigned int c_lflag;               /* local mode flags */
-    unsigned char c_cc[TARGET_NCCS];                /* control characters */
-    unsigned char c_line;                    /* line discipline */
-    unsigned int c_ispeed;		/* input speed */
-    unsigned int c_ospeed;		/* output speed */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
+    target_speed_t c_ispeed;               /* input speed */
+    target_speed_t c_ospeed;               /* output speed */
 };
 
 /* c_cc character offsets */
@@ -158,6 +162,7 @@  struct target_termios {
 #define TARGET_FLUSHO	0x00800000
 #define TARGET_PENDIN	0x20000000
 #define TARGET_IEXTEN	0x00000400
+#define TARGET_EXTPROC  0x10000000
 
 /* ioctls */
 
diff --git a/linux-user/sh4/termbits.h b/linux-user/sh4/termbits.h
index dd125b6a2b..f91b5c51cf 100644
--- a/linux-user/sh4/termbits.h
+++ b/linux-user/sh4/termbits.h
@@ -5,15 +5,20 @@ 
 
 #define TARGET_NCCS 19
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-	unsigned int c_iflag;			/* input mode flags */
-	unsigned int c_oflag;			/* output mode flags */
-	unsigned int c_cflag;			/* control mode flags */
-	unsigned int c_lflag;			/* local mode flags */
-	unsigned char c_line;			/* line discipline */
-	unsigned char c_cc[TARGET_NCCS];	/* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
+
 /* c_cc characters */
 #define TARGET_VINTR 0
 #define TARGET_VQUIT 1
@@ -150,6 +155,8 @@  struct target_termios {
 #define TARGET_FLUSHO	0010000
 #define TARGET_PENDIN	0040000
 #define TARGET_IEXTEN	0100000
+#define TARGET_EXTPROC  0200000
+
 
 /* tcflow() and TCXONC use these */
 #define TARGET_TCOOFF		0
diff --git a/linux-user/sparc/termbits.h b/linux-user/sparc/termbits.h
index f85219ed71..704bee1c42 100644
--- a/linux-user/sparc/termbits.h
+++ b/linux-user/sparc/termbits.h
@@ -5,15 +5,20 @@ 
 
 #define TARGET_NCCS 19
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-    unsigned int c_iflag;               /* input mode flags */
-    unsigned int c_oflag;               /* output mode flags */
-    unsigned int c_cflag;               /* control mode flags */
-    unsigned int c_lflag;               /* local mode flags */
-    unsigned char c_line;                    /* line discipline */
-    unsigned char c_cc[TARGET_NCCS];                /* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
+
 /* c_cc characters */
 #define TARGET_VINTR    0
 #define TARGET_VQUIT    1
@@ -170,6 +175,7 @@  struct target_termios {
 #define TARGET_FLUSHO	0x00002000
 #define TARGET_PENDIN	0x00004000
 #define TARGET_IEXTEN	0x00008000
+#define TARGET_EXTPROC  0x00010000
 
 /* ioctls */
 
diff --git a/linux-user/sparc64/termbits.h b/linux-user/sparc64/termbits.h
index 11b5abcf84..1ab1e80db5 100644
--- a/linux-user/sparc64/termbits.h
+++ b/linux-user/sparc64/termbits.h
@@ -5,15 +5,20 @@ 
 
 #define TARGET_NCCS 19
 
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
+
 struct target_termios {
-    unsigned int c_iflag;               /* input mode flags */
-    unsigned int c_oflag;               /* output mode flags */
-    unsigned int c_cflag;               /* control mode flags */
-    unsigned int c_lflag;               /* local mode flags */
-    unsigned char c_line;                    /* line discipline */
-    unsigned char c_cc[TARGET_NCCS];                /* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
+
 /* c_cc characters */
 #define TARGET_VINTR    0
 #define TARGET_VQUIT    1
@@ -170,6 +175,7 @@  struct target_termios {
 #define TARGET_FLUSHO	0x00002000
 #define TARGET_PENDIN	0x00004000
 #define TARGET_IEXTEN	0x00008000
+#define TARGET_EXTPROC  0x00010000
 
 /* ioctls */
 
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 24d915f0ff..e815f14bac 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5508,6 +5508,7 @@  static const bitmask_transtbl iflag_tbl[] = {
         { TARGET_IXANY, TARGET_IXANY, IXANY, IXANY },
         { TARGET_IXOFF, TARGET_IXOFF, IXOFF, IXOFF },
         { TARGET_IMAXBEL, TARGET_IMAXBEL, IMAXBEL, IMAXBEL },
+        { TARGET_IUTF8, TARGET_IUTF8, IUTF8, IUTF8},
         { 0, 0, 0, 0 }
 };
 
@@ -5575,22 +5576,23 @@  static const bitmask_transtbl cflag_tbl[] = {
 };
 
 static const bitmask_transtbl lflag_tbl[] = {
-	{ TARGET_ISIG, TARGET_ISIG, ISIG, ISIG },
-	{ TARGET_ICANON, TARGET_ICANON, ICANON, ICANON },
-	{ TARGET_XCASE, TARGET_XCASE, XCASE, XCASE },
-	{ TARGET_ECHO, TARGET_ECHO, ECHO, ECHO },
-	{ TARGET_ECHOE, TARGET_ECHOE, ECHOE, ECHOE },
-	{ TARGET_ECHOK, TARGET_ECHOK, ECHOK, ECHOK },
-	{ TARGET_ECHONL, TARGET_ECHONL, ECHONL, ECHONL },
-	{ TARGET_NOFLSH, TARGET_NOFLSH, NOFLSH, NOFLSH },
-	{ TARGET_TOSTOP, TARGET_TOSTOP, TOSTOP, TOSTOP },
-	{ TARGET_ECHOCTL, TARGET_ECHOCTL, ECHOCTL, ECHOCTL },
-	{ TARGET_ECHOPRT, TARGET_ECHOPRT, ECHOPRT, ECHOPRT },
-	{ TARGET_ECHOKE, TARGET_ECHOKE, ECHOKE, ECHOKE },
-	{ TARGET_FLUSHO, TARGET_FLUSHO, FLUSHO, FLUSHO },
-	{ TARGET_PENDIN, TARGET_PENDIN, PENDIN, PENDIN },
-	{ TARGET_IEXTEN, TARGET_IEXTEN, IEXTEN, IEXTEN },
-	{ 0, 0, 0, 0 }
+  { TARGET_ISIG, TARGET_ISIG, ISIG, ISIG },
+  { TARGET_ICANON, TARGET_ICANON, ICANON, ICANON },
+  { TARGET_XCASE, TARGET_XCASE, XCASE, XCASE },
+  { TARGET_ECHO, TARGET_ECHO, ECHO, ECHO },
+  { TARGET_ECHOE, TARGET_ECHOE, ECHOE, ECHOE },
+  { TARGET_ECHOK, TARGET_ECHOK, ECHOK, ECHOK },
+  { TARGET_ECHONL, TARGET_ECHONL, ECHONL, ECHONL },
+  { TARGET_NOFLSH, TARGET_NOFLSH, NOFLSH, NOFLSH },
+  { TARGET_TOSTOP, TARGET_TOSTOP, TOSTOP, TOSTOP },
+  { TARGET_ECHOCTL, TARGET_ECHOCTL, ECHOCTL, ECHOCTL },
+  { TARGET_ECHOPRT, TARGET_ECHOPRT, ECHOPRT, ECHOPRT },
+  { TARGET_ECHOKE, TARGET_ECHOKE, ECHOKE, ECHOKE },
+  { TARGET_FLUSHO, TARGET_FLUSHO, FLUSHO, FLUSHO },
+  { TARGET_PENDIN, TARGET_PENDIN, PENDIN, PENDIN },
+  { TARGET_IEXTEN, TARGET_IEXTEN, IEXTEN, IEXTEN },
+  { TARGET_EXTPROC, TARGET_EXTPROC, EXTPROC, EXTPROC},
+  { 0, 0, 0, 0 }
 };
 
 static void target_to_host_termios (void *dst, const void *src)
diff --git a/linux-user/xtensa/termbits.h b/linux-user/xtensa/termbits.h
index d1e09e61a6..2a603ecae6 100644
--- a/linux-user/xtensa/termbits.h
+++ b/linux-user/xtensa/termbits.h
@@ -15,40 +15,40 @@ 
 
 #include <linux/posix_types.h>
 
-typedef unsigned char   cc_t;
-typedef unsigned int    speed_t;
-typedef unsigned int    tcflag_t;
+typedef unsigned char   target_cc_t;        /* cc_t */
+typedef unsigned int    target_speed_t;     /* speed_t */
+typedef unsigned int    target_tcflag_t;    /* tcflag_t */
 
-#define TARGET_NCCS 19
 struct target_termios {
-    tcflag_t c_iflag;       /* input mode flags */
-    tcflag_t c_oflag;       /* output mode flags */
-    tcflag_t c_cflag;       /* control mode flags */
-    tcflag_t c_lflag;       /* local mode flags */
-    cc_t c_line;            /* line discipline */
-    cc_t c_cc[TARGET_NCCS]; /* control characters */
+    target_tcflag_t c_iflag;               /* input mode flags */
+    target_tcflag_t c_oflag;               /* output mode flags */
+    target_tcflag_t c_cflag;               /* control mode flags */
+    target_tcflag_t c_lflag;               /* local mode flags */
+    target_cc_t c_line;                    /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
 };
 
+
 struct target_termios2 {
-    tcflag_t c_iflag;       /* input mode flags */
-    tcflag_t c_oflag;       /* output mode flags */
-    tcflag_t c_cflag;       /* control mode flags */
-    tcflag_t c_lflag;       /* local mode flags */
-    cc_t c_line;            /* line discipline */
-    cc_t c_cc[TARGET_NCCS]; /* control characters */
-    speed_t c_ispeed;       /* input speed */
-    speed_t c_ospeed;       /* output speed */
+    target_tcflag_t c_iflag;       /* input mode flags */
+    target_tcflag_t c_oflag;       /* output mode flags */
+    target_tcflag_t c_cflag;       /* control mode flags */
+    target_tcflag_t c_lflag;       /* local mode flags */
+    target_cc_t c_line;            /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS]; /* control characters */
+    target_speed_t c_ispeed;       /* input speed */
+    target_speed_t c_ospeed;       /* output speed */
 };
 
 struct target_ktermios {
-    tcflag_t c_iflag;       /* input mode flags */
-    tcflag_t c_oflag;       /* output mode flags */
-    tcflag_t c_cflag;       /* control mode flags */
-    tcflag_t c_lflag;       /* local mode flags */
-    cc_t c_line;            /* line discipline */
-    cc_t c_cc[TARGET_NCCS]; /* control characters */
-    speed_t c_ispeed;       /* input speed */
-    speed_t c_ospeed;       /* output speed */
+    target_tcflag_t c_iflag;       /* input mode flags */
+    target_tcflag_t c_oflag;       /* output mode flags */
+    target_tcflag_t c_cflag;       /* control mode flags */
+    target_tcflag_t c_lflag;       /* local mode flags */
+    target_cc_t c_line;            /* line discipline */
+    target_cc_t c_cc[TARGET_NCCS]; /* control characters */
+    target_speed_t c_ispeed;       /* input speed */
+    target_speed_t c_ospeed;       /* output speed */
 };
 
 /* c_cc characters */
@@ -195,6 +195,7 @@  struct target_ktermios {
 #define TARGET_FLUSHO   0010000
 #define TARGET_PENDIN   0040000
 #define TARGET_IEXTEN   0100000
+#define TARGET_EXTPROC  0200000
 
 /* tcflow() and TCXONC use these */