]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge r5970 (fix for: Lacks support for VKI_[GP]IO_UNIMAP*)
authorJulian Seward <jseward@acm.org>
Mon, 28 Aug 2006 12:08:10 +0000 (12:08 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 28 Aug 2006 12:08:10 +0000 (12:08 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_2_BRANCH@6018

coregrind/m_syswrap/syswrap-generic.c
include/vki-linux.h

index 322b02464e1283ad6a44fbb00939f17661397ac9..ebb8d0578e5fb29aa18f317e561d655ee6ffa1ab 100644 (file)
@@ -3815,6 +3815,32 @@ PRE(sys_ioctl)
                     VKI_E_TABSZ * sizeof(unsigned short) );
       break;
 
+   case VKI_GIO_UNIMAP:
+      if ( ARG3 ) {
+         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) ARG3;
+         PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entry_ct,
+                       sizeof(unsigned short));
+         PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entries,
+                       sizeof(struct vki_unipair *));
+         PRE_MEM_WRITE( "ioctl(GIO_UNIMAP).entries", (Addr)desc->entries,
+                        desc->entry_ct * sizeof(struct vki_unipair));
+      }
+      break;
+   case VKI_PIO_UNIMAP:
+      if ( ARG3 ) {
+         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) ARG3;
+         PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entry_ct,
+                       sizeof(unsigned short) );
+         PRE_MEM_READ( "ioctl(GIO_UNIMAP)", (Addr)&desc->entries,
+                       sizeof(struct vki_unipair *) );
+         PRE_MEM_READ( "ioctl(PIO_UNIMAP).entries", (Addr)desc->entries,
+                       desc->entry_ct * sizeof(struct vki_unipair) );
+      }
+      break;
+   case VKI_PIO_UNIMAPCLR:
+      PRE_MEM_READ( "ioctl(GIO_UNIMAP)", ARG3, sizeof(struct vki_unimapinit));
+      break;
+
    case VKI_KDGKBMODE:
       PRE_MEM_WRITE( "ioctl(KDGKBMODE)", ARG3, sizeof(int) );
       break;
@@ -3902,6 +3928,68 @@ PRE(sys_ioctl)
    case VKI_KDKBDREP:
       PRE_MEM_READ( "ioctl(KBKBDREP)", ARG3, sizeof(struct vki_kbd_repeat) );
       break;
+
+   case VKI_KDFONTOP:
+      if ( ARG3 ) {
+         struct vki_console_font_op *op = (struct vki_console_font_op *) ARG3;
+         PRE_MEM_READ( "ioctl(KDFONTOP)", (Addr)op,
+                       sizeof(struct vki_console_font_op) );
+         switch ( op->op ) {
+            case VKI_KD_FONT_OP_SET:
+               PRE_MEM_READ( "ioctl(KDFONTOP,KD_FONT_OP_SET).data",
+                             (Addr)op->data,
+                             (op->width + 7) / 8 * 32 * op->charcount );
+               break;
+            case VKI_KD_FONT_OP_GET:
+               if ( op->data )
+                  PRE_MEM_WRITE( "ioctl(KDFONTOP,KD_FONT_OP_GET).data",
+                                 (Addr)op->data,
+                                 (op->width + 7) / 8 * 32 * op->charcount );
+               break;
+            case VKI_KD_FONT_OP_SET_DEFAULT:
+               if ( op->data )
+                  PRE_MEM_RASCIIZ( "ioctl(KDFONTOP,KD_FONT_OP_SET_DEFAULT).data",
+                                   (Addr)op->data );
+               break;
+            case VKI_KD_FONT_OP_COPY:
+               break;
+         }
+      }
+      break;
+
+   case VKI_VT_OPENQRY:
+      PRE_MEM_WRITE( "ioctl(VT_OPENQRY)", ARG3, sizeof(int) );
+      break;
+   case VKI_VT_GETMODE:
+      PRE_MEM_WRITE( "ioctl(VT_GETMODE)", ARG3, sizeof(struct vki_vt_mode) );
+      break;
+   case VKI_VT_SETMODE:
+      PRE_MEM_READ( "ioctl(VT_SETMODE)", ARG3, sizeof(struct vki_vt_mode) );
+      break;
+   case VKI_VT_GETSTATE:
+      PRE_MEM_READ( "ioctl(VT_GETSTATE)", ARG3, sizeof(struct vki_vt_stat) );
+      PRE_MEM_WRITE( "ioctl(VT_GETSTATE).v_active",
+                     (Addr) &(((struct vki_vt_stat*) ARG3)->v_active),
+                     sizeof(((struct vki_vt_stat*) ARG3)->v_active));
+      PRE_MEM_WRITE( "ioctl(VT_GETSTATE).v_state",
+                     (Addr) &(((struct vki_vt_stat*) ARG3)->v_state),
+                     sizeof(((struct vki_vt_stat*) ARG3)->v_state));
+      break;
+   case VKI_VT_RELDISP:
+   case VKI_VT_ACTIVATE:
+   case VKI_VT_WAITACTIVE:
+   case VKI_VT_DISALLOCATE:
+      break;
+   case VKI_VT_RESIZE:
+      PRE_MEM_READ( "ioctl(VT_RESIZE)", ARG3, sizeof(struct vki_vt_sizes) );
+      break;
+   case VKI_VT_RESIZEX:
+      PRE_MEM_READ( "ioctl(VT_RESIZEX)", ARG3, sizeof(struct vki_vt_consize) );
+      break;
+   case VKI_VT_LOCKSWITCH:
+   case VKI_VT_UNLOCKSWITCH:
+      break;
+
       
       /* We don't have any specific information on it, so
         try to do something reasonable based on direction and
@@ -4453,6 +4541,19 @@ POST(sys_ioctl)
    case VKI_PIO_UNISCRNMAP:
       break;
 
+   case VKI_GIO_UNIMAP:
+      if ( ARG3 ) {
+         struct vki_unimapdesc *desc = (struct vki_unimapdesc *) ARG3;
+         POST_MEM_WRITE( (Addr)&desc->entry_ct, sizeof(desc->entry_ct));
+         POST_MEM_WRITE( (Addr)desc->entries,
+                        desc->entry_ct * sizeof(struct vki_unipair) );
+      }
+      break;
+   case VKI_PIO_UNIMAP:
+      break;
+   case VKI_PIO_UNIMAPCLR:
+      break;
+
    case VKI_KDGKBMODE:
       POST_MEM_WRITE( ARG3, sizeof(int) );
       break;
@@ -4504,6 +4605,54 @@ POST(sys_ioctl)
    case VKI_KDKBDREP:
       break;
 
+   case VKI_KDFONTOP:
+      if ( ARG3 ) {
+         struct vki_console_font_op *op = (struct vki_console_font_op *) ARG3;
+         switch ( op->op ) {
+            case VKI_KD_FONT_OP_SET:
+               break;
+            case VKI_KD_FONT_OP_GET:
+               if ( op->data )
+                  POST_MEM_WRITE( (Addr) op->data,
+                                  (op->width + 7) / 8 * 32 * op->charcount );
+               break;
+            case VKI_KD_FONT_OP_SET_DEFAULT:
+               break;
+            case VKI_KD_FONT_OP_COPY:
+               break;
+         }
+         POST_MEM_WRITE( (Addr) op, sizeof(*op));
+      }
+      break;
+
+   case VKI_VT_OPENQRY:
+      POST_MEM_WRITE( ARG3, sizeof(int) );
+      break;
+   case VKI_VT_GETMODE:
+      POST_MEM_WRITE( ARG3, sizeof(struct vki_vt_mode) );
+      break;
+   case VKI_VT_SETMODE:
+      break;
+   case VKI_VT_GETSTATE:
+      POST_MEM_WRITE( (Addr) &(((struct vki_vt_stat*) ARG3)->v_active),
+                      sizeof(((struct vki_vt_stat*) ARG3)->v_active) );
+      POST_MEM_WRITE( (Addr) &(((struct vki_vt_stat*) ARG3)->v_state),
+                      sizeof(((struct vki_vt_stat*) ARG3)->v_state) );
+      break;
+   case VKI_VT_RELDISP:
+   case VKI_VT_ACTIVATE:
+   case VKI_VT_WAITACTIVE:
+   case VKI_VT_DISALLOCATE:
+      break;
+   case VKI_VT_RESIZE:
+      break;
+   case VKI_VT_RESIZEX:
+      break;
+   case VKI_VT_LOCKSWITCH:
+   case VKI_VT_UNLOCKSWITCH:
+      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
index 1a51df5e30c0ae3476bd1207f43858ab0821a1d4..7066709a0b9d0f344835aec273b26d0d02938e0c 100644 (file)
@@ -1941,7 +1941,7 @@ struct vki_fb_var_screeninfo {
 };
 
 //----------------------------------------------------------------------
-// From linux-2.6.9/include/linux/kb.h
+// From linux-2.6.9/include/linux/kd.h
 //----------------------------------------------------------------------
 
 #define VKI_GIO_FONT       0x4B60  /* gets font in expanded form */
@@ -1986,8 +1986,21 @@ struct vki_consolefontdesc {
 #define VKI_PIO_UNISCRNMAP 0x4B6A  /* set full Unicode screen mapping */
 
 #define VKI_GIO_UNIMAP     0x4B66  /* get unicode-to-font mapping from kernel */
+struct vki_unipair {
+       unsigned short unicode;
+       unsigned short fontpos;
+};
+struct vki_unimapdesc {
+       unsigned short entry_ct;
+       struct vki_unipair __user *entries;
+};
 #define VKI_PIO_UNIMAP     0x4B67  /* put unicode-to-font mapping in kernel */
 #define VKI_PIO_UNIMAPCLR  0x4B68  /* clear table, possibly advise hash algorithm */
+struct vki_unimapinit {
+       unsigned short advised_hashsize;  /* 0 if no opinion */
+       unsigned short advised_hashstep;  /* 0 if no opinion */
+       unsigned short advised_hashlevel; /* 0 if no opinion */
+};
 
 #define VKI_KDGKBMODE      0x4B44  /* gets current keyboard mode */
 #define VKI_KDSKBMODE      0x4B45  /* sets current keyboard mode */
@@ -2041,6 +2054,19 @@ struct vki_kbd_repeat {
 
 #define VKI_KDFONTOP       0x4B72  /* font operations */
 
+struct vki_console_font_op {
+       unsigned int op;        /* operation code KD_FONT_OP_* */
+       unsigned int flags;     /* KD_FONT_FLAG_* */
+       unsigned int width, height;     /* font size */
+       unsigned int charcount;
+       unsigned char __user *data;     /* font data with height fixed to 32 */
+};
+
+#define VKI_KD_FONT_OP_SET             0       /* Set font */
+#define VKI_KD_FONT_OP_GET             1       /* Get font */
+#define VKI_KD_FONT_OP_SET_DEFAULT     2       /* Set font to default, data points to name / NULL */
+#define VKI_KD_FONT_OP_COPY            3       /* Copy from another console */
+
 //----------------------------------------------------------------------
 // From linux-2.6.9/include/linux/kb.h
 //----------------------------------------------------------------------
@@ -2097,6 +2123,55 @@ struct vki_serial_icounter_struct {
 
 #endif // __VKI_LINUX_H
 
+//----------------------------------------------------------------------
+// From linux-2.6.16/include/linux/vt.h
+//----------------------------------------------------------------------
+
+#define VKI_VT_OPENQRY 0x5600  /* find available vt */
+
+struct vki_vt_mode {
+       char mode;              /* vt mode */
+       char waitv;             /* if set, hang on writes if not active */
+       short relsig;           /* signal to raise on release req */
+       short acqsig;           /* signal to raise on acquisition */
+       short frsig;            /* unused (set to 0) */
+};
+#define VKI_VT_GETMODE 0x5601  /* get mode of active vt */
+#define VKI_VT_SETMODE 0x5602  /* set mode of active vt */
+
+struct vki_vt_stat {
+       unsigned short v_active;        /* active vt */
+       unsigned short v_signal;        /* signal to send */
+       unsigned short v_state;         /* vt bitmask */
+};
+#define VKI_VT_GETSTATE        0x5603  /* get global vt state info */
+#define VKI_VT_SENDSIG 0x5604  /* signal to send to bitmask of vts */
+
+#define VKI_VT_RELDISP 0x5605  /* release display */
+
+#define VKI_VT_ACTIVATE        0x5606  /* make vt active */
+#define VKI_VT_WAITACTIVE      0x5607  /* wait for vt active */
+#define VKI_VT_DISALLOCATE     0x5608  /* free memory associated to vt */
+
+struct vki_vt_sizes {
+       unsigned short v_rows;          /* number of rows */
+       unsigned short v_cols;          /* number of columns */
+       unsigned short v_scrollsize;    /* number of lines of scrollback */
+};
+#define VKI_VT_RESIZE  0x5609  /* set kernel's idea of screensize */
+
+struct vki_vt_consize {
+       unsigned short v_rows;  /* number of rows */
+       unsigned short v_cols;  /* number of columns */
+       unsigned short v_vlin;  /* number of pixel rows on screen */
+       unsigned short v_clin;  /* number of pixel rows per character */
+       unsigned short v_vcol;  /* number of pixel columns on screen */
+       unsigned short v_ccol;  /* number of pixel columns per character */
+};
+#define VKI_VT_RESIZEX      0x560A  /* set kernel's idea of screensize + more */
+#define VKI_VT_LOCKSWITCH   0x560B  /* disallow vt switching */
+#define VKI_VT_UNLOCKSWITCH 0x560C  /* allow vt switching */
+
 /*--------------------------------------------------------------------*/
 /*--- end                                                          ---*/
 /*--------------------------------------------------------------------*/