From: Julian Seward Date: Fri, 14 Aug 2015 08:17:37 +0000 (+0000) Subject: 345338 - TIOCGSERIAL and TIOCSSERIAL ioctl support on Linux X-Git-Tag: svn/VALGRIND_3_11_0~115 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e42188752730b5f3153dd1d807da39f2e38583f3;p=thirdparty%2Fvalgrind.git 345338 - TIOCGSERIAL and TIOCSSERIAL ioctl support on Linux Patch from Martin Ling (martin-kdebugs@earth.li) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15542 --- diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 6fd0d8376c..c69ab9de86 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -8354,6 +8354,18 @@ PRE(sys_ioctl) break; } + /* Serial */ + case VKI_TIOCGSERIAL: { + struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3; + PRE_MEM_WRITE("ioctl(VKI_TIOCGSERIAL)", (Addr)data, sizeof(*data)); + break; + } + case VKI_TIOCSSERIAL: { + struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3; + PRE_MEM_READ("ioctl(VKI_TIOCSSERIAL)", (Addr)data, sizeof(*data)); + break; + } + default: /* EVIOC* are variable length and return size written on success */ switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) { @@ -10239,6 +10251,15 @@ POST(sys_ioctl) case VKI_MEDIA_IOC_SETUP_LINK: break; + /* Serial */ + case VKI_TIOCGSERIAL: { + struct vki_serial_struct *data = (struct vki_serial_struct *)ARG3; + POST_MEM_WRITE((Addr)data, sizeof(*data)); + break; + } + case VKI_TIOCSSERIAL: + break; + default: /* EVIOC* are variable length and return size written on success */ switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) { diff --git a/include/vki/vki-amd64-linux.h b/include/vki/vki-amd64-linux.h index 61847a7116..863b31c887 100644 --- a/include/vki/vki-amd64-linux.h +++ b/include/vki/vki-amd64-linux.h @@ -690,6 +690,13 @@ struct vki_shminfo64 { #define VKI_ENOSYS 38 /* Function not implemented */ #define VKI_EOVERFLOW 75 /* Value too large for defined data type */ +//---------------------------------------------------------------------- +// From linux-3.19.0/include/uapi/asm-generic/ioctls.h +//---------------------------------------------------------------------- + +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F + //---------------------------------------------------------------------- // And that's it! //---------------------------------------------------------------------- diff --git a/include/vki/vki-arm-linux.h b/include/vki/vki-arm-linux.h index 031f528588..26ffc8b596 100644 --- a/include/vki/vki-arm-linux.h +++ b/include/vki/vki-arm-linux.h @@ -900,6 +900,13 @@ struct vki_vm86plus_struct { #define VKI_ENOSYS 38 /* Function not implemented */ #define VKI_EOVERFLOW 75 /* Value too large for defined data type */ +//---------------------------------------------------------------------- +// From linux-3.19.0/include/uapi/asm-generic/ioctls.h +//---------------------------------------------------------------------- + +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F + //---------------------------------------------------------------------- // And that's it! //---------------------------------------------------------------------- diff --git a/include/vki/vki-arm64-linux.h b/include/vki/vki-arm64-linux.h index 747d0bf801..7851cf7aa4 100644 --- a/include/vki/vki-arm64-linux.h +++ b/include/vki/vki-arm64-linux.h @@ -683,6 +683,13 @@ struct vki_shminfo64 { #define VKI_ENOSYS 38 /* Function not implemented */ #define VKI_EOVERFLOW 75 /* Value too large for defined data type */ +//---------------------------------------------------------------------- +// From linux-3.19.0/include/uapi/asm-generic/ioctls.h +//---------------------------------------------------------------------- + +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F + //---------------------------------------------------------------------- // And that's it! //---------------------------------------------------------------------- diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 4ede25c7d6..b332894e94 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -4666,6 +4666,31 @@ enum vki_kcmp_type { //---------------------------------------------------------------------- #define VKI_BINPRM_BUF_SIZE 128 +//---------------------------------------------------------------------- +// From linux-3.19.0/include/linux/serial.h +//---------------------------------------------------------------------- + +struct vki_serial_struct { + int type; + int line; + unsigned int port; + int irq; + int flags; + int xmit_fifo_size; + int custom_divisor; + int baud_base; + unsigned short close_delay; + char io_type; + char reserved_char[1]; + int hub6; + unsigned short closing_wait; /* time to wait before closing */ + unsigned short closing_wait2; /* no longer used... */ + unsigned char *iomem_base; + unsigned short iomem_reg_shift; + unsigned int port_high; + unsigned long iomap_base; /* cookie passed into ioremap */ +}; + #endif // __VKI_LINUX_H /*--------------------------------------------------------------------*/ diff --git a/include/vki/vki-ppc32-linux.h b/include/vki/vki-ppc32-linux.h index 6aea179c8a..f92220876f 100644 --- a/include/vki/vki-ppc32-linux.h +++ b/include/vki/vki-ppc32-linux.h @@ -626,8 +626,8 @@ struct vki_termios { //#define VKI_TIOCSSOFTCAR 0x541A #define VKI_TIOCLINUX 0x541C //#define VKI_TIOCCONS 0x541D -//#define VKI_TIOCGSERIAL 0x541E -//#define VKI_TIOCSSERIAL 0x541F +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F //#define VKI_TIOCPKT 0x5420 //# define VKI_TIOCPKT_DATA 0 //# define VKI_TIOCPKT_FLUSHREAD 1 diff --git a/include/vki/vki-ppc64-linux.h b/include/vki/vki-ppc64-linux.h index 8848b05764..fdcb93e8e5 100644 --- a/include/vki/vki-ppc64-linux.h +++ b/include/vki/vki-ppc64-linux.h @@ -794,6 +794,13 @@ struct vki_shminfo64 { #define VKI_ENOSYS 38 /* Function not implemented */ #define VKI_EOVERFLOW 75 /* Value too large for defined data type */ +//---------------------------------------------------------------------- +// From linux-3.19.0/arch/powerpc/include/uapi/asm/ioctls.h +//---------------------------------------------------------------------- + +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F + //---------------------------------------------------------------------- // end //---------------------------------------------------------------------- diff --git a/include/vki/vki-s390x-linux.h b/include/vki/vki-s390x-linux.h index 85c449d4e2..914cd8012a 100644 --- a/include/vki/vki-s390x-linux.h +++ b/include/vki/vki-s390x-linux.h @@ -976,6 +976,13 @@ struct vki_shminfo64 { #define VKI_ENOSYS 38 /* Function not implemented */ #define VKI_EOVERFLOW 75 /* Value too large for defined data type */ +//---------------------------------------------------------------------- +// From linux-3.19.0/include/uapi/asm-generic/ioctls.h +//---------------------------------------------------------------------- + +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F + #endif // __VKI_S390X_LINUX_H /*--------------------------------------------------------------------*/ diff --git a/include/vki/vki-x86-linux.h b/include/vki/vki-x86-linux.h index c34e027403..f6b1dc546c 100644 --- a/include/vki/vki-x86-linux.h +++ b/include/vki/vki-x86-linux.h @@ -906,6 +906,13 @@ struct vki_vm86plus_struct { #define VKI_ENOSYS 38 /* Function not implemented */ #define VKI_EOVERFLOW 75 /* Value too large for defined data type */ +//---------------------------------------------------------------------- +// From linux-3.19.0/include/uapi/asm-generic/ioctls.h +//---------------------------------------------------------------------- + +#define VKI_TIOCGSERIAL 0x541E +#define VKI_TIOCSSERIAL 0x541F + //---------------------------------------------------------------------- // And that's it! //----------------------------------------------------------------------