am 87392821: Merge "Add missing ioctl wrappers for Nexus 10."

* commit '87392821575ceb19dbf92b02c8e4ded0e7dcf4fc':
  Add missing ioctl wrappers for Nexus 10.
diff --git a/main/Android.mk b/main/Android.mk
index 744b6ed..35057e2 100644
--- a/main/Android.mk
+++ b/main/Android.mk
@@ -14,6 +14,8 @@
 
 LOCAL_PATH:= $(call my-dir)
 
+ANDROID_HARDWARE := ANDROID_HARDWARE_generic
+
 ifneq ($(filter arm x86,$(TARGET_ARCH)),)
 
 common_cflags := \
@@ -26,8 +28,7 @@
 	-DVGPV_$(TARGET_ARCH)_linux_android=1 \
 	-DVG_PLATFORM=\"$(TARGET_ARCH)-linux\" \
 	-DVG_LIBDIR=\"/system/lib/valgrind\" \
-	-DANDROID_SYMBOLS_DIR=\"/data/local/symbols\" \
-	-DANDROID_HARDWARE_nexus_s
+	-DANDROID_SYMBOLS_DIR=\"/data/local/symbols\"
 
 common_includes := \
 	external/valgrind/main \
@@ -39,6 +40,13 @@
 
 ifeq ($(TARGET_ARCH),arm)
 tool_ldflags := -static -Wl,--build-id=none,-Ttext=0x38000000 -nodefaultlibs -nostartfiles -u _start -e_start
+
+# ioctl/syscall wrappers are device dependent
+ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),manta)
+ANDROID_HARDWARE := ANDROID_HARDWARE_nexus_10
+endif
+common_cflags += -D$(ANDROID_HARDWARE)
+
 else
 tool_ldflags := -static -Wl,-Ttext=0x38000000 -nodefaultlibs -nostartfiles -u _start -e_start
 endif
diff --git a/main/coregrind/m_syswrap/syswrap-linux.c b/main/coregrind/m_syswrap/syswrap-linux.c
index fbee4f8..89c8c77 100644
--- a/main/coregrind/m_syswrap/syswrap-linux.c
+++ b/main/coregrind/m_syswrap/syswrap-linux.c
@@ -4317,6 +4317,18 @@
       break;
    }
 
+
+#  if defined(ANDROID_HARDWARE_nexus_10)
+
+   /* undocumented ioctl ids noted on the device */
+   if (ARG2 >= 0xc0108000 && ARG2 <= 0xc1e8820b && ARG3 != 0) {
+       int size = (ARG2 >> 16) & 0x3fff;
+       PRE_MEM_WRITE("ioctl(GL_UNDOCUMENTED)", (Addr)ARG3,  size);
+       return;
+   }
+
+#  endif
+
    // We now handle those that do look at ARG3 (and unknown ones fall into
    // this category).  Nb: some of these may well belong in the
    // doesn't-use-ARG3 switch above.
@@ -5520,6 +5532,7 @@
            PRE_FIELD_WRITE("ioctl(BINDER_VERSION)", bv->protocol_version);
        }
        break;
+
 #  endif /* defined(VGPV_*_linux_android) */
 
    case VKI_HCIINQUIRY:
@@ -5542,6 +5555,9 @@
    case VKI_KVM_RUN:
       break;
 
+   case VKI_EVIOCSSUSPENDBLOCK:
+      break;
+
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -5649,6 +5665,15 @@
    /* END generic/emulator specific ioctls */
 
 
+#  elif defined(ANDROID_HARDWARE_nexus_10)
+
+   /* undocumented ioctl ids noted on the device */
+   if (ARG2 >= 0xc0108000 && ARG2 <= 0xc1e8820b && ARG3 != 0) {
+      int size = (ARG2 >> 16) & 0x3fff;
+      POST_MEM_WRITE(ARG3, size);
+   }
+
+
 #  else /* no ANDROID_HARDWARE_anything defined */
 
 #   warning ""
@@ -5657,6 +5682,7 @@
 #   warning "building for.  Currently known values are"
 #   warning ""
 #   warning "   ANDROID_HARDWARE_nexus_s       Samsung Nexus S"
+#   warning "   ANDROID_HARDWARE_nexus_10      Samsung Nexus 10"
 #   warning "   ANDROID_HARDWARE_generic       Generic device (eg, Pandaboard)"
 #   warning "   ANDROID_HARDWARE_emulator      x86 or arm emulator"
 #   warning ""
@@ -6539,6 +6565,10 @@
    case VKI_KVM_S390_INITIAL_RESET:
       break;
 
+   case VKI_EVIOCSSUSPENDBLOCK:
+      POST_MEM_WRITE( ARG3, sizeof(int) );
+      break;
+
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
diff --git a/main/include/vki/vki-linux.h b/main/include/vki/vki-linux.h
index c18195e..8cefd8f 100644
--- a/main/include/vki/vki-linux.h
+++ b/main/include/vki/vki-linux.h
@@ -2813,6 +2813,8 @@
 
 #define VKI_EVIOCGBIT(ev,len)	_VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len)	/* get event bits */
 
+#define VKI_EVIOCSSUSPENDBLOCK	_VKI_IOW('E', 0x91, int)	/* set suspend block enable */
+
 /*
  * Event types
  */