}
break;
+# if defined(VGPV_arm_linux_android)
+ /* ashmem */
+ case VKI_ASHMEM_GET_SIZE:
+ case VKI_ASHMEM_SET_SIZE:
+ case VKI_ASHMEM_GET_PROT_MASK:
+ case VKI_ASHMEM_SET_PROT_MASK:
+ case VKI_ASHMEM_GET_PIN_STATUS:
+ case VKI_ASHMEM_PURGE_ALL_CACHES:
+ break;
+ case VKI_ASHMEM_GET_NAME:
+ PRE_MEM_WRITE( "ioctl(ASHMEM_SET_NAME)", ARG3, VKI_ASHMEM_NAME_LEN );
+ break;
+ case VKI_ASHMEM_SET_NAME:
+ PRE_MEM_RASCIIZ( "ioctl(ASHMEM_SET_NAME)", ARG3);
+ break;
+ case VKI_ASHMEM_PIN:
+ case VKI_ASHMEM_UNPIN:
+ PRE_MEM_READ( "ioctl(ASHMEM_PIN|ASHMEM_UNPIN)",
+ ARG3, sizeof(struct vki_ashmem_pin) );
+ break;
+
+ /* binder */
+ case VKI_BINDER_WRITE_READ:
+ if (ARG3) {
+ struct vki_binder_write_read* bwr
+ = (struct vki_binder_write_read*)ARG3;
+
+ PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).write_buffer",
+ bwr->write_buffer);
+ PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).write_size",
+ bwr->write_size);
+ PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).write_consumed",
+ bwr->write_consumed);
+ PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).read_buffer",
+ bwr->read_buffer);
+ PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).read_size",
+ bwr->read_size);
+ PRE_FIELD_READ("ioctl(BINDER_WRITE_READ).read_consumed",
+ bwr->read_consumed);
+
+ PRE_FIELD_WRITE("ioctl(BINDER_WRITE_READ).write_consumed",
+ bwr->write_consumed);
+ PRE_FIELD_WRITE("ioctl(BINDER_WRITE_READ).read_consumed",
+ bwr->read_consumed);
+
+ if (bwr->read_size)
+ PRE_MEM_WRITE("ioctl(BINDER_WRITE_READ).read_buffer[]",
+ (Addr)bwr->read_buffer, bwr->read_size);
+ if (bwr->write_size)
+ PRE_MEM_READ("ioctl(BINDER_WRITE_READ).write_buffer[]",
+ (Addr)bwr->write_buffer, bwr->write_size);
+ }
+ break;
+
+ case VKI_BINDER_SET_IDLE_TIMEOUT:
+ case VKI_BINDER_SET_MAX_THREADS:
+ case VKI_BINDER_SET_IDLE_PRIORITY:
+ case VKI_BINDER_SET_CONTEXT_MGR:
+ case VKI_BINDER_THREAD_EXIT:
+ break;
+ case VKI_BINDER_VERSION:
+ if (ARG3) {
+ struct vki_binder_version* bv = (struct vki_binder_version*)ARG3;
+ PRE_FIELD_WRITE("ioctl(BINDER_VERSION)", bv->protocol_version);
+ }
+ break;
+# endif /* defined(VGPV_arm_linux_android) */
+
default:
/* EVIOC* are variable length and return size written on success */
switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
}
break;
+# if defined(VGPV_arm_linux_android)
+ /* ashmem */
+ case VKI_ASHMEM_GET_SIZE:
+ case VKI_ASHMEM_SET_SIZE:
+ case VKI_ASHMEM_GET_PROT_MASK:
+ case VKI_ASHMEM_SET_PROT_MASK:
+ case VKI_ASHMEM_GET_PIN_STATUS:
+ case VKI_ASHMEM_PURGE_ALL_CACHES:
+ case VKI_ASHMEM_SET_NAME:
+ case VKI_ASHMEM_PIN:
+ case VKI_ASHMEM_UNPIN:
+ break;
+ case VKI_ASHMEM_GET_NAME:
+ POST_MEM_WRITE( ARG3, VKI_ASHMEM_NAME_LEN );
+ break;
+
+ /* binder */
+ case VKI_BINDER_WRITE_READ:
+ if (ARG3) {
+ struct vki_binder_write_read* bwr
+ = (struct vki_binder_write_read*)ARG3;
+ POST_FIELD_WRITE(bwr->write_consumed);
+ POST_FIELD_WRITE(bwr->read_consumed);
+
+ if (bwr->read_size)
+ POST_MEM_WRITE((Addr)bwr->read_buffer, bwr->read_consumed);
+ }
+ break;
+
+ case VKI_BINDER_SET_IDLE_TIMEOUT:
+ case VKI_BINDER_SET_MAX_THREADS:
+ case VKI_BINDER_SET_IDLE_PRIORITY:
+ case VKI_BINDER_SET_CONTEXT_MGR:
+ case VKI_BINDER_THREAD_EXIT:
+ break;
+ case VKI_BINDER_VERSION:
+ if (ARG3) {
+ struct vki_binder_version* bv = (struct vki_binder_version*)ARG3;
+ POST_FIELD_WRITE(bv->protocol_version);
+ }
+ break;
+# endif /* defined(VGPV_arm_linux_android) */
+
default:
/* EVIOC* are variable length and return size written on success */
switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
//----------------------------------------------------------------------
typedef __vki_s32 vki_int32_t;
+typedef __vki_s64 vki_int64_t;
typedef __vki_u8 vki_uint8_t;
typedef __vki_u16 vki_uint16_t;
#define VKI_FIOQSIZE 0x5460 /* Value differs on some platforms */
#endif
+//----------------------------------------------------------------------
+// From kernel/common/include/linux/ashmem.h
+//----------------------------------------------------------------------
+
+#if defined(VGPV_arm_linux_android)
+
+#define VKI_ASHMEM_NAME_LEN 256
+
+#define VKI_ASHMEM_NAME_DEF "dev/ashmem"
+
+#define VKI_ASHMEM_NOT_PURGED 0
+#define VKI_ASHMEM_WAS_PURGED 1
+
+#define VKI_ASHMEM_IS_UNPINNED 0
+#define VKI_ASHMEM_IS_PINNED 1
+
+struct vki_ashmem_pin {
+ vki_uint32_t offset;
+ vki_uint32_t len;
+};
+
+#define __VKI_ASHMEMIOC 0x77
+
+#define VKI_ASHMEM_SET_NAME _VKI_IOW(__VKI_ASHMEMIOC, 1, char[VKI_ASHMEM_NAME_LEN])
+#define VKI_ASHMEM_GET_NAME _VKI_IOR(__VKI_ASHMEMIOC, 2, char[VKI_ASHMEM_NAME_LEN])
+#define VKI_ASHMEM_SET_SIZE _VKI_IOW(__VKI_ASHMEMIOC, 3, vki_size_t)
+#define VKI_ASHMEM_GET_SIZE _VKI_IO(__VKI_ASHMEMIOC, 4)
+#define VKI_ASHMEM_SET_PROT_MASK _VKI_IOW(__VKI_ASHMEMIOC, 5, unsigned long)
+#define VKI_ASHMEM_GET_PROT_MASK _VKI_IO(__VKI_ASHMEMIOC, 6)
+#define VKI_ASHMEM_PIN _VKI_IOW(__VKI_ASHMEMIOC, 7, struct vki_ashmem_pin)
+#define VKI_ASHMEM_UNPIN _VKI_IOW(__VKI_ASHMEMIOC, 8, struct vki_ashmem_pin)
+#define VKI_ASHMEM_GET_PIN_STATUS _VKI_IO(__VKI_ASHMEMIOC, 9)
+#define VKI_ASHMEM_PURGE_ALL_CACHES _VKI_IO(__VKI_ASHMEMIOC, 10)
+
+//----------------------------------------------------------------------
+// From kernel/common/include/linux/binder.h
+//----------------------------------------------------------------------
+
+struct vki_binder_write_read {
+ signed long write_size;
+ signed long write_consumed;
+ unsigned long write_buffer;
+ signed long read_size;
+ signed long read_consumed;
+ unsigned long read_buffer;
+};
+
+struct vki_binder_version {
+ signed long protocol_version;
+};
+
+#define VKI_BINDER_WRITE_READ _VKI_IOWR('b', 1, struct vki_binder_write_read)
+#define VKI_BINDER_SET_IDLE_TIMEOUT _VKI_IOW('b', 3, vki_int64_t)
+#define VKI_BINDER_SET_MAX_THREADS _VKI_IOW('b', 5, vki_size_t)
+#define VKI_BINDER_SET_IDLE_PRIORITY _VKI_IOW('b', 6, int)
+#define VKI_BINDER_SET_CONTEXT_MGR _VKI_IOW('b', 7, int)
+#define VKI_BINDER_THREAD_EXIT _VKI_IOW('b', 8, int)
+#define VKI_BINDER_VERSION _VKI_IOWR('b', 9, struct vki_binder_version)
+
+#endif /* defined(VGPV_arm_linux_android) */
+
#endif // __VKI_LINUX_H
/*--------------------------------------------------------------------*/