diff -r -u -d /tmp/strace-4.6/bjm.c ./bjm.c
--- /tmp/strace-4.6/bjm.c	2009-11-06 09:27:46.000000000 -0800
+++ ./bjm.c	2013-01-04 12:26:34.977221825 -0800
@@ -39,7 +39,9 @@
 #include <sys/wait.h>
 #include <sys/resource.h>
 #include <sys/utsname.h>
+#ifndef HAVE_ANDROID_OS
 #include <sys/user.h>
+#endif
 #include <sys/syscall.h>
 #include <signal.h>
 
diff -r -u -d /tmp/strace-4.6/defs.h ./defs.h
--- /tmp/strace-4.6/defs.h	2011-03-15 10:19:09.000000000 -0700
+++ ./defs.h	2013-01-04 12:26:34.977221825 -0800
@@ -33,10 +33,6 @@
 #include "config.h"
 #endif
 
-#ifdef MIPS
-#include <sgidefs.h>
-#endif
-
 #ifdef linux
 #include <features.h>
 #endif
diff -r -u -d /tmp/strace-4.6/file.c ./file.c
--- /tmp/strace-4.6/file.c	2011-03-03 18:08:02.000000000 -0800
+++ ./file.c	2013-01-04 12:26:34.977221825 -0800
@@ -45,6 +45,60 @@
 # define kernel_dirent dirent
 #endif
 
+#ifdef HAVE_ANDROID_OS
+#include <linux/fadvise.h>
+
+// ANDROID: From linux/dirent.h
+
+struct dirent64 {
+ __u64 d_ino;
+ __s64 d_off;
+ unsigned short d_reclen;
+ unsigned char d_type;
+ char d_name[256];
+};
+
+// ANDROID: From kernel_headers/asm/statfs.h
+
+#if !defined(MIPS)
+/*
+ * With EABI there is 4 bytes of padding added to this structure.
+ * Let's pack it so the padding goes away to simplify dual ABI support.
+ * Note that user space does NOT have to pack this structure.
+ */
+struct statfs64 {
+        __u32 f_type;
+        __u32 f_bsize;
+        __u64 f_blocks;
+        __u64 f_bfree;
+        __u64 f_bavail;
+        __u64 f_files;
+        __u64 f_ffree;
+        __kernel_fsid_t f_fsid;
+        __u32 f_namelen;
+        __u32 f_frsize;
+        __u32 f_spare[5];
+} __attribute__ ((packed,aligned(4)));
+#else
+struct statfs64 {
+	__u32 f_type;
+	__u32 f_bsize;
+	__u32 f_frsize;
+	__u32 __pad;
+	__u64 f_blocks;
+	__u64 f_bfree;
+	__u64 f_files;
+	__u64 f_ffree;
+	__u64 f_bavail;
+	__kernel_fsid_t f_fsid;
+	__u32 f_namelen;
+	__u32 f_spare[6];
+};
+#endif
+
+
+#endif /* HAVE_ANDROID_OS */
+
 #ifdef LINUX
 #  ifdef LINUXSPARC
 struct stat {
@@ -1732,11 +1786,19 @@
 		(unsigned long)statbuf.f_bsize,
 		(unsigned long)statbuf.f_blocks,
 		(unsigned long)statbuf.f_bfree);
+#ifdef MIPS
+	tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%ld, %ld}",
+		(unsigned long)statbuf.f_bavail,
+		(unsigned long)statbuf.f_files,
+		(unsigned long)statbuf.f_ffree,
+		statbuf.f_fsid.val[0], statbuf.f_fsid.val[1]);
+#else
 	tprintf("f_bavail=%lu, f_files=%lu, f_ffree=%lu, f_fsid={%d, %d}",
 		(unsigned long)statbuf.f_bavail,
 		(unsigned long)statbuf.f_files,
 		(unsigned long)statbuf.f_ffree,
 		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
+#endif
 #ifdef LINUX
 	tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
 #endif /* LINUX */
@@ -1790,11 +1852,19 @@
 		(unsigned long long)statbuf.f_bsize,
 		(unsigned long long)statbuf.f_blocks,
 		(unsigned long long)statbuf.f_bfree);
+#ifdef MIPS
+	tprintf("f_bavail=%llu, f_files=%llu, f_ffree=%llu, f_fsid={%ld, %ld}",
+		(unsigned long long)statbuf.f_bavail,
+		(unsigned long long)statbuf.f_files,
+		(unsigned long long)statbuf.f_ffree,
+		statbuf.f_fsid.val[0], statbuf.f_fsid.val[1]);
+#else
 	tprintf("f_bavail=%llu, f_files=%llu, f_ffree=%llu, f_fsid={%d, %d}",
 		(unsigned long long)statbuf.f_bavail,
 		(unsigned long long)statbuf.f_files,
 		(unsigned long long)statbuf.f_ffree,
 		statbuf.f_fsid.__val[0], statbuf.f_fsid.__val[1]);
+#endif
 	tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen);
 #ifdef _STATFS_F_FRSIZE
 	tprintf(", f_frsize=%llu", (unsigned long long)statbuf.f_frsize);
diff -r -u -d /tmp/strace-4.6/ioctl.c ./ioctl.c
--- /tmp/strace-4.6/ioctl.c	2011-01-15 12:15:31.000000000 -0800
+++ ./ioctl.c	2013-01-04 12:26:34.977221825 -0800
@@ -155,9 +155,11 @@
 	case 0x03:
 	case 0x12:
 		return block_ioctl(tcp, code, arg);
+#ifndef HAVE_ANDROID_OS
 	case 0x22:
 		return scsi_ioctl(tcp, code, arg);
 #endif
+#endif
 	default:
 		break;
 	}
diff -r -u -d /tmp/strace-4.6/ipc.c ./ipc.c
--- /tmp/strace-4.6/ipc.c	2010-03-31 15:22:01.000000000 -0700
+++ ./ipc.c	2013-01-04 12:26:34.977221825 -0800
@@ -40,9 +40,15 @@
 
 #include <fcntl.h>
 #include <sys/ipc.h>
+#ifdef HAVE_ANDROID_OS
+#include <linux/sem.h>
+#include <linux/msg.h>
+#include <linux/shm.h>
+#else
 #include <sys/sem.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
+#endif
 
 #ifndef MSG_STAT
 #define MSG_STAT 11
diff -r -u -d /tmp/strace-4.6/process.c ./process.c
--- /tmp/strace-4.6/process.c	2011-03-14 14:58:59.000000000 -0700
+++ ./process.c	2013-01-04 12:26:34.987221830 -0800
@@ -45,7 +45,11 @@
 #include <sys/wait.h>
 #include <sys/resource.h>
 #include <sys/utsname.h>
+#ifdef HAVE_ANDROID_OS
+#include <asm/user.h>
+#else
 #include <sys/user.h>
+#endif
 #include <sys/syscall.h>
 #include <signal.h>
 #ifdef SUNOS4
@@ -114,6 +118,10 @@
 #define GETGROUPS32_T __kernel_gid32_t
 #endif /* LINUX */
 
+#ifdef HAVE_ANDROID_OS
+#define __sched_priority sched_priority
+#endif
+
 #if defined(LINUX) && defined(IA64)
 # include <asm/ptrace_offsets.h>
 # include <asm/rse.h>
diff -r -u -d /tmp/strace-4.6/signal.c ./signal.c
--- /tmp/strace-4.6/signal.c	2011-03-10 15:14:47.000000000 -0800
+++ ./signal.c	2013-01-04 12:26:34.987221830 -0800
@@ -37,9 +37,17 @@
 
 #include <stdint.h>
 #include <signal.h>
+#ifndef HAVE_ANDROID_OS
 #include <sys/user.h>
+#endif
 #include <fcntl.h>
 
+#ifdef HAVE_ANDROID_OS
+//FIXME use "sigprocmask" or something
+#define sigmask(sig)    (1UL << ((sig) - 1))
+#define sigcontext_struct sigcontext
+#endif
+
 #ifdef SVR4
 #include <sys/ucontext.h>
 #endif /* SVR4 */
@@ -455,7 +463,7 @@
 
 #endif /* LINUX */
 
-#if __GLIBC_MINOR__ < 1
+#if __GLIBC_MINOR__ < 1 && !defined(HAVE_ANDROID_OS)
 /* Type for data associated with a signal.  */
 typedef union sigval
 {
@@ -1492,6 +1500,7 @@
 		tcp->u_arg[0] = 0;
 		sp = regs.regs[29];
 		if (umove(tcp, sp, &si) < 0)
+			return 0;
 		tcp->u_arg[0] = 1;
 		tcp->u_arg[1] = si.si_mask;
 	} else {
diff -r -u -d /tmp/strace-4.6/syscall.c ./syscall.c
--- /tmp/strace-4.6/syscall.c	2011-02-18 16:02:27.000000000 -0800
+++ ./syscall.c	2013-03-21 17:57:17.999238040 -0700
@@ -38,7 +38,9 @@
 #include <signal.h>
 #include <time.h>
 #include <errno.h>
+#ifndef HAVE_ANDROID_OS
 #include <sys/user.h>
+#endif
 #include <sys/syscall.h>
 #include <sys/param.h>
 
@@ -2600,6 +2602,7 @@
 	}
 
 	switch (known_scno(tcp)) {
+#ifndef __ARM_EABI__
 #ifdef SYS_socket_subcall
 	case SYS_socketcall:
 		decode_subcall(tcp, SYS_socket_subcall,
@@ -2612,6 +2615,7 @@
 			SYS_ipc_nsubcalls, shift_style);
 		break;
 #endif
+#endif
 #ifdef SVR4
 #ifdef SYS_pgrpsys_subcall
 	case SYS_pgrpsys:
diff -r -u -d /tmp/strace-4.6/system.c ./system.c
--- /tmp/strace-4.6/system.c	2011-02-22 02:22:13.000000000 -0800
+++ ./system.c	2013-03-21 17:27:34.050083824 -0700
@@ -32,6 +32,11 @@
 
 #include "defs.h"
 
+#ifdef HAVE_ANDROID_OS
+#undef __unused
+#include <linux/socket.h>
+#endif
+
 #ifdef LINUX
 #define _LINUX_SOCKET_H
 #define _LINUX_FS_H
@@ -83,7 +88,7 @@
 #include <linux/utsname.h>
 #endif
 
-#ifdef HAVE_ASM_SYSMIPS_H
+#ifdef MIPS
 #include <asm/sysmips.h>
 #endif
 
diff -r -u -d /tmp/strace-4.6/time.c ./time.c
--- /tmp/strace-4.6/time.c	2011-03-03 18:08:02.000000000 -0800
+++ ./time.c	2013-01-04 12:26:34.987221830 -0800
@@ -33,7 +33,11 @@
 
 #ifdef LINUX
 #include <linux/version.h>
+#ifdef HAVE_ANDROID_OS
+#include <linux/timex.h>
+#else
 #include <sys/timex.h>
+#endif
 #include <linux/ioctl.h>
 #include <linux/rtc.h>
 
diff -r -u -d /tmp/strace-4.6/util.c ./util.c
--- /tmp/strace-4.6/util.c	2011-03-03 18:08:02.000000000 -0800
+++ ./util.c	2013-03-21 17:57:25.519150107 -0700
@@ -37,7 +37,9 @@
 
 #include <signal.h>
 #include <sys/syscall.h>
+#ifndef HAVE_ANDROID_OS
 #include <sys/user.h>
+#endif
 #include <sys/param.h>
 #include <fcntl.h>
 #if HAVE_SYS_UIO_H