valgrind-3.7.0-more-ioctls.patch 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. Add various ioctl()s
  2. Patch initially written by Eric Andersen <andersen@codepoet.org>.
  3. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
  4. Index: valgrind-3.7.0/coregrind/m_syswrap/syswrap-linux.c
  5. ===================================================================
  6. --- valgrind-3.7.0.orig/coregrind/m_syswrap/syswrap-linux.c 2011-10-27 12:55:05.000000000 +0200
  7. +++ valgrind-3.7.0/coregrind/m_syswrap/syswrap-linux.c 2011-12-22 14:53:16.258126390 +0100
  8. @@ -4058,7 +4058,33 @@
  9. case VKI_SG_GET_SG_TABLESIZE: /* 0x227f */
  10. PRE_MEM_WRITE( "ioctl(SG_GET_SG_TABLESIZE)", ARG3, sizeof(int) );
  11. break;
  12. + case VKI_SCSI_IOCTL_GET_IDLUN:
  13. + PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_IDLUN)", ARG3, sizeof(vki_scsi_idlun_t) );
  14. + break;
  15. + case VKI_SCSI_IOCTL_PROBE_HOST:
  16. + {
  17. + int arraylen;
  18. + char *array = (char*)ARG3;
  19. + PRE_MEM_READ("ioctl(SCSI_IOCTL_PROBE_HOST)", ARG3, sizeof(char)*4 );
  20. + arraylen = array[0] + (array[1]<<8) + (array[2]<<16) + (array[3]<<24);
  21. + PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_PROBE_HOST)", ARG3, sizeof(char)*arraylen );
  22. + }
  23. + break;
  24. + case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
  25. + PRE_MEM_WRITE( "ioctl(SCSI_IOCTL_GET_BUS_NUMBER)", ARG3, sizeof(int) );
  26. + break;
  27. + case VKI_FDRESET:
  28. + break;
  29. + case VKI_FDGETDRVTYP:
  30. + PRE_MEM_WRITE( "ioctl(FDGETDRVTYP)", ARG3, sizeof(char)*16 );
  31. + break;
  32. + case VKI_FDPOLLDRVSTAT:
  33. + PRE_MEM_WRITE( "ioctl(FDPOLLDRVSTAT)", ARG3, sizeof(vki_floppy_drive_struct_t) );
  34. + break;
  35. + case VKI_FDGETPRM:
  36. + PRE_MEM_WRITE( "ioctl(FDGETPRM)", ARG3, sizeof(vki_floppy_struct_t) );
  37. + break;
  38. case VKI_IIOCGETCPS:
  39. PRE_MEM_WRITE( "ioctl(IIOCGETCPS)", ARG3,
  40. VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
  41. @@ -4373,6 +4399,8 @@
  42. case VKI_BLKROGET:
  43. PRE_MEM_WRITE( "ioctl(BLKROGET)", ARG3, sizeof(int));
  44. break;
  45. + case VKI_BLKRRPART:
  46. + break;
  47. case VKI_BLKGETSIZE:
  48. PRE_MEM_WRITE( "ioctl(BLKGETSIZE)", ARG3, sizeof(unsigned long));
  49. break;
  50. @@ -4381,6 +4409,8 @@
  51. case VKI_BLKRAGET:
  52. PRE_MEM_WRITE( "ioctl(BLKRAGET)", ARG3, sizeof(long));
  53. break;
  54. + case VKI_BLKFLSBUF:
  55. + break;
  56. case VKI_BLKFRASET:
  57. break;
  58. case VKI_BLKFRAGET:
  59. @@ -4447,6 +4477,8 @@
  60. PRE_MEM_WRITE( "ioctl(CDROMREADTOCENTRY)", ARG3,
  61. sizeof(struct vki_cdrom_tocentry));
  62. break;
  63. + case VKI_CDROMEJECT:
  64. + break;
  65. case VKI_CDROMMULTISESSION: /* 0x5310 */
  66. PRE_MEM_WRITE( "ioctl(CDROMMULTISESSION)", ARG3,
  67. sizeof(struct vki_cdrom_multisession));
  68. @@ -5321,7 +5353,28 @@
  69. case VKI_SG_GET_SG_TABLESIZE:
  70. POST_MEM_WRITE(ARG3, sizeof(int));
  71. break;
  72. + case VKI_SCSI_IOCTL_GET_IDLUN:
  73. + POST_MEM_WRITE(ARG3, sizeof(vki_scsi_idlun_t));
  74. + break;
  75. + case VKI_SCSI_IOCTL_PROBE_HOST:
  76. + if (RES > 0 && ARG3 )
  77. + POST_MEM_WRITE(ARG3, sizeof(char)*RES);
  78. + break;
  79. + case VKI_SCSI_IOCTL_GET_BUS_NUMBER:
  80. + POST_MEM_WRITE(ARG3, sizeof(int));
  81. + break;
  82. + case VKI_FDRESET:
  83. + break;
  84. + case VKI_FDGETDRVTYP:
  85. + POST_MEM_WRITE( ARG3, sizeof(char)*16 );
  86. + break;
  87. + case VKI_FDPOLLDRVSTAT:
  88. + POST_MEM_WRITE( ARG3, sizeof(vki_floppy_drive_struct_t) );
  89. + break;
  90. + case VKI_FDGETPRM:
  91. + POST_MEM_WRITE( ARG3, sizeof(vki_floppy_struct_t) );
  92. + break;
  93. case VKI_IIOCGETCPS:
  94. POST_MEM_WRITE( ARG3, VKI_ISDN_MAX_CHANNELS * 2 * sizeof(unsigned long) );
  95. break;
  96. @@ -5542,6 +5595,8 @@
  97. case VKI_BLKROGET:
  98. POST_MEM_WRITE(ARG3, sizeof(int));
  99. break;
  100. + case VKI_BLKRRPART:
  101. + break;
  102. case VKI_BLKGETSIZE:
  103. POST_MEM_WRITE(ARG3, sizeof(unsigned long));
  104. break;
  105. @@ -5550,6 +5605,8 @@
  106. case VKI_BLKRAGET:
  107. POST_MEM_WRITE(ARG3, sizeof(long));
  108. break;
  109. + case VKI_BLKFLSBUF:
  110. + break;
  111. case VKI_BLKFRASET:
  112. break;
  113. case VKI_BLKFRAGET:
  114. @@ -5591,6 +5648,8 @@
  115. case VKI_CDROMREADTOCENTRY:
  116. POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_tocentry));
  117. break;
  118. + case VKI_CDROMEJECT:
  119. + break;
  120. case VKI_CDROMMULTISESSION:
  121. POST_MEM_WRITE(ARG3, sizeof(struct vki_cdrom_multisession));
  122. break;
  123. Index: valgrind-3.7.0/include/vki/vki-linux.h
  124. ===================================================================
  125. --- valgrind-3.7.0.orig/include/vki/vki-linux.h 2011-10-26 23:24:31.000000000 +0200
  126. +++ valgrind-3.7.0/include/vki/vki-linux.h 2011-12-22 14:53:16.258126390 +0100
  127. @@ -1654,7 +1654,9 @@
  128. #define VKI_BLKROSET _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */
  129. #define VKI_BLKROGET _VKI_IO(0x12,94) /* get read-only status (0 = read_write) */
  130. +#define VKI_BLKRRPART _VKI_IO(0x12,95) /* re-read partition table */
  131. #define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
  132. +#define VKI_BLKFLSBUF _VKI_IO(0x12,97) /* flush buffer cache */
  133. #define VKI_BLKRASET _VKI_IO(0x12,98) /* set read ahead for block device */
  134. #define VKI_BLKRAGET _VKI_IO(0x12,99) /* get current read ahead setting */
  135. #define VKI_BLKFRASET _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
  136. @@ -1729,6 +1731,53 @@
  137. //#define SG_GET_COMMAND_Q 0x2270 /* Yields 0 (queuing off) or 1 (on) */
  138. #define VKI_SG_SET_COMMAND_Q 0x2271 /* Change queuing state with 0 or 1 */
  139. +typedef struct vki_scsi_idlun
  140. +{
  141. + int mux4;
  142. + int host_unique_id;
  143. +
  144. +} vki_scsi_idlun_t;
  145. +#define VKI_SCSI_IOCTL_GET_IDLUN 0x5382 /* Gets a struct vki_scsi_idlun */
  146. +#define VKI_SCSI_IOCTL_PROBE_HOST 0x5385 /* Gets an arrary describing the SCSI host */
  147. +#define VKI_SCSI_IOCTL_GET_BUS_NUMBER 0x5386 /* Get the bus number for a device */
  148. +
  149. +//----------------------------------------------------------------------
  150. +// From linux-2.6.8.1/include/linux/fd.h
  151. +//----------------------------------------------------------------------
  152. +#define VKI_FDRESET 0x254 /* Takes an int by value */
  153. +#define VKI_FDGETDRVTYP 0x20f /* Returns char floppy_drive_name[16] */
  154. +typedef struct vki_floppy_drive_struct {
  155. + unsigned long flags;
  156. + unsigned long spinup_date;
  157. + unsigned long select_date;
  158. + unsigned long first_read_date;
  159. + short probed_format;
  160. + short track;
  161. + short maxblock;
  162. + short maxtrack;
  163. + int generation;
  164. + int keep_data;
  165. + int fd_ref;
  166. + int fd_device;
  167. + unsigned long last_checked;
  168. + char *dmabuf;
  169. + int bufblocks;
  170. +} vki_floppy_drive_struct_t;
  171. +#define VKI_FDPOLLDRVSTAT 0x213 /* returns a struct floppy_drive_struct */
  172. +typedef struct vki_floppy_struct {
  173. + unsigned int size;
  174. + unsigned int sect;
  175. + unsigned int head;
  176. + unsigned int track;
  177. + unsigned int stretch;
  178. + unsigned char gap;
  179. + unsigned char rate;
  180. + unsigned char spec1;
  181. + unsigned char fmt_gap;
  182. + const char * name;
  183. +} vki_floppy_struct_t;
  184. +#define VKI_FDGETPRM 0x204 /* returns a struct floppy_struct */
  185. +
  186. //----------------------------------------------------------------------
  187. // From linux-2.6.8.1/include/linux/cdrom.h
  188. //----------------------------------------------------------------------
  189. @@ -1738,6 +1787,7 @@
  190. (struct cdrom_tochdr) */
  191. #define VKI_CDROMREADTOCENTRY 0x5306 /* Read TOC entry
  192. (struct cdrom_tocentry) */
  193. +#define VKI_CDROMEJECT 0x5309 /* Eject cdrom media */
  194. #define VKI_CDROMSUBCHNL 0x530b /* Read subchannel data
  195. (struct cdrom_subchnl) */
  196. #define VKI_CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes)