diff -ur valgrind-1.0pre3.orig/vg_syscall_mem.c valgrind-1.0pre3/vg_syscall_mem.c --- valgrind-1.0pre3.orig/vg_syscall_mem.c Thu Jun 20 09:23:49 2002 +++ valgrind-1.0pre3/vg_syscall_mem.c Mon Jul 8 19:55:45 2002 @@ -2038,6 +2038,136 @@ sizeof(struct cdrom_msf)); KERNEL_DO_SYSCALL(tid,res); break; + + /* DVB (Digital Video Broadcasting) related stuff + * http://www.linuxtv.org + */ + case FE_GET_INFO: + must_be_writable(tst, "ioctl(FE_GET_INFO)", arg3, + sizeof(struct dvb_frontend_info)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct dvb_frontend_info)); + break; + case FE_DISEQC_RESET_OVERLOAD: + KERNEL_DO_SYSCALL(tid,res); + break; + case FE_DISEQC_SEND_MASTER_CMD: + must_be_readable(tst, "ioctl(FE_DISEQC_SEND_MASTER_CMD)", arg3, + sizeof(struct dvb_diseqc_master_cmd)); + KERNEL_DO_SYSCALL(tid,res); + break; + case FE_DISEQC_RECV_SLAVE_REPLY: + must_be_writable(tst, "ioctl(FE_DISEQC_RECV_SLAVE_REPLY)", arg3, + sizeof(struct dvb_diseqc_slave_reply)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct dvb_diseqc_slave_reply)); + break; + case FE_DISEQC_SEND_BURST: + case FE_SET_TONE: + case FE_SET_VOLTAGE: + case FE_ENABLE_HIGH_LNB_VOLTAGE: + KERNEL_DO_SYSCALL(tid,res); + break; + case FE_READ_STATUS: + must_be_writable(tst, "ioctl(FE_READ_STATUS)", arg3, + sizeof(fe_status_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(fe_status_t)); + break; + case FE_READ_BER: + must_be_writable(tst, "ioctl(FE_READ_BER)", arg3, + sizeof(uint32_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(uint32_t)); + break; + case FE_READ_SIGNAL_STRENGTH: + must_be_writable(tst, "ioctl(FE_READ_SIGNAL_STRENGTH)", arg3, + sizeof(uint16_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(uint16_t)); + break; + case FE_READ_SNR: + must_be_writable(tst, "ioctl(FE_READ_SNR)", arg3, + sizeof(uint16_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(uint16_t)); + break; + case FE_READ_UNCORRECTED_BLOCKS: + must_be_writable(tst, "ioctl(FE_READ_UNCORRECTED_BLOCKS)", arg3, + sizeof(uint32_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(uint32_t)); + break; + case FE_SET_FRONTEND: + must_be_readable(tst, "ioctl(FE_SET_FRONTEND)", arg3, + sizeof(struct dvb_frontend_parameters)); + KERNEL_DO_SYSCALL(tid,res); + break; + case FE_GET_FRONTEND: + must_be_writable(tst, "ioctl(FE_GET_FRONTEND)", arg3, + sizeof(struct dvb_frontend_parameters)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct dvb_frontend_parameters)); + break; + case FE_GET_EVENT: + must_be_writable(tst, "ioctl(FE_GET_EVENT)", arg3, + sizeof(struct dvb_frontend_event)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct dvb_frontend_event)); + break; + case DMX_START: + case DMX_STOP: + KERNEL_DO_SYSCALL(tid,res); + break; + case DMX_SET_FILTER: + must_be_readable(tst, "ioctl(DMX_SET_FILTER)", arg3, + sizeof(struct dmx_sct_filter_params)); + KERNEL_DO_SYSCALL(tid,res); + break; + case DMX_SET_PES_FILTER: + must_be_readable(tst, "ioctl(DMX_SET_PES_FILTER)", arg3, + sizeof(struct dmx_pes_filter_params)); + KERNEL_DO_SYSCALL(tid,res); + break; + case DMX_SET_BUFFER_SIZE: + KERNEL_DO_SYSCALL(tid,res); + break; + case DMX_GET_EVENT: + must_be_writable(tst, "ioctl(DMX_GET_EVENT)", arg3, + sizeof(struct dmx_event)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(struct dmx_event)); + break; + case DMX_GET_PES_PIDS: + must_be_writable(tst, "ioctl(DMX_GET_PES_PIDS)", arg3, + 5*sizeof(uint16_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, 5*sizeof(uint16_t)); + break; + case DMX_GET_CAPS: + must_be_writable(tst, "ioctl(DMX_GET_CAPS)", arg3, + sizeof(dmx_caps_t)); + KERNEL_DO_SYSCALL(tid,res); + if (!VG_(is_kerror)(res) && res == 0) + make_readable (arg3, sizeof(dmx_caps_t)); + break; + case DMX_SET_SOURCE: + must_be_readable(tst, "ioctl(DMX_SET_SOURCE)", arg3, + sizeof(dmx_source_t)); + KERNEL_DO_SYSCALL(tid,res); + break; + /* We don't have any specific information on it, so try to do something reasonable based on direction and size bits. The encoding scheme is described in diff -ur valgrind-1.0pre3.orig/vg_unsafe.h valgrind-1.0pre3/vg_unsafe.h --- valgrind-1.0pre3.orig/vg_unsafe.h Thu Jun 13 18:02:37 2002 +++ valgrind-1.0pre3/vg_unsafe.h Mon Jul 8 19:56:20 2002 @@ -85,6 +85,10 @@ #include +#include +#include +#include +#include /*--------------------------------------------------------------------*/ /*--- end vg_unsafe.h ---*/