All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Adding support for printing contents of 'struct termios' which is used by ioctls of group 'ioctl_tty'
@ 2020-07-23 21:02 Filip Bozuta
  2020-07-23 21:02 ` [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs Filip Bozuta
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Filip Bozuta @ 2020-07-23 21:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier, Filip Bozuta

This series introduces strace printing functionality for
contents of 'struct termios'.

The first patch in the series introduces a generic 'termbits.h'
file for some architectures which have same 'struct termios'
flag values and 'ioctl_tty' definitions.

The second patch introduces some missing types and flag
values for 'struct termios' which are needed to print
it's contents.

The third patch introduces the 'strace' argument printing
functionality itself by using existing functions and macros
in 'strace.c'.

Testing method:

    The argument printing functionality was tested using mini
    test program, which were cross compiled for certain
    architectures ('ppc','ppc64','mips','mips64','mipsel'),
    in which the ioctls of group 'ioctl_tty' were used.
    These programs were cross executed with QEMU with "-strace"
    to check if the contents 'struct termios' are getting
    correctly printed.

Based-on: <20200722200437.312767-1-Filip.Bozuta@syrmia.com>

Filip Bozuta (5):
  linux-user: Add generic 'termbits.h' for some archs
  linux-user: Add missing termbits types and values definitions
  linux-user: Add strace support for printing arguments for ioctls used
    for terminals and serial lines

 include/exec/user/thunk.h        |   1 +
 linux-user/aarch64/termbits.h    | 228 +----------------
 linux-user/alpha/termbits.h      |   1 +
 linux-user/arm/termbits.h        | 223 +----------------
 linux-user/cris/termbits.h       |  18 +-
 linux-user/generic/termbits.h    | 318 +++++++++++++++++++++++
 linux-user/hppa/termbits.h       |  17 +-
 linux-user/i386/termbits.h       | 233 +----------------
 linux-user/m68k/termbits.h       | 234 +----------------
 linux-user/microblaze/termbits.h | 220 +---------------
 linux-user/mips/termbits.h       |  17 +-
 linux-user/nios2/termbits.h      | 228 +----------------
 linux-user/openrisc/termbits.h   | 302 +---------------------
 linux-user/ppc/termbits.h        |  21 +-
 linux-user/qemu.h                |   1 +
 linux-user/riscv/termbits.h      | 228 +----------------
 linux-user/s390x/termbits.h      | 289 +--------------------
 linux-user/sh4/termbits.h        |  19 +-
 linux-user/sparc/termbits.h      |  18 +-
 linux-user/sparc64/termbits.h    |  18 +-
 linux-user/strace.c              | 415 ++++++++++++++++++++++++++++++-
 linux-user/strace.list           |  17 +-
 linux-user/syscall.c             |  35 +--
 linux-user/tilegx/termbits.h     | 276 +-------------------
 linux-user/x86_64/termbits.h     | 254 +------------------
 linux-user/xtensa/termbits.h     |  53 ++--
 thunk.c                          |  23 +-
 27 files changed, 900 insertions(+), 2807 deletions(-)
 create mode 100644 linux-user/generic/termbits.h

-- 
2.25.1



^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs
  2020-07-23 21:02 [PATCH v2 0/3] Adding support for printing contents of 'struct termios' which is used by ioctls of group 'ioctl_tty' Filip Bozuta
@ 2020-07-23 21:02 ` Filip Bozuta
  2020-08-07 13:10   ` Laurent Vivier
  2020-08-24 20:38   ` Laurent Vivier
  2020-07-23 21:02 ` [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions Filip Bozuta
  2020-07-23 21:02 ` [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines Filip Bozuta
  2 siblings, 2 replies; 12+ messages in thread
From: Filip Bozuta @ 2020-07-23 21:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier, Filip Bozuta

This patch introduces a generic 'termbits.h' file for following
archs: 'aarch64', 'arm', 'i386, 'm68k', 'microblaze', 'nios2',
'openrisc', 'riscv', 's390x', 'x86_64'.

Since all of these archs have the same termios flag values and
same ioctl_tty numbers, there is no need for a separate 'termbits.h'
file for each one of them. For that reason one generic 'termbits.h'
file was added for all of them and an '#include' directive was
added for this generic file in every arch 'termbits.h' file.

Also, some of the flag values that were missing were added in this
generic file so that it matches the generic 'termibts.h' and 'ioctls.h'
files from the kernel: 'asm-generic/termbits.h' and 'asm-generic/ioctls.h'.

Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
---
 linux-user/aarch64/termbits.h    | 228 +---------------------
 linux-user/arm/termbits.h        | 223 +---------------------
 linux-user/generic/termbits.h    | 318 +++++++++++++++++++++++++++++++
 linux-user/i386/termbits.h       | 233 +---------------------
 linux-user/m68k/termbits.h       | 234 +----------------------
 linux-user/microblaze/termbits.h | 220 +--------------------
 linux-user/nios2/termbits.h      | 228 +---------------------
 linux-user/openrisc/termbits.h   | 302 +----------------------------
 linux-user/riscv/termbits.h      | 228 +---------------------
 linux-user/s390x/termbits.h      | 289 +---------------------------
 linux-user/tilegx/termbits.h     | 276 +--------------------------
 linux-user/x86_64/termbits.h     | 254 +-----------------------
 12 files changed, 329 insertions(+), 2704 deletions(-)
 create mode 100644 linux-user/generic/termbits.h

diff --git a/linux-user/aarch64/termbits.h b/linux-user/aarch64/termbits.h
index 0ab448d090..b1d4f4fedb 100644
--- a/linux-user/aarch64/termbits.h
+++ b/linux-user/aarch64/termbits.h
@@ -1,227 +1 @@
-/* from asm/termbits.h */
-/* NOTE: exactly the same as i386 */
-
-#ifndef LINUX_USER_AARCH64_TERMBITS_H
-#define LINUX_USER_AARCH64_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000  /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR    0
-#define TARGET_VQUIT    1
-#define TARGET_VERASE   2
-#define TARGET_VKILL    3
-#define TARGET_VEOF     4
-#define TARGET_VTIME    5
-#define TARGET_VMIN     6
-#define TARGET_VSWTC    7
-#define TARGET_VSTART   8
-#define TARGET_VSTOP    9
-#define TARGET_VSUSP    10
-#define TARGET_VEOL     11
-#define TARGET_VREPRINT 12
-#define TARGET_VDISCARD 13
-#define TARGET_VWERASE  14
-#define TARGET_VLNEXT   15
-#define TARGET_VEOL2    16
-
-/* ioctls */
-
-#define TARGET_TCGETS           0x5401
-#define TARGET_TCSETS           0x5402
-#define TARGET_TCSETSW          0x5403
-#define TARGET_TCSETSF          0x5404
-#define TARGET_TCGETA           0x5405
-#define TARGET_TCSETA           0x5406
-#define TARGET_TCSETAW          0x5407
-#define TARGET_TCSETAF          0x5408
-#define TARGET_TCSBRK           0x5409
-#define TARGET_TCXONC           0x540A
-#define TARGET_TCFLSH           0x540B
-
-#define TARGET_TIOCEXCL         0x540C
-#define TARGET_TIOCNXCL         0x540D
-#define TARGET_TIOCSCTTY        0x540E
-#define TARGET_TIOCGPGRP        0x540F
-#define TARGET_TIOCSPGRP        0x5410
-#define TARGET_TIOCOUTQ         0x5411
-#define TARGET_TIOCSTI          0x5412
-#define TARGET_TIOCGWINSZ       0x5413
-#define TARGET_TIOCSWINSZ       0x5414
-#define TARGET_TIOCMGET         0x5415
-#define TARGET_TIOCMBIS         0x5416
-#define TARGET_TIOCMBIC         0x5417
-#define TARGET_TIOCMSET         0x5418
-#define TARGET_TIOCGSOFTCAR     0x5419
-#define TARGET_TIOCSSOFTCAR     0x541A
-#define TARGET_FIONREAD         0x541B
-#define TARGET_TIOCINQ          TARGET_FIONREAD
-#define TARGET_TIOCLINUX        0x541C
-#define TARGET_TIOCCONS         0x541D
-#define TARGET_TIOCGSERIAL      0x541E
-#define TARGET_TIOCSSERIAL      0x541F
-#define TARGET_TIOCPKT          0x5420
-#define TARGET_FIONBIO          0x5421
-#define TARGET_TIOCNOTTY        0x5422
-#define TARGET_TIOCSETD         0x5423
-#define TARGET_TIOCGETD         0x5424
-#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
-#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
-#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
-#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
-#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
-        /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
-        /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
-        /* Safely open the slave */
-
-#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX          0x5451
-#define TARGET_FIOASYNC         0x5452
-#define TARGET_TIOCSERCONFIG    0x5453
-#define TARGET_TIOCSERGWILD     0x5454
-#define TARGET_TIOCSERSWILD     0x5455
-#define TARGET_TIOCGLCKTRMIOS   0x5456
-#define TARGET_TIOCSLCKTRMIOS   0x5457
-#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT      0x545C
-        /* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT     0x545D
-        /* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA              0
-#define TARGET_TIOCPKT_FLUSHREAD         1
-#define TARGET_TIOCPKT_FLUSHWRITE        2
-#define TARGET_TIOCPKT_STOP              4
-#define TARGET_TIOCPKT_START             8
-#define TARGET_TIOCPKT_NOSTOP           16
-#define TARGET_TIOCPKT_DOSTOP           32
-
-#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/arm/termbits.h b/linux-user/arm/termbits.h
index e555cff105..b1d4f4fedb 100644
--- a/linux-user/arm/termbits.h
+++ b/linux-user/arm/termbits.h
@@ -1,222 +1 @@
-/* from asm/termbits.h */
-/* NOTE: exactly the same as i386 */
-
-#ifndef LINUX_USER_ARM_TERMBITS_H
-#define LINUX_USER_ARM_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000  /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR	0
-#define TARGET_VQUIT	1
-#define TARGET_VERASE	2
-#define TARGET_VKILL	3
-#define TARGET_VEOF	4
-#define TARGET_VTIME	5
-#define TARGET_VMIN	6
-#define TARGET_VSWTC	7
-#define TARGET_VSTART	8
-#define TARGET_VSTOP	9
-#define TARGET_VSUSP	10
-#define TARGET_VEOL	11
-#define TARGET_VREPRINT	12
-#define TARGET_VDISCARD	13
-#define TARGET_VWERASE	14
-#define TARGET_VLNEXT	15
-#define TARGET_VEOL2	16
-
-/* ioctls */
-
-#define TARGET_TCGETS		0x5401
-#define TARGET_TCSETS		0x5402
-#define TARGET_TCSETSW		0x5403
-#define TARGET_TCSETSF		0x5404
-#define TARGET_TCGETA		0x5405
-#define TARGET_TCSETA		0x5406
-#define TARGET_TCSETAW		0x5407
-#define TARGET_TCSETAF		0x5408
-#define TARGET_TCSBRK		0x5409
-#define TARGET_TCXONC		0x540A
-#define TARGET_TCFLSH		0x540B
-
-#define TARGET_TIOCEXCL	0x540C
-#define TARGET_TIOCNXCL	0x540D
-#define TARGET_TIOCSCTTY	0x540E
-#define TARGET_TIOCGPGRP	0x540F
-#define TARGET_TIOCSPGRP	0x5410
-#define TARGET_TIOCOUTQ	0x5411
-#define TARGET_TIOCSTI		0x5412
-#define TARGET_TIOCGWINSZ	0x5413
-#define TARGET_TIOCSWINSZ	0x5414
-#define TARGET_TIOCMGET	0x5415
-#define TARGET_TIOCMBIS	0x5416
-#define TARGET_TIOCMBIC	0x5417
-#define TARGET_TIOCMSET	0x5418
-#define TARGET_TIOCGSOFTCAR	0x5419
-#define TARGET_TIOCSSOFTCAR	0x541A
-#define TARGET_FIONREAD	0x541B
-#define TARGET_TIOCINQ		TARGET_FIONREAD
-#define TARGET_TIOCLINUX	0x541C
-#define TARGET_TIOCCONS	0x541D
-#define TARGET_TIOCGSERIAL	0x541E
-#define TARGET_TIOCSSERIAL	0x541F
-#define TARGET_TIOCPKT		0x5420
-#define TARGET_FIONBIO		0x5421
-#define TARGET_TIOCNOTTY	0x5422
-#define TARGET_TIOCSETD	0x5423
-#define TARGET_TIOCGETD	0x5424
-#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
-#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
-#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
-
-#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX		0x5451
-#define TARGET_FIOASYNC	0x5452
-#define TARGET_TIOCSERCONFIG	0x5453
-#define TARGET_TIOCSERGWILD	0x5454
-#define TARGET_TIOCSERSWILD	0x5455
-#define TARGET_TIOCGLCKTRMIOS	0x5456
-#define TARGET_TIOCSLCKTRMIOS	0x5457
-#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA		 0
-#define TARGET_TIOCPKT_FLUSHREAD	 1
-#define TARGET_TIOCPKT_FLUSHWRITE	 2
-#define TARGET_TIOCPKT_STOP		 4
-#define TARGET_TIOCPKT_START		 8
-#define TARGET_TIOCPKT_NOSTOP		16
-#define TARGET_TIOCPKT_DOSTOP		32
-
-#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/generic/termbits.h b/linux-user/generic/termbits.h
new file mode 100644
index 0000000000..6675e0d1ab
--- /dev/null
+++ b/linux-user/generic/termbits.h
@@ -0,0 +1,318 @@
+/* Derived from asm-generic/termbits.h */
+
+#ifndef GENERIC_TERMBITS_H
+#define GENERIC_TERMBITS_H
+
+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 {
+    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 {
+    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 {
+    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 */
+#define TARGET_VINTR    0
+#define TARGET_VQUIT    1
+#define TARGET_VERASE   2
+#define TARGET_VKILL    3
+#define TARGET_VEOF     4
+#define TARGET_VTIME    5
+#define TARGET_VMIN     6
+#define TARGET_VSWTC    7
+#define TARGET_VSTART   8
+#define TARGET_VSTOP    9
+#define TARGET_VSUSP    10
+#define TARGET_VEOL     11
+#define TARGET_VREPRINT 12
+#define TARGET_VDISCARD 13
+#define TARGET_VWERASE  14
+#define TARGET_VLNEXT   15
+#define TARGET_VEOL2    16
+
+/* c_iflag bits */
+#define TARGET_IGNBRK   0000001
+#define TARGET_BRKINT   0000002
+#define TARGET_IGNPAR   0000004
+#define TARGET_PARMRK   0000010
+#define TARGET_INPCK    0000020
+#define TARGET_ISTRIP   0000040
+#define TARGET_INLCR    0000100
+#define TARGET_IGNCR    0000200
+#define TARGET_ICRNL    0000400
+#define TARGET_IUCLC    0001000
+#define TARGET_IXON     0002000
+#define TARGET_IXANY    0004000
+#define TARGET_IXOFF    0010000
+#define TARGET_IMAXBEL  0020000
+#define TARGET_IUTF8    0040000
+
+/* c_oflag bits */
+#define TARGET_OPOST    0000001
+#define TARGET_OLCUC    0000002
+#define TARGET_ONLCR    0000004
+#define TARGET_OCRNL    0000010
+#define TARGET_ONOCR    0000020
+#define TARGET_ONLRET   0000040
+#define TARGET_OFILL    0000100
+#define TARGET_OFDEL    0000200
+#define TARGET_NLDLY    0000400
+#define  TARGET_NL0     0000000
+#define  TARGET_NL1     0000400
+#define TARGET_CRDLY    0003000
+#define  TARGET_CR0     0000000
+#define  TARGET_CR1     0001000
+#define  TARGET_CR2     0002000
+#define  TARGET_CR3     0003000
+#define TARGET_TABDLY   0014000
+#define  TARGET_TAB0    0000000
+#define  TARGET_TAB1    0004000
+#define  TARGET_TAB2    0010000
+#define  TARGET_TAB3    0014000
+#define  TARGET_XTABS   0014000
+#define TARGET_BSDLY    0020000
+#define  TARGET_BS0     0000000
+#define  TARGET_BS1     0020000
+#define TARGET_VTDLY    0040000
+#define  TARGET_VT0     0000000
+#define  TARGET_VT1     0040000
+#define TARGET_FFDLY    0100000
+#define  TARGET_FF0     0000000
+#define  TARGET_FF1     0100000
+
+/* c_cflag bit meaning */
+#define TARGET_CBAUD      0010017
+#define  TARGET_B0        0000000  /* hang up */
+#define  TARGET_B50       0000001
+#define  TARGET_B75       0000002
+#define  TARGET_B110      0000003
+#define  TARGET_B134      0000004
+#define  TARGET_B150      0000005
+#define  TARGET_B200      0000006
+#define  TARGET_B300      0000007
+#define  TARGET_B600      0000010
+#define  TARGET_B1200     0000011
+#define  TARGET_B1800     0000012
+#define  TARGET_B2400     0000013
+#define  TARGET_B4800     0000014
+#define  TARGET_B9600     0000015
+#define  TARGET_B19200    0000016
+#define  TARGET_B38400    0000017
+#define  TARGET_EXTA      TARGET_B19200
+#define  TARGET_EXTB      TARGET_B38400
+#define TARGET_CSIZE      0000060
+#define  TARGET_CS5       0000000
+#define  TARGET_CS6       0000020
+#define  TARGET_CS7       0000040
+#define  TARGET_CS8       0000060
+#define TARGET_CSTOPB     0000100
+#define TARGET_CREAD      0000200
+#define TARGET_PARENB     0000400
+#define TARGET_PARODD     0001000
+#define TARGET_HUPCL      0002000
+#define TARGET_CLOCAL     0004000
+#define TARGET_CBAUDEX    0010000
+#define  TARGET_BOTHER    0010000
+#define  TARGET_B57600    0010001
+#define  TARGET_B115200   0010002
+#define  TARGET_B230400   0010003
+#define  TARGET_B460800   0010004
+#define  TARGET_B500000   0010005
+#define  TARGET_B576000   0010006
+#define  TARGET_B921600   0010007
+#define  TARGET_B1000000  0010010
+#define  TARGET_B1152000  0010011
+#define  TARGET_B1500000  0010012
+#define  TARGET_B2000000  0010013
+#define  TARGET_B2500000  0010014
+#define  TARGET_B3000000  0010015
+#define  TARGET_B3500000  0010016
+#define  TARGET_B4000000  0010017
+#define TARGET_CIBAUD     002003600000  /* input baud rate (not used) */
+#define TARGET_CMSPAR     010000000000  /* mark or space (stick) parity */
+#define TARGET_CRTSCTS    020000000000  /* flow control */
+
+#define TARGET_IBSHIFT    16            /* Shift from CBAUD to CIBAUD */
+
+/* c_lflag bits */
+#define TARGET_ISIG       0000001
+#define TARGET_ICANON     0000002
+#define TARGET_XCASE      0000004
+#define TARGET_ECHO       0000010
+#define TARGET_ECHOE      0000020
+#define TARGET_ECHOK      0000040
+#define TARGET_ECHONL     0000100
+#define TARGET_NOFLSH     0000200
+#define TARGET_TOSTOP     0000400
+#define TARGET_ECHOCTL    0001000
+#define TARGET_ECHOPRT    0002000
+#define TARGET_ECHOKE     0004000
+#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
+#define TARGET_TCOON           1
+#define TARGET_TCIOFF          2
+#define TARGET_TCION           3
+
+/* tcflush() and TCFLSH use these */
+#define TARGET_TCIFLUSH        0
+#define TARGET_TCOFLUSH        1
+#define TARGET_TCIOFLUSH       2
+
+/* tcsetattr uses these */
+#define TARGET_TCSANOW         0
+#define TARGET_TCSADRAIN       1
+#define TARGET_TCSAFLUSH       2
+
+/* Derived from include/uapi/asm-generic/ioctls.h */
+
+#define TARGET_TCGETS           0x5401
+#define TARGET_TCSETS           0x5402
+#define TARGET_TCSETSW          0x5403
+#define TARGET_TCSETSF          0x5404
+#define TARGET_TCGETA           0x5405
+#define TARGET_TCSETA           0x5406
+#define TARGET_TCSETAW          0x5407
+#define TARGET_TCSETAF          0x5408
+#define TARGET_TCSBRK           0x5409
+#define TARGET_TCXONC           0x540A
+#define TARGET_TCFLSH           0x540B
+
+#define TARGET_TIOCEXCL         0x540C
+#define TARGET_TIOCNXCL         0x540D
+#define TARGET_TIOCSCTTY        0x540E
+#define TARGET_TIOCGPGRP        0x540F
+#define TARGET_TIOCSPGRP        0x5410
+#define TARGET_TIOCOUTQ         0x5411
+#define TARGET_TIOCSTI          0x5412
+#define TARGET_TIOCGWINSZ       0x5413
+#define TARGET_TIOCSWINSZ       0x5414
+#define TARGET_TIOCMGET         0x5415
+#define TARGET_TIOCMBIS         0x5416
+#define TARGET_TIOCMBIC         0x5417
+#define TARGET_TIOCMSET         0x5418
+#define TARGET_TIOCGSOFTCAR     0x5419
+#define TARGET_TIOCSSOFTCAR     0x541A
+#define TARGET_FIONREAD         0x541B
+#define TARGET_TIOCINQ          TARGET_FIONREAD
+#define TARGET_TIOCLINUX        0x541C
+#define TARGET_TIOCCONS         0x541D
+#define TARGET_TIOCGSERIAL      0x541E
+#define TARGET_TIOCSSERIAL      0x541F
+#define TARGET_TIOCPKT          0x5420
+#define TARGET_FIONBIO          0x5421
+#define TARGET_TIOCNOTTY        0x5422
+#define TARGET_TIOCSETD         0x5423
+#define TARGET_TIOCGETD         0x5424
+#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
+#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
+#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
+#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
+#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
+#define TARGET_TCGETS2          TARGET_IOR('T', 0x2A, struct target_termios2)
+#define TARGET_TCSETS2          TARGET_IOW('T', 0x2B, struct target_termios2)
+#define TARGET_TCSETSW2         TARGET_IOW('T', 0x2C, struct target_termios2)
+#define TARGET_TCSETSF2         TARGET_IOW('T', 0x2D, struct target_termios2)
+#define TARGET_TIOCGRS485       0x542E
+#ifndef TARGET_TIOCSRS485
+#define TARGET_TIOCSRS485       0x542F
+#endif
+/* Get Pty Number (of pty-mux device) */
+#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
+/* Lock/unlock Pty */
+#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
+
+/* Get primary device node of /dev/console */
+#define TARGET_TIOCGDEV        TARGET_IOR('T', 0x32, unsigned int)
+#define TARGET_TCGETX          0x5432 /* SYS5 TCGETX compatibility */
+#define TARGET_TCSETX          0x5433
+#define TARGET_TCSETXF         0x5434
+#define TARGET_TCSETXW         0x5435
+/* pty: generate signal */
+#define TARGET_TIOCSIG         TARGET_IOW('T', 0x36, int)
+#define TARGET_TIOCVHANGUP     0x5437
+/* Get packet mode state */
+#define TARGET_TIOCGPKT        TARGET_IOR('T', 0x38, int)
+/* Get Pty lock state */
+#define TARGET_TIOCGPTLCK      TARGET_IOR('T', 0x39, int)
+/* Get exclusive mode state */
+#define TARGET_TIOCGEXCL       TARGET_IOR('T', 0x40, int)
+/* Safely open the slave */
+#define TARGET_TIOCGPTPEER     TARGET_IO('T', 0x41)
+#define TARGET_TIOCGISO7816    TARGET_IOR('T', 0x42, struct serial_iso7816)
+#define TARGET_TIOCSISO7816    TARGET_IOWR('T', 0x43, struct serial_iso7816)
+
+#define TARGET_FIONCLEX         0x5450 /* these numbers need to be adjusted */
+#define TARGET_FIOCLEX          0x5451
+#define TARGET_FIOASYNC         0x5452
+#define TARGET_TIOCSERCONFIG    0x5453
+#define TARGET_TIOCSERGWILD     0x5454
+#define TARGET_TIOCSERSWILD     0x5455
+#define TARGET_TIOCGLCKTRMIOS   0x5456
+#define TARGET_TIOCSLCKTRMIOS   0x5457
+#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
+#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
+#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
+#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
+
+/* wait for a change on serial input line(s) */
+#define TARGET_TIOCMIWAIT       0x545C
+/* read serial port inline interrupt counts */
+#define TARGET_TIOCGICOUNT      0x545D
+#define TARGET_TIOCGHAYESESP    0x545E  /* Get Hayes ESP configuration */
+#define TARGET_TIOCSHAYESESP    0x545F  /* Set Hayes ESP configuration */
+
+/*
+ * Some arches already define TARGET_FIOQSIZE due to a historical
+ * conflict with a Hayes modem-specific ioctl value.
+ */
+#ifndef TARGET_FIOQSIZE
+# define TARGET_FIOQSIZE        0x5460
+#endif
+
+/* Used for packet mode */
+#define TARGET_TIOCPKT_DATA              0
+#define TARGET_TIOCPKT_FLUSHREAD         1
+#define TARGET_TIOCPKT_FLUSHWRITE        2
+#define TARGET_TIOCPKT_STOP              4
+#define TARGET_TIOCPKT_START             8
+#define TARGET_TIOCPKT_NOSTOP            16
+#define TARGET_TIOCPKT_DOSTOP            32
+#define TARGET_TIOCPKT_IOCTL             64
+
+#define TARGET_TIOCSER_TEMT     0x01 /* Transmitter physically empty */
+
+#endif
diff --git a/linux-user/i386/termbits.h b/linux-user/i386/termbits.h
index 88264bbde7..b1d4f4fedb 100644
--- a/linux-user/i386/termbits.h
+++ b/linux-user/i386/termbits.h
@@ -1,232 +1 @@
-/* from asm/termbits.h */
-
-#ifndef LINUX_USER_I386_TERMBITS_H
-#define LINUX_USER_I386_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define  TARGET_B500000 0010005
-#define  TARGET_B576000 0010006
-#define  TARGET_B921600 0010007
-#define  TARGET_B1000000 0010010
-#define  TARGET_B1152000 0010011
-#define  TARGET_B1500000 0010012
-#define  TARGET_B2000000 0010013
-#define  TARGET_B2500000 0010014
-#define  TARGET_B3000000 0010015
-#define  TARGET_B3500000 0010016
-#define  TARGET_B4000000 0010017
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000  /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR	0
-#define TARGET_VQUIT	1
-#define TARGET_VERASE	2
-#define TARGET_VKILL	3
-#define TARGET_VEOF	4
-#define TARGET_VTIME	5
-#define TARGET_VMIN	6
-#define TARGET_VSWTC	7
-#define TARGET_VSTART	8
-#define TARGET_VSTOP	9
-#define TARGET_VSUSP	10
-#define TARGET_VEOL	11
-#define TARGET_VREPRINT	12
-#define TARGET_VDISCARD	13
-#define TARGET_VWERASE	14
-#define TARGET_VLNEXT	15
-#define TARGET_VEOL2	16
-
-/* ioctls */
-
-#define TARGET_TCGETS		0x5401
-#define TARGET_TCSETS		0x5402
-#define TARGET_TCSETSW		0x5403
-#define TARGET_TCSETSF		0x5404
-#define TARGET_TCGETA		0x5405
-#define TARGET_TCSETA		0x5406
-#define TARGET_TCSETAW		0x5407
-#define TARGET_TCSETAF		0x5408
-#define TARGET_TCSBRK		0x5409
-#define TARGET_TCXONC		0x540A
-#define TARGET_TCFLSH		0x540B
-
-#define TARGET_TIOCEXCL	0x540C
-#define TARGET_TIOCNXCL	0x540D
-#define TARGET_TIOCSCTTY	0x540E
-#define TARGET_TIOCGPGRP	0x540F
-#define TARGET_TIOCSPGRP	0x5410
-#define TARGET_TIOCOUTQ	0x5411
-#define TARGET_TIOCSTI		0x5412
-#define TARGET_TIOCGWINSZ	0x5413
-#define TARGET_TIOCSWINSZ	0x5414
-#define TARGET_TIOCMGET	0x5415
-#define TARGET_TIOCMBIS	0x5416
-#define TARGET_TIOCMBIC	0x5417
-#define TARGET_TIOCMSET	0x5418
-#define TARGET_TIOCGSOFTCAR	0x5419
-#define TARGET_TIOCSSOFTCAR	0x541A
-#define TARGET_FIONREAD	0x541B
-#define TARGET_TIOCINQ		TARGET_FIONREAD
-#define TARGET_TIOCLINUX	0x541C
-#define TARGET_TIOCCONS	0x541D
-#define TARGET_TIOCGSERIAL	0x541E
-#define TARGET_TIOCSSERIAL	0x541F
-#define TARGET_TIOCPKT		0x5420
-#define TARGET_FIONBIO		0x5421
-#define TARGET_TIOCNOTTY	0x5422
-#define TARGET_TIOCSETD	0x5423
-#define TARGET_TIOCGETD	0x5424
-#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
-#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
-#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
-
-#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX		0x5451
-#define TARGET_FIOASYNC	0x5452
-#define TARGET_TIOCSERCONFIG	0x5453
-#define TARGET_TIOCSERGWILD	0x5454
-#define TARGET_TIOCSERSWILD	0x5455
-#define TARGET_TIOCGLCKTRMIOS	0x5456
-#define TARGET_TIOCSLCKTRMIOS	0x5457
-#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA		 0
-#define TARGET_TIOCPKT_FLUSHREAD	 1
-#define TARGET_TIOCPKT_FLUSHWRITE	 2
-#define TARGET_TIOCPKT_STOP		 4
-#define TARGET_TIOCPKT_START		 8
-#define TARGET_TIOCPKT_NOSTOP		16
-#define TARGET_TIOCPKT_DOSTOP		32
-
-#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/m68k/termbits.h b/linux-user/m68k/termbits.h
index 23840aa968..b1d4f4fedb 100644
--- a/linux-user/m68k/termbits.h
+++ b/linux-user/m68k/termbits.h
@@ -1,233 +1 @@
-/* from asm/termbits.h */
-/* NOTE: exactly the same as i386 */
-
-#ifndef LINUX_USER_M68K_TERMBITS_H
-#define LINUX_USER_M68K_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define  TARGET_B500000 0010005
-#define  TARGET_B576000 0010006
-#define  TARGET_B921600 0010007
-#define  TARGET_B1000000 0010010
-#define  TARGET_B1152000 0010011
-#define  TARGET_B1500000 0010012
-#define  TARGET_B2000000 0010013
-#define  TARGET_B2500000 0010014
-#define  TARGET_B3000000 0010015
-#define  TARGET_B3500000 0010016
-#define  TARGET_B4000000 0010017
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000  /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR	0
-#define TARGET_VQUIT	1
-#define TARGET_VERASE	2
-#define TARGET_VKILL	3
-#define TARGET_VEOF	4
-#define TARGET_VTIME	5
-#define TARGET_VMIN	6
-#define TARGET_VSWTC	7
-#define TARGET_VSTART	8
-#define TARGET_VSTOP	9
-#define TARGET_VSUSP	10
-#define TARGET_VEOL	11
-#define TARGET_VREPRINT	12
-#define TARGET_VDISCARD	13
-#define TARGET_VWERASE	14
-#define TARGET_VLNEXT	15
-#define TARGET_VEOL2	16
-
-/* ioctls */
-
-#define TARGET_TCGETS		0x5401
-#define TARGET_TCSETS		0x5402
-#define TARGET_TCSETSW		0x5403
-#define TARGET_TCSETSF		0x5404
-#define TARGET_TCGETA		0x5405
-#define TARGET_TCSETA		0x5406
-#define TARGET_TCSETAW		0x5407
-#define TARGET_TCSETAF		0x5408
-#define TARGET_TCSBRK		0x5409
-#define TARGET_TCXONC		0x540A
-#define TARGET_TCFLSH		0x540B
-
-#define TARGET_TIOCEXCL	0x540C
-#define TARGET_TIOCNXCL	0x540D
-#define TARGET_TIOCSCTTY	0x540E
-#define TARGET_TIOCGPGRP	0x540F
-#define TARGET_TIOCSPGRP	0x5410
-#define TARGET_TIOCOUTQ	0x5411
-#define TARGET_TIOCSTI		0x5412
-#define TARGET_TIOCGWINSZ	0x5413
-#define TARGET_TIOCSWINSZ	0x5414
-#define TARGET_TIOCMGET	0x5415
-#define TARGET_TIOCMBIS	0x5416
-#define TARGET_TIOCMBIC	0x5417
-#define TARGET_TIOCMSET	0x5418
-#define TARGET_TIOCGSOFTCAR	0x5419
-#define TARGET_TIOCSSOFTCAR	0x541A
-#define TARGET_FIONREAD	0x541B
-#define TARGET_TIOCINQ		TARGET_FIONREAD
-#define TARGET_TIOCLINUX	0x541C
-#define TARGET_TIOCCONS	0x541D
-#define TARGET_TIOCGSERIAL	0x541E
-#define TARGET_TIOCSSERIAL	0x541F
-#define TARGET_TIOCPKT		0x5420
-#define TARGET_FIONBIO		0x5421
-#define TARGET_TIOCNOTTY	0x5422
-#define TARGET_TIOCSETD	0x5423
-#define TARGET_TIOCGETD	0x5424
-#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
-#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
-#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
-
-#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX		0x5451
-#define TARGET_FIOASYNC	0x5452
-#define TARGET_TIOCSERCONFIG	0x5453
-#define TARGET_TIOCSERGWILD	0x5454
-#define TARGET_TIOCSERSWILD	0x5455
-#define TARGET_TIOCGLCKTRMIOS	0x5456
-#define TARGET_TIOCSLCKTRMIOS	0x5457
-#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA		 0
-#define TARGET_TIOCPKT_FLUSHREAD	 1
-#define TARGET_TIOCPKT_FLUSHWRITE	 2
-#define TARGET_TIOCPKT_STOP		 4
-#define TARGET_TIOCPKT_START		 8
-#define TARGET_TIOCPKT_NOSTOP		16
-#define TARGET_TIOCPKT_DOSTOP		32
-
-#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/microblaze/termbits.h b/linux-user/microblaze/termbits.h
index 17db8a4473..b1d4f4fedb 100644
--- a/linux-user/microblaze/termbits.h
+++ b/linux-user/microblaze/termbits.h
@@ -1,219 +1 @@
-/* from asm/termbits.h */
-
-#ifndef LINUX_USER_MICROBLAZE_TERMBITS_H
-#define LINUX_USER_MICROBLAZE_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CRTSCTS   020000000000          /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR	0
-#define TARGET_VQUIT	1
-#define TARGET_VERASE	2
-#define TARGET_VKILL	3
-#define TARGET_VEOF	4
-#define TARGET_VTIME	5
-#define TARGET_VMIN	6
-#define TARGET_VSWTC	7
-#define TARGET_VSTART	8
-#define TARGET_VSTOP	9
-#define TARGET_VSUSP	10
-#define TARGET_VEOL	11
-#define TARGET_VREPRINT	12
-#define TARGET_VDISCARD	13
-#define TARGET_VWERASE	14
-#define TARGET_VLNEXT	15
-#define TARGET_VEOL2	16
-
-/* ioctls */
-
-#define TARGET_TCGETS		0x5401
-#define TARGET_TCSETS		0x5402
-#define TARGET_TCSETSW		0x5403
-#define TARGET_TCSETSF		0x5404
-#define TARGET_TCGETA		0x5405
-#define TARGET_TCSETA		0x5406
-#define TARGET_TCSETAW		0x5407
-#define TARGET_TCSETAF		0x5408
-#define TARGET_TCSBRK		0x5409
-#define TARGET_TCXONC		0x540A
-#define TARGET_TCFLSH		0x540B
-
-#define TARGET_TIOCEXCL	0x540C
-#define TARGET_TIOCNXCL	0x540D
-#define TARGET_TIOCSCTTY	0x540E
-#define TARGET_TIOCGPGRP	0x540F
-#define TARGET_TIOCSPGRP	0x5410
-#define TARGET_TIOCOUTQ	0x5411
-#define TARGET_TIOCSTI		0x5412
-#define TARGET_TIOCGWINSZ	0x5413
-#define TARGET_TIOCSWINSZ	0x5414
-#define TARGET_TIOCMGET	0x5415
-#define TARGET_TIOCMBIS	0x5416
-#define TARGET_TIOCMBIC	0x5417
-#define TARGET_TIOCMSET	0x5418
-#define TARGET_TIOCGSOFTCAR	0x5419
-#define TARGET_TIOCSSOFTCAR	0x541A
-#define TARGET_FIONREAD	0x541B
-#define TARGET_TIOCINQ		TARGET_FIONREAD
-#define TARGET_TIOCLINUX	0x541C
-#define TARGET_TIOCCONS	0x541D
-#define TARGET_TIOCGSERIAL	0x541E
-#define TARGET_TIOCSSERIAL	0x541F
-#define TARGET_TIOCPKT		0x5420
-#define TARGET_FIONBIO		0x5421
-#define TARGET_TIOCNOTTY	0x5422
-#define TARGET_TIOCSETD	0x5423
-#define TARGET_TIOCGETD	0x5424
-#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
-#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
-#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
-
-#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX		0x5451
-#define TARGET_FIOASYNC	0x5452
-#define TARGET_TIOCSERCONFIG	0x5453
-#define TARGET_TIOCSERGWILD	0x5454
-#define TARGET_TIOCSERSWILD	0x5455
-#define TARGET_TIOCGLCKTRMIOS	0x5456
-#define TARGET_TIOCSLCKTRMIOS	0x5457
-#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA		 0
-#define TARGET_TIOCPKT_FLUSHREAD	 1
-#define TARGET_TIOCPKT_FLUSHWRITE	 2
-#define TARGET_TIOCPKT_STOP		 4
-#define TARGET_TIOCPKT_START		 8
-#define TARGET_TIOCPKT_NOSTOP		16
-#define TARGET_TIOCPKT_DOSTOP		32
-
-#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/nios2/termbits.h b/linux-user/nios2/termbits.h
index 425a2fe6ef..b1d4f4fedb 100644
--- a/linux-user/nios2/termbits.h
+++ b/linux-user/nios2/termbits.h
@@ -1,227 +1 @@
-/* from asm/termbits.h */
-/* NOTE: exactly the same as i386 */
-
-#ifndef LINUX_USER_NIOS2_TERMBITS_H
-#define LINUX_USER_NIOS2_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000  /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR    0
-#define TARGET_VQUIT    1
-#define TARGET_VERASE   2
-#define TARGET_VKILL    3
-#define TARGET_VEOF     4
-#define TARGET_VTIME    5
-#define TARGET_VMIN     6
-#define TARGET_VSWTC    7
-#define TARGET_VSTART   8
-#define TARGET_VSTOP    9
-#define TARGET_VSUSP    10
-#define TARGET_VEOL     11
-#define TARGET_VREPRINT 12
-#define TARGET_VDISCARD 13
-#define TARGET_VWERASE  14
-#define TARGET_VLNEXT   15
-#define TARGET_VEOL2    16
-
-/* ioctls */
-
-#define TARGET_TCGETS           0x5401
-#define TARGET_TCSETS           0x5402
-#define TARGET_TCSETSW          0x5403
-#define TARGET_TCSETSF          0x5404
-#define TARGET_TCGETA           0x5405
-#define TARGET_TCSETA           0x5406
-#define TARGET_TCSETAW          0x5407
-#define TARGET_TCSETAF          0x5408
-#define TARGET_TCSBRK           0x5409
-#define TARGET_TCXONC           0x540A
-#define TARGET_TCFLSH           0x540B
-
-#define TARGET_TIOCEXCL         0x540C
-#define TARGET_TIOCNXCL         0x540D
-#define TARGET_TIOCSCTTY        0x540E
-#define TARGET_TIOCGPGRP        0x540F
-#define TARGET_TIOCSPGRP        0x5410
-#define TARGET_TIOCOUTQ         0x5411
-#define TARGET_TIOCSTI          0x5412
-#define TARGET_TIOCGWINSZ       0x5413
-#define TARGET_TIOCSWINSZ       0x5414
-#define TARGET_TIOCMGET         0x5415
-#define TARGET_TIOCMBIS         0x5416
-#define TARGET_TIOCMBIC         0x5417
-#define TARGET_TIOCMSET         0x5418
-#define TARGET_TIOCGSOFTCAR     0x5419
-#define TARGET_TIOCSSOFTCAR     0x541A
-#define TARGET_FIONREAD         0x541B
-#define TARGET_TIOCINQ          TARGET_FIONREAD
-#define TARGET_TIOCLINUX        0x541C
-#define TARGET_TIOCCONS         0x541D
-#define TARGET_TIOCGSERIAL      0x541E
-#define TARGET_TIOCSSERIAL      0x541F
-#define TARGET_TIOCPKT          0x5420
-#define TARGET_FIONBIO          0x5421
-#define TARGET_TIOCNOTTY        0x5422
-#define TARGET_TIOCSETD         0x5423
-#define TARGET_TIOCGETD         0x5424
-#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
-#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
-#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
-#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
-#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
-        /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
-        /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
-        /* Safely open the slave */
-
-#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX          0x5451
-#define TARGET_FIOASYNC         0x5452
-#define TARGET_TIOCSERCONFIG    0x5453
-#define TARGET_TIOCSERGWILD     0x5454
-#define TARGET_TIOCSERSWILD     0x5455
-#define TARGET_TIOCGLCKTRMIOS   0x5456
-#define TARGET_TIOCSLCKTRMIOS   0x5457
-#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT      0x545C
-        /* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT     0x545D
-        /* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA              0
-#define TARGET_TIOCPKT_FLUSHREAD         1
-#define TARGET_TIOCPKT_FLUSHWRITE        2
-#define TARGET_TIOCPKT_STOP              4
-#define TARGET_TIOCPKT_START             8
-#define TARGET_TIOCPKT_NOSTOP           16
-#define TARGET_TIOCPKT_DOSTOP           32
-
-#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/openrisc/termbits.h b/linux-user/openrisc/termbits.h
index 7a635ffbc6..b1d4f4fedb 100644
--- a/linux-user/openrisc/termbits.h
+++ b/linux-user/openrisc/termbits.h
@@ -1,301 +1 @@
-#ifndef LINUX_USER_OPENRISC_TERMBITS_H
-#define LINUX_USER_OPENRISC_TERMBITS_H
-
-typedef unsigned char   target_openrisc_cc;        /*cc_t*/
-typedef unsigned int    target_openrisc_speed;     /*speed_t*/
-typedef unsigned int    target_openrisc_tcflag;    /*tcflag_t*/
-
-#define TARGET_NCCS 19
-struct target_termios {
-    target_openrisc_tcflag c_iflag;               /* input mode flags */
-    target_openrisc_tcflag c_oflag;               /* output mode flags */
-    target_openrisc_tcflag c_cflag;               /* control mode flags */
-    target_openrisc_tcflag c_lflag;               /* local mode flags */
-    target_openrisc_cc c_line;                    /* line discipline */
-    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
-};
-
-struct target_termios2 {
-    target_openrisc_tcflag c_iflag;               /* input mode flags */
-    target_openrisc_tcflag c_oflag;               /* output mode flags */
-    target_openrisc_tcflag c_cflag;               /* control mode flags */
-    target_openrisc_tcflag c_lflag;               /* local mode flags */
-    target_openrisc_cc c_line;                    /* line discipline */
-    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
-    target_openrisc_speed c_ispeed;               /* input speed */
-    target_openrisc_speed c_ospeed;               /* output speed */
-};
-
-struct target_termios3 {
-    target_openrisc_tcflag c_iflag;               /* input mode flags */
-    target_openrisc_tcflag c_oflag;               /* output mode flags */
-    target_openrisc_tcflag c_cflag;               /* control mode flags */
-    target_openrisc_tcflag c_lflag;               /* local mode flags */
-    target_openrisc_cc c_line;                    /* line discipline */
-    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
-    target_openrisc_speed c_ispeed;               /* input speed */
-    target_openrisc_speed c_ospeed;               /* output speed */
-};
-
-/* c_cc characters */
-#define TARGET_VINTR 0
-#define TARGET_VQUIT 1
-#define TARGET_VERASE 2
-#define TARGET_VKILL 3
-#define TARGET_VEOF 4
-#define TARGET_VTIME 5
-#define TARGET_VMIN 6
-#define TARGET_VSWTC 7
-#define TARGET_VSTART 8
-#define TARGET_VSTOP 9
-#define TARGET_VSUSP 10
-#define TARGET_VEOL 11
-#define TARGET_VREPRINT 12
-#define TARGET_VDISCARD 13
-#define TARGET_VWERASE 14
-#define TARGET_VLNEXT 15
-#define TARGET_VEOL2 16
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define TARGET_NL0     0000000
-#define TARGET_NL1     0000400
-#define TARGET_CRDLY   0003000
-#define TARGET_CR0     0000000
-#define TARGET_CR1     0001000
-#define TARGET_CR2     0002000
-#define TARGET_CR3     0003000
-#define TARGET_TABDLY  0014000
-#define TARGET_TAB0    0000000
-#define TARGET_TAB1    0004000
-#define TARGET_TAB2    0010000
-#define TARGET_TAB3    0014000
-#define TARGET_XTABS   0014000
-#define TARGET_BSDLY   0020000
-#define TARGET_BS0     0000000
-#define TARGET_BS1     0020000
-#define TARGET_VTDLY   0040000
-#define TARGET_VT0     0000000
-#define TARGET_VT1     0040000
-#define TARGET_FFDLY   0100000
-#define TARGET_FF0     0000000
-#define TARGET_FF1     0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD    0010017
-#define TARGET_B0       0000000                /* hang up */
-#define TARGET_B50      0000001
-#define TARGET_B75      0000002
-#define TARGET_B110     0000003
-#define TARGET_B134     0000004
-#define TARGET_B150     0000005
-#define TARGET_B200     0000006
-#define TARGET_B300     0000007
-#define TARGET_B600     0000010
-#define TARGET_B1200    0000011
-#define TARGET_B1800    0000012
-#define TARGET_B2400    0000013
-#define TARGET_B4800    0000014
-#define TARGET_B9600    0000015
-#define TARGET_B19200   0000016
-#define TARGET_B38400   0000017
-#define TARGET_EXTA     B19200
-#define TARGET_EXTB     B38400
-#define TARGET_CSIZE    0000060
-#define TARGET_CS5      0000000
-#define TARGET_CS6      0000020
-#define TARGET_CS7      0000040
-#define TARGET_CS8      0000060
-#define TARGET_CSTOPB   0000100
-#define TARGET_CREAD    0000200
-#define TARGET_PARENB   0000400
-#define TARGET_PARODD   0001000
-#define TARGET_HUPCL    0002000
-#define TARGET_CLOCAL   0004000
-#define TARGET_CBAUDEX  0010000
-#define TARGET_BOTHER   0010000
-#define TARGET_B57600   0010001
-#define TARGET_B115200  0010002
-#define TARGET_B230400  0010003
-#define TARGET_B460800  0010004
-#define TARGET_B500000  0010005
-#define TARGET_B576000  0010006
-#define TARGET_B921600  0010007
-#define TARGET_B1000000 0010010
-#define TARGET_B1152000 0010011
-#define TARGET_B1500000 0010012
-#define TARGET_B2000000 0010013
-#define TARGET_B2500000 0010014
-#define TARGET_B3000000 0010015
-#define TARGET_B3500000 0010016
-#define TARGET_B4000000 0010017
-#define TARGET_CIBAUD   002003600000   /* input baud rate */
-#define TARGET_CMSPAR   010000000000   /* mark or space (stick) parity */
-#define TARGET_CRTSCTS  020000000000   /* flow control */
-
-#define TARGET_IBSHIFT   16            /* Shift from CBAUD to CIBAUD */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#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
-#define TARGET_TCOON           1
-#define TARGET_TCIOFF          2
-#define TARGET_TCION           3
-
-/* tcflush() and TCFLSH use these */
-#define TARGET_TCIFLUSH        0
-#define TARGET_TCOFLUSH        1
-#define TARGET_TCIOFLUSH       2
-
-/* tcsetattr uses these */
-#define TARGET_TCSANOW         0
-#define TARGET_TCSADRAIN       1
-#define TARGET_TCSAFLUSH       2
-
-/* ioctls */
-#define TARGET_TCGETS          0x5401
-#define TARGET_TCSETS          0x5402
-#define TARGET_TCSETSW         0x5403
-#define TARGET_TCSETSF         0x5404
-#define TARGET_TCGETA          0x5405
-#define TARGET_TCSETA          0x5406
-#define TARGET_TCSETAW         0x5407
-#define TARGET_TCSETAF         0x5408
-#define TARGET_TCSBRK          0x5409
-#define TARGET_TCXONC          0x540A
-#define TARGET_TCFLSH          0x540B
-#define TARGET_TIOCEXCL        0x540C
-#define TARGET_TIOCNXCL        0x540D
-#define TARGET_TIOCSCTTY       0x540E
-#define TARGET_TIOCGPGRP       0x540F
-#define TARGET_TIOCSPGRP       0x5410
-#define TARGET_TIOCOUTQ        0x5411
-#define TARGET_TIOCSTI         0x5412
-#define TARGET_TIOCGWINSZ      0x5413
-#define TARGET_TIOCSWINSZ      0x5414
-#define TARGET_TIOCMGET        0x5415
-#define TARGET_TIOCMBIS        0x5416
-#define TARGET_TIOCMBIC        0x5417
-#define TARGET_TIOCMSET        0x5418
-#define TARGET_TIOCGSOFTCAR    0x5419
-#define TARGET_TIOCSSOFTCAR    0x541A
-#define TARGET_FIONREAD        0x541B
-#define TARGET_TIOCINQ         FIONREAD
-#define TARGET_TIOCLINUX       0x541C
-#define TARGET_TIOCCONS        0x541D
-#define TARGET_TIOCGSERIAL     0x541E
-#define TARGET_TIOCSSERIAL     0x541F
-#define TARGET_TIOCPKT         0x5420
-#define TARGET_FIONBIO         0x5421
-#define TARGET_TIOCNOTTY       0x5422
-#define TARGET_TIOCSETD        0x5423
-#define TARGET_TIOCGETD        0x5424
-#define TARGET_TCSBRKP         0x5425  /* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCSBRK        0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK        0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID        0x5429  /* Return the session ID of FD */
-#define TARGET_TCGETS2         TARGET_IOR('T', 0x2A, struct termios2)
-#define TARGET_TCSETS2         TARGET_IOW('T', 0x2B, struct termios2)
-#define TARGET_TCSETSW2        TARGET_IOW('T', 0x2C, struct termios2)
-#define TARGET_TCSETSF2        TARGET_IOW('T', 0x2D, struct termios2)
-#define TARGET_TIOCGRS485      0x542E
-#ifndef TARGET_TIOCSRS485
-#define TARGET_TIOCSRS485      0x542F
-#endif
-/* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCGPTN        TARGET_IOR('T', 0x30, unsigned int)
-/* Lock/unlock Pty */
-#define TARGET_TIOCSPTLCK      TARGET_IOW('T', 0x31, int)
-/* Safely open the slave */
-#define TARGET_TIOCGPTPEER     TARGET_IO('T', 0x41)
-/* Get primary device node of /dev/console */
-#define TARGET_TIOCGDEV        TARGET_IOR('T', 0x32, unsigned int)
-#define TARGET_TCGETX          0x5432 /* SYS5 TCGETX compatibility */
-#define TARGET_TCSETX          0x5433
-#define TARGET_TCSETXF         0x5434
-#define TARGET_TCSETXW         0x5435
-/* pty: generate signal */
-#define TARGET_TIOCSIG         TARGET_IOW('T', 0x36, int)
-#define TARGET_TIOCVHANGUP     0x5437
-
-#define TARGET_FIONCLEX        0x5450
-#define TARGET_FIOCLEX         0x5451
-#define TARGET_FIOASYNC        0x5452
-#define TARGET_TIOCSERCONFIG   0x5453
-#define TARGET_TIOCSERGWILD    0x5454
-#define TARGET_TIOCSERSWILD    0x5455
-#define TARGET_TIOCGLCKTRMIOS  0x5456
-#define TARGET_TIOCSLCKTRMIOS  0x5457
-#define TARGET_TIOCSERGSTRUCT  0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-/* wait for a change on serial input line(s) */
-#define TARGET_TIOCMIWAIT      0x545C
-/* read serial port inline interrupt counts */
-#define TARGET_TIOCGICOUNT     0x545D
-
-/*
- * Some arches already define TARGET_FIOQSIZE due to a historical
- * conflict with a Hayes modem-specific ioctl value.
- */
-#ifndef TARGET_FIOQSIZE
-#define TARGET_FIOQSIZE        0x5460
-#endif
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA             0
-#define TARGET_TIOCPKT_FLUSHREAD        1
-#define TARGET_TIOCPKT_FLUSHWRITE       2
-#define TARGET_TIOCPKT_STOP             4
-#define TARGET_TIOCPKT_START            8
-#define TARGET_TIOCPKT_NOSTOP          16
-#define TARGET_TIOCPKT_DOSTOP          32
-#define TARGET_TIOCPKT_IOCTL           64
-
-#define TARGET_TIOCSER_TEMT    0x01    /* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/riscv/termbits.h b/linux-user/riscv/termbits.h
index 5e0af0dd3f..b1d4f4fedb 100644
--- a/linux-user/riscv/termbits.h
+++ b/linux-user/riscv/termbits.h
@@ -1,227 +1 @@
-/* from asm/termbits.h */
-/* NOTE: exactly the same as i386 */
-
-#ifndef LINUX_USER_RISCV_TERMBITS_H
-#define LINUX_USER_RISCV_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-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 */
-};
-
-/* c_iflag bits */
-#define TARGET_IGNBRK  0000001
-#define TARGET_BRKINT  0000002
-#define TARGET_IGNPAR  0000004
-#define TARGET_PARMRK  0000010
-#define TARGET_INPCK   0000020
-#define TARGET_ISTRIP  0000040
-#define TARGET_INLCR   0000100
-#define TARGET_IGNCR   0000200
-#define TARGET_ICRNL   0000400
-#define TARGET_IUCLC   0001000
-#define TARGET_IXON    0002000
-#define TARGET_IXANY   0004000
-#define TARGET_IXOFF   0010000
-#define TARGET_IMAXBEL 0020000
-#define TARGET_IUTF8   0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST   0000001
-#define TARGET_OLCUC   0000002
-#define TARGET_ONLCR   0000004
-#define TARGET_OCRNL   0000010
-#define TARGET_ONOCR   0000020
-#define TARGET_ONLRET  0000040
-#define TARGET_OFILL   0000100
-#define TARGET_OFDEL   0000200
-#define TARGET_NLDLY   0000400
-#define   TARGET_NL0   0000000
-#define   TARGET_NL1   0000400
-#define TARGET_CRDLY   0003000
-#define   TARGET_CR0   0000000
-#define   TARGET_CR1   0001000
-#define   TARGET_CR2   0002000
-#define   TARGET_CR3   0003000
-#define TARGET_TABDLY  0014000
-#define   TARGET_TAB0  0000000
-#define   TARGET_TAB1  0004000
-#define   TARGET_TAB2  0010000
-#define   TARGET_TAB3  0014000
-#define   TARGET_XTABS 0014000
-#define TARGET_BSDLY   0020000
-#define   TARGET_BS0   0000000
-#define   TARGET_BS1   0020000
-#define TARGET_VTDLY   0040000
-#define   TARGET_VT0   0000000
-#define   TARGET_VT1   0040000
-#define TARGET_FFDLY   0100000
-#define   TARGET_FF0   0000000
-#define   TARGET_FF1   0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD   0010017
-#define  TARGET_B0     0000000         /* hang up */
-#define  TARGET_B50    0000001
-#define  TARGET_B75    0000002
-#define  TARGET_B110   0000003
-#define  TARGET_B134   0000004
-#define  TARGET_B150   0000005
-#define  TARGET_B200   0000006
-#define  TARGET_B300   0000007
-#define  TARGET_B600   0000010
-#define  TARGET_B1200  0000011
-#define  TARGET_B1800  0000012
-#define  TARGET_B2400  0000013
-#define  TARGET_B4800  0000014
-#define  TARGET_B9600  0000015
-#define  TARGET_B19200 0000016
-#define  TARGET_B38400 0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE   0000060
-#define   TARGET_CS5   0000000
-#define   TARGET_CS6   0000020
-#define   TARGET_CS7   0000040
-#define   TARGET_CS8   0000060
-#define TARGET_CSTOPB  0000100
-#define TARGET_CREAD   0000200
-#define TARGET_PARENB  0000400
-#define TARGET_PARODD  0001000
-#define TARGET_HUPCL   0002000
-#define TARGET_CLOCAL  0004000
-#define TARGET_CBAUDEX 0010000
-#define  TARGET_B57600  0010001
-#define  TARGET_B115200 0010002
-#define  TARGET_B230400 0010003
-#define  TARGET_B460800 0010004
-#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
-#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000  /* flow control */
-
-/* c_lflag bits */
-#define TARGET_ISIG    0000001
-#define TARGET_ICANON  0000002
-#define TARGET_XCASE   0000004
-#define TARGET_ECHO    0000010
-#define TARGET_ECHOE   0000020
-#define TARGET_ECHOK   0000040
-#define TARGET_ECHONL  0000100
-#define TARGET_NOFLSH  0000200
-#define TARGET_TOSTOP  0000400
-#define TARGET_ECHOCTL 0001000
-#define TARGET_ECHOPRT 0002000
-#define TARGET_ECHOKE  0004000
-#define TARGET_FLUSHO  0010000
-#define TARGET_PENDIN  0040000
-#define TARGET_IEXTEN  0100000
-
-/* c_cc character offsets */
-#define TARGET_VINTR    0
-#define TARGET_VQUIT    1
-#define TARGET_VERASE   2
-#define TARGET_VKILL    3
-#define TARGET_VEOF     4
-#define TARGET_VTIME    5
-#define TARGET_VMIN     6
-#define TARGET_VSWTC    7
-#define TARGET_VSTART   8
-#define TARGET_VSTOP    9
-#define TARGET_VSUSP    10
-#define TARGET_VEOL     11
-#define TARGET_VREPRINT 12
-#define TARGET_VDISCARD 13
-#define TARGET_VWERASE  14
-#define TARGET_VLNEXT   15
-#define TARGET_VEOL2    16
-
-/* ioctls */
-
-#define TARGET_TCGETS           0x5401
-#define TARGET_TCSETS           0x5402
-#define TARGET_TCSETSW          0x5403
-#define TARGET_TCSETSF          0x5404
-#define TARGET_TCGETA           0x5405
-#define TARGET_TCSETA           0x5406
-#define TARGET_TCSETAW          0x5407
-#define TARGET_TCSETAF          0x5408
-#define TARGET_TCSBRK           0x5409
-#define TARGET_TCXONC           0x540A
-#define TARGET_TCFLSH           0x540B
-
-#define TARGET_TIOCEXCL         0x540C
-#define TARGET_TIOCNXCL         0x540D
-#define TARGET_TIOCSCTTY        0x540E
-#define TARGET_TIOCGPGRP        0x540F
-#define TARGET_TIOCSPGRP        0x5410
-#define TARGET_TIOCOUTQ         0x5411
-#define TARGET_TIOCSTI          0x5412
-#define TARGET_TIOCGWINSZ       0x5413
-#define TARGET_TIOCSWINSZ       0x5414
-#define TARGET_TIOCMGET         0x5415
-#define TARGET_TIOCMBIS         0x5416
-#define TARGET_TIOCMBIC         0x5417
-#define TARGET_TIOCMSET         0x5418
-#define TARGET_TIOCGSOFTCAR     0x5419
-#define TARGET_TIOCSSOFTCAR     0x541A
-#define TARGET_FIONREAD         0x541B
-#define TARGET_TIOCINQ          TARGET_FIONREAD
-#define TARGET_TIOCLINUX        0x541C
-#define TARGET_TIOCCONS         0x541D
-#define TARGET_TIOCGSERIAL      0x541E
-#define TARGET_TIOCSSERIAL      0x541F
-#define TARGET_TIOCPKT          0x5420
-#define TARGET_FIONBIO          0x5421
-#define TARGET_TIOCNOTTY        0x5422
-#define TARGET_TIOCSETD         0x5423
-#define TARGET_TIOCGETD         0x5424
-#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
-#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
-#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
-#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
-#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
-        /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
-        /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
-        /* Safely open the slave */
-
-#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX          0x5451
-#define TARGET_FIOASYNC         0x5452
-#define TARGET_TIOCSERCONFIG    0x5453
-#define TARGET_TIOCSERGWILD     0x5454
-#define TARGET_TIOCSERSWILD     0x5455
-#define TARGET_TIOCGLCKTRMIOS   0x5456
-#define TARGET_TIOCSLCKTRMIOS   0x5457
-#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT      0x545C
-        /* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT     0x545D
-        /* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA              0
-#define TARGET_TIOCPKT_FLUSHREAD         1
-#define TARGET_TIOCPKT_FLUSHWRITE        2
-#define TARGET_TIOCPKT_STOP              4
-#define TARGET_TIOCPKT_START             8
-#define TARGET_TIOCPKT_NOSTOP           16
-#define TARGET_TIOCPKT_DOSTOP           32
-
-#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/s390x/termbits.h b/linux-user/s390x/termbits.h
index 9affa8f41a..b1d4f4fedb 100644
--- a/linux-user/s390x/termbits.h
+++ b/linux-user/s390x/termbits.h
@@ -1,288 +1 @@
-/*
- *  include/asm-s390/termbits.h
- *
- *  S390 version
- *
- *  Derived from "include/asm-i386/termbits.h"
- */
-
-#ifndef LINUX_USER_S390X_TERMBITS_H
-#define LINUX_USER_S390X_TERMBITS_H
-
-#define TARGET_NCCS 19
-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 */
-};
-
-struct target_termios2 {
-    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 */
-    unsigned int c_ispeed;		/* input speed */
-    unsigned int c_ospeed;		/* output speed */
-};
-
-struct target_ktermios {
-    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 */
-    unsigned int c_ispeed;		/* input speed */
-    unsigned int c_ospeed;		/* output speed */
-};
-
-/* c_cc characters */
-#define TARGET_VINTR 0
-#define TARGET_VQUIT 1
-#define TARGET_VERASE 2
-#define TARGET_VKILL 3
-#define TARGET_VEOF 4
-#define TARGET_VTIME 5
-#define TARGET_VMIN 6
-#define TARGET_VSWTC 7
-#define TARGET_VSTART 8
-#define TARGET_VSTOP 9
-#define TARGET_VSUSP 10
-#define TARGET_VEOL 11
-#define TARGET_VREPRINT 12
-#define TARGET_VDISCARD 13
-#define TARGET_VWERASE 14
-#define TARGET_VLNEXT 15
-#define TARGET_VEOL2 16
-
-/* c_iflag bits */
-#define TARGET_IGNBRK	0000001
-#define TARGET_BRKINT	0000002
-#define TARGET_IGNPAR	0000004
-#define TARGET_PARMRK	0000010
-#define TARGET_INPCK	0000020
-#define TARGET_ISTRIP	0000040
-#define TARGET_INLCR	0000100
-#define TARGET_IGNCR	0000200
-#define TARGET_ICRNL	0000400
-#define TARGET_IUCLC	0001000
-#define TARGET_IXON	0002000
-#define TARGET_IXANY	0004000
-#define TARGET_IXOFF	0010000
-#define TARGET_IMAXBEL	0020000
-#define TARGET_IUTF8	0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST	0000001
-#define TARGET_OLCUC	0000002
-#define TARGET_ONLCR	0000004
-#define TARGET_OCRNL	0000010
-#define TARGET_ONOCR	0000020
-#define TARGET_ONLRET	0000040
-#define TARGET_OFILL	0000100
-#define TARGET_OFDEL	0000200
-#define TARGET_NLDLY	0000400
-#define TARGET_NL0	0000000
-#define TARGET_NL1	0000400
-#define TARGET_CRDLY	0003000
-#define TARGET_CR0	0000000
-#define TARGET_CR1	0001000
-#define TARGET_CR2	0002000
-#define TARGET_CR3	0003000
-#define TARGET_TABDLY	0014000
-#define TARGET_TAB0	0000000
-#define TARGET_TAB1	0004000
-#define TARGET_TAB2	0010000
-#define TARGET_TAB3	0014000
-#define TARGET_XTABS	0014000
-#define TARGET_BSDLY	0020000
-#define TARGET_BS0	0000000
-#define TARGET_BS1	0020000
-#define TARGET_VTDLY	0040000
-#define TARGET_VT0	0000000
-#define TARGET_VT1	0040000
-#define TARGET_FFDLY	0100000
-#define TARGET_FF0	0000000
-#define TARGET_FF1	0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD	0010017
-#define TARGET_B0	0000000		/* hang up */
-#define TARGET_B50	0000001
-#define TARGET_B75	0000002
-#define TARGET_B110	0000003
-#define TARGET_B134	0000004
-#define TARGET_B150	0000005
-#define TARGET_B200	0000006
-#define TARGET_B300	0000007
-#define TARGET_B600	0000010
-#define TARGET_B1200	0000011
-#define TARGET_B1800	0000012
-#define TARGET_B2400	0000013
-#define TARGET_B4800	0000014
-#define TARGET_B9600	0000015
-#define TARGET_B19200	0000016
-#define TARGET_B38400	0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE	0000060
-#define TARGET_CS5	0000000
-#define TARGET_CS6	0000020
-#define TARGET_CS7	0000040
-#define TARGET_CS8	0000060
-#define TARGET_CSTOPB	0000100
-#define TARGET_CREAD	0000200
-#define TARGET_PARENB	0000400
-#define TARGET_PARODD	0001000
-#define TARGET_HUPCL	0002000
-#define TARGET_CLOCAL	0004000
-#define TARGET_CBAUDEX 0010000
-#define TARGET_BOTHER  0010000
-#define TARGET_B57600  0010001
-#define TARGET_B115200 0010002
-#define TARGET_B230400 0010003
-#define TARGET_B460800 0010004
-#define TARGET_B500000 0010005
-#define TARGET_B576000 0010006
-#define TARGET_B921600 0010007
-#define TARGET_B1000000 0010010
-#define TARGET_B1152000 0010011
-#define TARGET_B1500000 0010012
-#define TARGET_B2000000 0010013
-#define TARGET_B2500000 0010014
-#define TARGET_B3000000 0010015
-#define TARGET_B3500000 0010016
-#define TARGET_B4000000 0010017
-#define TARGET_CIBAUD	  002003600000	/* input baud rate */
-#define TARGET_CMSPAR	  010000000000		/* mark or space (stick) parity */
-#define TARGET_CRTSCTS	  020000000000		/* flow control */
-
-#define TARGET_IBSHIFT	  16		/* Shift from CBAUD to CIBAUD */
-
-/* c_lflag bits */
-#define TARGET_ISIG	0000001
-#define TARGET_ICANON	0000002
-#define TARGET_XCASE	0000004
-#define TARGET_ECHO	0000010
-#define TARGET_ECHOE	0000020
-#define TARGET_ECHOK	0000040
-#define TARGET_ECHONL	0000100
-#define TARGET_NOFLSH	0000200
-#define TARGET_TOSTOP	0000400
-#define TARGET_ECHOCTL	0001000
-#define TARGET_ECHOPRT	0002000
-#define TARGET_ECHOKE	0004000
-#define TARGET_FLUSHO	0010000
-#define TARGET_PENDIN	0040000
-#define TARGET_IEXTEN	0100000
-
-/* tcflow() and TCXONC use these */
-#define	TARGET_TCOOFF		0
-#define	TARGET_TCOON		1
-#define	TARGET_TCIOFF		2
-#define	TARGET_TCION		3
-
-/* tcflush() and TCFLSH use these */
-#define	TARGET_TCIFLUSH	0
-#define	TARGET_TCOFLUSH	1
-#define	TARGET_TCIOFLUSH	2
-
-/* tcsetattr uses these */
-#define	TARGET_TCSANOW		0
-#define	TARGET_TCSADRAIN	1
-#define	TARGET_TCSAFLUSH	2
-
-/*
- *  include/asm-s390/ioctls.h
- *
- *  S390 version
- *
- *  Derived from "include/asm-i386/ioctls.h"
- */
-
-/* 0x54 is just a magic number to make these relatively unique ('T') */
-
-#define TARGET_TCGETS		0x5401
-#define TARGET_TCSETS		0x5402
-#define TARGET_TCSETSW		0x5403
-#define TARGET_TCSETSF		0x5404
-#define TARGET_TCGETA		0x5405
-#define TARGET_TCSETA		0x5406
-#define TARGET_TCSETAW		0x5407
-#define TARGET_TCSETAF		0x5408
-#define TARGET_TCSBRK		0x5409
-#define TARGET_TCXONC		0x540A
-#define TARGET_TCFLSH		0x540B
-#define TARGET_TIOCEXCL	0x540C
-#define TARGET_TIOCNXCL	0x540D
-#define TARGET_TIOCSCTTY	0x540E
-#define TARGET_TIOCGPGRP	0x540F
-#define TARGET_TIOCSPGRP	0x5410
-#define TARGET_TIOCOUTQ	0x5411
-#define TARGET_TIOCSTI		0x5412
-#define TARGET_TIOCGWINSZ	0x5413
-#define TARGET_TIOCSWINSZ	0x5414
-#define TARGET_TIOCMGET	0x5415
-#define TARGET_TIOCMBIS	0x5416
-#define TARGET_TIOCMBIC	0x5417
-#define TARGET_TIOCMSET	0x5418
-#define TARGET_TIOCGSOFTCAR	0x5419
-#define TARGET_TIOCSSOFTCAR	0x541A
-#define TARGET_FIONREAD	0x541B
-#define TARGET_TIOCINQ		FIONREAD
-#define TARGET_TIOCLINUX	0x541C
-#define TARGET_TIOCCONS	0x541D
-#define TARGET_TIOCGSERIAL	0x541E
-#define TARGET_TIOCSSERIAL	0x541F
-#define TARGET_TIOCPKT		0x5420
-#define TARGET_FIONBIO		0x5421
-#define TARGET_TIOCNOTTY	0x5422
-#define TARGET_TIOCSETD	0x5423
-#define TARGET_TIOCGETD	0x5424
-#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
-#define TARGET_TCGETS2		_IOR('T',0x2A, struct termios2)
-#define TARGET_TCSETS2		_IOW('T',0x2B, struct termios2)
-#define TARGET_TCSETSW2	_IOW('T',0x2C, struct termios2)
-#define TARGET_TCSETSF2	_IOW('T',0x2D, struct termios2)
-#define TARGET_TIOCGPTN	_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK	_IOW('T',0x31, int)  /* Lock/unlock Pty */
-#define TARGET_TIOCGDEV	_IOR('T',0x32, unsigned int) /* Get real dev no below /dev/console */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
-
-#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX		0x5451
-#define TARGET_FIOASYNC	0x5452
-#define TARGET_TIOCSERCONFIG	0x5453
-#define TARGET_TIOCSERGWILD	0x5454
-#define TARGET_TIOCSERSWILD	0x5455
-#define TARGET_TIOCGLCKTRMIOS	0x5456
-#define TARGET_TIOCSLCKTRMIOS	0x5457
-#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-#define TARGET_FIOQSIZE	0x545E
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA		 0
-#define TARGET_TIOCPKT_FLUSHREAD	 1
-#define TARGET_TIOCPKT_FLUSHWRITE	 2
-#define TARGET_TIOCPKT_STOP		 4
-#define TARGET_TIOCPKT_START		 8
-#define TARGET_TIOCPKT_NOSTOP		16
-#define TARGET_TIOCPKT_DOSTOP		32
-
-#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/tilegx/termbits.h b/linux-user/tilegx/termbits.h
index 966daec088..b1d4f4fedb 100644
--- a/linux-user/tilegx/termbits.h
+++ b/linux-user/tilegx/termbits.h
@@ -1,275 +1 @@
-#ifndef TILEGX_TERMBITS_H
-#define TILEGX_TERMBITS_H
-
-/* From asm-generic/termbits.h, which is used by tilegx */
-
-#define TARGET_NCCS 19
-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 */
-};
-
-struct target_termios2 {
-    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 */
-    unsigned int c_ispeed;            /* input speed */
-    unsigned int c_ospeed;            /* output speed */
-};
-
-/* c_cc characters */
-#define TARGET_VINTR     0
-#define TARGET_VQUIT     1
-#define TARGET_VERASE    2
-#define TARGET_VKILL     3
-#define TARGET_VEOF      4
-#define TARGET_VTIME     5
-#define TARGET_VMIN      6
-#define TARGET_VSWTC     7
-#define TARGET_VSTART    8
-#define TARGET_VSTOP     9
-#define TARGET_VSUSP     10
-#define TARGET_VEOL      11
-#define TARGET_VREPRINT  12
-#define TARGET_VDISCARD  13
-#define TARGET_VWERASE   14
-#define TARGET_VLNEXT    15
-#define TARGET_VEOL2     16
-
-/* c_iflag bits */
-#define TARGET_IGNBRK    0000001
-#define TARGET_BRKINT    0000002
-#define TARGET_IGNPAR    0000004
-#define TARGET_PARMRK    0000010
-#define TARGET_INPCK     0000020
-#define TARGET_ISTRIP    0000040
-#define TARGET_INLCR     0000100
-#define TARGET_IGNCR     0000200
-#define TARGET_ICRNL     0000400
-#define TARGET_IUCLC     0001000
-#define TARGET_IXON      0002000
-#define TARGET_IXANY     0004000
-#define TARGET_IXOFF     0010000
-#define TARGET_IMAXBEL   0020000
-#define TARGET_IUTF8     0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST     0000001
-#define TARGET_OLCUC     0000002
-#define TARGET_ONLCR     0000004
-#define TARGET_OCRNL     0000010
-#define TARGET_ONOCR     0000020
-#define TARGET_ONLRET    0000040
-#define TARGET_OFILL     0000100
-#define TARGET_OFDEL     0000200
-#define TARGET_NLDLY     0000400
-#define   TARGET_NL0     0000000
-#define   TARGET_NL1     0000400
-#define TARGET_CRDLY     0003000
-#define   TARGET_CR0     0000000
-#define   TARGET_CR1     0001000
-#define   TARGET_CR2     0002000
-#define   TARGET_CR3     0003000
-#define TARGET_TABDLY    0014000
-#define   TARGET_TAB0    0000000
-#define   TARGET_TAB1    0004000
-#define   TARGET_TAB2    0010000
-#define   TARGET_TAB3    0014000
-#define   TARGET_XTABS   0014000
-#define TARGET_BSDLY     0020000
-#define   TARGET_BS0     0000000
-#define   TARGET_BS1     0020000
-#define TARGET_VTDLY     0040000
-#define   TARGET_VT0     0000000
-#define   TARGET_VT1     0040000
-#define TARGET_FFDLY     0100000
-#define   TARGET_FF0     0000000
-#define   TARGET_FF1     0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD     0010017
-#define  TARGET_B0       0000000        /* hang up */
-#define  TARGET_B50      0000001
-#define  TARGET_B75      0000002
-#define  TARGET_B110     0000003
-#define  TARGET_B134     0000004
-#define  TARGET_B150     0000005
-#define  TARGET_B200     0000006
-#define  TARGET_B300     0000007
-#define  TARGET_B600     0000010
-#define  TARGET_B1200    0000011
-#define  TARGET_B1800    0000012
-#define  TARGET_B2400    0000013
-#define  TARGET_B4800    0000014
-#define  TARGET_B9600    0000015
-#define  TARGET_B19200   0000016
-#define  TARGET_B38400   0000017
-#define TARGET_EXTA      TARGET_B19200
-#define TARGET_EXTB      TARGET_B38400
-#define TARGET_CSIZE     0000060
-#define   TARGET_CS5     0000000
-#define   TARGET_CS6     0000020
-#define   TARGET_CS7     0000040
-#define   TARGET_CS8     0000060
-#define TARGET_CSTOPB    0000100
-#define TARGET_CREAD     0000200
-#define TARGET_PARENB    0000400
-#define TARGET_PARODD    0001000
-#define TARGET_HUPCL     0002000
-#define TARGET_CLOCAL    0004000
-#define TARGET_CBAUDEX   0010000
-#define    TARGET_BOTHER 0010000
-#define    TARGET_B57600 0010001
-#define   TARGET_B115200 0010002
-#define   TARGET_B230400 0010003
-#define   TARGET_B460800 0010004
-#define   TARGET_B500000 0010005
-#define   TARGET_B576000 0010006
-#define   TARGET_B921600 0010007
-#define  TARGET_B1000000 0010010
-#define  TARGET_B1152000 0010011
-#define  TARGET_B1500000 0010012
-#define  TARGET_B2000000 0010013
-#define  TARGET_B2500000 0010014
-#define  TARGET_B3000000 0010015
-#define  TARGET_B3500000 0010016
-#define  TARGET_B4000000 0010017
-#define TARGET_CIBAUD    002003600000    /* input baud rate */
-#define TARGET_CMSPAR    010000000000    /* mark or space (stick) parity */
-#define TARGET_CRTSCTS   020000000000    /* flow control */
-
-#define TARGET_IBSHIFT   16        /* Shift from CBAUD to CIBAUD */
-
-/* c_lflag bits */
-#define TARGET_ISIG      0000001
-#define TARGET_ICANON    0000002
-#define TARGET_XCASE     0000004
-#define TARGET_ECHO      0000010
-#define TARGET_ECHOE     0000020
-#define TARGET_ECHOK     0000040
-#define TARGET_ECHONL    0000100
-#define TARGET_NOFLSH    0000200
-#define TARGET_TOSTOP    0000400
-#define TARGET_ECHOCTL   0001000
-#define TARGET_ECHOPRT   0002000
-#define TARGET_ECHOKE    0004000
-#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
-#define TARGET_TCOON     1
-#define TARGET_TCIOFF    2
-#define TARGET_TCION     3
-
-/* tcflush() and TCFLSH use these */
-#define TARGET_TCIFLUSH  0
-#define TARGET_TCOFLUSH  1
-#define TARGET_TCIOFLUSH 2
-
-/* tcsetattr uses these */
-#define TARGET_TCSANOW   0
-#define TARGET_TCSADRAIN 1
-#define TARGET_TCSAFLUSH 2
-
-/* From asm-generic/ioctls.h, which is used by tilegx */
-
-#define TARGET_TCGETS                   0x5401
-#define TARGET_TCSETS                   0x5402
-#define TARGET_TCSETSW                  0x5403
-#define TARGET_TCSETSF                  0x5404
-#define TARGET_TCGETA                   0x5405
-#define TARGET_TCSETA                   0x5406
-#define TARGET_TCSETAW                  0x5407
-#define TARGET_TCSETAF                  0x5408
-#define TARGET_TCSBRK                   0x5409
-#define TARGET_TCXONC                   0x540A
-#define TARGET_TCFLSH                   0x540B
-#define TARGET_TIOCEXCL                 0x540C
-#define TARGET_TIOCNXCL                 0x540D
-#define TARGET_TIOCSCTTY                0x540E
-#define TARGET_TIOCGPGRP                0x540F
-#define TARGET_TIOCSPGRP                0x5410
-#define TARGET_TIOCOUTQ                 0x5411
-#define TARGET_TIOCSTI                  0x5412
-#define TARGET_TIOCGWINSZ               0x5413
-#define TARGET_TIOCSWINSZ               0x5414
-#define TARGET_TIOCMGET                 0x5415
-#define TARGET_TIOCMBIS                 0x5416
-#define TARGET_TIOCMBIC                 0x5417
-#define TARGET_TIOCMSET                 0x5418
-#define TARGET_TIOCGSOFTCAR             0x5419
-#define TARGET_TIOCSSOFTCAR             0x541A
-#define TARGET_FIONREAD                 0x541B
-#define TARGET_TIOCINQ                  TARGET_FIONREAD
-#define TARGET_TIOCLINUX                0x541C
-#define TARGET_TIOCCONS                 0x541D
-#define TARGET_TIOCGSERIAL              0x541E
-#define TARGET_TIOCSSERIAL              0x541F
-#define TARGET_TIOCPKT                  0x5420
-#define TARGET_FIONBIO                  0x5421
-#define TARGET_TIOCNOTTY                0x5422
-#define TARGET_TIOCSETD                 0x5423
-#define TARGET_TIOCGETD                 0x5424
-#define TARGET_TCSBRKP                  0x5425
-#define TARGET_TIOCSBRK                 0x5427
-#define TARGET_TIOCCBRK                 0x5428
-#define TARGET_TIOCGSID                 0x5429
-#define TARGET_TCGETS2                  TARGET_IOR('T', 0x2A, struct termios2)
-#define TARGET_TCSETS2                  TARGET_IOW('T', 0x2B, struct termios2)
-#define TARGET_TCSETSW2                 TARGET_IOW('T', 0x2C, struct termios2)
-#define TARGET_TCSETSF2                 TARGET_IOW('T', 0x2D, struct termios2)
-#define TARGET_TIOCGRS485               0x542E
-#define TARGET_TIOCSRS485               0x542F
-#define TARGET_TIOCGPTN                 TARGET_IOR('T', 0x30, unsigned int)
-#define TARGET_TIOCSPTLCK               TARGET_IOW('T', 0x31, int)
-#define TARGET_TIOCGDEV                 TARGET_IOR('T', 0x32, unsigned int)
-#define TARGET_TCGETX                   0x5432
-#define TARGET_TCSETX                   0x5433
-#define TARGET_TCSETXF                  0x5434
-#define TARGET_TCSETXW                  0x5435
-#define TARGET_TIOCSIG                  TARGET_IOW('T', 0x36, int)
-#define TARGET_TIOCVHANGUP              0x5437
-#define TARGET_TIOCGPKT                 TARGET_IOR('T', 0x38, int)
-#define TARGET_TIOCGPTLCK               TARGET_IOR('T', 0x39, int)
-#define TARGET_TIOCGEXCL                TARGET_IOR('T', 0x40, int)
-#define TARGET_TIOCGPTPEER              TARGET_IO('T', 0x41)
-
-#define TARGET_FIONCLEX                 0x5450
-#define TARGET_FIOCLEX                  0x5451
-#define TARGET_FIOASYNC                 0x5452
-#define TARGET_TIOCSERCONFIG            0x5453
-#define TARGET_TIOCSERGWILD             0x5454
-#define TARGET_TIOCSERSWILD             0x5455
-#define TARGET_TIOCGLCKTRMIOS           0x5456
-#define TARGET_TIOCSLCKTRMIOS           0x5457
-#define TARGET_TIOCSERGSTRUCT           0x5458
-#define TARGET_TIOCSERGETLSR            0x5459
-#define TARGET_TIOCSERGETMULTI          0x545A
-#define TARGET_TIOCSERSETMULTI          0x545B
-
-#define TARGET_TIOCMIWAIT               0x545C
-#define TARGET_TIOCGICOUNT              0x545D
-#define TARGET_FIOQSIZE                 0x5460
-
-#define TARGET_TIOCPKT_DATA             0
-#define TARGET_TIOCPKT_FLUSHREAD        1
-#define TARGET_TIOCPKT_FLUSHWRITE       2
-#define TARGET_TIOCPKT_STOP             4
-#define TARGET_TIOCPKT_START            8
-#define TARGET_TIOCPKT_NOSTOP           16
-#define TARGET_TIOCPKT_DOSTOP           32
-#define TARGET_TIOCPKT_IOCTL            64
-
-#define TARGET_TIOCSER_TEMT             0x01
-
-#endif
+#include "../generic/termbits.h"
diff --git a/linux-user/x86_64/termbits.h b/linux-user/x86_64/termbits.h
index c8bb5996b1..b1d4f4fedb 100644
--- a/linux-user/x86_64/termbits.h
+++ b/linux-user/x86_64/termbits.h
@@ -1,253 +1 @@
-#ifndef LINUX_USER_X86_64_TERMBITS_H
-#define LINUX_USER_X86_64_TERMBITS_H
-
-#define TARGET_NCCS 19
-
-typedef unsigned char	target_cc_t;
-typedef unsigned int	target_speed_t;
-typedef unsigned int	target_tcflag_t;
-struct target_termios {
-	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
-#define TARGET_VERASE 2
-#define TARGET_VKILL 3
-#define TARGET_VEOF 4
-#define TARGET_VTIME 5
-#define TARGET_VMIN 6
-#define TARGET_VSWTC 7
-#define TARGET_VSTART 8
-#define TARGET_VSTOP 9
-#define TARGET_VSUSP 10
-#define TARGET_VEOL 11
-#define TARGET_VREPRINT 12
-#define TARGET_VDISCARD 13
-#define TARGET_VWERASE 14
-#define TARGET_VLNEXT 15
-#define TARGET_VEOL2 16
-
-/* c_iflag bits */
-#define TARGET_IGNBRK	0000001
-#define TARGET_BRKINT	0000002
-#define TARGET_IGNPAR	0000004
-#define TARGET_PARMRK	0000010
-#define TARGET_INPCK	0000020
-#define TARGET_ISTRIP	0000040
-#define TARGET_INLCR	0000100
-#define TARGET_IGNCR	0000200
-#define TARGET_ICRNL	0000400
-#define TARGET_IUCLC	0001000
-#define TARGET_IXON	0002000
-#define TARGET_IXANY	0004000
-#define TARGET_IXOFF	0010000
-#define TARGET_IMAXBEL	0020000
-#define TARGET_IUTF8	0040000
-
-/* c_oflag bits */
-#define TARGET_OPOST	0000001
-#define TARGET_OLCUC	0000002
-#define TARGET_ONLCR	0000004
-#define TARGET_OCRNL	0000010
-#define TARGET_ONOCR	0000020
-#define TARGET_ONLRET	0000040
-#define TARGET_OFILL	0000100
-#define TARGET_OFDEL	0000200
-#define TARGET_NLDLY	0000400
-#define   TARGET_NL0	0000000
-#define   TARGET_NL1	0000400
-#define TARGET_CRDLY	0003000
-#define   TARGET_CR0	0000000
-#define   TARGET_CR1	0001000
-#define   TARGET_CR2	0002000
-#define   TARGET_CR3	0003000
-#define TARGET_TABDLY	0014000
-#define   TARGET_TAB0	0000000
-#define   TARGET_TAB1	0004000
-#define   TARGET_TAB2	0010000
-#define   TARGET_TAB3	0014000
-#define   TARGET_XTABS	0014000
-#define TARGET_BSDLY	0020000
-#define   TARGET_BS0	0000000
-#define   TARGET_BS1	0020000
-#define TARGET_VTDLY	0040000
-#define   TARGET_VT0	0000000
-#define   TARGET_VT1	0040000
-#define TARGET_FFDLY	0100000
-#define   TARGET_FF0	0000000
-#define   TARGET_FF1	0100000
-
-/* c_cflag bit meaning */
-#define TARGET_CBAUD	0010017
-#define  TARGET_B0	0000000		/* hang up */
-#define  TARGET_B50	0000001
-#define  TARGET_B75	0000002
-#define  TARGET_B110	0000003
-#define  TARGET_B134	0000004
-#define  TARGET_B150	0000005
-#define  TARGET_B200	0000006
-#define  TARGET_B300	0000007
-#define  TARGET_B600	0000010
-#define  TARGET_B1200	0000011
-#define  TARGET_B1800	0000012
-#define  TARGET_B2400	0000013
-#define  TARGET_B4800	0000014
-#define  TARGET_B9600	0000015
-#define  TARGET_B19200	0000016
-#define  TARGET_B38400	0000017
-#define TARGET_EXTA B19200
-#define TARGET_EXTB B38400
-#define TARGET_CSIZE	0000060
-#define   TARGET_CS5	0000000
-#define   TARGET_CS6	0000020
-#define   TARGET_CS7	0000040
-#define   TARGET_CS8	0000060
-#define TARGET_CSTOPB	0000100
-#define TARGET_CREAD	0000200
-#define TARGET_PARENB	0000400
-#define TARGET_PARODD	0001000
-#define TARGET_HUPCL	0002000
-#define TARGET_CLOCAL	0004000
-#define TARGET_CBAUDEX 0010000
-#define	   TARGET_BOTHER 0010000		/* non standard rate */
-#define    TARGET_B57600 0010001
-#define   TARGET_B115200 0010002
-#define   TARGET_B230400 0010003
-#define   TARGET_B460800 0010004
-#define   TARGET_B500000 0010005
-#define   TARGET_B576000 0010006
-#define   TARGET_B921600 0010007
-#define  TARGET_B1000000 0010010
-#define  TARGET_B1152000 0010011
-#define  TARGET_B1500000 0010012
-#define  TARGET_B2000000 0010013
-#define  TARGET_B2500000 0010014
-#define  TARGET_B3000000 0010015
-#define  TARGET_B3500000 0010016
-#define  TARGET_B4000000 0010017
-#define TARGET_CIBAUD	  002003600000	/* input baud rate */
-#define TARGET_CMSPAR	  010000000000		/* mark or space (stick) parity */
-#define TARGET_CRTSCTS	  020000000000		/* flow control */
-
-#define TARGET_IBSHIFT	  8		/* Shift from CBAUD to CIBAUD */
-
-/* c_lflag bits */
-#define TARGET_ISIG	0000001
-#define TARGET_ICANON	0000002
-#define TARGET_XCASE	0000004
-#define TARGET_ECHO	0000010
-#define TARGET_ECHOE	0000020
-#define TARGET_ECHOK	0000040
-#define TARGET_ECHONL	0000100
-#define TARGET_NOFLSH	0000200
-#define TARGET_TOSTOP	0000400
-#define TARGET_ECHOCTL	0001000
-#define TARGET_ECHOPRT	0002000
-#define TARGET_ECHOKE	0004000
-#define TARGET_FLUSHO	0010000
-#define TARGET_PENDIN	0040000
-#define TARGET_IEXTEN	0100000
-
-/* tcflow() and TCXONC use these */
-#define	TARGET_TCOOFF		0
-#define	TARGET_TCOON		1
-#define	TARGET_TCIOFF		2
-#define	TARGET_TCION		3
-
-/* tcflush() and TCFLSH use these */
-#define	TARGET_TCIFLUSH	0
-#define	TARGET_TCOFLUSH	1
-#define	TARGET_TCIOFLUSH	2
-
-/* tcsetattr uses these */
-#define	TARGET_TCSANOW		0
-#define	TARGET_TCSADRAIN	1
-#define	TARGET_TCSAFLUSH	2
-
-#define TARGET_TCGETS		0x5401
-#define TARGET_TCSETS		0x5402
-#define TARGET_TCSETSW		0x5403
-#define TARGET_TCSETSF		0x5404
-#define TARGET_TCGETA		0x5405
-#define TARGET_TCSETA		0x5406
-#define TARGET_TCSETAW		0x5407
-#define TARGET_TCSETAF		0x5408
-#define TARGET_TCSBRK		0x5409
-#define TARGET_TCXONC		0x540A
-#define TARGET_TCFLSH		0x540B
-#define TARGET_TIOCEXCL	0x540C
-#define TARGET_TIOCNXCL	0x540D
-#define TARGET_TIOCSCTTY	0x540E
-#define TARGET_TIOCGPGRP	0x540F
-#define TARGET_TIOCSPGRP	0x5410
-#define TARGET_TIOCOUTQ	0x5411
-#define TARGET_TIOCSTI		0x5412
-#define TARGET_TIOCGWINSZ	0x5413
-#define TARGET_TIOCSWINSZ	0x5414
-#define TARGET_TIOCMGET	0x5415
-#define TARGET_TIOCMBIS	0x5416
-#define TARGET_TIOCMBIC	0x5417
-#define TARGET_TIOCMSET	0x5418
-#define TARGET_TIOCGSOFTCAR	0x5419
-#define TARGET_TIOCSSOFTCAR	0x541A
-#define TARGET_FIONREAD	0x541B
-#define TARGET_TIOCINQ		FIONREAD
-#define TARGET_TIOCLINUX	0x541C
-#define TARGET_TIOCCONS	0x541D
-#define TARGET_TIOCGSERIAL	0x541E
-#define TARGET_TIOCSSERIAL	0x541F
-#define TARGET_TIOCPKT		0x5420
-#define TARGET_FIONBIO		0x5421
-#define TARGET_TIOCNOTTY	0x5422
-#define TARGET_TIOCSETD	0x5423
-#define TARGET_TIOCGETD	0x5424
-#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
-#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
-#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
-#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
-#define TARGET_TCGETS2          TARGET_IOR('T',0x2A, struct termios2)
-#define TARGET_TCSETS2          TARGET_IOW('T',0x2B, struct termios2)
-#define TARGET_TCSETSW2         TARGET_IOW('T',0x2C, struct termios2)
-#define TARGET_TCSETSF2         TARGET_IOW('T',0x2D, struct termios2)
-#define TARGET_TIOCGPTN         TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
-#define TARGET_TIOCSPTLCK       TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
-#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
-
-#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
-#define TARGET_FIOCLEX		0x5451
-#define TARGET_FIOASYNC	0x5452
-#define TARGET_TIOCSERCONFIG	0x5453
-#define TARGET_TIOCSERGWILD	0x5454
-#define TARGET_TIOCSERSWILD	0x5455
-#define TARGET_TIOCGLCKTRMIOS	0x5456
-#define TARGET_TIOCSLCKTRMIOS	0x5457
-#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
-#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
-#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
-#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
-
-#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
-#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
-#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
-#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
-#define TARGET_FIOQSIZE       0x5460
-
-/* Used for packet mode */
-#define TARGET_TIOCPKT_DATA		 0
-#define TARGET_TIOCPKT_FLUSHREAD	 1
-#define TARGET_TIOCPKT_FLUSHWRITE	 2
-#define TARGET_TIOCPKT_STOP		 4
-#define TARGET_TIOCPKT_START		 8
-#define TARGET_TIOCPKT_NOSTOP		16
-#define TARGET_TIOCPKT_DOSTOP		32
-
-#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
-
-#endif
+#include "../generic/termbits.h"
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions
  2020-07-23 21:02 [PATCH v2 0/3] Adding support for printing contents of 'struct termios' which is used by ioctls of group 'ioctl_tty' Filip Bozuta
  2020-07-23 21:02 ` [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs Filip Bozuta
@ 2020-07-23 21:02 ` Filip Bozuta
  2020-07-23 21:25   ` Max Filippov
                     ` (2 more replies)
  2020-07-23 21:02 ` [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines Filip Bozuta
  2 siblings, 3 replies; 12+ messages in thread
From: Filip Bozuta @ 2020-07-23 21:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier, Filip Bozuta

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 */
 
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines
  2020-07-23 21:02 [PATCH v2 0/3] Adding support for printing contents of 'struct termios' which is used by ioctls of group 'ioctl_tty' Filip Bozuta
  2020-07-23 21:02 ` [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs Filip Bozuta
  2020-07-23 21:02 ` [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions Filip Bozuta
@ 2020-07-23 21:02 ` Filip Bozuta
  2020-08-07 13:18   ` Laurent Vivier
  2020-08-24 20:50   ` Laurent Vivier
  2 siblings, 2 replies; 12+ messages in thread
From: Filip Bozuta @ 2020-07-23 21:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier, Filip Bozuta

Functions "print_ioctl()" and "print_syscall_ret_ioctl()" are used
to print arguments of "ioctl()" with "-strace". These functions
use "thunk_print()", which is defined in "thunk.c", to print the
contents of ioctl's third arguments that are not basic types.

However, this function doesn't handle ioctls of group ioctl_tty which
are used for terminals and serial lines. These ioctls use a type
"struct termios" which thunk type is defined in a non standard
way using "STRUCT_SPECIAL()". This means that this type is not decoded
regularly using "thunk_convert()" and uses special converting functions
"target_to_host_termios()" and "host_to_target_termios()", which are defined
in "syscall.c" to decode it's values.

For simillar reasons, this type is also not printed regularly using
"thunk_print()". That is the reason why a separate printing function
"print_termios()" is defined in file "strace.c". This function decodes
and prints flag values of the "termios" structure.

Implementation notes:

    Function "print_termios()" was implemented in "strace.c" using
    an existing function "print_flags()" to print flag values of
    "struct termios" fields. Also, recently implemented function
    "print_enums()" was also used to print enumareted values which
    are contained in the fields of 'struct termios'.

    These flag values were defined using an existing macro "FLAG_TARGET()"
    that generates aproppriate target flag values and string representations
    of these flags. Also, the recently defined macro "ENUM_TARGET()" was
    used to generate aproppriate enumarated values and their respective
    string representations.

    Function "print_termios()" was declared in "qemu.h" so that it can
    be accessed in "syscall.c". Type "StructEntry" defined in
    "exec/user/thunk.h" contains information that is used to decode
    structure values. Field "void print(void *arg)" was added in this
    structure as a special print function. Also, function "thunk_print()"
    was changed a little so that it uses this special print function
    in case it is defined. This printing function was instantiated with
    the defined "print_termios()" in "syscall.c" in "struct_termios_def".

Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
---
 include/exec/user/thunk.h |   1 +
 linux-user/qemu.h         |   1 +
 linux-user/strace.c       | 195 ++++++++++++++++++++++++++++++++++++++
 linux-user/syscall.c      |   1 +
 thunk.c                   |  23 +++--
 5 files changed, 212 insertions(+), 9 deletions(-)

diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
index 7992475c9f..a5bbb2c733 100644
--- a/include/exec/user/thunk.h
+++ b/include/exec/user/thunk.h
@@ -55,6 +55,7 @@ typedef struct {
     int *field_offsets[2];
     /* special handling */
     void (*convert[2])(void *dst, const void *src);
+    void (*print)(void *arg);
     int size[2];
     int align[2];
     const char *name;
diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index f431805e57..a69a0bd347 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -706,6 +706,7 @@ static inline uint64_t target_offset64(uint64_t word0, uint64_t word1)
 }
 #endif /* TARGET_ABI_BITS != 32 */
 
+void print_termios(void *arg);
 
 /* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */
 #ifdef TARGET_ARM
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 3f16bb2c53..b9ba39ce6e 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -1284,6 +1284,140 @@ UNUSED static struct flags falloc_flags[] = {
 #endif
 };
 
+UNUSED static struct flags termios_iflags[] = {
+    FLAG_TARGET(IGNBRK),
+    FLAG_TARGET(BRKINT),
+    FLAG_TARGET(IGNPAR),
+    FLAG_TARGET(PARMRK),
+    FLAG_TARGET(INPCK),
+    FLAG_TARGET(ISTRIP),
+    FLAG_TARGET(INLCR),
+    FLAG_TARGET(IGNCR),
+    FLAG_TARGET(ICRNL),
+    FLAG_TARGET(IUCLC),
+    FLAG_TARGET(IXON),
+    FLAG_TARGET(IXANY),
+    FLAG_TARGET(IXOFF),
+    FLAG_TARGET(IMAXBEL),
+    FLAG_TARGET(IUTF8),
+    FLAG_END,
+};
+
+UNUSED static struct flags termios_oflags[] = {
+    FLAG_TARGET(OPOST),
+    FLAG_TARGET(OLCUC),
+    FLAG_TARGET(ONLCR),
+    FLAG_TARGET(OCRNL),
+    FLAG_TARGET(ONOCR),
+    FLAG_TARGET(ONLRET),
+    FLAG_TARGET(OFILL),
+    FLAG_TARGET(OFDEL),
+    FLAG_END,
+};
+
+UNUSED static struct enums termios_oflags_NLDLY[] = {
+    ENUM_TARGET(NL0),
+    ENUM_TARGET(NL1),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_oflags_CRDLY[] = {
+    ENUM_TARGET(CR0),
+    ENUM_TARGET(CR1),
+    ENUM_TARGET(CR2),
+    ENUM_TARGET(CR3),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_oflags_TABDLY[] = {
+    ENUM_TARGET(TAB0),
+    ENUM_TARGET(TAB1),
+    ENUM_TARGET(TAB2),
+    ENUM_TARGET(TAB3),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_oflags_VTDLY[] = {
+    ENUM_TARGET(VT0),
+    ENUM_TARGET(VT1),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_oflags_FFDLY[] = {
+    ENUM_TARGET(FF0),
+    ENUM_TARGET(FF1),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_oflags_BSDLY[] = {
+    ENUM_TARGET(BS0),
+    ENUM_TARGET(BS1),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_cflags_CBAUD[] = {
+    ENUM_TARGET(B0),
+    ENUM_TARGET(B50),
+    ENUM_TARGET(B75),
+    ENUM_TARGET(B110),
+    ENUM_TARGET(B134),
+    ENUM_TARGET(B150),
+    ENUM_TARGET(B200),
+    ENUM_TARGET(B300),
+    ENUM_TARGET(B600),
+    ENUM_TARGET(B1200),
+    ENUM_TARGET(B1800),
+    ENUM_TARGET(B2400),
+    ENUM_TARGET(B4800),
+    ENUM_TARGET(B9600),
+    ENUM_TARGET(B19200),
+    ENUM_TARGET(B38400),
+    ENUM_TARGET(B57600),
+    ENUM_TARGET(B115200),
+    ENUM_TARGET(B230400),
+    ENUM_TARGET(B460800),
+    ENUM_END,
+};
+
+UNUSED static struct enums termios_cflags_CSIZE[] = {
+    ENUM_TARGET(CS5),
+    ENUM_TARGET(CS6),
+    ENUM_TARGET(CS7),
+    ENUM_TARGET(CS8),
+    ENUM_END,
+};
+
+UNUSED static struct flags termios_cflags[] = {
+    FLAG_TARGET(CSTOPB),
+    FLAG_TARGET(CREAD),
+    FLAG_TARGET(PARENB),
+    FLAG_TARGET(PARODD),
+    FLAG_TARGET(HUPCL),
+    FLAG_TARGET(CLOCAL),
+    FLAG_TARGET(CRTSCTS),
+    FLAG_END,
+};
+
+UNUSED static struct flags termios_lflags[] = {
+    FLAG_TARGET(ISIG),
+    FLAG_TARGET(ICANON),
+    FLAG_TARGET(XCASE),
+    FLAG_TARGET(ECHO),
+    FLAG_TARGET(ECHOE),
+    FLAG_TARGET(ECHOK),
+    FLAG_TARGET(ECHONL),
+    FLAG_TARGET(NOFLSH),
+    FLAG_TARGET(TOSTOP),
+    FLAG_TARGET(ECHOCTL),
+    FLAG_TARGET(ECHOPRT),
+    FLAG_TARGET(ECHOKE),
+    FLAG_TARGET(FLUSHO),
+    FLAG_TARGET(PENDIN),
+    FLAG_TARGET(IEXTEN),
+    FLAG_TARGET(EXTPROC),
+    FLAG_END,
+};
+
 UNUSED static struct flags mlockall_flags[] = {
     FLAG_TARGET(MCL_CURRENT),
     FLAG_TARGET(MCL_FUTURE),
@@ -1579,6 +1713,67 @@ print_itimerval(abi_ulong it_addr, int last)
     }
 }
 
+void
+print_termios(void *arg)
+{
+    const struct target_termios *target = arg;
+
+    target_tcflag_t iflags = tswap32(target->c_iflag);
+    target_tcflag_t oflags = tswap32(target->c_oflag);
+    target_tcflag_t cflags = tswap32(target->c_cflag);
+    target_tcflag_t lflags = tswap32(target->c_lflag);
+
+    qemu_log("{");
+
+    qemu_log("c_iflag = ");
+    print_flags(termios_iflags, iflags, 0);
+
+    qemu_log("c_oflag = ");
+    target_tcflag_t oflags_clean =  oflags & ~(TARGET_NLDLY | TARGET_CRDLY |
+                                               TARGET_TABDLY | TARGET_BSDLY |
+                                               TARGET_VTDLY | TARGET_FFDLY);
+    print_flags(termios_oflags, oflags_clean, 0);
+    if (oflags & TARGET_NLDLY) {
+        print_enums(termios_oflags_NLDLY, oflags & TARGET_NLDLY, 0);
+    }
+    if (oflags & TARGET_CRDLY) {
+        print_enums(termios_oflags_CRDLY, oflags & TARGET_CRDLY, 0);
+    }
+    if (oflags & TARGET_TABDLY) {
+        print_enums(termios_oflags_TABDLY, oflags & TARGET_TABDLY, 0);
+    }
+    if (oflags & TARGET_BSDLY) {
+        print_enums(termios_oflags_BSDLY, oflags & TARGET_BSDLY, 0);
+    }
+    if (oflags & TARGET_VTDLY) {
+        print_enums(termios_oflags_VTDLY, oflags & TARGET_VTDLY, 0);
+    }
+    if (oflags & TARGET_FFDLY) {
+        print_enums(termios_oflags_FFDLY, oflags & TARGET_FFDLY, 0);
+    }
+
+    qemu_log("c_cflag = ");
+    if (cflags & TARGET_CBAUD) {
+        print_enums(termios_cflags_CBAUD, cflags & TARGET_CBAUD, 0);
+    }
+    if (cflags & TARGET_CSIZE) {
+        print_enums(termios_cflags_CSIZE, cflags & TARGET_CSIZE, 0);
+    }
+    target_tcflag_t cflags_clean = cflags & ~(TARGET_CBAUD | TARGET_CSIZE);
+    print_flags(termios_cflags, cflags_clean, 0);
+
+    qemu_log("c_lflag = ");
+    print_flags(termios_lflags, lflags, 0);
+
+    qemu_log("c_cc = ");
+    qemu_log("\"%s\",", target->c_cc);
+
+    qemu_log("c_line = ");
+    print_raw_param("\'%c\'", target->c_line, 1);
+
+    qemu_log("}");
+}
+
 #undef UNUSED
 
 #ifdef TARGET_NR_accept
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index e815f14bac..6dc230cd0b 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5669,6 +5669,7 @@ static const StructEntry struct_termios_def = {
     .convert = { host_to_target_termios, target_to_host_termios },
     .size = { sizeof(struct target_termios), sizeof(struct host_termios) },
     .align = { __alignof__(struct target_termios), __alignof__(struct host_termios) },
+    .print = print_termios,
 };
 
 static bitmask_transtbl mmap_flags_tbl[] = {
diff --git a/thunk.c b/thunk.c
index c5d9719747..0718325d86 100644
--- a/thunk.c
+++ b/thunk.c
@@ -404,19 +404,24 @@ const argtype *thunk_print(void *arg, const argtype *type_ptr)
             const int *arg_offsets;
 
             se = struct_entries + *type_ptr++;
-            a = arg;
 
-            field_types = se->field_types;
-            arg_offsets = se->field_offsets[0];
+            if (se->print != NULL) {
+                se->print(arg);
+            } else {
+                a = arg;
 
-            qemu_log("{");
-            for (i = 0; i < se->nb_fields; i++) {
-                if (i > 0) {
-                    qemu_log(",");
+                field_types = se->field_types;
+                arg_offsets = se->field_offsets[0];
+
+                qemu_log("{");
+                for (i = 0; i < se->nb_fields; i++) {
+                    if (i > 0) {
+                        qemu_log(",");
+                    }
+                    field_types = thunk_print(a + arg_offsets[i], field_types);
                 }
-                field_types = thunk_print(a + arg_offsets[i], field_types);
+                qemu_log("}");
             }
-            qemu_log("}");
         }
         break;
     default:
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions
  2020-07-23 21:02 ` [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions Filip Bozuta
@ 2020-07-23 21:25   ` Max Filippov
  2020-07-23 21:27     ` Max Filippov
  2020-08-07 13:13   ` Laurent Vivier
  2020-08-24 20:39   ` Laurent Vivier
  2 siblings, 1 reply; 12+ messages in thread
From: Max Filippov @ 2020-07-23 21:25 UTC (permalink / raw)
  To: Filip Bozuta; +Cc: Riku Voipio, qemu-devel, Laurent Vivier

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

-- 
Thanks.
-- Max


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions
  2020-07-23 21:25   ` Max Filippov
@ 2020-07-23 21:27     ` Max Filippov
  0 siblings, 0 replies; 12+ messages in thread
From: Max Filippov @ 2020-07-23 21:27 UTC (permalink / raw)
  To: Filip Bozuta; +Cc: Riku Voipio, qemu-devel, Laurent Vivier

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>

-- 
Thanks.
-- Max


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs
  2020-07-23 21:02 ` [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs Filip Bozuta
@ 2020-08-07 13:10   ` Laurent Vivier
  2020-08-24 20:38   ` Laurent Vivier
  1 sibling, 0 replies; 12+ messages in thread
From: Laurent Vivier @ 2020-08-07 13:10 UTC (permalink / raw)
  To: Filip Bozuta, qemu-devel; +Cc: Riku Voipio

Le 23/07/2020 à 23:02, Filip Bozuta a écrit :
> This patch introduces a generic 'termbits.h' file for following
> archs: 'aarch64', 'arm', 'i386, 'm68k', 'microblaze', 'nios2',
> 'openrisc', 'riscv', 's390x', 'x86_64'.
> 
> Since all of these archs have the same termios flag values and
> same ioctl_tty numbers, there is no need for a separate 'termbits.h'
> file for each one of them. For that reason one generic 'termbits.h'
> file was added for all of them and an '#include' directive was
> added for this generic file in every arch 'termbits.h' file.
> 
> Also, some of the flag values that were missing were added in this
> generic file so that it matches the generic 'termibts.h' and 'ioctls.h'
> files from the kernel: 'asm-generic/termbits.h' and 'asm-generic/ioctls.h'.
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  linux-user/aarch64/termbits.h    | 228 +---------------------
>  linux-user/arm/termbits.h        | 223 +---------------------
>  linux-user/generic/termbits.h    | 318 +++++++++++++++++++++++++++++++
>  linux-user/i386/termbits.h       | 233 +---------------------
>  linux-user/m68k/termbits.h       | 234 +----------------------
>  linux-user/microblaze/termbits.h | 220 +--------------------
>  linux-user/nios2/termbits.h      | 228 +---------------------
>  linux-user/openrisc/termbits.h   | 302 +----------------------------
>  linux-user/riscv/termbits.h      | 228 +---------------------
>  linux-user/s390x/termbits.h      | 289 +---------------------------
>  linux-user/tilegx/termbits.h     | 276 +--------------------------
>  linux-user/x86_64/termbits.h     | 254 +-----------------------
>  12 files changed, 329 insertions(+), 2704 deletions(-)
>  create mode 100644 linux-user/generic/termbits.h
> 
> diff --git a/linux-user/aarch64/termbits.h b/linux-user/aarch64/termbits.h
> index 0ab448d090..b1d4f4fedb 100644
> --- a/linux-user/aarch64/termbits.h
> +++ b/linux-user/aarch64/termbits.h
> @@ -1,227 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_AARCH64_TERMBITS_H
> -#define LINUX_USER_AARCH64_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR    0
> -#define TARGET_VQUIT    1
> -#define TARGET_VERASE   2
> -#define TARGET_VKILL    3
> -#define TARGET_VEOF     4
> -#define TARGET_VTIME    5
> -#define TARGET_VMIN     6
> -#define TARGET_VSWTC    7
> -#define TARGET_VSTART   8
> -#define TARGET_VSTOP    9
> -#define TARGET_VSUSP    10
> -#define TARGET_VEOL     11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE  14
> -#define TARGET_VLNEXT   15
> -#define TARGET_VEOL2    16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS           0x5401
> -#define TARGET_TCSETS           0x5402
> -#define TARGET_TCSETSW          0x5403
> -#define TARGET_TCSETSF          0x5404
> -#define TARGET_TCGETA           0x5405
> -#define TARGET_TCSETA           0x5406
> -#define TARGET_TCSETAW          0x5407
> -#define TARGET_TCSETAF          0x5408
> -#define TARGET_TCSBRK           0x5409
> -#define TARGET_TCXONC           0x540A
> -#define TARGET_TCFLSH           0x540B
> -
> -#define TARGET_TIOCEXCL         0x540C
> -#define TARGET_TIOCNXCL         0x540D
> -#define TARGET_TIOCSCTTY        0x540E
> -#define TARGET_TIOCGPGRP        0x540F
> -#define TARGET_TIOCSPGRP        0x5410
> -#define TARGET_TIOCOUTQ         0x5411
> -#define TARGET_TIOCSTI          0x5412
> -#define TARGET_TIOCGWINSZ       0x5413
> -#define TARGET_TIOCSWINSZ       0x5414
> -#define TARGET_TIOCMGET         0x5415
> -#define TARGET_TIOCMBIS         0x5416
> -#define TARGET_TIOCMBIC         0x5417
> -#define TARGET_TIOCMSET         0x5418
> -#define TARGET_TIOCGSOFTCAR     0x5419
> -#define TARGET_TIOCSSOFTCAR     0x541A
> -#define TARGET_FIONREAD         0x541B
> -#define TARGET_TIOCINQ          TARGET_FIONREAD
> -#define TARGET_TIOCLINUX        0x541C
> -#define TARGET_TIOCCONS         0x541D
> -#define TARGET_TIOCGSERIAL      0x541E
> -#define TARGET_TIOCSSERIAL      0x541F
> -#define TARGET_TIOCPKT          0x5420
> -#define TARGET_FIONBIO          0x5421
> -#define TARGET_TIOCNOTTY        0x5422
> -#define TARGET_TIOCSETD         0x5423
> -#define TARGET_TIOCGETD         0x5424
> -#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> -#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> -#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> -#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> -        /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> -        /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
> -        /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX          0x5451
> -#define TARGET_FIOASYNC         0x5452
> -#define TARGET_TIOCSERCONFIG    0x5453
> -#define TARGET_TIOCSERGWILD     0x5454
> -#define TARGET_TIOCSERSWILD     0x5455
> -#define TARGET_TIOCGLCKTRMIOS   0x5456
> -#define TARGET_TIOCSLCKTRMIOS   0x5457
> -#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT      0x545C
> -        /* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT     0x545D
> -        /* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA              0
> -#define TARGET_TIOCPKT_FLUSHREAD         1
> -#define TARGET_TIOCPKT_FLUSHWRITE        2
> -#define TARGET_TIOCPKT_STOP              4
> -#define TARGET_TIOCPKT_START             8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -
> -#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/arm/termbits.h b/linux-user/arm/termbits.h
> index e555cff105..b1d4f4fedb 100644
> --- a/linux-user/arm/termbits.h
> +++ b/linux-user/arm/termbits.h
> @@ -1,222 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_ARM_TERMBITS_H
> -#define LINUX_USER_ARM_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/generic/termbits.h b/linux-user/generic/termbits.h
> new file mode 100644
> index 0000000000..6675e0d1ab
> --- /dev/null
> +++ b/linux-user/generic/termbits.h
> @@ -0,0 +1,318 @@
> +/* Derived from asm-generic/termbits.h */
> +
> +#ifndef GENERIC_TERMBITS_H
> +#define GENERIC_TERMBITS_H
> +
> +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 {
> +    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 {
> +    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 {
> +    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 */
> +#define TARGET_VINTR    0
> +#define TARGET_VQUIT    1
> +#define TARGET_VERASE   2
> +#define TARGET_VKILL    3
> +#define TARGET_VEOF     4
> +#define TARGET_VTIME    5
> +#define TARGET_VMIN     6
> +#define TARGET_VSWTC    7
> +#define TARGET_VSTART   8
> +#define TARGET_VSTOP    9
> +#define TARGET_VSUSP    10
> +#define TARGET_VEOL     11
> +#define TARGET_VREPRINT 12
> +#define TARGET_VDISCARD 13
> +#define TARGET_VWERASE  14
> +#define TARGET_VLNEXT   15
> +#define TARGET_VEOL2    16
> +
> +/* c_iflag bits */
> +#define TARGET_IGNBRK   0000001
> +#define TARGET_BRKINT   0000002
> +#define TARGET_IGNPAR   0000004
> +#define TARGET_PARMRK   0000010
> +#define TARGET_INPCK    0000020
> +#define TARGET_ISTRIP   0000040
> +#define TARGET_INLCR    0000100
> +#define TARGET_IGNCR    0000200
> +#define TARGET_ICRNL    0000400
> +#define TARGET_IUCLC    0001000
> +#define TARGET_IXON     0002000
> +#define TARGET_IXANY    0004000
> +#define TARGET_IXOFF    0010000
> +#define TARGET_IMAXBEL  0020000
> +#define TARGET_IUTF8    0040000
> +
> +/* c_oflag bits */
> +#define TARGET_OPOST    0000001
> +#define TARGET_OLCUC    0000002
> +#define TARGET_ONLCR    0000004
> +#define TARGET_OCRNL    0000010
> +#define TARGET_ONOCR    0000020
> +#define TARGET_ONLRET   0000040
> +#define TARGET_OFILL    0000100
> +#define TARGET_OFDEL    0000200
> +#define TARGET_NLDLY    0000400
> +#define  TARGET_NL0     0000000
> +#define  TARGET_NL1     0000400
> +#define TARGET_CRDLY    0003000
> +#define  TARGET_CR0     0000000
> +#define  TARGET_CR1     0001000
> +#define  TARGET_CR2     0002000
> +#define  TARGET_CR3     0003000
> +#define TARGET_TABDLY   0014000
> +#define  TARGET_TAB0    0000000
> +#define  TARGET_TAB1    0004000
> +#define  TARGET_TAB2    0010000
> +#define  TARGET_TAB3    0014000
> +#define  TARGET_XTABS   0014000
> +#define TARGET_BSDLY    0020000
> +#define  TARGET_BS0     0000000
> +#define  TARGET_BS1     0020000
> +#define TARGET_VTDLY    0040000
> +#define  TARGET_VT0     0000000
> +#define  TARGET_VT1     0040000
> +#define TARGET_FFDLY    0100000
> +#define  TARGET_FF0     0000000
> +#define  TARGET_FF1     0100000
> +
> +/* c_cflag bit meaning */
> +#define TARGET_CBAUD      0010017
> +#define  TARGET_B0        0000000  /* hang up */
> +#define  TARGET_B50       0000001
> +#define  TARGET_B75       0000002
> +#define  TARGET_B110      0000003
> +#define  TARGET_B134      0000004
> +#define  TARGET_B150      0000005
> +#define  TARGET_B200      0000006
> +#define  TARGET_B300      0000007
> +#define  TARGET_B600      0000010
> +#define  TARGET_B1200     0000011
> +#define  TARGET_B1800     0000012
> +#define  TARGET_B2400     0000013
> +#define  TARGET_B4800     0000014
> +#define  TARGET_B9600     0000015
> +#define  TARGET_B19200    0000016
> +#define  TARGET_B38400    0000017
> +#define  TARGET_EXTA      TARGET_B19200
> +#define  TARGET_EXTB      TARGET_B38400
> +#define TARGET_CSIZE      0000060
> +#define  TARGET_CS5       0000000
> +#define  TARGET_CS6       0000020
> +#define  TARGET_CS7       0000040
> +#define  TARGET_CS8       0000060
> +#define TARGET_CSTOPB     0000100
> +#define TARGET_CREAD      0000200
> +#define TARGET_PARENB     0000400
> +#define TARGET_PARODD     0001000
> +#define TARGET_HUPCL      0002000
> +#define TARGET_CLOCAL     0004000
> +#define TARGET_CBAUDEX    0010000
> +#define  TARGET_BOTHER    0010000
> +#define  TARGET_B57600    0010001
> +#define  TARGET_B115200   0010002
> +#define  TARGET_B230400   0010003
> +#define  TARGET_B460800   0010004
> +#define  TARGET_B500000   0010005
> +#define  TARGET_B576000   0010006
> +#define  TARGET_B921600   0010007
> +#define  TARGET_B1000000  0010010
> +#define  TARGET_B1152000  0010011
> +#define  TARGET_B1500000  0010012
> +#define  TARGET_B2000000  0010013
> +#define  TARGET_B2500000  0010014
> +#define  TARGET_B3000000  0010015
> +#define  TARGET_B3500000  0010016
> +#define  TARGET_B4000000  0010017
> +#define TARGET_CIBAUD     002003600000  /* input baud rate (not used) */
> +#define TARGET_CMSPAR     010000000000  /* mark or space (stick) parity */
> +#define TARGET_CRTSCTS    020000000000  /* flow control */
> +
> +#define TARGET_IBSHIFT    16            /* Shift from CBAUD to CIBAUD */
> +
> +/* c_lflag bits */
> +#define TARGET_ISIG       0000001
> +#define TARGET_ICANON     0000002
> +#define TARGET_XCASE      0000004
> +#define TARGET_ECHO       0000010
> +#define TARGET_ECHOE      0000020
> +#define TARGET_ECHOK      0000040
> +#define TARGET_ECHONL     0000100
> +#define TARGET_NOFLSH     0000200
> +#define TARGET_TOSTOP     0000400
> +#define TARGET_ECHOCTL    0001000
> +#define TARGET_ECHOPRT    0002000
> +#define TARGET_ECHOKE     0004000
> +#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
> +#define TARGET_TCOON           1
> +#define TARGET_TCIOFF          2
> +#define TARGET_TCION           3
> +
> +/* tcflush() and TCFLSH use these */
> +#define TARGET_TCIFLUSH        0
> +#define TARGET_TCOFLUSH        1
> +#define TARGET_TCIOFLUSH       2
> +
> +/* tcsetattr uses these */
> +#define TARGET_TCSANOW         0
> +#define TARGET_TCSADRAIN       1
> +#define TARGET_TCSAFLUSH       2
> +
> +/* Derived from include/uapi/asm-generic/ioctls.h */
> +
> +#define TARGET_TCGETS           0x5401
> +#define TARGET_TCSETS           0x5402
> +#define TARGET_TCSETSW          0x5403
> +#define TARGET_TCSETSF          0x5404
> +#define TARGET_TCGETA           0x5405
> +#define TARGET_TCSETA           0x5406
> +#define TARGET_TCSETAW          0x5407
> +#define TARGET_TCSETAF          0x5408
> +#define TARGET_TCSBRK           0x5409
> +#define TARGET_TCXONC           0x540A
> +#define TARGET_TCFLSH           0x540B
> +
> +#define TARGET_TIOCEXCL         0x540C
> +#define TARGET_TIOCNXCL         0x540D
> +#define TARGET_TIOCSCTTY        0x540E
> +#define TARGET_TIOCGPGRP        0x540F
> +#define TARGET_TIOCSPGRP        0x5410
> +#define TARGET_TIOCOUTQ         0x5411
> +#define TARGET_TIOCSTI          0x5412
> +#define TARGET_TIOCGWINSZ       0x5413
> +#define TARGET_TIOCSWINSZ       0x5414
> +#define TARGET_TIOCMGET         0x5415
> +#define TARGET_TIOCMBIS         0x5416
> +#define TARGET_TIOCMBIC         0x5417
> +#define TARGET_TIOCMSET         0x5418
> +#define TARGET_TIOCGSOFTCAR     0x5419
> +#define TARGET_TIOCSSOFTCAR     0x541A
> +#define TARGET_FIONREAD         0x541B
> +#define TARGET_TIOCINQ          TARGET_FIONREAD
> +#define TARGET_TIOCLINUX        0x541C
> +#define TARGET_TIOCCONS         0x541D
> +#define TARGET_TIOCGSERIAL      0x541E
> +#define TARGET_TIOCSSERIAL      0x541F
> +#define TARGET_TIOCPKT          0x5420
> +#define TARGET_FIONBIO          0x5421
> +#define TARGET_TIOCNOTTY        0x5422
> +#define TARGET_TIOCSETD         0x5423
> +#define TARGET_TIOCGETD         0x5424
> +#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> +#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> +#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> +#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> +#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> +#define TARGET_TCGETS2          TARGET_IOR('T', 0x2A, struct target_termios2)
> +#define TARGET_TCSETS2          TARGET_IOW('T', 0x2B, struct target_termios2)
> +#define TARGET_TCSETSW2         TARGET_IOW('T', 0x2C, struct target_termios2)
> +#define TARGET_TCSETSF2         TARGET_IOW('T', 0x2D, struct target_termios2)
> +#define TARGET_TIOCGRS485       0x542E
> +#ifndef TARGET_TIOCSRS485
> +#define TARGET_TIOCSRS485       0x542F
> +#endif
> +/* Get Pty Number (of pty-mux device) */
> +#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> +/* Lock/unlock Pty */
> +#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> +
> +/* Get primary device node of /dev/console */
> +#define TARGET_TIOCGDEV        TARGET_IOR('T', 0x32, unsigned int)
> +#define TARGET_TCGETX          0x5432 /* SYS5 TCGETX compatibility */
> +#define TARGET_TCSETX          0x5433
> +#define TARGET_TCSETXF         0x5434
> +#define TARGET_TCSETXW         0x5435
> +/* pty: generate signal */
> +#define TARGET_TIOCSIG         TARGET_IOW('T', 0x36, int)
> +#define TARGET_TIOCVHANGUP     0x5437
> +/* Get packet mode state */
> +#define TARGET_TIOCGPKT        TARGET_IOR('T', 0x38, int)
> +/* Get Pty lock state */
> +#define TARGET_TIOCGPTLCK      TARGET_IOR('T', 0x39, int)
> +/* Get exclusive mode state */
> +#define TARGET_TIOCGEXCL       TARGET_IOR('T', 0x40, int)
> +/* Safely open the slave */
> +#define TARGET_TIOCGPTPEER     TARGET_IO('T', 0x41)
> +#define TARGET_TIOCGISO7816    TARGET_IOR('T', 0x42, struct serial_iso7816)
> +#define TARGET_TIOCSISO7816    TARGET_IOWR('T', 0x43, struct serial_iso7816)
> +
> +#define TARGET_FIONCLEX         0x5450 /* these numbers need to be adjusted */
> +#define TARGET_FIOCLEX          0x5451
> +#define TARGET_FIOASYNC         0x5452
> +#define TARGET_TIOCSERCONFIG    0x5453
> +#define TARGET_TIOCSERGWILD     0x5454
> +#define TARGET_TIOCSERSWILD     0x5455
> +#define TARGET_TIOCGLCKTRMIOS   0x5456
> +#define TARGET_TIOCSLCKTRMIOS   0x5457
> +#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> +#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> +#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> +#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> +
> +/* wait for a change on serial input line(s) */
> +#define TARGET_TIOCMIWAIT       0x545C
> +/* read serial port inline interrupt counts */
> +#define TARGET_TIOCGICOUNT      0x545D
> +#define TARGET_TIOCGHAYESESP    0x545E  /* Get Hayes ESP configuration */
> +#define TARGET_TIOCSHAYESESP    0x545F  /* Set Hayes ESP configuration */
> +
> +/*
> + * Some arches already define TARGET_FIOQSIZE due to a historical
> + * conflict with a Hayes modem-specific ioctl value.
> + */
> +#ifndef TARGET_FIOQSIZE
> +# define TARGET_FIOQSIZE        0x5460
> +#endif
> +
> +/* Used for packet mode */
> +#define TARGET_TIOCPKT_DATA              0
> +#define TARGET_TIOCPKT_FLUSHREAD         1
> +#define TARGET_TIOCPKT_FLUSHWRITE        2
> +#define TARGET_TIOCPKT_STOP              4
> +#define TARGET_TIOCPKT_START             8
> +#define TARGET_TIOCPKT_NOSTOP            16
> +#define TARGET_TIOCPKT_DOSTOP            32
> +#define TARGET_TIOCPKT_IOCTL             64
> +
> +#define TARGET_TIOCSER_TEMT     0x01 /* Transmitter physically empty */
> +
> +#endif
> diff --git a/linux-user/i386/termbits.h b/linux-user/i386/termbits.h
> index 88264bbde7..b1d4f4fedb 100644
> --- a/linux-user/i386/termbits.h
> +++ b/linux-user/i386/termbits.h
> @@ -1,232 +1 @@
> -/* from asm/termbits.h */
> -
> -#ifndef LINUX_USER_I386_TERMBITS_H
> -#define LINUX_USER_I386_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define  TARGET_B500000 0010005
> -#define  TARGET_B576000 0010006
> -#define  TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/m68k/termbits.h b/linux-user/m68k/termbits.h
> index 23840aa968..b1d4f4fedb 100644
> --- a/linux-user/m68k/termbits.h
> +++ b/linux-user/m68k/termbits.h
> @@ -1,233 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_M68K_TERMBITS_H
> -#define LINUX_USER_M68K_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define  TARGET_B500000 0010005
> -#define  TARGET_B576000 0010006
> -#define  TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/microblaze/termbits.h b/linux-user/microblaze/termbits.h
> index 17db8a4473..b1d4f4fedb 100644
> --- a/linux-user/microblaze/termbits.h
> +++ b/linux-user/microblaze/termbits.h
> @@ -1,219 +1 @@
> -/* from asm/termbits.h */
> -
> -#ifndef LINUX_USER_MICROBLAZE_TERMBITS_H
> -#define LINUX_USER_MICROBLAZE_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CRTSCTS   020000000000          /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/nios2/termbits.h b/linux-user/nios2/termbits.h
> index 425a2fe6ef..b1d4f4fedb 100644
> --- a/linux-user/nios2/termbits.h
> +++ b/linux-user/nios2/termbits.h
> @@ -1,227 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_NIOS2_TERMBITS_H
> -#define LINUX_USER_NIOS2_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR    0
> -#define TARGET_VQUIT    1
> -#define TARGET_VERASE   2
> -#define TARGET_VKILL    3
> -#define TARGET_VEOF     4
> -#define TARGET_VTIME    5
> -#define TARGET_VMIN     6
> -#define TARGET_VSWTC    7
> -#define TARGET_VSTART   8
> -#define TARGET_VSTOP    9
> -#define TARGET_VSUSP    10
> -#define TARGET_VEOL     11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE  14
> -#define TARGET_VLNEXT   15
> -#define TARGET_VEOL2    16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS           0x5401
> -#define TARGET_TCSETS           0x5402
> -#define TARGET_TCSETSW          0x5403
> -#define TARGET_TCSETSF          0x5404
> -#define TARGET_TCGETA           0x5405
> -#define TARGET_TCSETA           0x5406
> -#define TARGET_TCSETAW          0x5407
> -#define TARGET_TCSETAF          0x5408
> -#define TARGET_TCSBRK           0x5409
> -#define TARGET_TCXONC           0x540A
> -#define TARGET_TCFLSH           0x540B
> -
> -#define TARGET_TIOCEXCL         0x540C
> -#define TARGET_TIOCNXCL         0x540D
> -#define TARGET_TIOCSCTTY        0x540E
> -#define TARGET_TIOCGPGRP        0x540F
> -#define TARGET_TIOCSPGRP        0x5410
> -#define TARGET_TIOCOUTQ         0x5411
> -#define TARGET_TIOCSTI          0x5412
> -#define TARGET_TIOCGWINSZ       0x5413
> -#define TARGET_TIOCSWINSZ       0x5414
> -#define TARGET_TIOCMGET         0x5415
> -#define TARGET_TIOCMBIS         0x5416
> -#define TARGET_TIOCMBIC         0x5417
> -#define TARGET_TIOCMSET         0x5418
> -#define TARGET_TIOCGSOFTCAR     0x5419
> -#define TARGET_TIOCSSOFTCAR     0x541A
> -#define TARGET_FIONREAD         0x541B
> -#define TARGET_TIOCINQ          TARGET_FIONREAD
> -#define TARGET_TIOCLINUX        0x541C
> -#define TARGET_TIOCCONS         0x541D
> -#define TARGET_TIOCGSERIAL      0x541E
> -#define TARGET_TIOCSSERIAL      0x541F
> -#define TARGET_TIOCPKT          0x5420
> -#define TARGET_FIONBIO          0x5421
> -#define TARGET_TIOCNOTTY        0x5422
> -#define TARGET_TIOCSETD         0x5423
> -#define TARGET_TIOCGETD         0x5424
> -#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> -#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> -#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> -#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> -        /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> -        /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
> -        /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX          0x5451
> -#define TARGET_FIOASYNC         0x5452
> -#define TARGET_TIOCSERCONFIG    0x5453
> -#define TARGET_TIOCSERGWILD     0x5454
> -#define TARGET_TIOCSERSWILD     0x5455
> -#define TARGET_TIOCGLCKTRMIOS   0x5456
> -#define TARGET_TIOCSLCKTRMIOS   0x5457
> -#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT      0x545C
> -        /* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT     0x545D
> -        /* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA              0
> -#define TARGET_TIOCPKT_FLUSHREAD         1
> -#define TARGET_TIOCPKT_FLUSHWRITE        2
> -#define TARGET_TIOCPKT_STOP              4
> -#define TARGET_TIOCPKT_START             8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -
> -#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/openrisc/termbits.h b/linux-user/openrisc/termbits.h
> index 7a635ffbc6..b1d4f4fedb 100644
> --- a/linux-user/openrisc/termbits.h
> +++ b/linux-user/openrisc/termbits.h
> @@ -1,301 +1 @@
> -#ifndef LINUX_USER_OPENRISC_TERMBITS_H
> -#define LINUX_USER_OPENRISC_TERMBITS_H
> -
> -typedef unsigned char   target_openrisc_cc;        /*cc_t*/
> -typedef unsigned int    target_openrisc_speed;     /*speed_t*/
> -typedef unsigned int    target_openrisc_tcflag;    /*tcflag_t*/
> -
> -#define TARGET_NCCS 19
> -struct target_termios {
> -    target_openrisc_tcflag c_iflag;               /* input mode flags */
> -    target_openrisc_tcflag c_oflag;               /* output mode flags */
> -    target_openrisc_tcflag c_cflag;               /* control mode flags */
> -    target_openrisc_tcflag c_lflag;               /* local mode flags */
> -    target_openrisc_cc c_line;                    /* line discipline */
> -    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
> -};
> -
> -struct target_termios2 {
> -    target_openrisc_tcflag c_iflag;               /* input mode flags */
> -    target_openrisc_tcflag c_oflag;               /* output mode flags */
> -    target_openrisc_tcflag c_cflag;               /* control mode flags */
> -    target_openrisc_tcflag c_lflag;               /* local mode flags */
> -    target_openrisc_cc c_line;                    /* line discipline */
> -    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
> -    target_openrisc_speed c_ispeed;               /* input speed */
> -    target_openrisc_speed c_ospeed;               /* output speed */
> -};
> -
> -struct target_termios3 {
> -    target_openrisc_tcflag c_iflag;               /* input mode flags */
> -    target_openrisc_tcflag c_oflag;               /* output mode flags */
> -    target_openrisc_tcflag c_cflag;               /* control mode flags */
> -    target_openrisc_tcflag c_lflag;               /* local mode flags */
> -    target_openrisc_cc c_line;                    /* line discipline */
> -    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
> -    target_openrisc_speed c_ispeed;               /* input speed */
> -    target_openrisc_speed c_ospeed;               /* output speed */
> -};
> -
> -/* c_cc characters */
> -#define TARGET_VINTR 0
> -#define TARGET_VQUIT 1
> -#define TARGET_VERASE 2
> -#define TARGET_VKILL 3
> -#define TARGET_VEOF 4
> -#define TARGET_VTIME 5
> -#define TARGET_VMIN 6
> -#define TARGET_VSWTC 7
> -#define TARGET_VSTART 8
> -#define TARGET_VSTOP 9
> -#define TARGET_VSUSP 10
> -#define TARGET_VEOL 11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE 14
> -#define TARGET_VLNEXT 15
> -#define TARGET_VEOL2 16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define TARGET_NL0     0000000
> -#define TARGET_NL1     0000400
> -#define TARGET_CRDLY   0003000
> -#define TARGET_CR0     0000000
> -#define TARGET_CR1     0001000
> -#define TARGET_CR2     0002000
> -#define TARGET_CR3     0003000
> -#define TARGET_TABDLY  0014000
> -#define TARGET_TAB0    0000000
> -#define TARGET_TAB1    0004000
> -#define TARGET_TAB2    0010000
> -#define TARGET_TAB3    0014000
> -#define TARGET_XTABS   0014000
> -#define TARGET_BSDLY   0020000
> -#define TARGET_BS0     0000000
> -#define TARGET_BS1     0020000
> -#define TARGET_VTDLY   0040000
> -#define TARGET_VT0     0000000
> -#define TARGET_VT1     0040000
> -#define TARGET_FFDLY   0100000
> -#define TARGET_FF0     0000000
> -#define TARGET_FF1     0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD    0010017
> -#define TARGET_B0       0000000                /* hang up */
> -#define TARGET_B50      0000001
> -#define TARGET_B75      0000002
> -#define TARGET_B110     0000003
> -#define TARGET_B134     0000004
> -#define TARGET_B150     0000005
> -#define TARGET_B200     0000006
> -#define TARGET_B300     0000007
> -#define TARGET_B600     0000010
> -#define TARGET_B1200    0000011
> -#define TARGET_B1800    0000012
> -#define TARGET_B2400    0000013
> -#define TARGET_B4800    0000014
> -#define TARGET_B9600    0000015
> -#define TARGET_B19200   0000016
> -#define TARGET_B38400   0000017
> -#define TARGET_EXTA     B19200
> -#define TARGET_EXTB     B38400
> -#define TARGET_CSIZE    0000060
> -#define TARGET_CS5      0000000
> -#define TARGET_CS6      0000020
> -#define TARGET_CS7      0000040
> -#define TARGET_CS8      0000060
> -#define TARGET_CSTOPB   0000100
> -#define TARGET_CREAD    0000200
> -#define TARGET_PARENB   0000400
> -#define TARGET_PARODD   0001000
> -#define TARGET_HUPCL    0002000
> -#define TARGET_CLOCAL   0004000
> -#define TARGET_CBAUDEX  0010000
> -#define TARGET_BOTHER   0010000
> -#define TARGET_B57600   0010001
> -#define TARGET_B115200  0010002
> -#define TARGET_B230400  0010003
> -#define TARGET_B460800  0010004
> -#define TARGET_B500000  0010005
> -#define TARGET_B576000  0010006
> -#define TARGET_B921600  0010007
> -#define TARGET_B1000000 0010010
> -#define TARGET_B1152000 0010011
> -#define TARGET_B1500000 0010012
> -#define TARGET_B2000000 0010013
> -#define TARGET_B2500000 0010014
> -#define TARGET_B3000000 0010015
> -#define TARGET_B3500000 0010016
> -#define TARGET_B4000000 0010017
> -#define TARGET_CIBAUD   002003600000   /* input baud rate */
> -#define TARGET_CMSPAR   010000000000   /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS  020000000000   /* flow control */
> -
> -#define TARGET_IBSHIFT   16            /* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#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
> -#define TARGET_TCOON           1
> -#define TARGET_TCIOFF          2
> -#define TARGET_TCION           3
> -
> -/* tcflush() and TCFLSH use these */
> -#define TARGET_TCIFLUSH        0
> -#define TARGET_TCOFLUSH        1
> -#define TARGET_TCIOFLUSH       2
> -
> -/* tcsetattr uses these */
> -#define TARGET_TCSANOW         0
> -#define TARGET_TCSADRAIN       1
> -#define TARGET_TCSAFLUSH       2
> -
> -/* ioctls */
> -#define TARGET_TCGETS          0x5401
> -#define TARGET_TCSETS          0x5402
> -#define TARGET_TCSETSW         0x5403
> -#define TARGET_TCSETSF         0x5404
> -#define TARGET_TCGETA          0x5405
> -#define TARGET_TCSETA          0x5406
> -#define TARGET_TCSETAW         0x5407
> -#define TARGET_TCSETAF         0x5408
> -#define TARGET_TCSBRK          0x5409
> -#define TARGET_TCXONC          0x540A
> -#define TARGET_TCFLSH          0x540B
> -#define TARGET_TIOCEXCL        0x540C
> -#define TARGET_TIOCNXCL        0x540D
> -#define TARGET_TIOCSCTTY       0x540E
> -#define TARGET_TIOCGPGRP       0x540F
> -#define TARGET_TIOCSPGRP       0x5410
> -#define TARGET_TIOCOUTQ        0x5411
> -#define TARGET_TIOCSTI         0x5412
> -#define TARGET_TIOCGWINSZ      0x5413
> -#define TARGET_TIOCSWINSZ      0x5414
> -#define TARGET_TIOCMGET        0x5415
> -#define TARGET_TIOCMBIS        0x5416
> -#define TARGET_TIOCMBIC        0x5417
> -#define TARGET_TIOCMSET        0x5418
> -#define TARGET_TIOCGSOFTCAR    0x5419
> -#define TARGET_TIOCSSOFTCAR    0x541A
> -#define TARGET_FIONREAD        0x541B
> -#define TARGET_TIOCINQ         FIONREAD
> -#define TARGET_TIOCLINUX       0x541C
> -#define TARGET_TIOCCONS        0x541D
> -#define TARGET_TIOCGSERIAL     0x541E
> -#define TARGET_TIOCSSERIAL     0x541F
> -#define TARGET_TIOCPKT         0x5420
> -#define TARGET_FIONBIO         0x5421
> -#define TARGET_TIOCNOTTY       0x5422
> -#define TARGET_TIOCSETD        0x5423
> -#define TARGET_TIOCGETD        0x5424
> -#define TARGET_TCSBRKP         0x5425  /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCSBRK        0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK        0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID        0x5429  /* Return the session ID of FD */
> -#define TARGET_TCGETS2         TARGET_IOR('T', 0x2A, struct termios2)
> -#define TARGET_TCSETS2         TARGET_IOW('T', 0x2B, struct termios2)
> -#define TARGET_TCSETSW2        TARGET_IOW('T', 0x2C, struct termios2)
> -#define TARGET_TCSETSF2        TARGET_IOW('T', 0x2D, struct termios2)
> -#define TARGET_TIOCGRS485      0x542E
> -#ifndef TARGET_TIOCSRS485
> -#define TARGET_TIOCSRS485      0x542F
> -#endif
> -/* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCGPTN        TARGET_IOR('T', 0x30, unsigned int)
> -/* Lock/unlock Pty */
> -#define TARGET_TIOCSPTLCK      TARGET_IOW('T', 0x31, int)
> -/* Safely open the slave */
> -#define TARGET_TIOCGPTPEER     TARGET_IO('T', 0x41)
> -/* Get primary device node of /dev/console */
> -#define TARGET_TIOCGDEV        TARGET_IOR('T', 0x32, unsigned int)
> -#define TARGET_TCGETX          0x5432 /* SYS5 TCGETX compatibility */
> -#define TARGET_TCSETX          0x5433
> -#define TARGET_TCSETXF         0x5434
> -#define TARGET_TCSETXW         0x5435
> -/* pty: generate signal */
> -#define TARGET_TIOCSIG         TARGET_IOW('T', 0x36, int)
> -#define TARGET_TIOCVHANGUP     0x5437
> -
> -#define TARGET_FIONCLEX        0x5450
> -#define TARGET_FIOCLEX         0x5451
> -#define TARGET_FIOASYNC        0x5452
> -#define TARGET_TIOCSERCONFIG   0x5453
> -#define TARGET_TIOCSERGWILD    0x5454
> -#define TARGET_TIOCSERSWILD    0x5455
> -#define TARGET_TIOCGLCKTRMIOS  0x5456
> -#define TARGET_TIOCSLCKTRMIOS  0x5457
> -#define TARGET_TIOCSERGSTRUCT  0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCMIWAIT      0x545C
> -/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGICOUNT     0x545D
> -
> -/*
> - * Some arches already define TARGET_FIOQSIZE due to a historical
> - * conflict with a Hayes modem-specific ioctl value.
> - */
> -#ifndef TARGET_FIOQSIZE
> -#define TARGET_FIOQSIZE        0x5460
> -#endif
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA             0
> -#define TARGET_TIOCPKT_FLUSHREAD        1
> -#define TARGET_TIOCPKT_FLUSHWRITE       2
> -#define TARGET_TIOCPKT_STOP             4
> -#define TARGET_TIOCPKT_START            8
> -#define TARGET_TIOCPKT_NOSTOP          16
> -#define TARGET_TIOCPKT_DOSTOP          32
> -#define TARGET_TIOCPKT_IOCTL           64
> -
> -#define TARGET_TIOCSER_TEMT    0x01    /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/riscv/termbits.h b/linux-user/riscv/termbits.h
> index 5e0af0dd3f..b1d4f4fedb 100644
> --- a/linux-user/riscv/termbits.h
> +++ b/linux-user/riscv/termbits.h
> @@ -1,227 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_RISCV_TERMBITS_H
> -#define LINUX_USER_RISCV_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR    0
> -#define TARGET_VQUIT    1
> -#define TARGET_VERASE   2
> -#define TARGET_VKILL    3
> -#define TARGET_VEOF     4
> -#define TARGET_VTIME    5
> -#define TARGET_VMIN     6
> -#define TARGET_VSWTC    7
> -#define TARGET_VSTART   8
> -#define TARGET_VSTOP    9
> -#define TARGET_VSUSP    10
> -#define TARGET_VEOL     11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE  14
> -#define TARGET_VLNEXT   15
> -#define TARGET_VEOL2    16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS           0x5401
> -#define TARGET_TCSETS           0x5402
> -#define TARGET_TCSETSW          0x5403
> -#define TARGET_TCSETSF          0x5404
> -#define TARGET_TCGETA           0x5405
> -#define TARGET_TCSETA           0x5406
> -#define TARGET_TCSETAW          0x5407
> -#define TARGET_TCSETAF          0x5408
> -#define TARGET_TCSBRK           0x5409
> -#define TARGET_TCXONC           0x540A
> -#define TARGET_TCFLSH           0x540B
> -
> -#define TARGET_TIOCEXCL         0x540C
> -#define TARGET_TIOCNXCL         0x540D
> -#define TARGET_TIOCSCTTY        0x540E
> -#define TARGET_TIOCGPGRP        0x540F
> -#define TARGET_TIOCSPGRP        0x5410
> -#define TARGET_TIOCOUTQ         0x5411
> -#define TARGET_TIOCSTI          0x5412
> -#define TARGET_TIOCGWINSZ       0x5413
> -#define TARGET_TIOCSWINSZ       0x5414
> -#define TARGET_TIOCMGET         0x5415
> -#define TARGET_TIOCMBIS         0x5416
> -#define TARGET_TIOCMBIC         0x5417
> -#define TARGET_TIOCMSET         0x5418
> -#define TARGET_TIOCGSOFTCAR     0x5419
> -#define TARGET_TIOCSSOFTCAR     0x541A
> -#define TARGET_FIONREAD         0x541B
> -#define TARGET_TIOCINQ          TARGET_FIONREAD
> -#define TARGET_TIOCLINUX        0x541C
> -#define TARGET_TIOCCONS         0x541D
> -#define TARGET_TIOCGSERIAL      0x541E
> -#define TARGET_TIOCSSERIAL      0x541F
> -#define TARGET_TIOCPKT          0x5420
> -#define TARGET_FIONBIO          0x5421
> -#define TARGET_TIOCNOTTY        0x5422
> -#define TARGET_TIOCSETD         0x5423
> -#define TARGET_TIOCGETD         0x5424
> -#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> -#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> -#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> -#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> -        /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> -        /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
> -        /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX          0x5451
> -#define TARGET_FIOASYNC         0x5452
> -#define TARGET_TIOCSERCONFIG    0x5453
> -#define TARGET_TIOCSERGWILD     0x5454
> -#define TARGET_TIOCSERSWILD     0x5455
> -#define TARGET_TIOCGLCKTRMIOS   0x5456
> -#define TARGET_TIOCSLCKTRMIOS   0x5457
> -#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT      0x545C
> -        /* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT     0x545D
> -        /* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA              0
> -#define TARGET_TIOCPKT_FLUSHREAD         1
> -#define TARGET_TIOCPKT_FLUSHWRITE        2
> -#define TARGET_TIOCPKT_STOP              4
> -#define TARGET_TIOCPKT_START             8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -
> -#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/s390x/termbits.h b/linux-user/s390x/termbits.h
> index 9affa8f41a..b1d4f4fedb 100644
> --- a/linux-user/s390x/termbits.h
> +++ b/linux-user/s390x/termbits.h
> @@ -1,288 +1 @@
> -/*
> - *  include/asm-s390/termbits.h
> - *
> - *  S390 version
> - *
> - *  Derived from "include/asm-i386/termbits.h"
> - */
> -
> -#ifndef LINUX_USER_S390X_TERMBITS_H
> -#define LINUX_USER_S390X_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -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 */
> -};
> -
> -struct target_termios2 {
> -    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 */
> -    unsigned int c_ispeed;		/* input speed */
> -    unsigned int c_ospeed;		/* output speed */
> -};
> -
> -struct target_ktermios {
> -    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 */
> -    unsigned int c_ispeed;		/* input speed */
> -    unsigned int c_ospeed;		/* output speed */
> -};
> -
> -/* c_cc characters */
> -#define TARGET_VINTR 0
> -#define TARGET_VQUIT 1
> -#define TARGET_VERASE 2
> -#define TARGET_VKILL 3
> -#define TARGET_VEOF 4
> -#define TARGET_VTIME 5
> -#define TARGET_VMIN 6
> -#define TARGET_VSWTC 7
> -#define TARGET_VSTART 8
> -#define TARGET_VSTOP 9
> -#define TARGET_VSUSP 10
> -#define TARGET_VEOL 11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE 14
> -#define TARGET_VLNEXT 15
> -#define TARGET_VEOL2 16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK	0000001
> -#define TARGET_BRKINT	0000002
> -#define TARGET_IGNPAR	0000004
> -#define TARGET_PARMRK	0000010
> -#define TARGET_INPCK	0000020
> -#define TARGET_ISTRIP	0000040
> -#define TARGET_INLCR	0000100
> -#define TARGET_IGNCR	0000200
> -#define TARGET_ICRNL	0000400
> -#define TARGET_IUCLC	0001000
> -#define TARGET_IXON	0002000
> -#define TARGET_IXANY	0004000
> -#define TARGET_IXOFF	0010000
> -#define TARGET_IMAXBEL	0020000
> -#define TARGET_IUTF8	0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST	0000001
> -#define TARGET_OLCUC	0000002
> -#define TARGET_ONLCR	0000004
> -#define TARGET_OCRNL	0000010
> -#define TARGET_ONOCR	0000020
> -#define TARGET_ONLRET	0000040
> -#define TARGET_OFILL	0000100
> -#define TARGET_OFDEL	0000200
> -#define TARGET_NLDLY	0000400
> -#define TARGET_NL0	0000000
> -#define TARGET_NL1	0000400
> -#define TARGET_CRDLY	0003000
> -#define TARGET_CR0	0000000
> -#define TARGET_CR1	0001000
> -#define TARGET_CR2	0002000
> -#define TARGET_CR3	0003000
> -#define TARGET_TABDLY	0014000
> -#define TARGET_TAB0	0000000
> -#define TARGET_TAB1	0004000
> -#define TARGET_TAB2	0010000
> -#define TARGET_TAB3	0014000
> -#define TARGET_XTABS	0014000
> -#define TARGET_BSDLY	0020000
> -#define TARGET_BS0	0000000
> -#define TARGET_BS1	0020000
> -#define TARGET_VTDLY	0040000
> -#define TARGET_VT0	0000000
> -#define TARGET_VT1	0040000
> -#define TARGET_FFDLY	0100000
> -#define TARGET_FF0	0000000
> -#define TARGET_FF1	0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD	0010017
> -#define TARGET_B0	0000000		/* hang up */
> -#define TARGET_B50	0000001
> -#define TARGET_B75	0000002
> -#define TARGET_B110	0000003
> -#define TARGET_B134	0000004
> -#define TARGET_B150	0000005
> -#define TARGET_B200	0000006
> -#define TARGET_B300	0000007
> -#define TARGET_B600	0000010
> -#define TARGET_B1200	0000011
> -#define TARGET_B1800	0000012
> -#define TARGET_B2400	0000013
> -#define TARGET_B4800	0000014
> -#define TARGET_B9600	0000015
> -#define TARGET_B19200	0000016
> -#define TARGET_B38400	0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE	0000060
> -#define TARGET_CS5	0000000
> -#define TARGET_CS6	0000020
> -#define TARGET_CS7	0000040
> -#define TARGET_CS8	0000060
> -#define TARGET_CSTOPB	0000100
> -#define TARGET_CREAD	0000200
> -#define TARGET_PARENB	0000400
> -#define TARGET_PARODD	0001000
> -#define TARGET_HUPCL	0002000
> -#define TARGET_CLOCAL	0004000
> -#define TARGET_CBAUDEX 0010000
> -#define TARGET_BOTHER  0010000
> -#define TARGET_B57600  0010001
> -#define TARGET_B115200 0010002
> -#define TARGET_B230400 0010003
> -#define TARGET_B460800 0010004
> -#define TARGET_B500000 0010005
> -#define TARGET_B576000 0010006
> -#define TARGET_B921600 0010007
> -#define TARGET_B1000000 0010010
> -#define TARGET_B1152000 0010011
> -#define TARGET_B1500000 0010012
> -#define TARGET_B2000000 0010013
> -#define TARGET_B2500000 0010014
> -#define TARGET_B3000000 0010015
> -#define TARGET_B3500000 0010016
> -#define TARGET_B4000000 0010017
> -#define TARGET_CIBAUD	  002003600000	/* input baud rate */
> -#define TARGET_CMSPAR	  010000000000		/* mark or space (stick) parity */
> -#define TARGET_CRTSCTS	  020000000000		/* flow control */
> -
> -#define TARGET_IBSHIFT	  16		/* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG	0000001
> -#define TARGET_ICANON	0000002
> -#define TARGET_XCASE	0000004
> -#define TARGET_ECHO	0000010
> -#define TARGET_ECHOE	0000020
> -#define TARGET_ECHOK	0000040
> -#define TARGET_ECHONL	0000100
> -#define TARGET_NOFLSH	0000200
> -#define TARGET_TOSTOP	0000400
> -#define TARGET_ECHOCTL	0001000
> -#define TARGET_ECHOPRT	0002000
> -#define TARGET_ECHOKE	0004000
> -#define TARGET_FLUSHO	0010000
> -#define TARGET_PENDIN	0040000
> -#define TARGET_IEXTEN	0100000
> -
> -/* tcflow() and TCXONC use these */
> -#define	TARGET_TCOOFF		0
> -#define	TARGET_TCOON		1
> -#define	TARGET_TCIOFF		2
> -#define	TARGET_TCION		3
> -
> -/* tcflush() and TCFLSH use these */
> -#define	TARGET_TCIFLUSH	0
> -#define	TARGET_TCOFLUSH	1
> -#define	TARGET_TCIOFLUSH	2
> -
> -/* tcsetattr uses these */
> -#define	TARGET_TCSANOW		0
> -#define	TARGET_TCSADRAIN	1
> -#define	TARGET_TCSAFLUSH	2
> -
> -/*
> - *  include/asm-s390/ioctls.h
> - *
> - *  S390 version
> - *
> - *  Derived from "include/asm-i386/ioctls.h"
> - */
> -
> -/* 0x54 is just a magic number to make these relatively unique ('T') */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TCGETS2		_IOR('T',0x2A, struct termios2)
> -#define TARGET_TCSETS2		_IOW('T',0x2B, struct termios2)
> -#define TARGET_TCSETSW2	_IOW('T',0x2C, struct termios2)
> -#define TARGET_TCSETSF2	_IOW('T',0x2D, struct termios2)
> -#define TARGET_TIOCGPTN	_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGDEV	_IOR('T',0x32, unsigned int) /* Get real dev no below /dev/console */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_FIOQSIZE	0x545E
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/tilegx/termbits.h b/linux-user/tilegx/termbits.h
> index 966daec088..b1d4f4fedb 100644
> --- a/linux-user/tilegx/termbits.h
> +++ b/linux-user/tilegx/termbits.h
> @@ -1,275 +1 @@
> -#ifndef TILEGX_TERMBITS_H
> -#define TILEGX_TERMBITS_H
> -
> -/* From asm-generic/termbits.h, which is used by tilegx */
> -
> -#define TARGET_NCCS 19
> -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 */
> -};
> -
> -struct target_termios2 {
> -    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 */
> -    unsigned int c_ispeed;            /* input speed */
> -    unsigned int c_ospeed;            /* output speed */
> -};
> -
> -/* c_cc characters */
> -#define TARGET_VINTR     0
> -#define TARGET_VQUIT     1
> -#define TARGET_VERASE    2
> -#define TARGET_VKILL     3
> -#define TARGET_VEOF      4
> -#define TARGET_VTIME     5
> -#define TARGET_VMIN      6
> -#define TARGET_VSWTC     7
> -#define TARGET_VSTART    8
> -#define TARGET_VSTOP     9
> -#define TARGET_VSUSP     10
> -#define TARGET_VEOL      11
> -#define TARGET_VREPRINT  12
> -#define TARGET_VDISCARD  13
> -#define TARGET_VWERASE   14
> -#define TARGET_VLNEXT    15
> -#define TARGET_VEOL2     16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK    0000001
> -#define TARGET_BRKINT    0000002
> -#define TARGET_IGNPAR    0000004
> -#define TARGET_PARMRK    0000010
> -#define TARGET_INPCK     0000020
> -#define TARGET_ISTRIP    0000040
> -#define TARGET_INLCR     0000100
> -#define TARGET_IGNCR     0000200
> -#define TARGET_ICRNL     0000400
> -#define TARGET_IUCLC     0001000
> -#define TARGET_IXON      0002000
> -#define TARGET_IXANY     0004000
> -#define TARGET_IXOFF     0010000
> -#define TARGET_IMAXBEL   0020000
> -#define TARGET_IUTF8     0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST     0000001
> -#define TARGET_OLCUC     0000002
> -#define TARGET_ONLCR     0000004
> -#define TARGET_OCRNL     0000010
> -#define TARGET_ONOCR     0000020
> -#define TARGET_ONLRET    0000040
> -#define TARGET_OFILL     0000100
> -#define TARGET_OFDEL     0000200
> -#define TARGET_NLDLY     0000400
> -#define   TARGET_NL0     0000000
> -#define   TARGET_NL1     0000400
> -#define TARGET_CRDLY     0003000
> -#define   TARGET_CR0     0000000
> -#define   TARGET_CR1     0001000
> -#define   TARGET_CR2     0002000
> -#define   TARGET_CR3     0003000
> -#define TARGET_TABDLY    0014000
> -#define   TARGET_TAB0    0000000
> -#define   TARGET_TAB1    0004000
> -#define   TARGET_TAB2    0010000
> -#define   TARGET_TAB3    0014000
> -#define   TARGET_XTABS   0014000
> -#define TARGET_BSDLY     0020000
> -#define   TARGET_BS0     0000000
> -#define   TARGET_BS1     0020000
> -#define TARGET_VTDLY     0040000
> -#define   TARGET_VT0     0000000
> -#define   TARGET_VT1     0040000
> -#define TARGET_FFDLY     0100000
> -#define   TARGET_FF0     0000000
> -#define   TARGET_FF1     0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD     0010017
> -#define  TARGET_B0       0000000        /* hang up */
> -#define  TARGET_B50      0000001
> -#define  TARGET_B75      0000002
> -#define  TARGET_B110     0000003
> -#define  TARGET_B134     0000004
> -#define  TARGET_B150     0000005
> -#define  TARGET_B200     0000006
> -#define  TARGET_B300     0000007
> -#define  TARGET_B600     0000010
> -#define  TARGET_B1200    0000011
> -#define  TARGET_B1800    0000012
> -#define  TARGET_B2400    0000013
> -#define  TARGET_B4800    0000014
> -#define  TARGET_B9600    0000015
> -#define  TARGET_B19200   0000016
> -#define  TARGET_B38400   0000017
> -#define TARGET_EXTA      TARGET_B19200
> -#define TARGET_EXTB      TARGET_B38400
> -#define TARGET_CSIZE     0000060
> -#define   TARGET_CS5     0000000
> -#define   TARGET_CS6     0000020
> -#define   TARGET_CS7     0000040
> -#define   TARGET_CS8     0000060
> -#define TARGET_CSTOPB    0000100
> -#define TARGET_CREAD     0000200
> -#define TARGET_PARENB    0000400
> -#define TARGET_PARODD    0001000
> -#define TARGET_HUPCL     0002000
> -#define TARGET_CLOCAL    0004000
> -#define TARGET_CBAUDEX   0010000
> -#define    TARGET_BOTHER 0010000
> -#define    TARGET_B57600 0010001
> -#define   TARGET_B115200 0010002
> -#define   TARGET_B230400 0010003
> -#define   TARGET_B460800 0010004
> -#define   TARGET_B500000 0010005
> -#define   TARGET_B576000 0010006
> -#define   TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD    002003600000    /* input baud rate */
> -#define TARGET_CMSPAR    010000000000    /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000    /* flow control */
> -
> -#define TARGET_IBSHIFT   16        /* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG      0000001
> -#define TARGET_ICANON    0000002
> -#define TARGET_XCASE     0000004
> -#define TARGET_ECHO      0000010
> -#define TARGET_ECHOE     0000020
> -#define TARGET_ECHOK     0000040
> -#define TARGET_ECHONL    0000100
> -#define TARGET_NOFLSH    0000200
> -#define TARGET_TOSTOP    0000400
> -#define TARGET_ECHOCTL   0001000
> -#define TARGET_ECHOPRT   0002000
> -#define TARGET_ECHOKE    0004000
> -#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
> -#define TARGET_TCOON     1
> -#define TARGET_TCIOFF    2
> -#define TARGET_TCION     3
> -
> -/* tcflush() and TCFLSH use these */
> -#define TARGET_TCIFLUSH  0
> -#define TARGET_TCOFLUSH  1
> -#define TARGET_TCIOFLUSH 2
> -
> -/* tcsetattr uses these */
> -#define TARGET_TCSANOW   0
> -#define TARGET_TCSADRAIN 1
> -#define TARGET_TCSAFLUSH 2
> -
> -/* From asm-generic/ioctls.h, which is used by tilegx */
> -
> -#define TARGET_TCGETS                   0x5401
> -#define TARGET_TCSETS                   0x5402
> -#define TARGET_TCSETSW                  0x5403
> -#define TARGET_TCSETSF                  0x5404
> -#define TARGET_TCGETA                   0x5405
> -#define TARGET_TCSETA                   0x5406
> -#define TARGET_TCSETAW                  0x5407
> -#define TARGET_TCSETAF                  0x5408
> -#define TARGET_TCSBRK                   0x5409
> -#define TARGET_TCXONC                   0x540A
> -#define TARGET_TCFLSH                   0x540B
> -#define TARGET_TIOCEXCL                 0x540C
> -#define TARGET_TIOCNXCL                 0x540D
> -#define TARGET_TIOCSCTTY                0x540E
> -#define TARGET_TIOCGPGRP                0x540F
> -#define TARGET_TIOCSPGRP                0x5410
> -#define TARGET_TIOCOUTQ                 0x5411
> -#define TARGET_TIOCSTI                  0x5412
> -#define TARGET_TIOCGWINSZ               0x5413
> -#define TARGET_TIOCSWINSZ               0x5414
> -#define TARGET_TIOCMGET                 0x5415
> -#define TARGET_TIOCMBIS                 0x5416
> -#define TARGET_TIOCMBIC                 0x5417
> -#define TARGET_TIOCMSET                 0x5418
> -#define TARGET_TIOCGSOFTCAR             0x5419
> -#define TARGET_TIOCSSOFTCAR             0x541A
> -#define TARGET_FIONREAD                 0x541B
> -#define TARGET_TIOCINQ                  TARGET_FIONREAD
> -#define TARGET_TIOCLINUX                0x541C
> -#define TARGET_TIOCCONS                 0x541D
> -#define TARGET_TIOCGSERIAL              0x541E
> -#define TARGET_TIOCSSERIAL              0x541F
> -#define TARGET_TIOCPKT                  0x5420
> -#define TARGET_FIONBIO                  0x5421
> -#define TARGET_TIOCNOTTY                0x5422
> -#define TARGET_TIOCSETD                 0x5423
> -#define TARGET_TIOCGETD                 0x5424
> -#define TARGET_TCSBRKP                  0x5425
> -#define TARGET_TIOCSBRK                 0x5427
> -#define TARGET_TIOCCBRK                 0x5428
> -#define TARGET_TIOCGSID                 0x5429
> -#define TARGET_TCGETS2                  TARGET_IOR('T', 0x2A, struct termios2)
> -#define TARGET_TCSETS2                  TARGET_IOW('T', 0x2B, struct termios2)
> -#define TARGET_TCSETSW2                 TARGET_IOW('T', 0x2C, struct termios2)
> -#define TARGET_TCSETSF2                 TARGET_IOW('T', 0x2D, struct termios2)
> -#define TARGET_TIOCGRS485               0x542E
> -#define TARGET_TIOCSRS485               0x542F
> -#define TARGET_TIOCGPTN                 TARGET_IOR('T', 0x30, unsigned int)
> -#define TARGET_TIOCSPTLCK               TARGET_IOW('T', 0x31, int)
> -#define TARGET_TIOCGDEV                 TARGET_IOR('T', 0x32, unsigned int)
> -#define TARGET_TCGETX                   0x5432
> -#define TARGET_TCSETX                   0x5433
> -#define TARGET_TCSETXF                  0x5434
> -#define TARGET_TCSETXW                  0x5435
> -#define TARGET_TIOCSIG                  TARGET_IOW('T', 0x36, int)
> -#define TARGET_TIOCVHANGUP              0x5437
> -#define TARGET_TIOCGPKT                 TARGET_IOR('T', 0x38, int)
> -#define TARGET_TIOCGPTLCK               TARGET_IOR('T', 0x39, int)
> -#define TARGET_TIOCGEXCL                TARGET_IOR('T', 0x40, int)
> -#define TARGET_TIOCGPTPEER              TARGET_IO('T', 0x41)
> -
> -#define TARGET_FIONCLEX                 0x5450
> -#define TARGET_FIOCLEX                  0x5451
> -#define TARGET_FIOASYNC                 0x5452
> -#define TARGET_TIOCSERCONFIG            0x5453
> -#define TARGET_TIOCSERGWILD             0x5454
> -#define TARGET_TIOCSERSWILD             0x5455
> -#define TARGET_TIOCGLCKTRMIOS           0x5456
> -#define TARGET_TIOCSLCKTRMIOS           0x5457
> -#define TARGET_TIOCSERGSTRUCT           0x5458
> -#define TARGET_TIOCSERGETLSR            0x5459
> -#define TARGET_TIOCSERGETMULTI          0x545A
> -#define TARGET_TIOCSERSETMULTI          0x545B
> -
> -#define TARGET_TIOCMIWAIT               0x545C
> -#define TARGET_TIOCGICOUNT              0x545D
> -#define TARGET_FIOQSIZE                 0x5460
> -
> -#define TARGET_TIOCPKT_DATA             0
> -#define TARGET_TIOCPKT_FLUSHREAD        1
> -#define TARGET_TIOCPKT_FLUSHWRITE       2
> -#define TARGET_TIOCPKT_STOP             4
> -#define TARGET_TIOCPKT_START            8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -#define TARGET_TIOCPKT_IOCTL            64
> -
> -#define TARGET_TIOCSER_TEMT             0x01
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/x86_64/termbits.h b/linux-user/x86_64/termbits.h
> index c8bb5996b1..b1d4f4fedb 100644
> --- a/linux-user/x86_64/termbits.h
> +++ b/linux-user/x86_64/termbits.h
> @@ -1,253 +1 @@
> -#ifndef LINUX_USER_X86_64_TERMBITS_H
> -#define LINUX_USER_X86_64_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -typedef unsigned char	target_cc_t;
> -typedef unsigned int	target_speed_t;
> -typedef unsigned int	target_tcflag_t;
> -struct target_termios {
> -	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
> -#define TARGET_VERASE 2
> -#define TARGET_VKILL 3
> -#define TARGET_VEOF 4
> -#define TARGET_VTIME 5
> -#define TARGET_VMIN 6
> -#define TARGET_VSWTC 7
> -#define TARGET_VSTART 8
> -#define TARGET_VSTOP 9
> -#define TARGET_VSUSP 10
> -#define TARGET_VEOL 11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE 14
> -#define TARGET_VLNEXT 15
> -#define TARGET_VEOL2 16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK	0000001
> -#define TARGET_BRKINT	0000002
> -#define TARGET_IGNPAR	0000004
> -#define TARGET_PARMRK	0000010
> -#define TARGET_INPCK	0000020
> -#define TARGET_ISTRIP	0000040
> -#define TARGET_INLCR	0000100
> -#define TARGET_IGNCR	0000200
> -#define TARGET_ICRNL	0000400
> -#define TARGET_IUCLC	0001000
> -#define TARGET_IXON	0002000
> -#define TARGET_IXANY	0004000
> -#define TARGET_IXOFF	0010000
> -#define TARGET_IMAXBEL	0020000
> -#define TARGET_IUTF8	0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST	0000001
> -#define TARGET_OLCUC	0000002
> -#define TARGET_ONLCR	0000004
> -#define TARGET_OCRNL	0000010
> -#define TARGET_ONOCR	0000020
> -#define TARGET_ONLRET	0000040
> -#define TARGET_OFILL	0000100
> -#define TARGET_OFDEL	0000200
> -#define TARGET_NLDLY	0000400
> -#define   TARGET_NL0	0000000
> -#define   TARGET_NL1	0000400
> -#define TARGET_CRDLY	0003000
> -#define   TARGET_CR0	0000000
> -#define   TARGET_CR1	0001000
> -#define   TARGET_CR2	0002000
> -#define   TARGET_CR3	0003000
> -#define TARGET_TABDLY	0014000
> -#define   TARGET_TAB0	0000000
> -#define   TARGET_TAB1	0004000
> -#define   TARGET_TAB2	0010000
> -#define   TARGET_TAB3	0014000
> -#define   TARGET_XTABS	0014000
> -#define TARGET_BSDLY	0020000
> -#define   TARGET_BS0	0000000
> -#define   TARGET_BS1	0020000
> -#define TARGET_VTDLY	0040000
> -#define   TARGET_VT0	0000000
> -#define   TARGET_VT1	0040000
> -#define TARGET_FFDLY	0100000
> -#define   TARGET_FF0	0000000
> -#define   TARGET_FF1	0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD	0010017
> -#define  TARGET_B0	0000000		/* hang up */
> -#define  TARGET_B50	0000001
> -#define  TARGET_B75	0000002
> -#define  TARGET_B110	0000003
> -#define  TARGET_B134	0000004
> -#define  TARGET_B150	0000005
> -#define  TARGET_B200	0000006
> -#define  TARGET_B300	0000007
> -#define  TARGET_B600	0000010
> -#define  TARGET_B1200	0000011
> -#define  TARGET_B1800	0000012
> -#define  TARGET_B2400	0000013
> -#define  TARGET_B4800	0000014
> -#define  TARGET_B9600	0000015
> -#define  TARGET_B19200	0000016
> -#define  TARGET_B38400	0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE	0000060
> -#define   TARGET_CS5	0000000
> -#define   TARGET_CS6	0000020
> -#define   TARGET_CS7	0000040
> -#define   TARGET_CS8	0000060
> -#define TARGET_CSTOPB	0000100
> -#define TARGET_CREAD	0000200
> -#define TARGET_PARENB	0000400
> -#define TARGET_PARODD	0001000
> -#define TARGET_HUPCL	0002000
> -#define TARGET_CLOCAL	0004000
> -#define TARGET_CBAUDEX 0010000
> -#define	   TARGET_BOTHER 0010000		/* non standard rate */
> -#define    TARGET_B57600 0010001
> -#define   TARGET_B115200 0010002
> -#define   TARGET_B230400 0010003
> -#define   TARGET_B460800 0010004
> -#define   TARGET_B500000 0010005
> -#define   TARGET_B576000 0010006
> -#define   TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD	  002003600000	/* input baud rate */
> -#define TARGET_CMSPAR	  010000000000		/* mark or space (stick) parity */
> -#define TARGET_CRTSCTS	  020000000000		/* flow control */
> -
> -#define TARGET_IBSHIFT	  8		/* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG	0000001
> -#define TARGET_ICANON	0000002
> -#define TARGET_XCASE	0000004
> -#define TARGET_ECHO	0000010
> -#define TARGET_ECHOE	0000020
> -#define TARGET_ECHOK	0000040
> -#define TARGET_ECHONL	0000100
> -#define TARGET_NOFLSH	0000200
> -#define TARGET_TOSTOP	0000400
> -#define TARGET_ECHOCTL	0001000
> -#define TARGET_ECHOPRT	0002000
> -#define TARGET_ECHOKE	0004000
> -#define TARGET_FLUSHO	0010000
> -#define TARGET_PENDIN	0040000
> -#define TARGET_IEXTEN	0100000
> -
> -/* tcflow() and TCXONC use these */
> -#define	TARGET_TCOOFF		0
> -#define	TARGET_TCOON		1
> -#define	TARGET_TCIOFF		2
> -#define	TARGET_TCION		3
> -
> -/* tcflush() and TCFLSH use these */
> -#define	TARGET_TCIFLUSH	0
> -#define	TARGET_TCOFLUSH	1
> -#define	TARGET_TCIOFLUSH	2
> -
> -/* tcsetattr uses these */
> -#define	TARGET_TCSANOW		0
> -#define	TARGET_TCSADRAIN	1
> -#define	TARGET_TCSAFLUSH	2
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TCGETS2          TARGET_IOR('T',0x2A, struct termios2)
> -#define TARGET_TCSETS2          TARGET_IOW('T',0x2B, struct termios2)
> -#define TARGET_TCSETSW2         TARGET_IOW('T',0x2C, struct termios2)
> -#define TARGET_TCSETSF2         TARGET_IOW('T',0x2D, struct termios2)
> -#define TARGET_TIOCGPTN         TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -#define TARGET_FIOQSIZE       0x5460
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions
  2020-07-23 21:02 ` [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions Filip Bozuta
  2020-07-23 21:25   ` Max Filippov
@ 2020-08-07 13:13   ` Laurent Vivier
  2020-08-24 20:39   ` Laurent Vivier
  2 siblings, 0 replies; 12+ messages in thread
From: Laurent Vivier @ 2020-08-07 13:13 UTC (permalink / raw)
  To: Filip Bozuta, qemu-devel; +Cc: Riku Voipio

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>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines
  2020-07-23 21:02 ` [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines Filip Bozuta
@ 2020-08-07 13:18   ` Laurent Vivier
  2020-08-24 20:50   ` Laurent Vivier
  1 sibling, 0 replies; 12+ messages in thread
From: Laurent Vivier @ 2020-08-07 13:18 UTC (permalink / raw)
  To: Filip Bozuta, qemu-devel; +Cc: Riku Voipio

Le 23/07/2020 à 23:02, Filip Bozuta a écrit :
> Functions "print_ioctl()" and "print_syscall_ret_ioctl()" are used
> to print arguments of "ioctl()" with "-strace". These functions
> use "thunk_print()", which is defined in "thunk.c", to print the
> contents of ioctl's third arguments that are not basic types.
> 
> However, this function doesn't handle ioctls of group ioctl_tty which
> are used for terminals and serial lines. These ioctls use a type
> "struct termios" which thunk type is defined in a non standard
> way using "STRUCT_SPECIAL()". This means that this type is not decoded
> regularly using "thunk_convert()" and uses special converting functions
> "target_to_host_termios()" and "host_to_target_termios()", which are defined
> in "syscall.c" to decode it's values.
> 
> For simillar reasons, this type is also not printed regularly using
> "thunk_print()". That is the reason why a separate printing function
> "print_termios()" is defined in file "strace.c". This function decodes
> and prints flag values of the "termios" structure.
> 
> Implementation notes:
> 
>     Function "print_termios()" was implemented in "strace.c" using
>     an existing function "print_flags()" to print flag values of
>     "struct termios" fields. Also, recently implemented function
>     "print_enums()" was also used to print enumareted values which
>     are contained in the fields of 'struct termios'.
> 
>     These flag values were defined using an existing macro "FLAG_TARGET()"
>     that generates aproppriate target flag values and string representations
>     of these flags. Also, the recently defined macro "ENUM_TARGET()" was
>     used to generate aproppriate enumarated values and their respective
>     string representations.
> 
>     Function "print_termios()" was declared in "qemu.h" so that it can
>     be accessed in "syscall.c". Type "StructEntry" defined in
>     "exec/user/thunk.h" contains information that is used to decode
>     structure values. Field "void print(void *arg)" was added in this
>     structure as a special print function. Also, function "thunk_print()"
>     was changed a little so that it uses this special print function
>     in case it is defined. This printing function was instantiated with
>     the defined "print_termios()" in "syscall.c" in "struct_termios_def".
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  include/exec/user/thunk.h |   1 +
>  linux-user/qemu.h         |   1 +
>  linux-user/strace.c       | 195 ++++++++++++++++++++++++++++++++++++++
>  linux-user/syscall.c      |   1 +
>  thunk.c                   |  23 +++--
>  5 files changed, 212 insertions(+), 9 deletions(-)
> 
> diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
> index 7992475c9f..a5bbb2c733 100644
> --- a/include/exec/user/thunk.h
> +++ b/include/exec/user/thunk.h
> @@ -55,6 +55,7 @@ typedef struct {
>      int *field_offsets[2];
>      /* special handling */
>      void (*convert[2])(void *dst, const void *src);
> +    void (*print)(void *arg);
>      int size[2];
>      int align[2];
>      const char *name;
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index f431805e57..a69a0bd347 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -706,6 +706,7 @@ static inline uint64_t target_offset64(uint64_t word0, uint64_t word1)
>  }
>  #endif /* TARGET_ABI_BITS != 32 */
>  
> +void print_termios(void *arg);
>  
>  /* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */
>  #ifdef TARGET_ARM
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 3f16bb2c53..b9ba39ce6e 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -1284,6 +1284,140 @@ UNUSED static struct flags falloc_flags[] = {
>  #endif
>  };
>  
> +UNUSED static struct flags termios_iflags[] = {
> +    FLAG_TARGET(IGNBRK),
> +    FLAG_TARGET(BRKINT),
> +    FLAG_TARGET(IGNPAR),
> +    FLAG_TARGET(PARMRK),
> +    FLAG_TARGET(INPCK),
> +    FLAG_TARGET(ISTRIP),
> +    FLAG_TARGET(INLCR),
> +    FLAG_TARGET(IGNCR),
> +    FLAG_TARGET(ICRNL),
> +    FLAG_TARGET(IUCLC),
> +    FLAG_TARGET(IXON),
> +    FLAG_TARGET(IXANY),
> +    FLAG_TARGET(IXOFF),
> +    FLAG_TARGET(IMAXBEL),
> +    FLAG_TARGET(IUTF8),
> +    FLAG_END,
> +};
> +
> +UNUSED static struct flags termios_oflags[] = {
> +    FLAG_TARGET(OPOST),
> +    FLAG_TARGET(OLCUC),
> +    FLAG_TARGET(ONLCR),
> +    FLAG_TARGET(OCRNL),
> +    FLAG_TARGET(ONOCR),
> +    FLAG_TARGET(ONLRET),
> +    FLAG_TARGET(OFILL),
> +    FLAG_TARGET(OFDEL),
> +    FLAG_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_NLDLY[] = {
> +    ENUM_TARGET(NL0),
> +    ENUM_TARGET(NL1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_CRDLY[] = {
> +    ENUM_TARGET(CR0),
> +    ENUM_TARGET(CR1),
> +    ENUM_TARGET(CR2),
> +    ENUM_TARGET(CR3),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_TABDLY[] = {
> +    ENUM_TARGET(TAB0),
> +    ENUM_TARGET(TAB1),
> +    ENUM_TARGET(TAB2),
> +    ENUM_TARGET(TAB3),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_VTDLY[] = {
> +    ENUM_TARGET(VT0),
> +    ENUM_TARGET(VT1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_FFDLY[] = {
> +    ENUM_TARGET(FF0),
> +    ENUM_TARGET(FF1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_BSDLY[] = {
> +    ENUM_TARGET(BS0),
> +    ENUM_TARGET(BS1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_cflags_CBAUD[] = {
> +    ENUM_TARGET(B0),
> +    ENUM_TARGET(B50),
> +    ENUM_TARGET(B75),
> +    ENUM_TARGET(B110),
> +    ENUM_TARGET(B134),
> +    ENUM_TARGET(B150),
> +    ENUM_TARGET(B200),
> +    ENUM_TARGET(B300),
> +    ENUM_TARGET(B600),
> +    ENUM_TARGET(B1200),
> +    ENUM_TARGET(B1800),
> +    ENUM_TARGET(B2400),
> +    ENUM_TARGET(B4800),
> +    ENUM_TARGET(B9600),
> +    ENUM_TARGET(B19200),
> +    ENUM_TARGET(B38400),
> +    ENUM_TARGET(B57600),
> +    ENUM_TARGET(B115200),
> +    ENUM_TARGET(B230400),
> +    ENUM_TARGET(B460800),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_cflags_CSIZE[] = {
> +    ENUM_TARGET(CS5),
> +    ENUM_TARGET(CS6),
> +    ENUM_TARGET(CS7),
> +    ENUM_TARGET(CS8),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct flags termios_cflags[] = {
> +    FLAG_TARGET(CSTOPB),
> +    FLAG_TARGET(CREAD),
> +    FLAG_TARGET(PARENB),
> +    FLAG_TARGET(PARODD),
> +    FLAG_TARGET(HUPCL),
> +    FLAG_TARGET(CLOCAL),
> +    FLAG_TARGET(CRTSCTS),
> +    FLAG_END,
> +};
> +
> +UNUSED static struct flags termios_lflags[] = {
> +    FLAG_TARGET(ISIG),
> +    FLAG_TARGET(ICANON),
> +    FLAG_TARGET(XCASE),
> +    FLAG_TARGET(ECHO),
> +    FLAG_TARGET(ECHOE),
> +    FLAG_TARGET(ECHOK),
> +    FLAG_TARGET(ECHONL),
> +    FLAG_TARGET(NOFLSH),
> +    FLAG_TARGET(TOSTOP),
> +    FLAG_TARGET(ECHOCTL),
> +    FLAG_TARGET(ECHOPRT),
> +    FLAG_TARGET(ECHOKE),
> +    FLAG_TARGET(FLUSHO),
> +    FLAG_TARGET(PENDIN),
> +    FLAG_TARGET(IEXTEN),
> +    FLAG_TARGET(EXTPROC),
> +    FLAG_END,
> +};
> +
>  UNUSED static struct flags mlockall_flags[] = {
>      FLAG_TARGET(MCL_CURRENT),
>      FLAG_TARGET(MCL_FUTURE),
> @@ -1579,6 +1713,67 @@ print_itimerval(abi_ulong it_addr, int last)
>      }
>  }
>  
> +void
> +print_termios(void *arg)
> +{
> +    const struct target_termios *target = arg;
> +
> +    target_tcflag_t iflags = tswap32(target->c_iflag);
> +    target_tcflag_t oflags = tswap32(target->c_oflag);
> +    target_tcflag_t cflags = tswap32(target->c_cflag);
> +    target_tcflag_t lflags = tswap32(target->c_lflag);
> +
> +    qemu_log("{");
> +
> +    qemu_log("c_iflag = ");
> +    print_flags(termios_iflags, iflags, 0);
> +
> +    qemu_log("c_oflag = ");
> +    target_tcflag_t oflags_clean =  oflags & ~(TARGET_NLDLY | TARGET_CRDLY |
> +                                               TARGET_TABDLY | TARGET_BSDLY |
> +                                               TARGET_VTDLY | TARGET_FFDLY);
> +    print_flags(termios_oflags, oflags_clean, 0);
> +    if (oflags & TARGET_NLDLY) {
> +        print_enums(termios_oflags_NLDLY, oflags & TARGET_NLDLY, 0);
> +    }
> +    if (oflags & TARGET_CRDLY) {
> +        print_enums(termios_oflags_CRDLY, oflags & TARGET_CRDLY, 0);
> +    }
> +    if (oflags & TARGET_TABDLY) {
> +        print_enums(termios_oflags_TABDLY, oflags & TARGET_TABDLY, 0);
> +    }
> +    if (oflags & TARGET_BSDLY) {
> +        print_enums(termios_oflags_BSDLY, oflags & TARGET_BSDLY, 0);
> +    }
> +    if (oflags & TARGET_VTDLY) {
> +        print_enums(termios_oflags_VTDLY, oflags & TARGET_VTDLY, 0);
> +    }
> +    if (oflags & TARGET_FFDLY) {
> +        print_enums(termios_oflags_FFDLY, oflags & TARGET_FFDLY, 0);
> +    }
> +
> +    qemu_log("c_cflag = ");
> +    if (cflags & TARGET_CBAUD) {
> +        print_enums(termios_cflags_CBAUD, cflags & TARGET_CBAUD, 0);
> +    }
> +    if (cflags & TARGET_CSIZE) {
> +        print_enums(termios_cflags_CSIZE, cflags & TARGET_CSIZE, 0);
> +    }
> +    target_tcflag_t cflags_clean = cflags & ~(TARGET_CBAUD | TARGET_CSIZE);
> +    print_flags(termios_cflags, cflags_clean, 0);
> +
> +    qemu_log("c_lflag = ");
> +    print_flags(termios_lflags, lflags, 0);
> +
> +    qemu_log("c_cc = ");
> +    qemu_log("\"%s\",", target->c_cc);
> +
> +    qemu_log("c_line = ");
> +    print_raw_param("\'%c\'", target->c_line, 1);
> +
> +    qemu_log("}");
> +}
> +
>  #undef UNUSED
>  
>  #ifdef TARGET_NR_accept
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index e815f14bac..6dc230cd0b 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5669,6 +5669,7 @@ static const StructEntry struct_termios_def = {
>      .convert = { host_to_target_termios, target_to_host_termios },
>      .size = { sizeof(struct target_termios), sizeof(struct host_termios) },
>      .align = { __alignof__(struct target_termios), __alignof__(struct host_termios) },
> +    .print = print_termios,
>  };
>  
>  static bitmask_transtbl mmap_flags_tbl[] = {
> diff --git a/thunk.c b/thunk.c
> index c5d9719747..0718325d86 100644
> --- a/thunk.c
> +++ b/thunk.c
> @@ -404,19 +404,24 @@ const argtype *thunk_print(void *arg, const argtype *type_ptr)
>              const int *arg_offsets;
>  
>              se = struct_entries + *type_ptr++;
> -            a = arg;
>  
> -            field_types = se->field_types;
> -            arg_offsets = se->field_offsets[0];
> +            if (se->print != NULL) {
> +                se->print(arg);
> +            } else {
> +                a = arg;
>  
> -            qemu_log("{");
> -            for (i = 0; i < se->nb_fields; i++) {
> -                if (i > 0) {
> -                    qemu_log(",");
> +                field_types = se->field_types;
> +                arg_offsets = se->field_offsets[0];
> +
> +                qemu_log("{");
> +                for (i = 0; i < se->nb_fields; i++) {
> +                    if (i > 0) {
> +                        qemu_log(",");
> +                    }
> +                    field_types = thunk_print(a + arg_offsets[i], field_types);
>                  }
> -                field_types = thunk_print(a + arg_offsets[i], field_types);
> +                qemu_log("}");
>              }
> -            qemu_log("}");
>          }
>          break;
>      default:
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs
  2020-07-23 21:02 ` [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs Filip Bozuta
  2020-08-07 13:10   ` Laurent Vivier
@ 2020-08-24 20:38   ` Laurent Vivier
  1 sibling, 0 replies; 12+ messages in thread
From: Laurent Vivier @ 2020-08-24 20:38 UTC (permalink / raw)
  To: Filip Bozuta, qemu-devel; +Cc: Riku Voipio

Le 23/07/2020 à 23:02, Filip Bozuta a écrit :
> This patch introduces a generic 'termbits.h' file for following
> archs: 'aarch64', 'arm', 'i386, 'm68k', 'microblaze', 'nios2',
> 'openrisc', 'riscv', 's390x', 'x86_64'.
> 
> Since all of these archs have the same termios flag values and
> same ioctl_tty numbers, there is no need for a separate 'termbits.h'
> file for each one of them. For that reason one generic 'termbits.h'
> file was added for all of them and an '#include' directive was
> added for this generic file in every arch 'termbits.h' file.
> 
> Also, some of the flag values that were missing were added in this
> generic file so that it matches the generic 'termibts.h' and 'ioctls.h'
> files from the kernel: 'asm-generic/termbits.h' and 'asm-generic/ioctls.h'.
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  linux-user/aarch64/termbits.h    | 228 +---------------------
>  linux-user/arm/termbits.h        | 223 +---------------------
>  linux-user/generic/termbits.h    | 318 +++++++++++++++++++++++++++++++
>  linux-user/i386/termbits.h       | 233 +---------------------
>  linux-user/m68k/termbits.h       | 234 +----------------------
>  linux-user/microblaze/termbits.h | 220 +--------------------
>  linux-user/nios2/termbits.h      | 228 +---------------------
>  linux-user/openrisc/termbits.h   | 302 +----------------------------
>  linux-user/riscv/termbits.h      | 228 +---------------------
>  linux-user/s390x/termbits.h      | 289 +---------------------------
>  linux-user/tilegx/termbits.h     | 276 +--------------------------
>  linux-user/x86_64/termbits.h     | 254 +-----------------------
>  12 files changed, 329 insertions(+), 2704 deletions(-)
>  create mode 100644 linux-user/generic/termbits.h
> 
> diff --git a/linux-user/aarch64/termbits.h b/linux-user/aarch64/termbits.h
> index 0ab448d090..b1d4f4fedb 100644
> --- a/linux-user/aarch64/termbits.h
> +++ b/linux-user/aarch64/termbits.h
> @@ -1,227 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_AARCH64_TERMBITS_H
> -#define LINUX_USER_AARCH64_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR    0
> -#define TARGET_VQUIT    1
> -#define TARGET_VERASE   2
> -#define TARGET_VKILL    3
> -#define TARGET_VEOF     4
> -#define TARGET_VTIME    5
> -#define TARGET_VMIN     6
> -#define TARGET_VSWTC    7
> -#define TARGET_VSTART   8
> -#define TARGET_VSTOP    9
> -#define TARGET_VSUSP    10
> -#define TARGET_VEOL     11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE  14
> -#define TARGET_VLNEXT   15
> -#define TARGET_VEOL2    16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS           0x5401
> -#define TARGET_TCSETS           0x5402
> -#define TARGET_TCSETSW          0x5403
> -#define TARGET_TCSETSF          0x5404
> -#define TARGET_TCGETA           0x5405
> -#define TARGET_TCSETA           0x5406
> -#define TARGET_TCSETAW          0x5407
> -#define TARGET_TCSETAF          0x5408
> -#define TARGET_TCSBRK           0x5409
> -#define TARGET_TCXONC           0x540A
> -#define TARGET_TCFLSH           0x540B
> -
> -#define TARGET_TIOCEXCL         0x540C
> -#define TARGET_TIOCNXCL         0x540D
> -#define TARGET_TIOCSCTTY        0x540E
> -#define TARGET_TIOCGPGRP        0x540F
> -#define TARGET_TIOCSPGRP        0x5410
> -#define TARGET_TIOCOUTQ         0x5411
> -#define TARGET_TIOCSTI          0x5412
> -#define TARGET_TIOCGWINSZ       0x5413
> -#define TARGET_TIOCSWINSZ       0x5414
> -#define TARGET_TIOCMGET         0x5415
> -#define TARGET_TIOCMBIS         0x5416
> -#define TARGET_TIOCMBIC         0x5417
> -#define TARGET_TIOCMSET         0x5418
> -#define TARGET_TIOCGSOFTCAR     0x5419
> -#define TARGET_TIOCSSOFTCAR     0x541A
> -#define TARGET_FIONREAD         0x541B
> -#define TARGET_TIOCINQ          TARGET_FIONREAD
> -#define TARGET_TIOCLINUX        0x541C
> -#define TARGET_TIOCCONS         0x541D
> -#define TARGET_TIOCGSERIAL      0x541E
> -#define TARGET_TIOCSSERIAL      0x541F
> -#define TARGET_TIOCPKT          0x5420
> -#define TARGET_FIONBIO          0x5421
> -#define TARGET_TIOCNOTTY        0x5422
> -#define TARGET_TIOCSETD         0x5423
> -#define TARGET_TIOCGETD         0x5424
> -#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> -#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> -#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> -#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> -        /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> -        /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
> -        /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX          0x5451
> -#define TARGET_FIOASYNC         0x5452
> -#define TARGET_TIOCSERCONFIG    0x5453
> -#define TARGET_TIOCSERGWILD     0x5454
> -#define TARGET_TIOCSERSWILD     0x5455
> -#define TARGET_TIOCGLCKTRMIOS   0x5456
> -#define TARGET_TIOCSLCKTRMIOS   0x5457
> -#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT      0x545C
> -        /* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT     0x545D
> -        /* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA              0
> -#define TARGET_TIOCPKT_FLUSHREAD         1
> -#define TARGET_TIOCPKT_FLUSHWRITE        2
> -#define TARGET_TIOCPKT_STOP              4
> -#define TARGET_TIOCPKT_START             8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -
> -#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/arm/termbits.h b/linux-user/arm/termbits.h
> index e555cff105..b1d4f4fedb 100644
> --- a/linux-user/arm/termbits.h
> +++ b/linux-user/arm/termbits.h
> @@ -1,222 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_ARM_TERMBITS_H
> -#define LINUX_USER_ARM_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/generic/termbits.h b/linux-user/generic/termbits.h
> new file mode 100644
> index 0000000000..6675e0d1ab
> --- /dev/null
> +++ b/linux-user/generic/termbits.h
> @@ -0,0 +1,318 @@
> +/* Derived from asm-generic/termbits.h */
> +
> +#ifndef GENERIC_TERMBITS_H
> +#define GENERIC_TERMBITS_H
> +
> +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 {
> +    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 {
> +    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 {
> +    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 */
> +#define TARGET_VINTR    0
> +#define TARGET_VQUIT    1
> +#define TARGET_VERASE   2
> +#define TARGET_VKILL    3
> +#define TARGET_VEOF     4
> +#define TARGET_VTIME    5
> +#define TARGET_VMIN     6
> +#define TARGET_VSWTC    7
> +#define TARGET_VSTART   8
> +#define TARGET_VSTOP    9
> +#define TARGET_VSUSP    10
> +#define TARGET_VEOL     11
> +#define TARGET_VREPRINT 12
> +#define TARGET_VDISCARD 13
> +#define TARGET_VWERASE  14
> +#define TARGET_VLNEXT   15
> +#define TARGET_VEOL2    16
> +
> +/* c_iflag bits */
> +#define TARGET_IGNBRK   0000001
> +#define TARGET_BRKINT   0000002
> +#define TARGET_IGNPAR   0000004
> +#define TARGET_PARMRK   0000010
> +#define TARGET_INPCK    0000020
> +#define TARGET_ISTRIP   0000040
> +#define TARGET_INLCR    0000100
> +#define TARGET_IGNCR    0000200
> +#define TARGET_ICRNL    0000400
> +#define TARGET_IUCLC    0001000
> +#define TARGET_IXON     0002000
> +#define TARGET_IXANY    0004000
> +#define TARGET_IXOFF    0010000
> +#define TARGET_IMAXBEL  0020000
> +#define TARGET_IUTF8    0040000
> +
> +/* c_oflag bits */
> +#define TARGET_OPOST    0000001
> +#define TARGET_OLCUC    0000002
> +#define TARGET_ONLCR    0000004
> +#define TARGET_OCRNL    0000010
> +#define TARGET_ONOCR    0000020
> +#define TARGET_ONLRET   0000040
> +#define TARGET_OFILL    0000100
> +#define TARGET_OFDEL    0000200
> +#define TARGET_NLDLY    0000400
> +#define  TARGET_NL0     0000000
> +#define  TARGET_NL1     0000400
> +#define TARGET_CRDLY    0003000
> +#define  TARGET_CR0     0000000
> +#define  TARGET_CR1     0001000
> +#define  TARGET_CR2     0002000
> +#define  TARGET_CR3     0003000
> +#define TARGET_TABDLY   0014000
> +#define  TARGET_TAB0    0000000
> +#define  TARGET_TAB1    0004000
> +#define  TARGET_TAB2    0010000
> +#define  TARGET_TAB3    0014000
> +#define  TARGET_XTABS   0014000
> +#define TARGET_BSDLY    0020000
> +#define  TARGET_BS0     0000000
> +#define  TARGET_BS1     0020000
> +#define TARGET_VTDLY    0040000
> +#define  TARGET_VT0     0000000
> +#define  TARGET_VT1     0040000
> +#define TARGET_FFDLY    0100000
> +#define  TARGET_FF0     0000000
> +#define  TARGET_FF1     0100000
> +
> +/* c_cflag bit meaning */
> +#define TARGET_CBAUD      0010017
> +#define  TARGET_B0        0000000  /* hang up */
> +#define  TARGET_B50       0000001
> +#define  TARGET_B75       0000002
> +#define  TARGET_B110      0000003
> +#define  TARGET_B134      0000004
> +#define  TARGET_B150      0000005
> +#define  TARGET_B200      0000006
> +#define  TARGET_B300      0000007
> +#define  TARGET_B600      0000010
> +#define  TARGET_B1200     0000011
> +#define  TARGET_B1800     0000012
> +#define  TARGET_B2400     0000013
> +#define  TARGET_B4800     0000014
> +#define  TARGET_B9600     0000015
> +#define  TARGET_B19200    0000016
> +#define  TARGET_B38400    0000017
> +#define  TARGET_EXTA      TARGET_B19200
> +#define  TARGET_EXTB      TARGET_B38400
> +#define TARGET_CSIZE      0000060
> +#define  TARGET_CS5       0000000
> +#define  TARGET_CS6       0000020
> +#define  TARGET_CS7       0000040
> +#define  TARGET_CS8       0000060
> +#define TARGET_CSTOPB     0000100
> +#define TARGET_CREAD      0000200
> +#define TARGET_PARENB     0000400
> +#define TARGET_PARODD     0001000
> +#define TARGET_HUPCL      0002000
> +#define TARGET_CLOCAL     0004000
> +#define TARGET_CBAUDEX    0010000
> +#define  TARGET_BOTHER    0010000
> +#define  TARGET_B57600    0010001
> +#define  TARGET_B115200   0010002
> +#define  TARGET_B230400   0010003
> +#define  TARGET_B460800   0010004
> +#define  TARGET_B500000   0010005
> +#define  TARGET_B576000   0010006
> +#define  TARGET_B921600   0010007
> +#define  TARGET_B1000000  0010010
> +#define  TARGET_B1152000  0010011
> +#define  TARGET_B1500000  0010012
> +#define  TARGET_B2000000  0010013
> +#define  TARGET_B2500000  0010014
> +#define  TARGET_B3000000  0010015
> +#define  TARGET_B3500000  0010016
> +#define  TARGET_B4000000  0010017
> +#define TARGET_CIBAUD     002003600000  /* input baud rate (not used) */
> +#define TARGET_CMSPAR     010000000000  /* mark or space (stick) parity */
> +#define TARGET_CRTSCTS    020000000000  /* flow control */
> +
> +#define TARGET_IBSHIFT    16            /* Shift from CBAUD to CIBAUD */
> +
> +/* c_lflag bits */
> +#define TARGET_ISIG       0000001
> +#define TARGET_ICANON     0000002
> +#define TARGET_XCASE      0000004
> +#define TARGET_ECHO       0000010
> +#define TARGET_ECHOE      0000020
> +#define TARGET_ECHOK      0000040
> +#define TARGET_ECHONL     0000100
> +#define TARGET_NOFLSH     0000200
> +#define TARGET_TOSTOP     0000400
> +#define TARGET_ECHOCTL    0001000
> +#define TARGET_ECHOPRT    0002000
> +#define TARGET_ECHOKE     0004000
> +#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
> +#define TARGET_TCOON           1
> +#define TARGET_TCIOFF          2
> +#define TARGET_TCION           3
> +
> +/* tcflush() and TCFLSH use these */
> +#define TARGET_TCIFLUSH        0
> +#define TARGET_TCOFLUSH        1
> +#define TARGET_TCIOFLUSH       2
> +
> +/* tcsetattr uses these */
> +#define TARGET_TCSANOW         0
> +#define TARGET_TCSADRAIN       1
> +#define TARGET_TCSAFLUSH       2
> +
> +/* Derived from include/uapi/asm-generic/ioctls.h */
> +
> +#define TARGET_TCGETS           0x5401
> +#define TARGET_TCSETS           0x5402
> +#define TARGET_TCSETSW          0x5403
> +#define TARGET_TCSETSF          0x5404
> +#define TARGET_TCGETA           0x5405
> +#define TARGET_TCSETA           0x5406
> +#define TARGET_TCSETAW          0x5407
> +#define TARGET_TCSETAF          0x5408
> +#define TARGET_TCSBRK           0x5409
> +#define TARGET_TCXONC           0x540A
> +#define TARGET_TCFLSH           0x540B
> +
> +#define TARGET_TIOCEXCL         0x540C
> +#define TARGET_TIOCNXCL         0x540D
> +#define TARGET_TIOCSCTTY        0x540E
> +#define TARGET_TIOCGPGRP        0x540F
> +#define TARGET_TIOCSPGRP        0x5410
> +#define TARGET_TIOCOUTQ         0x5411
> +#define TARGET_TIOCSTI          0x5412
> +#define TARGET_TIOCGWINSZ       0x5413
> +#define TARGET_TIOCSWINSZ       0x5414
> +#define TARGET_TIOCMGET         0x5415
> +#define TARGET_TIOCMBIS         0x5416
> +#define TARGET_TIOCMBIC         0x5417
> +#define TARGET_TIOCMSET         0x5418
> +#define TARGET_TIOCGSOFTCAR     0x5419
> +#define TARGET_TIOCSSOFTCAR     0x541A
> +#define TARGET_FIONREAD         0x541B
> +#define TARGET_TIOCINQ          TARGET_FIONREAD
> +#define TARGET_TIOCLINUX        0x541C
> +#define TARGET_TIOCCONS         0x541D
> +#define TARGET_TIOCGSERIAL      0x541E
> +#define TARGET_TIOCSSERIAL      0x541F
> +#define TARGET_TIOCPKT          0x5420
> +#define TARGET_FIONBIO          0x5421
> +#define TARGET_TIOCNOTTY        0x5422
> +#define TARGET_TIOCSETD         0x5423
> +#define TARGET_TIOCGETD         0x5424
> +#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> +#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> +#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> +#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> +#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> +#define TARGET_TCGETS2          TARGET_IOR('T', 0x2A, struct target_termios2)
> +#define TARGET_TCSETS2          TARGET_IOW('T', 0x2B, struct target_termios2)
> +#define TARGET_TCSETSW2         TARGET_IOW('T', 0x2C, struct target_termios2)
> +#define TARGET_TCSETSF2         TARGET_IOW('T', 0x2D, struct target_termios2)
> +#define TARGET_TIOCGRS485       0x542E
> +#ifndef TARGET_TIOCSRS485
> +#define TARGET_TIOCSRS485       0x542F
> +#endif
> +/* Get Pty Number (of pty-mux device) */
> +#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> +/* Lock/unlock Pty */
> +#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> +
> +/* Get primary device node of /dev/console */
> +#define TARGET_TIOCGDEV        TARGET_IOR('T', 0x32, unsigned int)
> +#define TARGET_TCGETX          0x5432 /* SYS5 TCGETX compatibility */
> +#define TARGET_TCSETX          0x5433
> +#define TARGET_TCSETXF         0x5434
> +#define TARGET_TCSETXW         0x5435
> +/* pty: generate signal */
> +#define TARGET_TIOCSIG         TARGET_IOW('T', 0x36, int)
> +#define TARGET_TIOCVHANGUP     0x5437
> +/* Get packet mode state */
> +#define TARGET_TIOCGPKT        TARGET_IOR('T', 0x38, int)
> +/* Get Pty lock state */
> +#define TARGET_TIOCGPTLCK      TARGET_IOR('T', 0x39, int)
> +/* Get exclusive mode state */
> +#define TARGET_TIOCGEXCL       TARGET_IOR('T', 0x40, int)
> +/* Safely open the slave */
> +#define TARGET_TIOCGPTPEER     TARGET_IO('T', 0x41)
> +#define TARGET_TIOCGISO7816    TARGET_IOR('T', 0x42, struct serial_iso7816)
> +#define TARGET_TIOCSISO7816    TARGET_IOWR('T', 0x43, struct serial_iso7816)
> +
> +#define TARGET_FIONCLEX         0x5450 /* these numbers need to be adjusted */
> +#define TARGET_FIOCLEX          0x5451
> +#define TARGET_FIOASYNC         0x5452
> +#define TARGET_TIOCSERCONFIG    0x5453
> +#define TARGET_TIOCSERGWILD     0x5454
> +#define TARGET_TIOCSERSWILD     0x5455
> +#define TARGET_TIOCGLCKTRMIOS   0x5456
> +#define TARGET_TIOCSLCKTRMIOS   0x5457
> +#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> +#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> +#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> +#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> +
> +/* wait for a change on serial input line(s) */
> +#define TARGET_TIOCMIWAIT       0x545C
> +/* read serial port inline interrupt counts */
> +#define TARGET_TIOCGICOUNT      0x545D
> +#define TARGET_TIOCGHAYESESP    0x545E  /* Get Hayes ESP configuration */
> +#define TARGET_TIOCSHAYESESP    0x545F  /* Set Hayes ESP configuration */
> +
> +/*
> + * Some arches already define TARGET_FIOQSIZE due to a historical
> + * conflict with a Hayes modem-specific ioctl value.
> + */
> +#ifndef TARGET_FIOQSIZE
> +# define TARGET_FIOQSIZE        0x5460
> +#endif
> +
> +/* Used for packet mode */
> +#define TARGET_TIOCPKT_DATA              0
> +#define TARGET_TIOCPKT_FLUSHREAD         1
> +#define TARGET_TIOCPKT_FLUSHWRITE        2
> +#define TARGET_TIOCPKT_STOP              4
> +#define TARGET_TIOCPKT_START             8
> +#define TARGET_TIOCPKT_NOSTOP            16
> +#define TARGET_TIOCPKT_DOSTOP            32
> +#define TARGET_TIOCPKT_IOCTL             64
> +
> +#define TARGET_TIOCSER_TEMT     0x01 /* Transmitter physically empty */
> +
> +#endif
> diff --git a/linux-user/i386/termbits.h b/linux-user/i386/termbits.h
> index 88264bbde7..b1d4f4fedb 100644
> --- a/linux-user/i386/termbits.h
> +++ b/linux-user/i386/termbits.h
> @@ -1,232 +1 @@
> -/* from asm/termbits.h */
> -
> -#ifndef LINUX_USER_I386_TERMBITS_H
> -#define LINUX_USER_I386_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define  TARGET_B500000 0010005
> -#define  TARGET_B576000 0010006
> -#define  TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/m68k/termbits.h b/linux-user/m68k/termbits.h
> index 23840aa968..b1d4f4fedb 100644
> --- a/linux-user/m68k/termbits.h
> +++ b/linux-user/m68k/termbits.h
> @@ -1,233 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_M68K_TERMBITS_H
> -#define LINUX_USER_M68K_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define  TARGET_B500000 0010005
> -#define  TARGET_B576000 0010006
> -#define  TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/microblaze/termbits.h b/linux-user/microblaze/termbits.h
> index 17db8a4473..b1d4f4fedb 100644
> --- a/linux-user/microblaze/termbits.h
> +++ b/linux-user/microblaze/termbits.h
> @@ -1,219 +1 @@
> -/* from asm/termbits.h */
> -
> -#ifndef LINUX_USER_MICROBLAZE_TERMBITS_H
> -#define LINUX_USER_MICROBLAZE_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CRTSCTS   020000000000          /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR	0
> -#define TARGET_VQUIT	1
> -#define TARGET_VERASE	2
> -#define TARGET_VKILL	3
> -#define TARGET_VEOF	4
> -#define TARGET_VTIME	5
> -#define TARGET_VMIN	6
> -#define TARGET_VSWTC	7
> -#define TARGET_VSTART	8
> -#define TARGET_VSTOP	9
> -#define TARGET_VSUSP	10
> -#define TARGET_VEOL	11
> -#define TARGET_VREPRINT	12
> -#define TARGET_VDISCARD	13
> -#define TARGET_VWERASE	14
> -#define TARGET_VLNEXT	15
> -#define TARGET_VEOL2	16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		TARGET_FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT	0x5426  /* For debugging only */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN	TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/nios2/termbits.h b/linux-user/nios2/termbits.h
> index 425a2fe6ef..b1d4f4fedb 100644
> --- a/linux-user/nios2/termbits.h
> +++ b/linux-user/nios2/termbits.h
> @@ -1,227 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_NIOS2_TERMBITS_H
> -#define LINUX_USER_NIOS2_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR    0
> -#define TARGET_VQUIT    1
> -#define TARGET_VERASE   2
> -#define TARGET_VKILL    3
> -#define TARGET_VEOF     4
> -#define TARGET_VTIME    5
> -#define TARGET_VMIN     6
> -#define TARGET_VSWTC    7
> -#define TARGET_VSTART   8
> -#define TARGET_VSTOP    9
> -#define TARGET_VSUSP    10
> -#define TARGET_VEOL     11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE  14
> -#define TARGET_VLNEXT   15
> -#define TARGET_VEOL2    16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS           0x5401
> -#define TARGET_TCSETS           0x5402
> -#define TARGET_TCSETSW          0x5403
> -#define TARGET_TCSETSF          0x5404
> -#define TARGET_TCGETA           0x5405
> -#define TARGET_TCSETA           0x5406
> -#define TARGET_TCSETAW          0x5407
> -#define TARGET_TCSETAF          0x5408
> -#define TARGET_TCSBRK           0x5409
> -#define TARGET_TCXONC           0x540A
> -#define TARGET_TCFLSH           0x540B
> -
> -#define TARGET_TIOCEXCL         0x540C
> -#define TARGET_TIOCNXCL         0x540D
> -#define TARGET_TIOCSCTTY        0x540E
> -#define TARGET_TIOCGPGRP        0x540F
> -#define TARGET_TIOCSPGRP        0x5410
> -#define TARGET_TIOCOUTQ         0x5411
> -#define TARGET_TIOCSTI          0x5412
> -#define TARGET_TIOCGWINSZ       0x5413
> -#define TARGET_TIOCSWINSZ       0x5414
> -#define TARGET_TIOCMGET         0x5415
> -#define TARGET_TIOCMBIS         0x5416
> -#define TARGET_TIOCMBIC         0x5417
> -#define TARGET_TIOCMSET         0x5418
> -#define TARGET_TIOCGSOFTCAR     0x5419
> -#define TARGET_TIOCSSOFTCAR     0x541A
> -#define TARGET_FIONREAD         0x541B
> -#define TARGET_TIOCINQ          TARGET_FIONREAD
> -#define TARGET_TIOCLINUX        0x541C
> -#define TARGET_TIOCCONS         0x541D
> -#define TARGET_TIOCGSERIAL      0x541E
> -#define TARGET_TIOCSSERIAL      0x541F
> -#define TARGET_TIOCPKT          0x5420
> -#define TARGET_FIONBIO          0x5421
> -#define TARGET_TIOCNOTTY        0x5422
> -#define TARGET_TIOCSETD         0x5423
> -#define TARGET_TIOCGETD         0x5424
> -#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> -#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> -#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> -#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> -        /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> -        /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
> -        /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX          0x5451
> -#define TARGET_FIOASYNC         0x5452
> -#define TARGET_TIOCSERCONFIG    0x5453
> -#define TARGET_TIOCSERGWILD     0x5454
> -#define TARGET_TIOCSERSWILD     0x5455
> -#define TARGET_TIOCGLCKTRMIOS   0x5456
> -#define TARGET_TIOCSLCKTRMIOS   0x5457
> -#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT      0x545C
> -        /* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT     0x545D
> -        /* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA              0
> -#define TARGET_TIOCPKT_FLUSHREAD         1
> -#define TARGET_TIOCPKT_FLUSHWRITE        2
> -#define TARGET_TIOCPKT_STOP              4
> -#define TARGET_TIOCPKT_START             8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -
> -#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/openrisc/termbits.h b/linux-user/openrisc/termbits.h
> index 7a635ffbc6..b1d4f4fedb 100644
> --- a/linux-user/openrisc/termbits.h
> +++ b/linux-user/openrisc/termbits.h
> @@ -1,301 +1 @@
> -#ifndef LINUX_USER_OPENRISC_TERMBITS_H
> -#define LINUX_USER_OPENRISC_TERMBITS_H
> -
> -typedef unsigned char   target_openrisc_cc;        /*cc_t*/
> -typedef unsigned int    target_openrisc_speed;     /*speed_t*/
> -typedef unsigned int    target_openrisc_tcflag;    /*tcflag_t*/
> -
> -#define TARGET_NCCS 19
> -struct target_termios {
> -    target_openrisc_tcflag c_iflag;               /* input mode flags */
> -    target_openrisc_tcflag c_oflag;               /* output mode flags */
> -    target_openrisc_tcflag c_cflag;               /* control mode flags */
> -    target_openrisc_tcflag c_lflag;               /* local mode flags */
> -    target_openrisc_cc c_line;                    /* line discipline */
> -    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
> -};
> -
> -struct target_termios2 {
> -    target_openrisc_tcflag c_iflag;               /* input mode flags */
> -    target_openrisc_tcflag c_oflag;               /* output mode flags */
> -    target_openrisc_tcflag c_cflag;               /* control mode flags */
> -    target_openrisc_tcflag c_lflag;               /* local mode flags */
> -    target_openrisc_cc c_line;                    /* line discipline */
> -    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
> -    target_openrisc_speed c_ispeed;               /* input speed */
> -    target_openrisc_speed c_ospeed;               /* output speed */
> -};
> -
> -struct target_termios3 {
> -    target_openrisc_tcflag c_iflag;               /* input mode flags */
> -    target_openrisc_tcflag c_oflag;               /* output mode flags */
> -    target_openrisc_tcflag c_cflag;               /* control mode flags */
> -    target_openrisc_tcflag c_lflag;               /* local mode flags */
> -    target_openrisc_cc c_line;                    /* line discipline */
> -    target_openrisc_cc c_cc[TARGET_NCCS];         /* control characters */
> -    target_openrisc_speed c_ispeed;               /* input speed */
> -    target_openrisc_speed c_ospeed;               /* output speed */
> -};
> -
> -/* c_cc characters */
> -#define TARGET_VINTR 0
> -#define TARGET_VQUIT 1
> -#define TARGET_VERASE 2
> -#define TARGET_VKILL 3
> -#define TARGET_VEOF 4
> -#define TARGET_VTIME 5
> -#define TARGET_VMIN 6
> -#define TARGET_VSWTC 7
> -#define TARGET_VSTART 8
> -#define TARGET_VSTOP 9
> -#define TARGET_VSUSP 10
> -#define TARGET_VEOL 11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE 14
> -#define TARGET_VLNEXT 15
> -#define TARGET_VEOL2 16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define TARGET_NL0     0000000
> -#define TARGET_NL1     0000400
> -#define TARGET_CRDLY   0003000
> -#define TARGET_CR0     0000000
> -#define TARGET_CR1     0001000
> -#define TARGET_CR2     0002000
> -#define TARGET_CR3     0003000
> -#define TARGET_TABDLY  0014000
> -#define TARGET_TAB0    0000000
> -#define TARGET_TAB1    0004000
> -#define TARGET_TAB2    0010000
> -#define TARGET_TAB3    0014000
> -#define TARGET_XTABS   0014000
> -#define TARGET_BSDLY   0020000
> -#define TARGET_BS0     0000000
> -#define TARGET_BS1     0020000
> -#define TARGET_VTDLY   0040000
> -#define TARGET_VT0     0000000
> -#define TARGET_VT1     0040000
> -#define TARGET_FFDLY   0100000
> -#define TARGET_FF0     0000000
> -#define TARGET_FF1     0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD    0010017
> -#define TARGET_B0       0000000                /* hang up */
> -#define TARGET_B50      0000001
> -#define TARGET_B75      0000002
> -#define TARGET_B110     0000003
> -#define TARGET_B134     0000004
> -#define TARGET_B150     0000005
> -#define TARGET_B200     0000006
> -#define TARGET_B300     0000007
> -#define TARGET_B600     0000010
> -#define TARGET_B1200    0000011
> -#define TARGET_B1800    0000012
> -#define TARGET_B2400    0000013
> -#define TARGET_B4800    0000014
> -#define TARGET_B9600    0000015
> -#define TARGET_B19200   0000016
> -#define TARGET_B38400   0000017
> -#define TARGET_EXTA     B19200
> -#define TARGET_EXTB     B38400
> -#define TARGET_CSIZE    0000060
> -#define TARGET_CS5      0000000
> -#define TARGET_CS6      0000020
> -#define TARGET_CS7      0000040
> -#define TARGET_CS8      0000060
> -#define TARGET_CSTOPB   0000100
> -#define TARGET_CREAD    0000200
> -#define TARGET_PARENB   0000400
> -#define TARGET_PARODD   0001000
> -#define TARGET_HUPCL    0002000
> -#define TARGET_CLOCAL   0004000
> -#define TARGET_CBAUDEX  0010000
> -#define TARGET_BOTHER   0010000
> -#define TARGET_B57600   0010001
> -#define TARGET_B115200  0010002
> -#define TARGET_B230400  0010003
> -#define TARGET_B460800  0010004
> -#define TARGET_B500000  0010005
> -#define TARGET_B576000  0010006
> -#define TARGET_B921600  0010007
> -#define TARGET_B1000000 0010010
> -#define TARGET_B1152000 0010011
> -#define TARGET_B1500000 0010012
> -#define TARGET_B2000000 0010013
> -#define TARGET_B2500000 0010014
> -#define TARGET_B3000000 0010015
> -#define TARGET_B3500000 0010016
> -#define TARGET_B4000000 0010017
> -#define TARGET_CIBAUD   002003600000   /* input baud rate */
> -#define TARGET_CMSPAR   010000000000   /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS  020000000000   /* flow control */
> -
> -#define TARGET_IBSHIFT   16            /* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#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
> -#define TARGET_TCOON           1
> -#define TARGET_TCIOFF          2
> -#define TARGET_TCION           3
> -
> -/* tcflush() and TCFLSH use these */
> -#define TARGET_TCIFLUSH        0
> -#define TARGET_TCOFLUSH        1
> -#define TARGET_TCIOFLUSH       2
> -
> -/* tcsetattr uses these */
> -#define TARGET_TCSANOW         0
> -#define TARGET_TCSADRAIN       1
> -#define TARGET_TCSAFLUSH       2
> -
> -/* ioctls */
> -#define TARGET_TCGETS          0x5401
> -#define TARGET_TCSETS          0x5402
> -#define TARGET_TCSETSW         0x5403
> -#define TARGET_TCSETSF         0x5404
> -#define TARGET_TCGETA          0x5405
> -#define TARGET_TCSETA          0x5406
> -#define TARGET_TCSETAW         0x5407
> -#define TARGET_TCSETAF         0x5408
> -#define TARGET_TCSBRK          0x5409
> -#define TARGET_TCXONC          0x540A
> -#define TARGET_TCFLSH          0x540B
> -#define TARGET_TIOCEXCL        0x540C
> -#define TARGET_TIOCNXCL        0x540D
> -#define TARGET_TIOCSCTTY       0x540E
> -#define TARGET_TIOCGPGRP       0x540F
> -#define TARGET_TIOCSPGRP       0x5410
> -#define TARGET_TIOCOUTQ        0x5411
> -#define TARGET_TIOCSTI         0x5412
> -#define TARGET_TIOCGWINSZ      0x5413
> -#define TARGET_TIOCSWINSZ      0x5414
> -#define TARGET_TIOCMGET        0x5415
> -#define TARGET_TIOCMBIS        0x5416
> -#define TARGET_TIOCMBIC        0x5417
> -#define TARGET_TIOCMSET        0x5418
> -#define TARGET_TIOCGSOFTCAR    0x5419
> -#define TARGET_TIOCSSOFTCAR    0x541A
> -#define TARGET_FIONREAD        0x541B
> -#define TARGET_TIOCINQ         FIONREAD
> -#define TARGET_TIOCLINUX       0x541C
> -#define TARGET_TIOCCONS        0x541D
> -#define TARGET_TIOCGSERIAL     0x541E
> -#define TARGET_TIOCSSERIAL     0x541F
> -#define TARGET_TIOCPKT         0x5420
> -#define TARGET_FIONBIO         0x5421
> -#define TARGET_TIOCNOTTY       0x5422
> -#define TARGET_TIOCSETD        0x5423
> -#define TARGET_TIOCGETD        0x5424
> -#define TARGET_TCSBRKP         0x5425  /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCSBRK        0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK        0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID        0x5429  /* Return the session ID of FD */
> -#define TARGET_TCGETS2         TARGET_IOR('T', 0x2A, struct termios2)
> -#define TARGET_TCSETS2         TARGET_IOW('T', 0x2B, struct termios2)
> -#define TARGET_TCSETSW2        TARGET_IOW('T', 0x2C, struct termios2)
> -#define TARGET_TCSETSF2        TARGET_IOW('T', 0x2D, struct termios2)
> -#define TARGET_TIOCGRS485      0x542E
> -#ifndef TARGET_TIOCSRS485
> -#define TARGET_TIOCSRS485      0x542F
> -#endif
> -/* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCGPTN        TARGET_IOR('T', 0x30, unsigned int)
> -/* Lock/unlock Pty */
> -#define TARGET_TIOCSPTLCK      TARGET_IOW('T', 0x31, int)
> -/* Safely open the slave */
> -#define TARGET_TIOCGPTPEER     TARGET_IO('T', 0x41)
> -/* Get primary device node of /dev/console */
> -#define TARGET_TIOCGDEV        TARGET_IOR('T', 0x32, unsigned int)
> -#define TARGET_TCGETX          0x5432 /* SYS5 TCGETX compatibility */
> -#define TARGET_TCSETX          0x5433
> -#define TARGET_TCSETXF         0x5434
> -#define TARGET_TCSETXW         0x5435
> -/* pty: generate signal */
> -#define TARGET_TIOCSIG         TARGET_IOW('T', 0x36, int)
> -#define TARGET_TIOCVHANGUP     0x5437
> -
> -#define TARGET_FIONCLEX        0x5450
> -#define TARGET_FIOCLEX         0x5451
> -#define TARGET_FIOASYNC        0x5452
> -#define TARGET_TIOCSERCONFIG   0x5453
> -#define TARGET_TIOCSERGWILD    0x5454
> -#define TARGET_TIOCSERSWILD    0x5455
> -#define TARGET_TIOCGLCKTRMIOS  0x5456
> -#define TARGET_TIOCSLCKTRMIOS  0x5457
> -#define TARGET_TIOCSERGSTRUCT  0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCMIWAIT      0x545C
> -/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGICOUNT     0x545D
> -
> -/*
> - * Some arches already define TARGET_FIOQSIZE due to a historical
> - * conflict with a Hayes modem-specific ioctl value.
> - */
> -#ifndef TARGET_FIOQSIZE
> -#define TARGET_FIOQSIZE        0x5460
> -#endif
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA             0
> -#define TARGET_TIOCPKT_FLUSHREAD        1
> -#define TARGET_TIOCPKT_FLUSHWRITE       2
> -#define TARGET_TIOCPKT_STOP             4
> -#define TARGET_TIOCPKT_START            8
> -#define TARGET_TIOCPKT_NOSTOP          16
> -#define TARGET_TIOCPKT_DOSTOP          32
> -#define TARGET_TIOCPKT_IOCTL           64
> -
> -#define TARGET_TIOCSER_TEMT    0x01    /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/riscv/termbits.h b/linux-user/riscv/termbits.h
> index 5e0af0dd3f..b1d4f4fedb 100644
> --- a/linux-user/riscv/termbits.h
> +++ b/linux-user/riscv/termbits.h
> @@ -1,227 +1 @@
> -/* from asm/termbits.h */
> -/* NOTE: exactly the same as i386 */
> -
> -#ifndef LINUX_USER_RISCV_TERMBITS_H
> -#define LINUX_USER_RISCV_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -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 */
> -};
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK  0000001
> -#define TARGET_BRKINT  0000002
> -#define TARGET_IGNPAR  0000004
> -#define TARGET_PARMRK  0000010
> -#define TARGET_INPCK   0000020
> -#define TARGET_ISTRIP  0000040
> -#define TARGET_INLCR   0000100
> -#define TARGET_IGNCR   0000200
> -#define TARGET_ICRNL   0000400
> -#define TARGET_IUCLC   0001000
> -#define TARGET_IXON    0002000
> -#define TARGET_IXANY   0004000
> -#define TARGET_IXOFF   0010000
> -#define TARGET_IMAXBEL 0020000
> -#define TARGET_IUTF8   0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST   0000001
> -#define TARGET_OLCUC   0000002
> -#define TARGET_ONLCR   0000004
> -#define TARGET_OCRNL   0000010
> -#define TARGET_ONOCR   0000020
> -#define TARGET_ONLRET  0000040
> -#define TARGET_OFILL   0000100
> -#define TARGET_OFDEL   0000200
> -#define TARGET_NLDLY   0000400
> -#define   TARGET_NL0   0000000
> -#define   TARGET_NL1   0000400
> -#define TARGET_CRDLY   0003000
> -#define   TARGET_CR0   0000000
> -#define   TARGET_CR1   0001000
> -#define   TARGET_CR2   0002000
> -#define   TARGET_CR3   0003000
> -#define TARGET_TABDLY  0014000
> -#define   TARGET_TAB0  0000000
> -#define   TARGET_TAB1  0004000
> -#define   TARGET_TAB2  0010000
> -#define   TARGET_TAB3  0014000
> -#define   TARGET_XTABS 0014000
> -#define TARGET_BSDLY   0020000
> -#define   TARGET_BS0   0000000
> -#define   TARGET_BS1   0020000
> -#define TARGET_VTDLY   0040000
> -#define   TARGET_VT0   0000000
> -#define   TARGET_VT1   0040000
> -#define TARGET_FFDLY   0100000
> -#define   TARGET_FF0   0000000
> -#define   TARGET_FF1   0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD   0010017
> -#define  TARGET_B0     0000000         /* hang up */
> -#define  TARGET_B50    0000001
> -#define  TARGET_B75    0000002
> -#define  TARGET_B110   0000003
> -#define  TARGET_B134   0000004
> -#define  TARGET_B150   0000005
> -#define  TARGET_B200   0000006
> -#define  TARGET_B300   0000007
> -#define  TARGET_B600   0000010
> -#define  TARGET_B1200  0000011
> -#define  TARGET_B1800  0000012
> -#define  TARGET_B2400  0000013
> -#define  TARGET_B4800  0000014
> -#define  TARGET_B9600  0000015
> -#define  TARGET_B19200 0000016
> -#define  TARGET_B38400 0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE   0000060
> -#define   TARGET_CS5   0000000
> -#define   TARGET_CS6   0000020
> -#define   TARGET_CS7   0000040
> -#define   TARGET_CS8   0000060
> -#define TARGET_CSTOPB  0000100
> -#define TARGET_CREAD   0000200
> -#define TARGET_PARENB  0000400
> -#define TARGET_PARODD  0001000
> -#define TARGET_HUPCL   0002000
> -#define TARGET_CLOCAL  0004000
> -#define TARGET_CBAUDEX 0010000
> -#define  TARGET_B57600  0010001
> -#define  TARGET_B115200 0010002
> -#define  TARGET_B230400 0010003
> -#define  TARGET_B460800 0010004
> -#define TARGET_CIBAUD    002003600000  /* input baud rate (not used) */
> -#define TARGET_CMSPAR    010000000000  /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000  /* flow control */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG    0000001
> -#define TARGET_ICANON  0000002
> -#define TARGET_XCASE   0000004
> -#define TARGET_ECHO    0000010
> -#define TARGET_ECHOE   0000020
> -#define TARGET_ECHOK   0000040
> -#define TARGET_ECHONL  0000100
> -#define TARGET_NOFLSH  0000200
> -#define TARGET_TOSTOP  0000400
> -#define TARGET_ECHOCTL 0001000
> -#define TARGET_ECHOPRT 0002000
> -#define TARGET_ECHOKE  0004000
> -#define TARGET_FLUSHO  0010000
> -#define TARGET_PENDIN  0040000
> -#define TARGET_IEXTEN  0100000
> -
> -/* c_cc character offsets */
> -#define TARGET_VINTR    0
> -#define TARGET_VQUIT    1
> -#define TARGET_VERASE   2
> -#define TARGET_VKILL    3
> -#define TARGET_VEOF     4
> -#define TARGET_VTIME    5
> -#define TARGET_VMIN     6
> -#define TARGET_VSWTC    7
> -#define TARGET_VSTART   8
> -#define TARGET_VSTOP    9
> -#define TARGET_VSUSP    10
> -#define TARGET_VEOL     11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE  14
> -#define TARGET_VLNEXT   15
> -#define TARGET_VEOL2    16
> -
> -/* ioctls */
> -
> -#define TARGET_TCGETS           0x5401
> -#define TARGET_TCSETS           0x5402
> -#define TARGET_TCSETSW          0x5403
> -#define TARGET_TCSETSF          0x5404
> -#define TARGET_TCGETA           0x5405
> -#define TARGET_TCSETA           0x5406
> -#define TARGET_TCSETAW          0x5407
> -#define TARGET_TCSETAF          0x5408
> -#define TARGET_TCSBRK           0x5409
> -#define TARGET_TCXONC           0x540A
> -#define TARGET_TCFLSH           0x540B
> -
> -#define TARGET_TIOCEXCL         0x540C
> -#define TARGET_TIOCNXCL         0x540D
> -#define TARGET_TIOCSCTTY        0x540E
> -#define TARGET_TIOCGPGRP        0x540F
> -#define TARGET_TIOCSPGRP        0x5410
> -#define TARGET_TIOCOUTQ         0x5411
> -#define TARGET_TIOCSTI          0x5412
> -#define TARGET_TIOCGWINSZ       0x5413
> -#define TARGET_TIOCSWINSZ       0x5414
> -#define TARGET_TIOCMGET         0x5415
> -#define TARGET_TIOCMBIS         0x5416
> -#define TARGET_TIOCMBIC         0x5417
> -#define TARGET_TIOCMSET         0x5418
> -#define TARGET_TIOCGSOFTCAR     0x5419
> -#define TARGET_TIOCSSOFTCAR     0x541A
> -#define TARGET_FIONREAD         0x541B
> -#define TARGET_TIOCINQ          TARGET_FIONREAD
> -#define TARGET_TIOCLINUX        0x541C
> -#define TARGET_TIOCCONS         0x541D
> -#define TARGET_TIOCGSERIAL      0x541E
> -#define TARGET_TIOCSSERIAL      0x541F
> -#define TARGET_TIOCPKT          0x5420
> -#define TARGET_FIONBIO          0x5421
> -#define TARGET_TIOCNOTTY        0x5422
> -#define TARGET_TIOCSETD         0x5423
> -#define TARGET_TIOCGETD         0x5424
> -#define TARGET_TCSBRKP          0x5425 /* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCTTYGSTRUCT   0x5426 /* For debugging only */
> -#define TARGET_TIOCSBRK         0x5427 /* BSD compatibility */
> -#define TARGET_TIOCCBRK         0x5428 /* BSD compatibility */
> -#define TARGET_TIOCGSID         0x5429 /* Return the session ID of FD */
> -#define TARGET_TIOCGPTN         TARGET_IOR('T', 0x30, unsigned int)
> -        /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T', 0x31, int)
> -        /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41)
> -        /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX         0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX          0x5451
> -#define TARGET_FIOASYNC         0x5452
> -#define TARGET_TIOCSERCONFIG    0x5453
> -#define TARGET_TIOCSERGWILD     0x5454
> -#define TARGET_TIOCSERSWILD     0x5455
> -#define TARGET_TIOCGLCKTRMIOS   0x5456
> -#define TARGET_TIOCSLCKTRMIOS   0x5457
> -#define TARGET_TIOCSERGSTRUCT   0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR    0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI  0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI  0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT      0x545C
> -        /* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT     0x545D
> -        /* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA              0
> -#define TARGET_TIOCPKT_FLUSHREAD         1
> -#define TARGET_TIOCPKT_FLUSHWRITE        2
> -#define TARGET_TIOCPKT_STOP              4
> -#define TARGET_TIOCPKT_START             8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -
> -#define TARGET_TIOCSER_TEMT    0x01 /* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/s390x/termbits.h b/linux-user/s390x/termbits.h
> index 9affa8f41a..b1d4f4fedb 100644
> --- a/linux-user/s390x/termbits.h
> +++ b/linux-user/s390x/termbits.h
> @@ -1,288 +1 @@
> -/*
> - *  include/asm-s390/termbits.h
> - *
> - *  S390 version
> - *
> - *  Derived from "include/asm-i386/termbits.h"
> - */
> -
> -#ifndef LINUX_USER_S390X_TERMBITS_H
> -#define LINUX_USER_S390X_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -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 */
> -};
> -
> -struct target_termios2 {
> -    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 */
> -    unsigned int c_ispeed;		/* input speed */
> -    unsigned int c_ospeed;		/* output speed */
> -};
> -
> -struct target_ktermios {
> -    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 */
> -    unsigned int c_ispeed;		/* input speed */
> -    unsigned int c_ospeed;		/* output speed */
> -};
> -
> -/* c_cc characters */
> -#define TARGET_VINTR 0
> -#define TARGET_VQUIT 1
> -#define TARGET_VERASE 2
> -#define TARGET_VKILL 3
> -#define TARGET_VEOF 4
> -#define TARGET_VTIME 5
> -#define TARGET_VMIN 6
> -#define TARGET_VSWTC 7
> -#define TARGET_VSTART 8
> -#define TARGET_VSTOP 9
> -#define TARGET_VSUSP 10
> -#define TARGET_VEOL 11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE 14
> -#define TARGET_VLNEXT 15
> -#define TARGET_VEOL2 16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK	0000001
> -#define TARGET_BRKINT	0000002
> -#define TARGET_IGNPAR	0000004
> -#define TARGET_PARMRK	0000010
> -#define TARGET_INPCK	0000020
> -#define TARGET_ISTRIP	0000040
> -#define TARGET_INLCR	0000100
> -#define TARGET_IGNCR	0000200
> -#define TARGET_ICRNL	0000400
> -#define TARGET_IUCLC	0001000
> -#define TARGET_IXON	0002000
> -#define TARGET_IXANY	0004000
> -#define TARGET_IXOFF	0010000
> -#define TARGET_IMAXBEL	0020000
> -#define TARGET_IUTF8	0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST	0000001
> -#define TARGET_OLCUC	0000002
> -#define TARGET_ONLCR	0000004
> -#define TARGET_OCRNL	0000010
> -#define TARGET_ONOCR	0000020
> -#define TARGET_ONLRET	0000040
> -#define TARGET_OFILL	0000100
> -#define TARGET_OFDEL	0000200
> -#define TARGET_NLDLY	0000400
> -#define TARGET_NL0	0000000
> -#define TARGET_NL1	0000400
> -#define TARGET_CRDLY	0003000
> -#define TARGET_CR0	0000000
> -#define TARGET_CR1	0001000
> -#define TARGET_CR2	0002000
> -#define TARGET_CR3	0003000
> -#define TARGET_TABDLY	0014000
> -#define TARGET_TAB0	0000000
> -#define TARGET_TAB1	0004000
> -#define TARGET_TAB2	0010000
> -#define TARGET_TAB3	0014000
> -#define TARGET_XTABS	0014000
> -#define TARGET_BSDLY	0020000
> -#define TARGET_BS0	0000000
> -#define TARGET_BS1	0020000
> -#define TARGET_VTDLY	0040000
> -#define TARGET_VT0	0000000
> -#define TARGET_VT1	0040000
> -#define TARGET_FFDLY	0100000
> -#define TARGET_FF0	0000000
> -#define TARGET_FF1	0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD	0010017
> -#define TARGET_B0	0000000		/* hang up */
> -#define TARGET_B50	0000001
> -#define TARGET_B75	0000002
> -#define TARGET_B110	0000003
> -#define TARGET_B134	0000004
> -#define TARGET_B150	0000005
> -#define TARGET_B200	0000006
> -#define TARGET_B300	0000007
> -#define TARGET_B600	0000010
> -#define TARGET_B1200	0000011
> -#define TARGET_B1800	0000012
> -#define TARGET_B2400	0000013
> -#define TARGET_B4800	0000014
> -#define TARGET_B9600	0000015
> -#define TARGET_B19200	0000016
> -#define TARGET_B38400	0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE	0000060
> -#define TARGET_CS5	0000000
> -#define TARGET_CS6	0000020
> -#define TARGET_CS7	0000040
> -#define TARGET_CS8	0000060
> -#define TARGET_CSTOPB	0000100
> -#define TARGET_CREAD	0000200
> -#define TARGET_PARENB	0000400
> -#define TARGET_PARODD	0001000
> -#define TARGET_HUPCL	0002000
> -#define TARGET_CLOCAL	0004000
> -#define TARGET_CBAUDEX 0010000
> -#define TARGET_BOTHER  0010000
> -#define TARGET_B57600  0010001
> -#define TARGET_B115200 0010002
> -#define TARGET_B230400 0010003
> -#define TARGET_B460800 0010004
> -#define TARGET_B500000 0010005
> -#define TARGET_B576000 0010006
> -#define TARGET_B921600 0010007
> -#define TARGET_B1000000 0010010
> -#define TARGET_B1152000 0010011
> -#define TARGET_B1500000 0010012
> -#define TARGET_B2000000 0010013
> -#define TARGET_B2500000 0010014
> -#define TARGET_B3000000 0010015
> -#define TARGET_B3500000 0010016
> -#define TARGET_B4000000 0010017
> -#define TARGET_CIBAUD	  002003600000	/* input baud rate */
> -#define TARGET_CMSPAR	  010000000000		/* mark or space (stick) parity */
> -#define TARGET_CRTSCTS	  020000000000		/* flow control */
> -
> -#define TARGET_IBSHIFT	  16		/* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG	0000001
> -#define TARGET_ICANON	0000002
> -#define TARGET_XCASE	0000004
> -#define TARGET_ECHO	0000010
> -#define TARGET_ECHOE	0000020
> -#define TARGET_ECHOK	0000040
> -#define TARGET_ECHONL	0000100
> -#define TARGET_NOFLSH	0000200
> -#define TARGET_TOSTOP	0000400
> -#define TARGET_ECHOCTL	0001000
> -#define TARGET_ECHOPRT	0002000
> -#define TARGET_ECHOKE	0004000
> -#define TARGET_FLUSHO	0010000
> -#define TARGET_PENDIN	0040000
> -#define TARGET_IEXTEN	0100000
> -
> -/* tcflow() and TCXONC use these */
> -#define	TARGET_TCOOFF		0
> -#define	TARGET_TCOON		1
> -#define	TARGET_TCIOFF		2
> -#define	TARGET_TCION		3
> -
> -/* tcflush() and TCFLSH use these */
> -#define	TARGET_TCIFLUSH	0
> -#define	TARGET_TCOFLUSH	1
> -#define	TARGET_TCIOFLUSH	2
> -
> -/* tcsetattr uses these */
> -#define	TARGET_TCSANOW		0
> -#define	TARGET_TCSADRAIN	1
> -#define	TARGET_TCSAFLUSH	2
> -
> -/*
> - *  include/asm-s390/ioctls.h
> - *
> - *  S390 version
> - *
> - *  Derived from "include/asm-i386/ioctls.h"
> - */
> -
> -/* 0x54 is just a magic number to make these relatively unique ('T') */
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TCGETS2		_IOR('T',0x2A, struct termios2)
> -#define TARGET_TCSETS2		_IOW('T',0x2B, struct termios2)
> -#define TARGET_TCSETSW2	_IOW('T',0x2C, struct termios2)
> -#define TARGET_TCSETSF2	_IOW('T',0x2D, struct termios2)
> -#define TARGET_TIOCGPTN	_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK	_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGDEV	_IOR('T',0x32, unsigned int) /* Get real dev no below /dev/console */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_FIOQSIZE	0x545E
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/tilegx/termbits.h b/linux-user/tilegx/termbits.h
> index 966daec088..b1d4f4fedb 100644
> --- a/linux-user/tilegx/termbits.h
> +++ b/linux-user/tilegx/termbits.h
> @@ -1,275 +1 @@
> -#ifndef TILEGX_TERMBITS_H
> -#define TILEGX_TERMBITS_H
> -
> -/* From asm-generic/termbits.h, which is used by tilegx */
> -
> -#define TARGET_NCCS 19
> -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 */
> -};
> -
> -struct target_termios2 {
> -    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 */
> -    unsigned int c_ispeed;            /* input speed */
> -    unsigned int c_ospeed;            /* output speed */
> -};
> -
> -/* c_cc characters */
> -#define TARGET_VINTR     0
> -#define TARGET_VQUIT     1
> -#define TARGET_VERASE    2
> -#define TARGET_VKILL     3
> -#define TARGET_VEOF      4
> -#define TARGET_VTIME     5
> -#define TARGET_VMIN      6
> -#define TARGET_VSWTC     7
> -#define TARGET_VSTART    8
> -#define TARGET_VSTOP     9
> -#define TARGET_VSUSP     10
> -#define TARGET_VEOL      11
> -#define TARGET_VREPRINT  12
> -#define TARGET_VDISCARD  13
> -#define TARGET_VWERASE   14
> -#define TARGET_VLNEXT    15
> -#define TARGET_VEOL2     16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK    0000001
> -#define TARGET_BRKINT    0000002
> -#define TARGET_IGNPAR    0000004
> -#define TARGET_PARMRK    0000010
> -#define TARGET_INPCK     0000020
> -#define TARGET_ISTRIP    0000040
> -#define TARGET_INLCR     0000100
> -#define TARGET_IGNCR     0000200
> -#define TARGET_ICRNL     0000400
> -#define TARGET_IUCLC     0001000
> -#define TARGET_IXON      0002000
> -#define TARGET_IXANY     0004000
> -#define TARGET_IXOFF     0010000
> -#define TARGET_IMAXBEL   0020000
> -#define TARGET_IUTF8     0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST     0000001
> -#define TARGET_OLCUC     0000002
> -#define TARGET_ONLCR     0000004
> -#define TARGET_OCRNL     0000010
> -#define TARGET_ONOCR     0000020
> -#define TARGET_ONLRET    0000040
> -#define TARGET_OFILL     0000100
> -#define TARGET_OFDEL     0000200
> -#define TARGET_NLDLY     0000400
> -#define   TARGET_NL0     0000000
> -#define   TARGET_NL1     0000400
> -#define TARGET_CRDLY     0003000
> -#define   TARGET_CR0     0000000
> -#define   TARGET_CR1     0001000
> -#define   TARGET_CR2     0002000
> -#define   TARGET_CR3     0003000
> -#define TARGET_TABDLY    0014000
> -#define   TARGET_TAB0    0000000
> -#define   TARGET_TAB1    0004000
> -#define   TARGET_TAB2    0010000
> -#define   TARGET_TAB3    0014000
> -#define   TARGET_XTABS   0014000
> -#define TARGET_BSDLY     0020000
> -#define   TARGET_BS0     0000000
> -#define   TARGET_BS1     0020000
> -#define TARGET_VTDLY     0040000
> -#define   TARGET_VT0     0000000
> -#define   TARGET_VT1     0040000
> -#define TARGET_FFDLY     0100000
> -#define   TARGET_FF0     0000000
> -#define   TARGET_FF1     0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD     0010017
> -#define  TARGET_B0       0000000        /* hang up */
> -#define  TARGET_B50      0000001
> -#define  TARGET_B75      0000002
> -#define  TARGET_B110     0000003
> -#define  TARGET_B134     0000004
> -#define  TARGET_B150     0000005
> -#define  TARGET_B200     0000006
> -#define  TARGET_B300     0000007
> -#define  TARGET_B600     0000010
> -#define  TARGET_B1200    0000011
> -#define  TARGET_B1800    0000012
> -#define  TARGET_B2400    0000013
> -#define  TARGET_B4800    0000014
> -#define  TARGET_B9600    0000015
> -#define  TARGET_B19200   0000016
> -#define  TARGET_B38400   0000017
> -#define TARGET_EXTA      TARGET_B19200
> -#define TARGET_EXTB      TARGET_B38400
> -#define TARGET_CSIZE     0000060
> -#define   TARGET_CS5     0000000
> -#define   TARGET_CS6     0000020
> -#define   TARGET_CS7     0000040
> -#define   TARGET_CS8     0000060
> -#define TARGET_CSTOPB    0000100
> -#define TARGET_CREAD     0000200
> -#define TARGET_PARENB    0000400
> -#define TARGET_PARODD    0001000
> -#define TARGET_HUPCL     0002000
> -#define TARGET_CLOCAL    0004000
> -#define TARGET_CBAUDEX   0010000
> -#define    TARGET_BOTHER 0010000
> -#define    TARGET_B57600 0010001
> -#define   TARGET_B115200 0010002
> -#define   TARGET_B230400 0010003
> -#define   TARGET_B460800 0010004
> -#define   TARGET_B500000 0010005
> -#define   TARGET_B576000 0010006
> -#define   TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD    002003600000    /* input baud rate */
> -#define TARGET_CMSPAR    010000000000    /* mark or space (stick) parity */
> -#define TARGET_CRTSCTS   020000000000    /* flow control */
> -
> -#define TARGET_IBSHIFT   16        /* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG      0000001
> -#define TARGET_ICANON    0000002
> -#define TARGET_XCASE     0000004
> -#define TARGET_ECHO      0000010
> -#define TARGET_ECHOE     0000020
> -#define TARGET_ECHOK     0000040
> -#define TARGET_ECHONL    0000100
> -#define TARGET_NOFLSH    0000200
> -#define TARGET_TOSTOP    0000400
> -#define TARGET_ECHOCTL   0001000
> -#define TARGET_ECHOPRT   0002000
> -#define TARGET_ECHOKE    0004000
> -#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
> -#define TARGET_TCOON     1
> -#define TARGET_TCIOFF    2
> -#define TARGET_TCION     3
> -
> -/* tcflush() and TCFLSH use these */
> -#define TARGET_TCIFLUSH  0
> -#define TARGET_TCOFLUSH  1
> -#define TARGET_TCIOFLUSH 2
> -
> -/* tcsetattr uses these */
> -#define TARGET_TCSANOW   0
> -#define TARGET_TCSADRAIN 1
> -#define TARGET_TCSAFLUSH 2
> -
> -/* From asm-generic/ioctls.h, which is used by tilegx */
> -
> -#define TARGET_TCGETS                   0x5401
> -#define TARGET_TCSETS                   0x5402
> -#define TARGET_TCSETSW                  0x5403
> -#define TARGET_TCSETSF                  0x5404
> -#define TARGET_TCGETA                   0x5405
> -#define TARGET_TCSETA                   0x5406
> -#define TARGET_TCSETAW                  0x5407
> -#define TARGET_TCSETAF                  0x5408
> -#define TARGET_TCSBRK                   0x5409
> -#define TARGET_TCXONC                   0x540A
> -#define TARGET_TCFLSH                   0x540B
> -#define TARGET_TIOCEXCL                 0x540C
> -#define TARGET_TIOCNXCL                 0x540D
> -#define TARGET_TIOCSCTTY                0x540E
> -#define TARGET_TIOCGPGRP                0x540F
> -#define TARGET_TIOCSPGRP                0x5410
> -#define TARGET_TIOCOUTQ                 0x5411
> -#define TARGET_TIOCSTI                  0x5412
> -#define TARGET_TIOCGWINSZ               0x5413
> -#define TARGET_TIOCSWINSZ               0x5414
> -#define TARGET_TIOCMGET                 0x5415
> -#define TARGET_TIOCMBIS                 0x5416
> -#define TARGET_TIOCMBIC                 0x5417
> -#define TARGET_TIOCMSET                 0x5418
> -#define TARGET_TIOCGSOFTCAR             0x5419
> -#define TARGET_TIOCSSOFTCAR             0x541A
> -#define TARGET_FIONREAD                 0x541B
> -#define TARGET_TIOCINQ                  TARGET_FIONREAD
> -#define TARGET_TIOCLINUX                0x541C
> -#define TARGET_TIOCCONS                 0x541D
> -#define TARGET_TIOCGSERIAL              0x541E
> -#define TARGET_TIOCSSERIAL              0x541F
> -#define TARGET_TIOCPKT                  0x5420
> -#define TARGET_FIONBIO                  0x5421
> -#define TARGET_TIOCNOTTY                0x5422
> -#define TARGET_TIOCSETD                 0x5423
> -#define TARGET_TIOCGETD                 0x5424
> -#define TARGET_TCSBRKP                  0x5425
> -#define TARGET_TIOCSBRK                 0x5427
> -#define TARGET_TIOCCBRK                 0x5428
> -#define TARGET_TIOCGSID                 0x5429
> -#define TARGET_TCGETS2                  TARGET_IOR('T', 0x2A, struct termios2)
> -#define TARGET_TCSETS2                  TARGET_IOW('T', 0x2B, struct termios2)
> -#define TARGET_TCSETSW2                 TARGET_IOW('T', 0x2C, struct termios2)
> -#define TARGET_TCSETSF2                 TARGET_IOW('T', 0x2D, struct termios2)
> -#define TARGET_TIOCGRS485               0x542E
> -#define TARGET_TIOCSRS485               0x542F
> -#define TARGET_TIOCGPTN                 TARGET_IOR('T', 0x30, unsigned int)
> -#define TARGET_TIOCSPTLCK               TARGET_IOW('T', 0x31, int)
> -#define TARGET_TIOCGDEV                 TARGET_IOR('T', 0x32, unsigned int)
> -#define TARGET_TCGETX                   0x5432
> -#define TARGET_TCSETX                   0x5433
> -#define TARGET_TCSETXF                  0x5434
> -#define TARGET_TCSETXW                  0x5435
> -#define TARGET_TIOCSIG                  TARGET_IOW('T', 0x36, int)
> -#define TARGET_TIOCVHANGUP              0x5437
> -#define TARGET_TIOCGPKT                 TARGET_IOR('T', 0x38, int)
> -#define TARGET_TIOCGPTLCK               TARGET_IOR('T', 0x39, int)
> -#define TARGET_TIOCGEXCL                TARGET_IOR('T', 0x40, int)
> -#define TARGET_TIOCGPTPEER              TARGET_IO('T', 0x41)
> -
> -#define TARGET_FIONCLEX                 0x5450
> -#define TARGET_FIOCLEX                  0x5451
> -#define TARGET_FIOASYNC                 0x5452
> -#define TARGET_TIOCSERCONFIG            0x5453
> -#define TARGET_TIOCSERGWILD             0x5454
> -#define TARGET_TIOCSERSWILD             0x5455
> -#define TARGET_TIOCGLCKTRMIOS           0x5456
> -#define TARGET_TIOCSLCKTRMIOS           0x5457
> -#define TARGET_TIOCSERGSTRUCT           0x5458
> -#define TARGET_TIOCSERGETLSR            0x5459
> -#define TARGET_TIOCSERGETMULTI          0x545A
> -#define TARGET_TIOCSERSETMULTI          0x545B
> -
> -#define TARGET_TIOCMIWAIT               0x545C
> -#define TARGET_TIOCGICOUNT              0x545D
> -#define TARGET_FIOQSIZE                 0x5460
> -
> -#define TARGET_TIOCPKT_DATA             0
> -#define TARGET_TIOCPKT_FLUSHREAD        1
> -#define TARGET_TIOCPKT_FLUSHWRITE       2
> -#define TARGET_TIOCPKT_STOP             4
> -#define TARGET_TIOCPKT_START            8
> -#define TARGET_TIOCPKT_NOSTOP           16
> -#define TARGET_TIOCPKT_DOSTOP           32
> -#define TARGET_TIOCPKT_IOCTL            64
> -
> -#define TARGET_TIOCSER_TEMT             0x01
> -
> -#endif
> +#include "../generic/termbits.h"
> diff --git a/linux-user/x86_64/termbits.h b/linux-user/x86_64/termbits.h
> index c8bb5996b1..b1d4f4fedb 100644
> --- a/linux-user/x86_64/termbits.h
> +++ b/linux-user/x86_64/termbits.h
> @@ -1,253 +1 @@
> -#ifndef LINUX_USER_X86_64_TERMBITS_H
> -#define LINUX_USER_X86_64_TERMBITS_H
> -
> -#define TARGET_NCCS 19
> -
> -typedef unsigned char	target_cc_t;
> -typedef unsigned int	target_speed_t;
> -typedef unsigned int	target_tcflag_t;
> -struct target_termios {
> -	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
> -#define TARGET_VERASE 2
> -#define TARGET_VKILL 3
> -#define TARGET_VEOF 4
> -#define TARGET_VTIME 5
> -#define TARGET_VMIN 6
> -#define TARGET_VSWTC 7
> -#define TARGET_VSTART 8
> -#define TARGET_VSTOP 9
> -#define TARGET_VSUSP 10
> -#define TARGET_VEOL 11
> -#define TARGET_VREPRINT 12
> -#define TARGET_VDISCARD 13
> -#define TARGET_VWERASE 14
> -#define TARGET_VLNEXT 15
> -#define TARGET_VEOL2 16
> -
> -/* c_iflag bits */
> -#define TARGET_IGNBRK	0000001
> -#define TARGET_BRKINT	0000002
> -#define TARGET_IGNPAR	0000004
> -#define TARGET_PARMRK	0000010
> -#define TARGET_INPCK	0000020
> -#define TARGET_ISTRIP	0000040
> -#define TARGET_INLCR	0000100
> -#define TARGET_IGNCR	0000200
> -#define TARGET_ICRNL	0000400
> -#define TARGET_IUCLC	0001000
> -#define TARGET_IXON	0002000
> -#define TARGET_IXANY	0004000
> -#define TARGET_IXOFF	0010000
> -#define TARGET_IMAXBEL	0020000
> -#define TARGET_IUTF8	0040000
> -
> -/* c_oflag bits */
> -#define TARGET_OPOST	0000001
> -#define TARGET_OLCUC	0000002
> -#define TARGET_ONLCR	0000004
> -#define TARGET_OCRNL	0000010
> -#define TARGET_ONOCR	0000020
> -#define TARGET_ONLRET	0000040
> -#define TARGET_OFILL	0000100
> -#define TARGET_OFDEL	0000200
> -#define TARGET_NLDLY	0000400
> -#define   TARGET_NL0	0000000
> -#define   TARGET_NL1	0000400
> -#define TARGET_CRDLY	0003000
> -#define   TARGET_CR0	0000000
> -#define   TARGET_CR1	0001000
> -#define   TARGET_CR2	0002000
> -#define   TARGET_CR3	0003000
> -#define TARGET_TABDLY	0014000
> -#define   TARGET_TAB0	0000000
> -#define   TARGET_TAB1	0004000
> -#define   TARGET_TAB2	0010000
> -#define   TARGET_TAB3	0014000
> -#define   TARGET_XTABS	0014000
> -#define TARGET_BSDLY	0020000
> -#define   TARGET_BS0	0000000
> -#define   TARGET_BS1	0020000
> -#define TARGET_VTDLY	0040000
> -#define   TARGET_VT0	0000000
> -#define   TARGET_VT1	0040000
> -#define TARGET_FFDLY	0100000
> -#define   TARGET_FF0	0000000
> -#define   TARGET_FF1	0100000
> -
> -/* c_cflag bit meaning */
> -#define TARGET_CBAUD	0010017
> -#define  TARGET_B0	0000000		/* hang up */
> -#define  TARGET_B50	0000001
> -#define  TARGET_B75	0000002
> -#define  TARGET_B110	0000003
> -#define  TARGET_B134	0000004
> -#define  TARGET_B150	0000005
> -#define  TARGET_B200	0000006
> -#define  TARGET_B300	0000007
> -#define  TARGET_B600	0000010
> -#define  TARGET_B1200	0000011
> -#define  TARGET_B1800	0000012
> -#define  TARGET_B2400	0000013
> -#define  TARGET_B4800	0000014
> -#define  TARGET_B9600	0000015
> -#define  TARGET_B19200	0000016
> -#define  TARGET_B38400	0000017
> -#define TARGET_EXTA B19200
> -#define TARGET_EXTB B38400
> -#define TARGET_CSIZE	0000060
> -#define   TARGET_CS5	0000000
> -#define   TARGET_CS6	0000020
> -#define   TARGET_CS7	0000040
> -#define   TARGET_CS8	0000060
> -#define TARGET_CSTOPB	0000100
> -#define TARGET_CREAD	0000200
> -#define TARGET_PARENB	0000400
> -#define TARGET_PARODD	0001000
> -#define TARGET_HUPCL	0002000
> -#define TARGET_CLOCAL	0004000
> -#define TARGET_CBAUDEX 0010000
> -#define	   TARGET_BOTHER 0010000		/* non standard rate */
> -#define    TARGET_B57600 0010001
> -#define   TARGET_B115200 0010002
> -#define   TARGET_B230400 0010003
> -#define   TARGET_B460800 0010004
> -#define   TARGET_B500000 0010005
> -#define   TARGET_B576000 0010006
> -#define   TARGET_B921600 0010007
> -#define  TARGET_B1000000 0010010
> -#define  TARGET_B1152000 0010011
> -#define  TARGET_B1500000 0010012
> -#define  TARGET_B2000000 0010013
> -#define  TARGET_B2500000 0010014
> -#define  TARGET_B3000000 0010015
> -#define  TARGET_B3500000 0010016
> -#define  TARGET_B4000000 0010017
> -#define TARGET_CIBAUD	  002003600000	/* input baud rate */
> -#define TARGET_CMSPAR	  010000000000		/* mark or space (stick) parity */
> -#define TARGET_CRTSCTS	  020000000000		/* flow control */
> -
> -#define TARGET_IBSHIFT	  8		/* Shift from CBAUD to CIBAUD */
> -
> -/* c_lflag bits */
> -#define TARGET_ISIG	0000001
> -#define TARGET_ICANON	0000002
> -#define TARGET_XCASE	0000004
> -#define TARGET_ECHO	0000010
> -#define TARGET_ECHOE	0000020
> -#define TARGET_ECHOK	0000040
> -#define TARGET_ECHONL	0000100
> -#define TARGET_NOFLSH	0000200
> -#define TARGET_TOSTOP	0000400
> -#define TARGET_ECHOCTL	0001000
> -#define TARGET_ECHOPRT	0002000
> -#define TARGET_ECHOKE	0004000
> -#define TARGET_FLUSHO	0010000
> -#define TARGET_PENDIN	0040000
> -#define TARGET_IEXTEN	0100000
> -
> -/* tcflow() and TCXONC use these */
> -#define	TARGET_TCOOFF		0
> -#define	TARGET_TCOON		1
> -#define	TARGET_TCIOFF		2
> -#define	TARGET_TCION		3
> -
> -/* tcflush() and TCFLSH use these */
> -#define	TARGET_TCIFLUSH	0
> -#define	TARGET_TCOFLUSH	1
> -#define	TARGET_TCIOFLUSH	2
> -
> -/* tcsetattr uses these */
> -#define	TARGET_TCSANOW		0
> -#define	TARGET_TCSADRAIN	1
> -#define	TARGET_TCSAFLUSH	2
> -
> -#define TARGET_TCGETS		0x5401
> -#define TARGET_TCSETS		0x5402
> -#define TARGET_TCSETSW		0x5403
> -#define TARGET_TCSETSF		0x5404
> -#define TARGET_TCGETA		0x5405
> -#define TARGET_TCSETA		0x5406
> -#define TARGET_TCSETAW		0x5407
> -#define TARGET_TCSETAF		0x5408
> -#define TARGET_TCSBRK		0x5409
> -#define TARGET_TCXONC		0x540A
> -#define TARGET_TCFLSH		0x540B
> -#define TARGET_TIOCEXCL	0x540C
> -#define TARGET_TIOCNXCL	0x540D
> -#define TARGET_TIOCSCTTY	0x540E
> -#define TARGET_TIOCGPGRP	0x540F
> -#define TARGET_TIOCSPGRP	0x5410
> -#define TARGET_TIOCOUTQ	0x5411
> -#define TARGET_TIOCSTI		0x5412
> -#define TARGET_TIOCGWINSZ	0x5413
> -#define TARGET_TIOCSWINSZ	0x5414
> -#define TARGET_TIOCMGET	0x5415
> -#define TARGET_TIOCMBIS	0x5416
> -#define TARGET_TIOCMBIC	0x5417
> -#define TARGET_TIOCMSET	0x5418
> -#define TARGET_TIOCGSOFTCAR	0x5419
> -#define TARGET_TIOCSSOFTCAR	0x541A
> -#define TARGET_FIONREAD	0x541B
> -#define TARGET_TIOCINQ		FIONREAD
> -#define TARGET_TIOCLINUX	0x541C
> -#define TARGET_TIOCCONS	0x541D
> -#define TARGET_TIOCGSERIAL	0x541E
> -#define TARGET_TIOCSSERIAL	0x541F
> -#define TARGET_TIOCPKT		0x5420
> -#define TARGET_FIONBIO		0x5421
> -#define TARGET_TIOCNOTTY	0x5422
> -#define TARGET_TIOCSETD	0x5423
> -#define TARGET_TIOCGETD	0x5424
> -#define TARGET_TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */
> -#define TARGET_TIOCSBRK	0x5427  /* BSD compatibility */
> -#define TARGET_TIOCCBRK	0x5428  /* BSD compatibility */
> -#define TARGET_TIOCGSID	0x5429  /* Return the session ID of FD */
> -#define TARGET_TCGETS2          TARGET_IOR('T',0x2A, struct termios2)
> -#define TARGET_TCSETS2          TARGET_IOW('T',0x2B, struct termios2)
> -#define TARGET_TCSETSW2         TARGET_IOW('T',0x2C, struct termios2)
> -#define TARGET_TCSETSF2         TARGET_IOW('T',0x2D, struct termios2)
> -#define TARGET_TIOCGPTN         TARGET_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
> -#define TARGET_TIOCSPTLCK       TARGET_IOW('T',0x31, int)  /* Lock/unlock Pty */
> -#define TARGET_TIOCGPTPEER      TARGET_IO('T', 0x41) /* Safely open the slave */
> -
> -#define TARGET_FIONCLEX	0x5450  /* these numbers need to be adjusted. */
> -#define TARGET_FIOCLEX		0x5451
> -#define TARGET_FIOASYNC	0x5452
> -#define TARGET_TIOCSERCONFIG	0x5453
> -#define TARGET_TIOCSERGWILD	0x5454
> -#define TARGET_TIOCSERSWILD	0x5455
> -#define TARGET_TIOCGLCKTRMIOS	0x5456
> -#define TARGET_TIOCSLCKTRMIOS	0x5457
> -#define TARGET_TIOCSERGSTRUCT	0x5458 /* For debugging only */
> -#define TARGET_TIOCSERGETLSR   0x5459 /* Get line status register */
> -#define TARGET_TIOCSERGETMULTI 0x545A /* Get multiport config  */
> -#define TARGET_TIOCSERSETMULTI 0x545B /* Set multiport config */
> -
> -#define TARGET_TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */
> -#define TARGET_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
> -#define TARGET_TIOCGHAYESESP   0x545E  /* Get Hayes ESP configuration */
> -#define TARGET_TIOCSHAYESESP   0x545F  /* Set Hayes ESP configuration */
> -#define TARGET_FIOQSIZE       0x5460
> -
> -/* Used for packet mode */
> -#define TARGET_TIOCPKT_DATA		 0
> -#define TARGET_TIOCPKT_FLUSHREAD	 1
> -#define TARGET_TIOCPKT_FLUSHWRITE	 2
> -#define TARGET_TIOCPKT_STOP		 4
> -#define TARGET_TIOCPKT_START		 8
> -#define TARGET_TIOCPKT_NOSTOP		16
> -#define TARGET_TIOCPKT_DOSTOP		32
> -
> -#define TARGET_TIOCSER_TEMT    0x01	/* Transmitter physically empty */
> -
> -#endif
> +#include "../generic/termbits.h"
> 


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

Thanks,
Laurent



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions
  2020-07-23 21:02 ` [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions Filip Bozuta
  2020-07-23 21:25   ` Max Filippov
  2020-08-07 13:13   ` Laurent Vivier
@ 2020-08-24 20:39   ` Laurent Vivier
  2 siblings, 0 replies; 12+ messages in thread
From: Laurent Vivier @ 2020-08-24 20:39 UTC (permalink / raw)
  To: Filip Bozuta, qemu-devel; +Cc: Riku Voipio

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



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines
  2020-07-23 21:02 ` [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines Filip Bozuta
  2020-08-07 13:18   ` Laurent Vivier
@ 2020-08-24 20:50   ` Laurent Vivier
  1 sibling, 0 replies; 12+ messages in thread
From: Laurent Vivier @ 2020-08-24 20:50 UTC (permalink / raw)
  To: Filip Bozuta, qemu-devel; +Cc: Riku Voipio

Le 23/07/2020 à 23:02, Filip Bozuta a écrit :
> Functions "print_ioctl()" and "print_syscall_ret_ioctl()" are used
> to print arguments of "ioctl()" with "-strace". These functions
> use "thunk_print()", which is defined in "thunk.c", to print the
> contents of ioctl's third arguments that are not basic types.
> 
> However, this function doesn't handle ioctls of group ioctl_tty which
> are used for terminals and serial lines. These ioctls use a type
> "struct termios" which thunk type is defined in a non standard
> way using "STRUCT_SPECIAL()". This means that this type is not decoded
> regularly using "thunk_convert()" and uses special converting functions
> "target_to_host_termios()" and "host_to_target_termios()", which are defined
> in "syscall.c" to decode it's values.
> 
> For simillar reasons, this type is also not printed regularly using
> "thunk_print()". That is the reason why a separate printing function
> "print_termios()" is defined in file "strace.c". This function decodes
> and prints flag values of the "termios" structure.
> 
> Implementation notes:
> 
>     Function "print_termios()" was implemented in "strace.c" using
>     an existing function "print_flags()" to print flag values of
>     "struct termios" fields. Also, recently implemented function
>     "print_enums()" was also used to print enumareted values which
>     are contained in the fields of 'struct termios'.
> 
>     These flag values were defined using an existing macro "FLAG_TARGET()"
>     that generates aproppriate target flag values and string representations
>     of these flags. Also, the recently defined macro "ENUM_TARGET()" was
>     used to generate aproppriate enumarated values and their respective
>     string representations.
> 
>     Function "print_termios()" was declared in "qemu.h" so that it can
>     be accessed in "syscall.c". Type "StructEntry" defined in
>     "exec/user/thunk.h" contains information that is used to decode
>     structure values. Field "void print(void *arg)" was added in this
>     structure as a special print function. Also, function "thunk_print()"
>     was changed a little so that it uses this special print function
>     in case it is defined. This printing function was instantiated with
>     the defined "print_termios()" in "syscall.c" in "struct_termios_def".
> 
> Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
> ---
>  include/exec/user/thunk.h |   1 +
>  linux-user/qemu.h         |   1 +
>  linux-user/strace.c       | 195 ++++++++++++++++++++++++++++++++++++++
>  linux-user/syscall.c      |   1 +
>  thunk.c                   |  23 +++--
>  5 files changed, 212 insertions(+), 9 deletions(-)
> 
> diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
> index 7992475c9f..a5bbb2c733 100644
> --- a/include/exec/user/thunk.h
> +++ b/include/exec/user/thunk.h
> @@ -55,6 +55,7 @@ typedef struct {
>      int *field_offsets[2];
>      /* special handling */
>      void (*convert[2])(void *dst, const void *src);
> +    void (*print)(void *arg);
>      int size[2];
>      int align[2];
>      const char *name;
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index f431805e57..a69a0bd347 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -706,6 +706,7 @@ static inline uint64_t target_offset64(uint64_t word0, uint64_t word1)
>  }
>  #endif /* TARGET_ABI_BITS != 32 */
>  
> +void print_termios(void *arg);
>  
>  /* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */
>  #ifdef TARGET_ARM
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 3f16bb2c53..b9ba39ce6e 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -1284,6 +1284,140 @@ UNUSED static struct flags falloc_flags[] = {
>  #endif
>  };
>  
> +UNUSED static struct flags termios_iflags[] = {
> +    FLAG_TARGET(IGNBRK),
> +    FLAG_TARGET(BRKINT),
> +    FLAG_TARGET(IGNPAR),
> +    FLAG_TARGET(PARMRK),
> +    FLAG_TARGET(INPCK),
> +    FLAG_TARGET(ISTRIP),
> +    FLAG_TARGET(INLCR),
> +    FLAG_TARGET(IGNCR),
> +    FLAG_TARGET(ICRNL),
> +    FLAG_TARGET(IUCLC),
> +    FLAG_TARGET(IXON),
> +    FLAG_TARGET(IXANY),
> +    FLAG_TARGET(IXOFF),
> +    FLAG_TARGET(IMAXBEL),
> +    FLAG_TARGET(IUTF8),
> +    FLAG_END,
> +};
> +
> +UNUSED static struct flags termios_oflags[] = {
> +    FLAG_TARGET(OPOST),
> +    FLAG_TARGET(OLCUC),
> +    FLAG_TARGET(ONLCR),
> +    FLAG_TARGET(OCRNL),
> +    FLAG_TARGET(ONOCR),
> +    FLAG_TARGET(ONLRET),
> +    FLAG_TARGET(OFILL),
> +    FLAG_TARGET(OFDEL),
> +    FLAG_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_NLDLY[] = {
> +    ENUM_TARGET(NL0),
> +    ENUM_TARGET(NL1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_CRDLY[] = {
> +    ENUM_TARGET(CR0),
> +    ENUM_TARGET(CR1),
> +    ENUM_TARGET(CR2),
> +    ENUM_TARGET(CR3),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_TABDLY[] = {
> +    ENUM_TARGET(TAB0),
> +    ENUM_TARGET(TAB1),
> +    ENUM_TARGET(TAB2),
> +    ENUM_TARGET(TAB3),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_VTDLY[] = {
> +    ENUM_TARGET(VT0),
> +    ENUM_TARGET(VT1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_FFDLY[] = {
> +    ENUM_TARGET(FF0),
> +    ENUM_TARGET(FF1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_oflags_BSDLY[] = {
> +    ENUM_TARGET(BS0),
> +    ENUM_TARGET(BS1),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_cflags_CBAUD[] = {
> +    ENUM_TARGET(B0),
> +    ENUM_TARGET(B50),
> +    ENUM_TARGET(B75),
> +    ENUM_TARGET(B110),
> +    ENUM_TARGET(B134),
> +    ENUM_TARGET(B150),
> +    ENUM_TARGET(B200),
> +    ENUM_TARGET(B300),
> +    ENUM_TARGET(B600),
> +    ENUM_TARGET(B1200),
> +    ENUM_TARGET(B1800),
> +    ENUM_TARGET(B2400),
> +    ENUM_TARGET(B4800),
> +    ENUM_TARGET(B9600),
> +    ENUM_TARGET(B19200),
> +    ENUM_TARGET(B38400),
> +    ENUM_TARGET(B57600),
> +    ENUM_TARGET(B115200),
> +    ENUM_TARGET(B230400),
> +    ENUM_TARGET(B460800),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct enums termios_cflags_CSIZE[] = {
> +    ENUM_TARGET(CS5),
> +    ENUM_TARGET(CS6),
> +    ENUM_TARGET(CS7),
> +    ENUM_TARGET(CS8),
> +    ENUM_END,
> +};
> +
> +UNUSED static struct flags termios_cflags[] = {
> +    FLAG_TARGET(CSTOPB),
> +    FLAG_TARGET(CREAD),
> +    FLAG_TARGET(PARENB),
> +    FLAG_TARGET(PARODD),
> +    FLAG_TARGET(HUPCL),
> +    FLAG_TARGET(CLOCAL),
> +    FLAG_TARGET(CRTSCTS),
> +    FLAG_END,
> +};
> +
> +UNUSED static struct flags termios_lflags[] = {
> +    FLAG_TARGET(ISIG),
> +    FLAG_TARGET(ICANON),
> +    FLAG_TARGET(XCASE),
> +    FLAG_TARGET(ECHO),
> +    FLAG_TARGET(ECHOE),
> +    FLAG_TARGET(ECHOK),
> +    FLAG_TARGET(ECHONL),
> +    FLAG_TARGET(NOFLSH),
> +    FLAG_TARGET(TOSTOP),
> +    FLAG_TARGET(ECHOCTL),
> +    FLAG_TARGET(ECHOPRT),
> +    FLAG_TARGET(ECHOKE),
> +    FLAG_TARGET(FLUSHO),
> +    FLAG_TARGET(PENDIN),
> +    FLAG_TARGET(IEXTEN),
> +    FLAG_TARGET(EXTPROC),
> +    FLAG_END,
> +};
> +
>  UNUSED static struct flags mlockall_flags[] = {
>      FLAG_TARGET(MCL_CURRENT),
>      FLAG_TARGET(MCL_FUTURE),
> @@ -1579,6 +1713,67 @@ print_itimerval(abi_ulong it_addr, int last)
>      }
>  }
>  
> +void
> +print_termios(void *arg)
> +{
> +    const struct target_termios *target = arg;
> +
> +    target_tcflag_t iflags = tswap32(target->c_iflag);
> +    target_tcflag_t oflags = tswap32(target->c_oflag);
> +    target_tcflag_t cflags = tswap32(target->c_cflag);
> +    target_tcflag_t lflags = tswap32(target->c_lflag);
> +
> +    qemu_log("{");
> +
> +    qemu_log("c_iflag = ");
> +    print_flags(termios_iflags, iflags, 0);
> +
> +    qemu_log("c_oflag = ");
> +    target_tcflag_t oflags_clean =  oflags & ~(TARGET_NLDLY | TARGET_CRDLY |
> +                                               TARGET_TABDLY | TARGET_BSDLY |
> +                                               TARGET_VTDLY | TARGET_FFDLY);
> +    print_flags(termios_oflags, oflags_clean, 0);
> +    if (oflags & TARGET_NLDLY) {
> +        print_enums(termios_oflags_NLDLY, oflags & TARGET_NLDLY, 0);
> +    }
> +    if (oflags & TARGET_CRDLY) {
> +        print_enums(termios_oflags_CRDLY, oflags & TARGET_CRDLY, 0);
> +    }
> +    if (oflags & TARGET_TABDLY) {
> +        print_enums(termios_oflags_TABDLY, oflags & TARGET_TABDLY, 0);
> +    }
> +    if (oflags & TARGET_BSDLY) {
> +        print_enums(termios_oflags_BSDLY, oflags & TARGET_BSDLY, 0);
> +    }
> +    if (oflags & TARGET_VTDLY) {
> +        print_enums(termios_oflags_VTDLY, oflags & TARGET_VTDLY, 0);
> +    }
> +    if (oflags & TARGET_FFDLY) {
> +        print_enums(termios_oflags_FFDLY, oflags & TARGET_FFDLY, 0);
> +    }
> +
> +    qemu_log("c_cflag = ");
> +    if (cflags & TARGET_CBAUD) {
> +        print_enums(termios_cflags_CBAUD, cflags & TARGET_CBAUD, 0);
> +    }
> +    if (cflags & TARGET_CSIZE) {
> +        print_enums(termios_cflags_CSIZE, cflags & TARGET_CSIZE, 0);
> +    }
> +    target_tcflag_t cflags_clean = cflags & ~(TARGET_CBAUD | TARGET_CSIZE);
> +    print_flags(termios_cflags, cflags_clean, 0);
> +
> +    qemu_log("c_lflag = ");
> +    print_flags(termios_lflags, lflags, 0);
> +
> +    qemu_log("c_cc = ");
> +    qemu_log("\"%s\",", target->c_cc);
> +
> +    qemu_log("c_line = ");
> +    print_raw_param("\'%c\'", target->c_line, 1);
> +
> +    qemu_log("}");
> +}
> +
>  #undef UNUSED
>  
>  #ifdef TARGET_NR_accept
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index e815f14bac..6dc230cd0b 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5669,6 +5669,7 @@ static const StructEntry struct_termios_def = {
>      .convert = { host_to_target_termios, target_to_host_termios },
>      .size = { sizeof(struct target_termios), sizeof(struct host_termios) },
>      .align = { __alignof__(struct target_termios), __alignof__(struct host_termios) },
> +    .print = print_termios,
>  };
>  
>  static bitmask_transtbl mmap_flags_tbl[] = {
> diff --git a/thunk.c b/thunk.c
> index c5d9719747..0718325d86 100644
> --- a/thunk.c
> +++ b/thunk.c
> @@ -404,19 +404,24 @@ const argtype *thunk_print(void *arg, const argtype *type_ptr)
>              const int *arg_offsets;
>  
>              se = struct_entries + *type_ptr++;
> -            a = arg;
>  
> -            field_types = se->field_types;
> -            arg_offsets = se->field_offsets[0];
> +            if (se->print != NULL) {
> +                se->print(arg);
> +            } else {
> +                a = arg;
>  
> -            qemu_log("{");
> -            for (i = 0; i < se->nb_fields; i++) {
> -                if (i > 0) {
> -                    qemu_log(",");
> +                field_types = se->field_types;
> +                arg_offsets = se->field_offsets[0];
> +
> +                qemu_log("{");
> +                for (i = 0; i < se->nb_fields; i++) {
> +                    if (i > 0) {
> +                        qemu_log(",");
> +                    }
> +                    field_types = thunk_print(a + arg_offsets[i], field_types);
>                  }
> -                field_types = thunk_print(a + arg_offsets[i], field_types);
> +                qemu_log("}");
>              }
> -            qemu_log("}");
>          }
>          break;
>      default:
> 

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

Thanks,
Laurent



^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-08-24 20:51 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-23 21:02 [PATCH v2 0/3] Adding support for printing contents of 'struct termios' which is used by ioctls of group 'ioctl_tty' Filip Bozuta
2020-07-23 21:02 ` [PATCH v2 1/3] linux-user: Add generic 'termbits.h' for some archs Filip Bozuta
2020-08-07 13:10   ` Laurent Vivier
2020-08-24 20:38   ` Laurent Vivier
2020-07-23 21:02 ` [PATCH v2 2/3] linux-user: Add missing termbits types and values definitions Filip Bozuta
2020-07-23 21:25   ` Max Filippov
2020-07-23 21:27     ` Max Filippov
2020-08-07 13:13   ` Laurent Vivier
2020-08-24 20:39   ` Laurent Vivier
2020-07-23 21:02 ` [PATCH v2 3/3] linux-user: Add strace support for printing arguments for ioctls used for terminals and serial lines Filip Bozuta
2020-08-07 13:18   ` Laurent Vivier
2020-08-24 20:50   ` Laurent Vivier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.