am 98013c6f: am cc8a21a2: SDK: Generate build-tools package. DO NOT MERGE.

* commit '98013c6f47475f0990eb135353fd8f9107267e73':
  SDK: Generate build-tools package. DO NOT MERGE.
diff --git a/apps/Development/AndroidManifest.xml b/apps/Development/AndroidManifest.xml
index 32738dd..5847201 100644
--- a/apps/Development/AndroidManifest.xml
+++ b/apps/Development/AndroidManifest.xml
@@ -25,6 +25,7 @@
     <uses-permission android:name="android.permission.DUMP" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.HARDWARE_TEST" />
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
     <uses-permission android:name="android.permission.REBOOT" />
@@ -117,12 +118,14 @@
             </intent-filter>
         </activity>
 
+    <!--
         <activity android:name="GLSTester" android:label="Google Login Service">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.TEST" />
             </intent-filter>
         </activity>
+    -->
 
         <activity android:name="RunningProcesses" android:label="Running processes">
             <intent-filter>
diff --git a/build/product_sdk.mk b/build/product_sdk.mk
index ad82778..3d54411 100644
--- a/build/product_sdk.mk
+++ b/build/product_sdk.mk
@@ -47,7 +47,6 @@
 	org.eclipse.equinox.common_3.6.0.v20100503 \
 	org.eclipse.core.commands_3.6.0.I20100512-1500 \
 	osgi \
-	swing-worker-1.1 \
 	vgabios-cirrus.bin
 
 :qa!

diff --git a/build/tools/sdk_repo.mk b/build/tools/sdk_repo.mk
index 4e638c2..c388230 100644
--- a/build/tools/sdk_repo.mk
+++ b/build/tools/sdk_repo.mk
@@ -160,13 +160,13 @@
 SDK_REPO_XSD := \
 	$(lastword \
 	  $(wildcard \
-	    $(TOPDIR)sdk/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-repository-*.xsd \
+	    $(TOPDIR)prebuilts/devtools/repository/sdk-repository-*.xsd \
 	))
 
 SDK_ADDON_XSD := \
 	$(lastword \
 	  $(wildcard \
-	    $(TOPDIR)sdk/sdkmanager/libs/sdklib/src/com/android/sdklib/repository/sdk-addon-*.xsd \
+	    $(TOPDIR)prebuilts/devtools/repository/sdk-addon-*.xsd \
 	))
 
 # -----------------------------------------------------------------
diff --git a/build/sdk_only_whitelist.mk b/build/windows_sdk_whitelist.mk
similarity index 94%
rename from build/sdk_only_whitelist.mk
rename to build/windows_sdk_whitelist.mk
index 191e1b4..523883a 100644
--- a/build/sdk_only_whitelist.mk
+++ b/build/windows_sdk_whitelist.mk
@@ -13,11 +13,11 @@
 
 # Note that there are 2 flavors of this file:
 #
-# - The other file: sdk/build/sdk_only_whitelist.mk
+# - The other file: sdk/build/windows_sdk_whitelist.mk
 #   must list all projects that are that are NOT specific to a given platform.
 #   These binaries are the ones typically found in the SDK/tools directory.
 #
-# - This file: development/build/sdk_only_whitelist.mk
+# - This file: development/build/windows_sdk_whitelist.mk
 #   must list all projects that are specific to a given platform. These
 #   projects generate files that are generally locates in SDK/platform-tools,
 #   or SDK/platforms/, etc.
diff --git a/ndk/platforms/README.CRT.TXT b/ndk/platforms/README.CRT.TXT
index c7b2c41..8cc33ed 100644
--- a/ndk/platforms/README.CRT.TXT
+++ b/ndk/platforms/README.CRT.TXT
@@ -15,7 +15,7 @@
   crtbegin_static.[cS]
     This file contains a tiny ELF startup entry point (named '_start')
     that is linked into every Android _static_ executable. These binaries can
-    run on any Linux ARM system, but cannot perform dynamic linking at all.
+    run on any Linux system, but cannot perform dynamic linking at all.
 
     Note that the kernel calls the '_start' entry point directly when it
     launches such an executable. The _start stub is used to call the
diff --git a/ndk/platforms/android-14/arch-arm/symbols/libOpenSLES.so.functions.txt b/ndk/platforms/android-14/arch-arm/symbols/libOpenSLES.so.functions.txt
new file mode 100644
index 0000000..f69a3e5
--- /dev/null
+++ b/ndk/platforms/android-14/arch-arm/symbols/libOpenSLES.so.functions.txt
@@ -0,0 +1,3 @@
+slCreateEngine
+slQueryNumSupportedEngineInterfaces
+slQuerySupportedEngineInterfaces
diff --git a/ndk/platforms/android-14/arch-x86/symbols/libOpenSLES.so.functions.txt b/ndk/platforms/android-14/arch-x86/symbols/libOpenSLES.so.functions.txt
new file mode 100644
index 0000000..f69a3e5
--- /dev/null
+++ b/ndk/platforms/android-14/arch-x86/symbols/libOpenSLES.so.functions.txt
@@ -0,0 +1,3 @@
+slCreateEngine
+slQueryNumSupportedEngineInterfaces
+slQuerySupportedEngineInterfaces
diff --git a/ndk/platforms/android-3/arch-arm/include/asm/socket.h b/ndk/platforms/android-3/arch-arm/include/asm/socket.h
index 1f0050a..0741bad 100644
--- a/ndk/platforms/android-3/arch-arm/include/asm/socket.h
+++ b/ndk/platforms/android-3/arch-arm/include/asm/socket.h
@@ -7,55 +7,73 @@
  ***   structures, and macros generated from the original header, and thus,
  ***   contains no copyrightable information.
  ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
  ****************************************************************************
  ****************************************************************************/
 #ifndef _ASMARM_SOCKET_H
 #define _ASMARM_SOCKET_H
-
 #include <asm/sockios.h>
-
 #define SOL_SOCKET 1
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_DEBUG 1
 #define SO_REUSEADDR 2
 #define SO_TYPE 3
 #define SO_ERROR 4
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_DONTROUTE 5
 #define SO_BROADCAST 6
 #define SO_SNDBUF 7
 #define SO_RCVBUF 8
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_SNDBUFFORCE 32
 #define SO_RCVBUFFORCE 33
 #define SO_KEEPALIVE 9
 #define SO_OOBINLINE 10
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_NO_CHECK 11
 #define SO_PRIORITY 12
 #define SO_LINGER 13
 #define SO_BSDCOMPAT 14
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PASSCRED 16
 #define SO_PEERCRED 17
 #define SO_RCVLOWAT 18
 #define SO_SNDLOWAT 19
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_RCVTIMEO 20
 #define SO_SNDTIMEO 21
-
 #define SO_SECURITY_AUTHENTICATION 22
 #define SO_SECURITY_ENCRYPTION_TRANSPORT 23
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_SECURITY_ENCRYPTION_NETWORK 24
-
 #define SO_BINDTODEVICE 25
-
 #define SO_ATTACH_FILTER 26
 #define SO_DETACH_FILTER 27
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PEERNAME 28
 #define SO_TIMESTAMP 29
 #define SCM_TIMESTAMP SO_TIMESTAMP
-
 #define SO_ACCEPTCONN 30
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PEERSEC 31
 #define SO_PASSSEC 34
-
+#define SO_TIMESTAMPNS 35
+#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_MARK 36
+#define SO_TIMESTAMPING 37
+#define SCM_TIMESTAMPING SO_TIMESTAMPING
+#define SO_PROTOCOL 38
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_DOMAIN 39
+#define SO_RXQ_OVFL 40
+#define SO_WIFI_STATUS 41
+#define SCM_WIFI_STATUS SO_WIFI_STATUS
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
diff --git a/ndk/platforms/android-3/arch-arm/include/asm/unistd.h b/ndk/platforms/android-3/arch-arm/include/asm/unistd.h
index 9a30ddc..454ed89 100644
--- a/ndk/platforms/android-3/arch-arm/include/asm/unistd.h
+++ b/ndk/platforms/android-3/arch-arm/include/asm/unistd.h
@@ -7,353 +7,480 @@
  ***   structures, and macros generated from the original header, and thus,
  ***   contains no copyrightable information.
  ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
  ****************************************************************************
  ****************************************************************************/
 #ifndef __ASM_ARM_UNISTD_H
 #define __ASM_ARM_UNISTD_H
-
 #define __NR_OABI_SYSCALL_BASE 0x900000
-
 #if defined(__thumb__) || defined(__ARM_EABI__)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_SYSCALL_BASE 0
 #else
 #define __NR_SYSCALL_BASE __NR_OABI_SYSCALL_BASE
 #endif
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_restart_syscall (__NR_SYSCALL_BASE+ 0)
 #define __NR_exit (__NR_SYSCALL_BASE+ 1)
 #define __NR_fork (__NR_SYSCALL_BASE+ 2)
 #define __NR_read (__NR_SYSCALL_BASE+ 3)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_write (__NR_SYSCALL_BASE+ 4)
 #define __NR_open (__NR_SYSCALL_BASE+ 5)
 #define __NR_close (__NR_SYSCALL_BASE+ 6)
-
 #define __NR_creat (__NR_SYSCALL_BASE+ 8)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_link (__NR_SYSCALL_BASE+ 9)
 #define __NR_unlink (__NR_SYSCALL_BASE+ 10)
 #define __NR_execve (__NR_SYSCALL_BASE+ 11)
 #define __NR_chdir (__NR_SYSCALL_BASE+ 12)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_time (__NR_SYSCALL_BASE+ 13)
 #define __NR_mknod (__NR_SYSCALL_BASE+ 14)
 #define __NR_chmod (__NR_SYSCALL_BASE+ 15)
 #define __NR_lchown (__NR_SYSCALL_BASE+ 16)
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lseek (__NR_SYSCALL_BASE+ 19)
 #define __NR_getpid (__NR_SYSCALL_BASE+ 20)
 #define __NR_mount (__NR_SYSCALL_BASE+ 21)
 #define __NR_umount (__NR_SYSCALL_BASE+ 22)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setuid (__NR_SYSCALL_BASE+ 23)
 #define __NR_getuid (__NR_SYSCALL_BASE+ 24)
 #define __NR_stime (__NR_SYSCALL_BASE+ 25)
 #define __NR_ptrace (__NR_SYSCALL_BASE+ 26)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_alarm (__NR_SYSCALL_BASE+ 27)
-
 #define __NR_pause (__NR_SYSCALL_BASE+ 29)
 #define __NR_utime (__NR_SYSCALL_BASE+ 30)
-
 #define __NR_access (__NR_SYSCALL_BASE+ 33)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_nice (__NR_SYSCALL_BASE+ 34)
-
 #define __NR_sync (__NR_SYSCALL_BASE+ 36)
 #define __NR_kill (__NR_SYSCALL_BASE+ 37)
 #define __NR_rename (__NR_SYSCALL_BASE+ 38)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mkdir (__NR_SYSCALL_BASE+ 39)
 #define __NR_rmdir (__NR_SYSCALL_BASE+ 40)
 #define __NR_dup (__NR_SYSCALL_BASE+ 41)
 #define __NR_pipe (__NR_SYSCALL_BASE+ 42)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_times (__NR_SYSCALL_BASE+ 43)
-
 #define __NR_brk (__NR_SYSCALL_BASE+ 45)
 #define __NR_setgid (__NR_SYSCALL_BASE+ 46)
 #define __NR_getgid (__NR_SYSCALL_BASE+ 47)
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_geteuid (__NR_SYSCALL_BASE+ 49)
 #define __NR_getegid (__NR_SYSCALL_BASE+ 50)
 #define __NR_acct (__NR_SYSCALL_BASE+ 51)
 #define __NR_umount2 (__NR_SYSCALL_BASE+ 52)
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_ioctl (__NR_SYSCALL_BASE+ 54)
 #define __NR_fcntl (__NR_SYSCALL_BASE+ 55)
-
 #define __NR_setpgid (__NR_SYSCALL_BASE+ 57)
-
 #define __NR_umask (__NR_SYSCALL_BASE+ 60)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_chroot (__NR_SYSCALL_BASE+ 61)
 #define __NR_ustat (__NR_SYSCALL_BASE+ 62)
 #define __NR_dup2 (__NR_SYSCALL_BASE+ 63)
 #define __NR_getppid (__NR_SYSCALL_BASE+ 64)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getpgrp (__NR_SYSCALL_BASE+ 65)
 #define __NR_setsid (__NR_SYSCALL_BASE+ 66)
 #define __NR_sigaction (__NR_SYSCALL_BASE+ 67)
-
 #define __NR_setreuid (__NR_SYSCALL_BASE+ 70)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setregid (__NR_SYSCALL_BASE+ 71)
 #define __NR_sigsuspend (__NR_SYSCALL_BASE+ 72)
 #define __NR_sigpending (__NR_SYSCALL_BASE+ 73)
 #define __NR_sethostname (__NR_SYSCALL_BASE+ 74)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setrlimit (__NR_SYSCALL_BASE+ 75)
 #define __NR_getrlimit (__NR_SYSCALL_BASE+ 76)  
 #define __NR_getrusage (__NR_SYSCALL_BASE+ 77)
 #define __NR_gettimeofday (__NR_SYSCALL_BASE+ 78)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_settimeofday (__NR_SYSCALL_BASE+ 79)
 #define __NR_getgroups (__NR_SYSCALL_BASE+ 80)
 #define __NR_setgroups (__NR_SYSCALL_BASE+ 81)
 #define __NR_select (__NR_SYSCALL_BASE+ 82)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_symlink (__NR_SYSCALL_BASE+ 83)
-
 #define __NR_readlink (__NR_SYSCALL_BASE+ 85)
 #define __NR_uselib (__NR_SYSCALL_BASE+ 86)
 #define __NR_swapon (__NR_SYSCALL_BASE+ 87)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_reboot (__NR_SYSCALL_BASE+ 88)
 #define __NR_readdir (__NR_SYSCALL_BASE+ 89)
 #define __NR_mmap (__NR_SYSCALL_BASE+ 90)
 #define __NR_munmap (__NR_SYSCALL_BASE+ 91)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_truncate (__NR_SYSCALL_BASE+ 92)
 #define __NR_ftruncate (__NR_SYSCALL_BASE+ 93)
 #define __NR_fchmod (__NR_SYSCALL_BASE+ 94)
 #define __NR_fchown (__NR_SYSCALL_BASE+ 95)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getpriority (__NR_SYSCALL_BASE+ 96)
 #define __NR_setpriority (__NR_SYSCALL_BASE+ 97)
-
 #define __NR_statfs (__NR_SYSCALL_BASE+ 99)
 #define __NR_fstatfs (__NR_SYSCALL_BASE+100)
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_socketcall (__NR_SYSCALL_BASE+102)
 #define __NR_syslog (__NR_SYSCALL_BASE+103)
 #define __NR_setitimer (__NR_SYSCALL_BASE+104)
 #define __NR_getitimer (__NR_SYSCALL_BASE+105)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_stat (__NR_SYSCALL_BASE+106)
 #define __NR_lstat (__NR_SYSCALL_BASE+107)
 #define __NR_fstat (__NR_SYSCALL_BASE+108)
-
 #define __NR_vhangup (__NR_SYSCALL_BASE+111)
-
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_syscall (__NR_SYSCALL_BASE+113)  
 #define __NR_wait4 (__NR_SYSCALL_BASE+114)
 #define __NR_swapoff (__NR_SYSCALL_BASE+115)
 #define __NR_sysinfo (__NR_SYSCALL_BASE+116)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_ipc (__NR_SYSCALL_BASE+117)
 #define __NR_fsync (__NR_SYSCALL_BASE+118)
 #define __NR_sigreturn (__NR_SYSCALL_BASE+119)
 #define __NR_clone (__NR_SYSCALL_BASE+120)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setdomainname (__NR_SYSCALL_BASE+121)
 #define __NR_uname (__NR_SYSCALL_BASE+122)
-
 #define __NR_adjtimex (__NR_SYSCALL_BASE+124)
 #define __NR_mprotect (__NR_SYSCALL_BASE+125)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sigprocmask (__NR_SYSCALL_BASE+126)
-
 #define __NR_init_module (__NR_SYSCALL_BASE+128)
 #define __NR_delete_module (__NR_SYSCALL_BASE+129)
-
 #define __NR_quotactl (__NR_SYSCALL_BASE+131)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getpgid (__NR_SYSCALL_BASE+132)
 #define __NR_fchdir (__NR_SYSCALL_BASE+133)
 #define __NR_bdflush (__NR_SYSCALL_BASE+134)
 #define __NR_sysfs (__NR_SYSCALL_BASE+135)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_personality (__NR_SYSCALL_BASE+136)
-
 #define __NR_setfsuid (__NR_SYSCALL_BASE+138)
 #define __NR_setfsgid (__NR_SYSCALL_BASE+139)
 #define __NR__llseek (__NR_SYSCALL_BASE+140)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getdents (__NR_SYSCALL_BASE+141)
 #define __NR__newselect (__NR_SYSCALL_BASE+142)
 #define __NR_flock (__NR_SYSCALL_BASE+143)
 #define __NR_msync (__NR_SYSCALL_BASE+144)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_readv (__NR_SYSCALL_BASE+145)
 #define __NR_writev (__NR_SYSCALL_BASE+146)
 #define __NR_getsid (__NR_SYSCALL_BASE+147)
 #define __NR_fdatasync (__NR_SYSCALL_BASE+148)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR__sysctl (__NR_SYSCALL_BASE+149)
 #define __NR_mlock (__NR_SYSCALL_BASE+150)
 #define __NR_munlock (__NR_SYSCALL_BASE+151)
 #define __NR_mlockall (__NR_SYSCALL_BASE+152)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_munlockall (__NR_SYSCALL_BASE+153)
 #define __NR_sched_setparam (__NR_SYSCALL_BASE+154)
 #define __NR_sched_getparam (__NR_SYSCALL_BASE+155)
 #define __NR_sched_setscheduler (__NR_SYSCALL_BASE+156)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sched_getscheduler (__NR_SYSCALL_BASE+157)
 #define __NR_sched_yield (__NR_SYSCALL_BASE+158)
 #define __NR_sched_get_priority_max (__NR_SYSCALL_BASE+159)
 #define __NR_sched_get_priority_min (__NR_SYSCALL_BASE+160)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sched_rr_get_interval (__NR_SYSCALL_BASE+161)
 #define __NR_nanosleep (__NR_SYSCALL_BASE+162)
 #define __NR_mremap (__NR_SYSCALL_BASE+163)
 #define __NR_setresuid (__NR_SYSCALL_BASE+164)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getresuid (__NR_SYSCALL_BASE+165)
-
 #define __NR_poll (__NR_SYSCALL_BASE+168)
 #define __NR_nfsservctl (__NR_SYSCALL_BASE+169)
 #define __NR_setresgid (__NR_SYSCALL_BASE+170)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getresgid (__NR_SYSCALL_BASE+171)
 #define __NR_prctl (__NR_SYSCALL_BASE+172)
 #define __NR_rt_sigreturn (__NR_SYSCALL_BASE+173)
 #define __NR_rt_sigaction (__NR_SYSCALL_BASE+174)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rt_sigprocmask (__NR_SYSCALL_BASE+175)
 #define __NR_rt_sigpending (__NR_SYSCALL_BASE+176)
 #define __NR_rt_sigtimedwait (__NR_SYSCALL_BASE+177)
 #define __NR_rt_sigqueueinfo (__NR_SYSCALL_BASE+178)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rt_sigsuspend (__NR_SYSCALL_BASE+179)
 #define __NR_pread64 (__NR_SYSCALL_BASE+180)
 #define __NR_pwrite64 (__NR_SYSCALL_BASE+181)
 #define __NR_chown (__NR_SYSCALL_BASE+182)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getcwd (__NR_SYSCALL_BASE+183)
 #define __NR_capget (__NR_SYSCALL_BASE+184)
 #define __NR_capset (__NR_SYSCALL_BASE+185)
 #define __NR_sigaltstack (__NR_SYSCALL_BASE+186)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sendfile (__NR_SYSCALL_BASE+187)
-
 #define __NR_vfork (__NR_SYSCALL_BASE+190)
 #define __NR_ugetrlimit (__NR_SYSCALL_BASE+191)  
 #define __NR_mmap2 (__NR_SYSCALL_BASE+192)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_truncate64 (__NR_SYSCALL_BASE+193)
 #define __NR_ftruncate64 (__NR_SYSCALL_BASE+194)
 #define __NR_stat64 (__NR_SYSCALL_BASE+195)
 #define __NR_lstat64 (__NR_SYSCALL_BASE+196)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fstat64 (__NR_SYSCALL_BASE+197)
 #define __NR_lchown32 (__NR_SYSCALL_BASE+198)
 #define __NR_getuid32 (__NR_SYSCALL_BASE+199)
 #define __NR_getgid32 (__NR_SYSCALL_BASE+200)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_geteuid32 (__NR_SYSCALL_BASE+201)
 #define __NR_getegid32 (__NR_SYSCALL_BASE+202)
 #define __NR_setreuid32 (__NR_SYSCALL_BASE+203)
 #define __NR_setregid32 (__NR_SYSCALL_BASE+204)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getgroups32 (__NR_SYSCALL_BASE+205)
 #define __NR_setgroups32 (__NR_SYSCALL_BASE+206)
 #define __NR_fchown32 (__NR_SYSCALL_BASE+207)
 #define __NR_setresuid32 (__NR_SYSCALL_BASE+208)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getresuid32 (__NR_SYSCALL_BASE+209)
 #define __NR_setresgid32 (__NR_SYSCALL_BASE+210)
 #define __NR_getresgid32 (__NR_SYSCALL_BASE+211)
 #define __NR_chown32 (__NR_SYSCALL_BASE+212)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setuid32 (__NR_SYSCALL_BASE+213)
 #define __NR_setgid32 (__NR_SYSCALL_BASE+214)
 #define __NR_setfsuid32 (__NR_SYSCALL_BASE+215)
 #define __NR_setfsgid32 (__NR_SYSCALL_BASE+216)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getdents64 (__NR_SYSCALL_BASE+217)
 #define __NR_pivot_root (__NR_SYSCALL_BASE+218)
 #define __NR_mincore (__NR_SYSCALL_BASE+219)
 #define __NR_madvise (__NR_SYSCALL_BASE+220)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fcntl64 (__NR_SYSCALL_BASE+221)
-
 #define __NR_gettid (__NR_SYSCALL_BASE+224)
 #define __NR_readahead (__NR_SYSCALL_BASE+225)
 #define __NR_setxattr (__NR_SYSCALL_BASE+226)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lsetxattr (__NR_SYSCALL_BASE+227)
 #define __NR_fsetxattr (__NR_SYSCALL_BASE+228)
 #define __NR_getxattr (__NR_SYSCALL_BASE+229)
 #define __NR_lgetxattr (__NR_SYSCALL_BASE+230)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fgetxattr (__NR_SYSCALL_BASE+231)
 #define __NR_listxattr (__NR_SYSCALL_BASE+232)
 #define __NR_llistxattr (__NR_SYSCALL_BASE+233)
 #define __NR_flistxattr (__NR_SYSCALL_BASE+234)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_removexattr (__NR_SYSCALL_BASE+235)
 #define __NR_lremovexattr (__NR_SYSCALL_BASE+236)
 #define __NR_fremovexattr (__NR_SYSCALL_BASE+237)
 #define __NR_tkill (__NR_SYSCALL_BASE+238)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sendfile64 (__NR_SYSCALL_BASE+239)
 #define __NR_futex (__NR_SYSCALL_BASE+240)
 #define __NR_sched_setaffinity (__NR_SYSCALL_BASE+241)
 #define __NR_sched_getaffinity (__NR_SYSCALL_BASE+242)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_io_setup (__NR_SYSCALL_BASE+243)
 #define __NR_io_destroy (__NR_SYSCALL_BASE+244)
 #define __NR_io_getevents (__NR_SYSCALL_BASE+245)
 #define __NR_io_submit (__NR_SYSCALL_BASE+246)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_io_cancel (__NR_SYSCALL_BASE+247)
 #define __NR_exit_group (__NR_SYSCALL_BASE+248)
 #define __NR_lookup_dcookie (__NR_SYSCALL_BASE+249)
 #define __NR_epoll_create (__NR_SYSCALL_BASE+250)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_epoll_ctl (__NR_SYSCALL_BASE+251)
 #define __NR_epoll_wait (__NR_SYSCALL_BASE+252)
 #define __NR_remap_file_pages (__NR_SYSCALL_BASE+253)
-
 #define __NR_set_tid_address (__NR_SYSCALL_BASE+256)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timer_create (__NR_SYSCALL_BASE+257)
 #define __NR_timer_settime (__NR_SYSCALL_BASE+258)
 #define __NR_timer_gettime (__NR_SYSCALL_BASE+259)
 #define __NR_timer_getoverrun (__NR_SYSCALL_BASE+260)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timer_delete (__NR_SYSCALL_BASE+261)
 #define __NR_clock_settime (__NR_SYSCALL_BASE+262)
 #define __NR_clock_gettime (__NR_SYSCALL_BASE+263)
 #define __NR_clock_getres (__NR_SYSCALL_BASE+264)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_clock_nanosleep (__NR_SYSCALL_BASE+265)
 #define __NR_statfs64 (__NR_SYSCALL_BASE+266)
 #define __NR_fstatfs64 (__NR_SYSCALL_BASE+267)
 #define __NR_tgkill (__NR_SYSCALL_BASE+268)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_utimes (__NR_SYSCALL_BASE+269)
 #define __NR_arm_fadvise64_64 (__NR_SYSCALL_BASE+270)
 #define __NR_pciconfig_iobase (__NR_SYSCALL_BASE+271)
 #define __NR_pciconfig_read (__NR_SYSCALL_BASE+272)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_pciconfig_write (__NR_SYSCALL_BASE+273)
 #define __NR_mq_open (__NR_SYSCALL_BASE+274)
 #define __NR_mq_unlink (__NR_SYSCALL_BASE+275)
 #define __NR_mq_timedsend (__NR_SYSCALL_BASE+276)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mq_timedreceive (__NR_SYSCALL_BASE+277)
 #define __NR_mq_notify (__NR_SYSCALL_BASE+278)
 #define __NR_mq_getsetattr (__NR_SYSCALL_BASE+279)
 #define __NR_waitid (__NR_SYSCALL_BASE+280)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_socket (__NR_SYSCALL_BASE+281)
 #define __NR_bind (__NR_SYSCALL_BASE+282)
 #define __NR_connect (__NR_SYSCALL_BASE+283)
 #define __NR_listen (__NR_SYSCALL_BASE+284)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_accept (__NR_SYSCALL_BASE+285)
 #define __NR_getsockname (__NR_SYSCALL_BASE+286)
 #define __NR_getpeername (__NR_SYSCALL_BASE+287)
 #define __NR_socketpair (__NR_SYSCALL_BASE+288)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_send (__NR_SYSCALL_BASE+289)
 #define __NR_sendto (__NR_SYSCALL_BASE+290)
 #define __NR_recv (__NR_SYSCALL_BASE+291)
 #define __NR_recvfrom (__NR_SYSCALL_BASE+292)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_shutdown (__NR_SYSCALL_BASE+293)
 #define __NR_setsockopt (__NR_SYSCALL_BASE+294)
 #define __NR_getsockopt (__NR_SYSCALL_BASE+295)
 #define __NR_sendmsg (__NR_SYSCALL_BASE+296)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_recvmsg (__NR_SYSCALL_BASE+297)
 #define __NR_semop (__NR_SYSCALL_BASE+298)
 #define __NR_semget (__NR_SYSCALL_BASE+299)
 #define __NR_semctl (__NR_SYSCALL_BASE+300)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_msgsnd (__NR_SYSCALL_BASE+301)
 #define __NR_msgrcv (__NR_SYSCALL_BASE+302)
 #define __NR_msgget (__NR_SYSCALL_BASE+303)
 #define __NR_msgctl (__NR_SYSCALL_BASE+304)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_shmat (__NR_SYSCALL_BASE+305)
 #define __NR_shmdt (__NR_SYSCALL_BASE+306)
 #define __NR_shmget (__NR_SYSCALL_BASE+307)
 #define __NR_shmctl (__NR_SYSCALL_BASE+308)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_add_key (__NR_SYSCALL_BASE+309)
 #define __NR_request_key (__NR_SYSCALL_BASE+310)
 #define __NR_keyctl (__NR_SYSCALL_BASE+311)
 #define __NR_semtimedop (__NR_SYSCALL_BASE+312)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_vserver (__NR_SYSCALL_BASE+313)
 #define __NR_ioprio_set (__NR_SYSCALL_BASE+314)
 #define __NR_ioprio_get (__NR_SYSCALL_BASE+315)
 #define __NR_inotify_init (__NR_SYSCALL_BASE+316)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_inotify_add_watch (__NR_SYSCALL_BASE+317)
 #define __NR_inotify_rm_watch (__NR_SYSCALL_BASE+318)
 #define __NR_mbind (__NR_SYSCALL_BASE+319)
 #define __NR_get_mempolicy (__NR_SYSCALL_BASE+320)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_set_mempolicy (__NR_SYSCALL_BASE+321)
-
+#define __NR_openat (__NR_SYSCALL_BASE+322)
+#define __NR_mkdirat (__NR_SYSCALL_BASE+323)
+#define __NR_mknodat (__NR_SYSCALL_BASE+324)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fchownat (__NR_SYSCALL_BASE+325)
+#define __NR_futimesat (__NR_SYSCALL_BASE+326)
+#define __NR_fstatat64 (__NR_SYSCALL_BASE+327)
+#define __NR_unlinkat (__NR_SYSCALL_BASE+328)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_renameat (__NR_SYSCALL_BASE+329)
+#define __NR_linkat (__NR_SYSCALL_BASE+330)
+#define __NR_symlinkat (__NR_SYSCALL_BASE+331)
+#define __NR_readlinkat (__NR_SYSCALL_BASE+332)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fchmodat (__NR_SYSCALL_BASE+333)
+#define __NR_faccessat (__NR_SYSCALL_BASE+334)
+#define __NR_pselect6 (__NR_SYSCALL_BASE+335)
+#define __NR_ppoll (__NR_SYSCALL_BASE+336)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_unshare (__NR_SYSCALL_BASE+337)
+#define __NR_set_robust_list (__NR_SYSCALL_BASE+338)
+#define __NR_get_robust_list (__NR_SYSCALL_BASE+339)
+#define __NR_splice (__NR_SYSCALL_BASE+340)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_arm_sync_file_range (__NR_SYSCALL_BASE+341)
+#define __NR_sync_file_range2 __NR_arm_sync_file_range
+#define __NR_tee (__NR_SYSCALL_BASE+342)
+#define __NR_vmsplice (__NR_SYSCALL_BASE+343)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_move_pages (__NR_SYSCALL_BASE+344)
+#define __NR_getcpu (__NR_SYSCALL_BASE+345)
+#define __NR_epoll_pwait (__NR_SYSCALL_BASE+346)
+#define __NR_kexec_load (__NR_SYSCALL_BASE+347)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_utimensat (__NR_SYSCALL_BASE+348)
+#define __NR_signalfd (__NR_SYSCALL_BASE+349)
+#define __NR_timerfd_create (__NR_SYSCALL_BASE+350)
+#define __NR_eventfd (__NR_SYSCALL_BASE+351)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fallocate (__NR_SYSCALL_BASE+352)
+#define __NR_timerfd_settime (__NR_SYSCALL_BASE+353)
+#define __NR_timerfd_gettime (__NR_SYSCALL_BASE+354)
+#define __NR_signalfd4 (__NR_SYSCALL_BASE+355)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_eventfd2 (__NR_SYSCALL_BASE+356)
+#define __NR_epoll_create1 (__NR_SYSCALL_BASE+357)
+#define __NR_dup3 (__NR_SYSCALL_BASE+358)
+#define __NR_pipe2 (__NR_SYSCALL_BASE+359)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_inotify_init1 (__NR_SYSCALL_BASE+360)
+#define __NR_preadv (__NR_SYSCALL_BASE+361)
+#define __NR_pwritev (__NR_SYSCALL_BASE+362)
+#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
+#define __NR_recvmmsg (__NR_SYSCALL_BASE+365)
+#define __NR_accept4 (__NR_SYSCALL_BASE+366)
+#define __NR_fanotify_init (__NR_SYSCALL_BASE+367)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fanotify_mark (__NR_SYSCALL_BASE+368)
+#define __NR_prlimit64 (__NR_SYSCALL_BASE+369)
+#define __NR_name_to_handle_at (__NR_SYSCALL_BASE+370)
+#define __NR_open_by_handle_at (__NR_SYSCALL_BASE+371)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_clock_adjtime (__NR_SYSCALL_BASE+372)
+#define __NR_syncfs (__NR_SYSCALL_BASE+373)
+#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
+#define __NR_setns (__NR_SYSCALL_BASE+375)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_process_vm_readv (__NR_SYSCALL_BASE+376)
+#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
 #define __ARM_NR_BASE (__NR_SYSCALL_BASE+0x0f0000)
 #define __ARM_NR_breakpoint (__ARM_NR_BASE+1)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __ARM_NR_cacheflush (__ARM_NR_BASE+2)
 #define __ARM_NR_usr26 (__ARM_NR_BASE+3)
 #define __ARM_NR_usr32 (__ARM_NR_BASE+4)
 #define __ARM_NR_set_tls (__ARM_NR_BASE+5)
-
-#if defined(__ARM_EABI__) && !defined(__KERNEL__)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifdef __ARM_EABI__
 #undef __NR_time
 #undef __NR_umount
 #undef __NR_stime
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #undef __NR_alarm
 #undef __NR_utime
 #undef __NR_getrlimit
 #undef __NR_select
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #undef __NR_readdir
 #undef __NR_mmap
 #undef __NR_socketcall
 #undef __NR_syscall
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #undef __NR_ipc
 #endif
-
 #endif
diff --git a/ndk/platforms/android-3/arch-arm/include/fenv.h b/ndk/platforms/android-3/arch-arm/include/fenv.h
index 534b12c..a96f99e 100644
--- a/ndk/platforms/android-3/arch-arm/include/fenv.h
+++ b/ndk/platforms/android-3/arch-arm/include/fenv.h
@@ -26,193 +26,151 @@
  * $FreeBSD: src/lib/msun/arm/fenv.h,v 1.5 2005/03/16 19:03:45 das Exp $
  */
 
-#ifndef	_FENV_H_
-#define	_FENV_H_
+/*
+ * Rewritten for Android.
+ *
+ * The ARM FPSCR is described here:
+ * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344b/Chdfafia.html
+ */
+
+#ifndef _FENV_H_
+#define _FENV_H_
 
 #include <sys/types.h>
 
 __BEGIN_DECLS
 
-typedef	uint32_t	fenv_t;
-typedef	uint32_t	fexcept_t;
+typedef __uint32_t fenv_t;
+typedef __uint32_t fexcept_t;
 
-/* Exception flags */
-#define	FE_INVALID	0x0001
-#define	FE_DIVBYZERO	0x0002
-#define	FE_OVERFLOW	0x0004
-#define	FE_UNDERFLOW	0x0008
-#define	FE_INEXACT	0x0010
-#define	FE_ALL_EXCEPT	(FE_DIVBYZERO | FE_INEXACT | \
-			 FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
+/* Exception flags. */
+#define FE_INVALID    0x01
+#define FE_DIVBYZERO  0x02
+#define FE_OVERFLOW   0x04
+#define FE_UNDERFLOW  0x08
+#define FE_INEXACT    0x10
+#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
+#define _FPSCR_ENABLE_SHIFT 8
+#define _FPSCR_ENABLE_MASK (FE_ALL_EXCEPT << _FPSCR_ENABLE_SHIFT)
 
-/* Rounding modes */
-#define	FE_TONEAREST	0x0000
-#define	FE_TOWARDZERO	0x0001
-#define	FE_UPWARD	0x0002
-#define	FE_DOWNWARD	0x0003
-#define	_ROUND_MASK	(FE_TONEAREST | FE_DOWNWARD | \
-			 FE_UPWARD | FE_TOWARDZERO)
+/* Rounding modes. */
+#define FE_TONEAREST  0x0
+#define FE_UPWARD     0x1
+#define FE_DOWNWARD   0x2
+#define FE_TOWARDZERO 0x3
+#define _FPSCR_RMODE_SHIFT 22
 
-/* Default floating-point environment */
-extern const fenv_t	__fe_dfl_env;
-#define	FE_DFL_ENV	(&__fe_dfl_env)
+/* Default floating-point environment. */
+extern const fenv_t __fe_dfl_env;
+#define FE_DFL_ENV (&__fe_dfl_env)
 
-/* We need to be able to map status flag positions to mask flag positions */
-#define _FPUSW_SHIFT	16
-#define	_ENABLE_MASK	(FE_ALL_EXCEPT << _FPUSW_SHIFT)
-
-#ifdef	ARM_HARD_FLOAT
-#define	__rfs(__fpsr)	__asm __volatile("rfs %0" : "=r" (*(__fpsr)))
-#define	__wfs(__fpsr)	__asm __volatile("wfs %0" : : "r" (__fpsr))
-#else
-#define __rfs(__fpsr)
-#define __wfs(__fpsr)
-#endif
-
-static __inline int
-feclearexcept(int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	__fpsr &= ~__excepts;
-	__wfs(__fpsr);
-	return (0);
+static __inline int fegetenv(fenv_t* __envp) {
+  fenv_t _fpscr;
+  __asm__ __volatile__("vmrs %0,fpscr" : "=r" (_fpscr));
+  *__envp = _fpscr;
+  return 0;
 }
 
-static __inline int
-fegetexceptflag(fexcept_t *__flagp, int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	*__flagp = __fpsr & __excepts;
-	return (0);
+static __inline int fesetenv(const fenv_t* __envp) {
+  fenv_t _fpscr = *__envp;
+  __asm__ __volatile__("vmsr fpscr,%0" : :"ri" (_fpscr));
+  return 0;
 }
 
-static __inline int
-fesetexceptflag(const fexcept_t *__flagp, int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	__fpsr &= ~__excepts;
-	__fpsr |= *__flagp & __excepts;
-	__wfs(__fpsr);
-	return (0);
+static __inline int feclearexcept(int __excepts) {
+  fexcept_t __fpscr;
+  fegetenv(&__fpscr);
+  __fpscr &= ~__excepts;
+  fesetenv(&__fpscr);
+  return 0;
 }
 
-static __inline int
-feraiseexcept(int __excepts)
-{
-	fexcept_t __ex = __excepts;
-
-	fesetexceptflag(&__ex, __excepts);	/* XXX */
-	return (0);
+static __inline int fegetexceptflag(fexcept_t* __flagp, int __excepts) {
+  fexcept_t __fpscr;
+  fegetenv(&__fpscr);
+  *__flagp = __fpscr & __excepts;
+  return 0;
 }
 
-static __inline int
-fetestexcept(int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	return (__fpsr & __excepts);
+static __inline int fesetexceptflag(const fexcept_t* __flagp, int __excepts) {
+  fexcept_t __fpscr;
+  fegetenv(&__fpscr);
+  __fpscr &= ~__excepts;
+  __fpscr |= *__flagp & __excepts;
+  fesetenv(&__fpscr);
+  return 0;
 }
 
-static __inline int
-fegetround(void)
-{
-
-	/*
-	 * Apparently, the rounding mode is specified as part of the
-	 * instruction format on ARM, so the dynamic rounding mode is
-	 * indeterminate.  Some FPUs may differ.
-	 */
-	return (-1);
+static __inline int feraiseexcept(int __excepts) {
+  fexcept_t __ex = __excepts;
+  fesetexceptflag(&__ex, __excepts);
+  return 0;
 }
 
-static __inline int
-fesetround(int __round)
-{
-
-	return (-1);
+static __inline int fetestexcept(int __excepts) {
+  fexcept_t __fpscr;
+  fegetenv(&__fpscr);
+  return (__fpscr & __excepts);
 }
 
-static __inline int
-fegetenv(fenv_t *__envp)
-{
-
-	__rfs(__envp);
-	return (0);
+static __inline int fegetround(void) {
+  fenv_t _fpscr;
+  fegetenv(&_fpscr);
+  return ((_fpscr >> _FPSCR_RMODE_SHIFT) & 0x3);
 }
 
-static __inline int
-feholdexcept(fenv_t *__envp)
-{
-	fenv_t __env;
-
-	__rfs(&__env);
-	*__envp = __env;
-	__env &= ~(FE_ALL_EXCEPT | _ENABLE_MASK);
-	__wfs(__env);
-	return (0);
+static __inline int fesetround(int __round) {
+  fenv_t _fpscr;
+  fegetenv(&_fpscr);
+  _fpscr &= ~(0x3 << _FPSCR_RMODE_SHIFT);
+  _fpscr |= (__round << _FPSCR_RMODE_SHIFT);
+  fesetenv(&_fpscr);
+  return 0;
 }
 
-static __inline int
-fesetenv(const fenv_t *__envp)
-{
-
-	__wfs(*__envp);
-	return (0);
+static __inline int feholdexcept(fenv_t* __envp) {
+  fenv_t __env;
+  fegetenv(&__env);
+  *__envp = __env;
+  __env &= ~(FE_ALL_EXCEPT | _FPSCR_ENABLE_MASK);
+  fesetenv(&__env);
+  return 0;
 }
 
-static __inline int
-feupdateenv(const fenv_t *__envp)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	__wfs(*__envp);
-	feraiseexcept(__fpsr & FE_ALL_EXCEPT);
-	return (0);
+static __inline int feupdateenv(const fenv_t* __envp) {
+  fexcept_t __fpscr;
+  fegetenv(&__fpscr);
+  fesetenv(__envp);
+  feraiseexcept(__fpscr & FE_ALL_EXCEPT);
+  return 0;
 }
 
 #if __BSD_VISIBLE
 
-static __inline int
-feenableexcept(int __mask)
-{
-	fenv_t __old_fpsr, __new_fpsr;
-
-	__rfs(&__old_fpsr);
-	__new_fpsr = __old_fpsr | (__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT;
-	__wfs(__new_fpsr);
-	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
+static __inline int feenableexcept(int __mask) {
+  fenv_t __old_fpscr, __new_fpscr;
+  fegetenv(&__old_fpscr);
+  __new_fpscr = __old_fpscr | (__mask & FE_ALL_EXCEPT) << _FPSCR_ENABLE_SHIFT;
+  fesetenv(&__new_fpscr);
+  return ((__old_fpscr >> _FPSCR_ENABLE_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
-fedisableexcept(int __mask)
-{
-	fenv_t __old_fpsr, __new_fpsr;
-
-	__rfs(&__old_fpsr);
-	__new_fpsr = __old_fpsr & ~((__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT);
-	__wfs(__new_fpsr);
-	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
+static __inline int fedisableexcept(int __mask) {
+  fenv_t __old_fpscr, __new_fpscr;
+  fegetenv(&__old_fpscr);
+  __new_fpscr = __old_fpscr & ~((__mask & FE_ALL_EXCEPT) << _FPSCR_ENABLE_SHIFT);
+  fesetenv(&__new_fpscr);
+  return ((__old_fpscr >> _FPSCR_ENABLE_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
-fegetexcept(void)
-{
-	fenv_t __fpsr;
-
-	__rfs(&__fpsr);
-	return ((__fpsr & _ENABLE_MASK) >> _FPUSW_SHIFT);
+static __inline int fegetexcept(void) {
+  fenv_t __fpscr;
+  fegetenv(&__fpscr);
+  return ((__fpscr & _FPSCR_ENABLE_MASK) >> _FPSCR_ENABLE_SHIFT);
 }
 
 #endif /* __BSD_VISIBLE */
 
 __END_DECLS
 
-#endif	/* !_FENV_H_ */
+#endif /* !_FENV_H_ */
diff --git a/ndk/platforms/android-3/arch-arm/include/machine/_types.h b/ndk/platforms/android-3/arch-arm/include/machine/_types.h
index 3e779ca..1521a4c 100644
--- a/ndk/platforms/android-3/arch-arm/include/machine/_types.h
+++ b/ndk/platforms/android-3/arch-arm/include/machine/_types.h
@@ -35,17 +35,6 @@
 #ifndef _ARM__TYPES_H_
 #define _ARM__TYPES_H_
 
-
-#if !defined(__ARM_EABI__)
-/* the kernel defines size_t as unsigned int, but g++ wants it to be unsigned long */
-#define _SIZE_T
-#define _SSIZE_T
-#define _PTRDIFF_T
-typedef unsigned long  size_t;
-typedef long           ssize_t;
-typedef long           ptrdiff_t;
-#endif
-
 /* 7.18.1.1 Exact-width integer types */
 typedef	__signed char		__int8_t;
 typedef	unsigned char		__uint8_t;
@@ -116,10 +105,4 @@
 typedef	void *			__wctrans_t;
 typedef	void *			__wctype_t;
 
-#ifdef __ARMEB__
-#define _BYTE_ORDER _BIG_ENDIAN
-#else
-#define _BYTE_ORDER _LITTLE_ENDIAN
-#endif
-
 #endif	/* _ARM__TYPES_H_ */
diff --git a/ndk/platforms/android-3/arch-arm/include/machine/endian.h b/ndk/platforms/android-3/arch-arm/include/machine/endian.h
new file mode 100644
index 0000000..7cba3b9
--- /dev/null
+++ b/ndk/platforms/android-3/arch-arm/include/machine/endian.h
@@ -0,0 +1,89 @@
+/*	$OpenBSD: endian.h,v 1.3 2005/12/13 00:35:23 millert Exp $	*/
+
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _ARM_ENDIAN_H_
+#define _ARM_ENDIAN_H_
+
+#ifdef __GNUC__
+
+/*
+ * REV and REV16 weren't available on ARM5 or ARM4.
+ * We don't include <machine/cpu-features.h> because it pollutes the
+ * namespace with macros like PLD.
+ */
+#if !defined __ARM_ARCH_5__ && !defined __ARM_ARCH_5T__ && \
+    !defined __ARM_ARCH_5TE__ && !defined __ARM_ARCH_5TEJ__ && \
+    !defined __ARM_ARCH_4T__ && !defined __ARM_ARCH_4__
+
+/* According to RealView Assembler User's Guide, REV and REV16 are available
+ * in Thumb code and 16-bit instructions when used in Thumb-2 code.
+ *
+ * REV Rd, Rm
+ *   Rd and Rm must both be Lo registers.
+ *
+ * REV16 Rd, Rm
+ *   Rd and Rm must both be Lo registers.
+ *
+ * The +l constraint takes care of this without constraining us in ARM mode.
+ */
+#define __swap16md(x) ({                                        \
+    register u_int16_t _x = (x);                                \
+    __asm volatile ("rev16 %0, %0" : "+l" (_x));                \
+    _x;                                                         \
+})
+
+#define __swap32md(x) ({                                        \
+    register u_int32_t _x = (x);                                \
+    __asm volatile ("rev %0, %0" : "+l" (_x));                  \
+    _x;                                                         \
+})
+
+#define __swap64md(x) ({                                        \
+    u_int64_t _swap64md_x = (x);                                \
+    (u_int64_t) __swap32md(_swap64md_x >> 32) |                 \
+        (u_int64_t) __swap32md(_swap64md_x & 0xffffffff) << 32; \
+})
+
+/* Tell sys/endian.h we have MD variants of the swap macros.  */
+#define MD_SWAP
+
+#endif  /* __ARM_ARCH__ */
+#endif  /* __GNUC__ */
+
+#if defined(__ARMEB__)
+#define _BYTE_ORDER _BIG_ENDIAN
+#else
+#define _BYTE_ORDER _LITTLE_ENDIAN
+#endif
+#define __STRICT_ALIGNMENT
+#include <sys/types.h>
+#include <sys/endian.h>
+
+#endif  /* !_ARM_ENDIAN_H_ */
diff --git a/ndk/platforms/android-3/arch-arm/lib-bootstrap/crtbegin_dynamic.o b/ndk/platforms/android-3/arch-arm/lib-bootstrap/crtbegin_dynamic.o
new file mode 100644
index 0000000..fdcd6d6
--- /dev/null
+++ b/ndk/platforms/android-3/arch-arm/lib-bootstrap/crtbegin_dynamic.o
Binary files differ
diff --git a/ndk/platforms/android-3/arch-arm/lib-bootstrap/crtend_android.o b/ndk/platforms/android-3/arch-arm/lib-bootstrap/crtend_android.o
new file mode 100644
index 0000000..50caf05
--- /dev/null
+++ b/ndk/platforms/android-3/arch-arm/lib-bootstrap/crtend_android.o
Binary files differ
diff --git a/ndk/platforms/android-3/arch-arm/lib-bootstrap/libc.so b/ndk/platforms/android-3/arch-arm/lib-bootstrap/libc.so
new file mode 100755
index 0000000..8f73f67
--- /dev/null
+++ b/ndk/platforms/android-3/arch-arm/lib-bootstrap/libc.so
Binary files differ
diff --git a/ndk/platforms/android-3/arch-arm/lib-bootstrap/libdl.so b/ndk/platforms/android-3/arch-arm/lib-bootstrap/libdl.so
new file mode 100755
index 0000000..18ddd3b
--- /dev/null
+++ b/ndk/platforms/android-3/arch-arm/lib-bootstrap/libdl.so
Binary files differ
diff --git a/ndk/platforms/android-3/include/asm-generic/mman-common.h b/ndk/platforms/android-3/include/asm-generic/mman-common.h
new file mode 100644
index 0000000..157353b
--- /dev/null
+++ b/ndk/platforms/android-3/include/asm-generic/mman-common.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __ASM_GENERIC_MMAN_COMMON_H
+#define __ASM_GENERIC_MMAN_COMMON_H
+#define PROT_READ 0x1  
+#define PROT_WRITE 0x2  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PROT_EXEC 0x4  
+#define PROT_SEM 0x8  
+#define PROT_NONE 0x0  
+#define PROT_GROWSDOWN 0x01000000  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PROT_GROWSUP 0x02000000  
+#define MAP_SHARED 0x01  
+#define MAP_PRIVATE 0x02  
+#define MAP_TYPE 0x0f  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MAP_FIXED 0x10  
+#define MAP_ANONYMOUS 0x20  
+#define MAP_UNINITIALIZED 0x0  
+#define MS_ASYNC 1  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MS_INVALIDATE 2  
+#define MS_SYNC 4  
+#define MADV_NORMAL 0  
+#define MADV_RANDOM 1  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MADV_SEQUENTIAL 2  
+#define MADV_WILLNEED 3  
+#define MADV_DONTNEED 4  
+#define MADV_REMOVE 9  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MADV_DONTFORK 10  
+#define MADV_DOFORK 11  
+#define MADV_HWPOISON 100  
+#define MADV_SOFT_OFFLINE 101  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MADV_MERGEABLE 12  
+#define MADV_UNMERGEABLE 13  
+#define MADV_HUGEPAGE 14  
+#define MADV_NOHUGEPAGE 15  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MAP_FILE 0
+#endif
diff --git a/ndk/platforms/android-3/include/asm-generic/mman.h b/ndk/platforms/android-3/include/asm-generic/mman.h
index 98d2783..6eaf900 100644
--- a/ndk/platforms/android-3/include/asm-generic/mman.h
+++ b/ndk/platforms/android-3/include/asm-generic/mman.h
@@ -7,40 +7,30 @@
  ***   structures, and macros generated from the original header, and thus,
  ***   contains no copyrightable information.
  ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _ASM_GENERIC_MMAN_H
-#define _ASM_GENERIC_MMAN_H
-
-#define PROT_READ 0x1  
-#define PROT_WRITE 0x2  
-#define PROT_EXEC 0x4  
-#define PROT_SEM 0x8  
-#define PROT_NONE 0x0  
-#define PROT_GROWSDOWN 0x01000000  
-#define PROT_GROWSUP 0x02000000  
-
-#define MAP_SHARED 0x01  
-#define MAP_PRIVATE 0x02  
-#define MAP_TYPE 0x0f  
-#define MAP_FIXED 0x10  
-#define MAP_ANONYMOUS 0x20  
-
-#define MS_ASYNC 1  
-#define MS_INVALIDATE 2  
-#define MS_SYNC 4  
-
-#define MADV_NORMAL 0  
-#define MADV_RANDOM 1  
-#define MADV_SEQUENTIAL 2  
-#define MADV_WILLNEED 3  
-#define MADV_DONTNEED 4  
-
-#define MADV_REMOVE 9  
-#define MADV_DONTFORK 10  
-#define MADV_DOFORK 11  
-
-#define MAP_ANON MAP_ANONYMOUS
-#define MAP_FILE 0
-
+#ifndef __ASM_GENERIC_MMAN_H
+#define __ASM_GENERIC_MMAN_H
+#include <asm-generic/mman-common.h>
+#define MAP_GROWSDOWN 0x0100  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MAP_DENYWRITE 0x0800  
+#define MAP_EXECUTABLE 0x1000  
+#define MAP_LOCKED 0x2000  
+#define MAP_NORESERVE 0x4000  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MAP_POPULATE 0x8000  
+#define MAP_NONBLOCK 0x10000  
+#define MAP_STACK 0x20000  
+#define MAP_HUGETLB 0x40000  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MCL_CURRENT 1  
+#define MCL_FUTURE 2  
 #endif
diff --git a/ndk/platforms/android-3/include/asm-generic/pgtable-nopmd.h b/ndk/platforms/android-3/include/asm-generic/pgtable-nopmd.h
new file mode 100644
index 0000000..ac3f40c
--- /dev/null
+++ b/ndk/platforms/android-3/include/asm-generic/pgtable-nopmd.h
@@ -0,0 +1,48 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _PGTABLE_NOPMD_H
+#define _PGTABLE_NOPMD_H
+#ifndef __ASSEMBLY__
+#include <asm-generic/pgtable-nopud.h>
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+struct mm_struct;
+#define __PAGETABLE_PMD_FOLDED
+typedef struct { pud_t pud; } pmd_t;
+#define PMD_SHIFT PUD_SHIFT
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PTRS_PER_PMD 1
+#define PMD_SIZE (1UL << PMD_SHIFT)
+#define PMD_MASK (~(PMD_SIZE-1))
+#define pmd_ERROR(pmd) (pud_ERROR((pmd).pud))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pud_populate(mm, pmd, pte) do { } while (0)
+#define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval })
+#define pmd_val(x) (pud_val((x).pud))
+#define __pmd(x) ((pmd_t) { __pud(x) } )
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pud_page(pud) (pmd_page((pmd_t){ pud }))
+#define pud_page_vaddr(pud) (pmd_page_vaddr((pmd_t){ pud }))
+#define pmd_alloc_one(mm, address) NULL
+#define __pmd_free_tlb(tlb, x, a) do { } while (0)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#undef pmd_addr_end
+#define pmd_addr_end(addr, end) (end)
+#endif
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-3/include/asm-generic/socket.h b/ndk/platforms/android-3/include/asm-generic/socket.h
new file mode 100644
index 0000000..fb3876e
--- /dev/null
+++ b/ndk/platforms/android-3/include/asm-generic/socket.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __ASM_GENERIC_SOCKET_H
+#define __ASM_GENERIC_SOCKET_H
+#include <asm/sockios.h>
+#define SOL_SOCKET 1
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_DEBUG 1
+#define SO_REUSEADDR 2
+#define SO_TYPE 3
+#define SO_ERROR 4
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_DONTROUTE 5
+#define SO_BROADCAST 6
+#define SO_SNDBUF 7
+#define SO_RCVBUF 8
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_SNDBUFFORCE 32
+#define SO_RCVBUFFORCE 33
+#define SO_KEEPALIVE 9
+#define SO_OOBINLINE 10
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_NO_CHECK 11
+#define SO_PRIORITY 12
+#define SO_LINGER 13
+#define SO_BSDCOMPAT 14
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef SO_PASSCRED
+#define SO_PASSCRED 16
+#define SO_PEERCRED 17
+#define SO_RCVLOWAT 18
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_SNDLOWAT 19
+#define SO_RCVTIMEO 20
+#define SO_SNDTIMEO 21
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_SECURITY_AUTHENTICATION 22
+#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
+#define SO_SECURITY_ENCRYPTION_NETWORK 24
+#define SO_BINDTODEVICE 25
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_ATTACH_FILTER 26
+#define SO_DETACH_FILTER 27
+#define SO_PEERNAME 28
+#define SO_TIMESTAMP 29
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SCM_TIMESTAMP SO_TIMESTAMP
+#define SO_ACCEPTCONN 30
+#define SO_PEERSEC 31
+#define SO_PASSSEC 34
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_TIMESTAMPNS 35
+#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
+#define SO_MARK 36
+#define SO_TIMESTAMPING 37
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SCM_TIMESTAMPING SO_TIMESTAMPING
+#define SO_PROTOCOL 38
+#define SO_DOMAIN 39
+#define SO_RXQ_OVFL 40
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_WIFI_STATUS 41
+#define SCM_WIFI_STATUS SO_WIFI_STATUS
+#endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/asmmacro.h b/ndk/platforms/android-3/include/asm-generic/swab.h
similarity index 77%
rename from ndk/platforms/android-9/arch-mips/include/asm/asmmacro.h
rename to ndk/platforms/android-3/include/asm-generic/swab.h
index e1e9804..8279332 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/asmmacro.h
+++ b/ndk/platforms/android-3/include/asm-generic/swab.h
@@ -16,8 +16,14 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _ASM_ASMMACRO_H
-#define _ASM_ASMMACRO_H
-#include <asm/hazards.h>
+#ifndef _ASM_GENERIC_SWAB_H
+#define _ASM_GENERIC_SWAB_H
+#include <asm/bitsperlong.h>
+#if __BITS_PER_LONG == 32
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#if defined(__GNUC__) && (!defined(__STRICT_ANSI__) || defined(__KERNEL__))
+#define __SWAB_64_THRU_32__
+#endif
 #endif
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
diff --git a/ndk/platforms/android-3/include/byteswap.h b/ndk/platforms/android-3/include/byteswap.h
index 16d2ad4..74b0e91 100644
--- a/ndk/platforms/android-3/include/byteswap.h
+++ b/ndk/platforms/android-3/include/byteswap.h
@@ -28,7 +28,8 @@
 #ifndef _BYTESWAP_H_
 #define _BYTESWAP_H_
 
-#include <sys/endian.h>
+/* endian.h rather than sys/endian.h so we get the machine-specific file. */
+#include <endian.h>
 
 #define  bswap_16(x)   swap16(x)
 #define  bswap_32(x)   swap32(x)
diff --git a/ndk/platforms/android-3/include/dirent.h b/ndk/platforms/android-3/include/dirent.h
index 55eef7b..f0a1e17 100644
--- a/ndk/platforms/android-3/include/dirent.h
+++ b/ndk/platforms/android-3/include/dirent.h
@@ -51,28 +51,29 @@
  * who assume to be able to access it directly. sad...
  */
 struct dirent {
-    uint64_t         d_ino;
-    int64_t          d_off;
-    unsigned short   d_reclen;
-    unsigned char    d_type;
-    char             d_name[256];
+  uint64_t         d_ino;
+  int64_t          d_off;
+  unsigned short   d_reclen;
+  unsigned char    d_type;
+  char             d_name[256];
 };
 
-typedef struct DIR  DIR;
+typedef struct DIR DIR;
+
+extern  DIR*             opendir(const char* dirpath);
+extern  DIR*             fdopendir(int fd);
+extern  struct dirent*   readdir(DIR* dirp);
+extern  int              readdir_r(DIR*  dirp, struct dirent* entry, struct dirent** result);
+extern  int              closedir(DIR* dirp);
+extern  void             rewinddir(DIR* dirp);
+extern  int              dirfd(DIR* dirp);
+extern  int              alphasort(const struct dirent** a, const struct dirent** b);
+extern  int              scandir(const char* dir, struct dirent*** namelist,
+                                 int(*filter)(const struct dirent*),
+                                 int(*compar)(const struct dirent**,
+                                              const struct dirent**));
 
 extern  int              getdents(unsigned int, struct dirent*, unsigned int);
-extern  DIR*             opendir(const char*  dirpath);
-extern  DIR*             fdopendir(int fd);
-extern  struct dirent*   readdir(DIR*  dirp);
-extern  int              readdir_r(DIR*  dirp, struct dirent *entry, struct dirent **result);
-extern  int              closedir(DIR*  dirp);
-extern  void             rewinddir(DIR *dirp);
-extern  int              dirfd(DIR* dirp);
-extern  int              alphasort(const void *a, const void *b);
-extern  int              scandir(const char *dir, struct dirent ***namelist,
-                                 int(*filter)(const struct dirent *),
-                                 int(*compar)(const struct dirent **, 
-                                              const struct dirent **));
 
 __END_DECLS
 
diff --git a/ndk/platforms/android-3/include/elf.h b/ndk/platforms/android-3/include/elf.h
index 8a86a63..4bc17a6 100644
--- a/ndk/platforms/android-3/include/elf.h
+++ b/ndk/platforms/android-3/include/elf.h
@@ -54,5 +54,19 @@
 
 #include <sys/exec_elf.h>
 
+typedef struct {
+  uint32_t a_type;
+  union {
+    uint32_t a_val;
+  } a_un;
+} Elf32_auxv_t;
+
+typedef struct {
+  uint64_t a_type;
+  union {
+    uint64_t a_val;
+  } a_un;
+} Elf64_auxv_t;
+
 #endif /* _ELF_H */
 
diff --git a/ndk/platforms/android-3/include/errno.h b/ndk/platforms/android-3/include/errno.h
index 2b2685a..e1b15c0 100644
--- a/ndk/platforms/android-3/include/errno.h
+++ b/ndk/platforms/android-3/include/errno.h
@@ -36,7 +36,7 @@
 /* on Linux, ENOTSUP and EOPNOTSUPP are defined as the same error code
  * even if 1000.3 states that they should be different
  */
-#ifndef  ENOTUP
+#ifndef  ENOTSUP
 #define  ENOTSUP  EOPNOTSUPP
 #endif
 
diff --git a/ndk/platforms/android-3/include/limits.h b/ndk/platforms/android-3/include/limits.h
index 1de8ea6..b9d4354 100644
--- a/ndk/platforms/android-3/include/limits.h
+++ b/ndk/platforms/android-3/include/limits.h
@@ -89,7 +89,24 @@
 #include <sys/syslimits.h>
 #endif
 
+/* GLibc compatibility definitions.
+   Note that these are defined by GCC's <limits.h>
+   only when __GNU_LIBRARY__ is defined, i.e. when
+   targetting GLibc. */
+#ifndef LONG_LONG_MIN
+#define LONG_LONG_MIN  LLONG_MIN
+#endif
+
+#ifndef LONG_LONG_MAX
+#define LONG_LONG_MAX  LLONG_MAX
+#endif
+
+#ifndef ULONG_LONG_MAX
+#define ULONG_LONG_MAX  ULLONG_MAX
+#endif
+
 #ifndef PAGESIZE
+#include <asm/page.h>
 #define  PAGESIZE  PAGE_SIZE
 #endif
 
diff --git a/ndk/platforms/android-3/include/linux/icmp.h b/ndk/platforms/android-3/include/linux/icmp.h
index c5b58bb..d69a0e2 100644
--- a/ndk/platforms/android-3/include/linux/icmp.h
+++ b/ndk/platforms/android-3/include/linux/icmp.h
@@ -66,7 +66,7 @@
  } echo;
  __u32 gateway;
  struct {
- __u16 __unused_field;
+ __u16 __linux_unused;
  __u16 mtu;
  } frag;
  } un;
diff --git a/ndk/platforms/android-3/include/linux/stddef.h b/ndk/platforms/android-3/include/linux/stddef.h
index 5412f47..cca408c 100644
--- a/ndk/platforms/android-3/include/linux/stddef.h
+++ b/ndk/platforms/android-3/include/linux/stddef.h
@@ -7,25 +7,24 @@
  ***   structures, and macros generated from the original header, and thus,
  ***   contains no copyrightable information.
  ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
  ****************************************************************************
  ****************************************************************************/
 #ifndef _LINUX_STDDEF_H
 #define _LINUX_STDDEF_H
-
 #include <linux/compiler.h>
-
 #undef NULL
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #ifdef __cplusplus
 #define NULL 0
 #else
 #define NULL ((void *)0)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
-
-#undef offsetof
-#ifdef __compiler_offsetof
-#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
-#else
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-
 #endif
diff --git a/ndk/platforms/android-3/include/linux/sysctl.h b/ndk/platforms/android-3/include/linux/sysctl.h
index 329e561..730c740 100644
--- a/ndk/platforms/android-3/include/linux/sysctl.h
+++ b/ndk/platforms/android-3/include/linux/sysctl.h
@@ -28,7 +28,7 @@
  size_t __user *oldlenp;
  void __user *newval;
  size_t newlen;
- unsigned long __unused[4];
+ unsigned long __linux_unused[4];
 };
 
 enum
diff --git a/ndk/platforms/android-3/include/pthread.h b/ndk/platforms/android-3/include/pthread.h
index 2a6029d..ae55782 100644
--- a/ndk/platforms/android-3/include/pthread.h
+++ b/ndk/platforms/android-3/include/pthread.h
@@ -235,9 +235,4 @@
 } /* extern "C" */
 #endif
 
-/************ TO FIX ************/
-
-#define LONG_LONG_MAX __LONG_LONG_MAX__
-#define LONG_LONG_MIN (-__LONG_LONG_MAX__ - 1)
-
 #endif /* _PTHREAD_H_ */
diff --git a/ndk/platforms/android-3/include/resolv.h b/ndk/platforms/android-3/include/resolv.h
index 4247d68..7c34012 100644
--- a/ndk/platforms/android-3/include/resolv.h
+++ b/ndk/platforms/android-3/include/resolv.h
@@ -34,6 +34,7 @@
 #include <sys/socket.h>
 #include <stdio.h>
 #include <arpa/nameser.h>
+#include <netinet/in.h>
 
 __BEGIN_DECLS
 
diff --git a/ndk/platforms/android-3/include/stdint.h b/ndk/platforms/android-3/include/stdint.h
index 49879cb..c3e29dd 100644
--- a/ndk/platforms/android-3/include/stdint.h
+++ b/ndk/platforms/android-3/include/stdint.h
@@ -226,12 +226,6 @@
 #  define UINTMAX_C(c)	UINT64_C(c)
 #endif
 
-/* size_t is defined by the GCC-specific <stddef.h> */
-#ifndef _SSIZE_T_DEFINED_
-#define _SSIZE_T_DEFINED_
-typedef long int  ssize_t;
-#endif
-
 #define _BITSIZE 32
 
 /* Keep the kernel from trying to define these types... */
diff --git a/ndk/platforms/android-3/include/stdio.h b/ndk/platforms/android-3/include/stdio.h
index 273f630..a56faa2 100644
--- a/ndk/platforms/android-3/include/stdio.h
+++ b/ndk/platforms/android-3/include/stdio.h
@@ -39,7 +39,7 @@
 #define	_STDIO_H_
 
 #include <sys/cdefs.h>
-#include <sys/_types.h>
+#include <sys/types.h>
 
 /* va_list and size_t must be defined by stdio.h according to Posix */
 #define __need___va_list
@@ -49,30 +49,9 @@
 #define __need_size_t
 #include <stddef.h>
 
+#define __need_NULL
 #include <stddef.h>
 
-#if __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE
-#include <sys/types.h>	/* XXX should be removed */
-#endif
-
-#ifndef	_SIZE_T_DEFINED_
-#define	_SIZE_T_DEFINED_
-typedef	unsigned long    size_t;
-#endif
-
-#ifndef	_OFF_T_DEFINED_
-#define	_OFF_T_DEFINED_
-typedef	long    off_t;
-#endif
-
-#ifndef NULL
-#ifdef 	__GNUG__
-#define	NULL	__null
-#else
-#define	NULL	0L
-#endif
-#endif
-
 #define	_FSTDIO			/* Define for new stdio with functions. */
 
 typedef off_t fpos_t;		/* stdio file position type */
diff --git a/ndk/platforms/android-3/include/sys/endian.h b/ndk/platforms/android-3/include/sys/endian.h
index 00f4839..2a0c658 100644
--- a/ndk/platforms/android-3/include/sys/endian.h
+++ b/ndk/platforms/android-3/include/sys/endian.h
@@ -37,6 +37,7 @@
 #define _SYS_ENDIAN_H_
 
 #include <sys/cdefs.h>
+#include <machine/endian.h>
 #include <machine/_types.h>
 
 #define _LITTLE_ENDIAN	1234
diff --git a/ndk/platforms/android-3/include/sys/limits.h b/ndk/platforms/android-3/include/sys/limits.h
index 41d02ff..5b127eb 100644
--- a/ndk/platforms/android-3/include/sys/limits.h
+++ b/ndk/platforms/android-3/include/sys/limits.h
@@ -169,7 +169,8 @@
 
 #undef   _POSIX_PROCESS_SHARED           /* we don't support process-shared synchronization */
 #undef   _POSIX_THREAD_SAFE_FUNCTIONS    /* most functions are, but not everything yet */
-#define  _POSIX_CHOWN_RESTRICTED    1    /* yes, chown requires appropriate priviledges */
+#define  _POSIX_CHOWN_RESTRICTED    1    /* yes, chown requires appropriate privileges */
+#define  _POSIX_MONOTONIC_CLOCK     0    /* the monotonic clock may be available; ask sysconf */
 #define  _POSIX_NO_TRUNC            1    /* very long pathnames generate an error */
 #define  _POSIX_SAVED_IDS           1    /* saved user ids is a Linux feature */
 #define  _POSIX_JOB_CONTROL         1    /* job control is a Linux feature */
diff --git a/ndk/platforms/android-3/include/sys/sysconf.h b/ndk/platforms/android-3/include/sys/sysconf.h
index 2fc1b08..0a46e7a 100644
--- a/ndk/platforms/android-3/include/sys/sysconf.h
+++ b/ndk/platforms/android-3/include/sys/sysconf.h
@@ -127,8 +127,9 @@
 #define _SC_NPROCESSORS_ONLN            0x0061
 #define _SC_PHYS_PAGES                  0x0062
 #define _SC_AVPHYS_PAGES                0x0063
+#define _SC_MONOTONIC_CLOCK             0x0064
 
-extern int sysconf (int  name);
+extern int sysconf(int name);
 
 __END_DECLS
 
diff --git a/ndk/platforms/android-3/include/sys/types.h b/ndk/platforms/android-3/include/sys/types.h
index 33fe30e..15ecb37 100644
--- a/ndk/platforms/android-3/include/sys/types.h
+++ b/ndk/platforms/android-3/include/sys/types.h
@@ -85,12 +85,6 @@
 typedef  .... pthread_t;
 #endif
 
-#ifndef _SIZE_T_DEFINED_
-#define _SIZE_T_DEFINED_
-typedef unsigned int  size_t;
-#endif
-
-/* size_t is defined by the GCC-specific <stddef.h> */
 #ifndef _SSIZE_T_DEFINED_
 #define _SSIZE_T_DEFINED_
 typedef long int  ssize_t;
diff --git a/ndk/platforms/android-3/include/wchar.h b/ndk/platforms/android-3/include/wchar.h
index e2feb60..9a6ce1d 100644
--- a/ndk/platforms/android-3/include/wchar.h
+++ b/ndk/platforms/android-3/include/wchar.h
@@ -50,7 +50,7 @@
 
 __BEGIN_DECLS
 
-typedef int                     wint_t;
+typedef __WINT_TYPE__           wint_t;
 typedef struct { int  dummy; }  mbstate_t;
 
 typedef enum {
diff --git a/ndk/platforms/android-4/samples/san-angeles/jni/app-android.c b/ndk/platforms/android-4/samples/san-angeles/jni/app-android.c
index 0e552a7..399d896 100644
--- a/ndk/platforms/android-4/samples/san-angeles/jni/app-android.c
+++ b/ndk/platforms/android-4/samples/san-angeles/jni/app-android.c
@@ -22,6 +22,8 @@
 #include <time.h>
 #include <android/log.h>
 #include <stdint.h>
+#include "importgl.h"
+#include "app.h"
 
 int   gAppAlive   = 1;
 
@@ -47,9 +49,7 @@
 {
     importGLInit();
     appInit();
-    gAppAlive    = 1;
-    sDemoStopped = 0;
-    sTimeOffsetInit = 0;
+    gAppAlive  = 1;
 }
 
 void
@@ -71,19 +71,44 @@
 /* This is called to indicate to the render loop that it should
  * stop as soon as possible.
  */
+
+void _pause()
+{
+  /* we paused the animation, so store the current
+   * time in sTimeStopped for future nativeRender calls */
+    sDemoStopped = 1;
+    sTimeStopped = _getTime();
+}
+
+void _resume()
+{
+  /* we resumed the animation, so adjust the time offset
+   * to take care of the pause interval. */
+    sDemoStopped = 0;
+    sTimeOffset -= _getTime() - sTimeStopped;
+}
+
+
+void
+Java_com_example_SanAngeles_DemoGLSurfaceView_nativeTogglePauseResume( JNIEnv*  env )
+{
+    sDemoStopped = !sDemoStopped;
+    if (sDemoStopped)
+        _pause();
+    else
+        _resume();
+}
+
 void
 Java_com_example_SanAngeles_DemoGLSurfaceView_nativePause( JNIEnv*  env )
 {
-    sDemoStopped = !sDemoStopped;
-    if (sDemoStopped) {
-        /* we paused the animation, so store the current
-         * time in sTimeStopped for future nativeRender calls */
-        sTimeStopped = _getTime();
-    } else {
-        /* we resumed the animation, so adjust the time offset
-         * to take care of the pause interval. */
-        sTimeOffset -= _getTime() - sTimeStopped;
-    }
+    _pause();
+}
+
+void
+Java_com_example_SanAngeles_DemoGLSurfaceView_nativeResume( JNIEnv*  env )
+{
+    _resume();
 }
 
 /* Call to render the next GL frame */
diff --git a/ndk/platforms/android-4/samples/san-angeles/src/com/example/SanAngeles/DemoActivity.java b/ndk/platforms/android-4/samples/san-angeles/src/com/example/SanAngeles/DemoActivity.java
index 696be78..076b8a7 100644
--- a/ndk/platforms/android-4/samples/san-angeles/src/com/example/SanAngeles/DemoActivity.java
+++ b/ndk/platforms/android-4/samples/san-angeles/src/com/example/SanAngeles/DemoActivity.java
@@ -86,14 +86,29 @@
 
     public boolean onTouchEvent(final MotionEvent event) {
         if (event.getAction() == MotionEvent.ACTION_DOWN) {
-            nativePause();
+            nativeTogglePauseResume();
         }
         return true;
     }
 
+   @Override
+    public void onPause() {
+        super.onPause();
+        nativePause();
+    }
+
+   @Override
+    public void onResume() {
+        super.onResume();
+        nativeResume();
+    }
+
+
     DemoRenderer mRenderer;
 
     private static native void nativePause();
+    private static native void nativeResume();
+    private static native void nativeTogglePauseResume();
 }
 
 class DemoRenderer implements GLSurfaceView.Renderer {
diff --git a/ndk/platforms/android-5/include/GLES2/gl2.h b/ndk/platforms/android-5/include/GLES2/gl2.h
index e1d3b87..c139c25 100644
--- a/ndk/platforms/android-5/include/GLES2/gl2.h
+++ b/ndk/platforms/android-5/include/GLES2/gl2.h
@@ -528,7 +528,7 @@
 GL_APICALL void         GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
 GL_APICALL void         GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
 GL_APICALL void         GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
-GL_APICALL int          GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name);
+GL_APICALL GLint        GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name);
 GL_APICALL void         GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params);
 GL_APICALL void         GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params);
 GL_APICALL GLenum       GL_APIENTRY glGetError (void);
@@ -547,7 +547,7 @@
 GL_APICALL void         GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params);
 GL_APICALL void         GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params);
 GL_APICALL void         GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params);
-GL_APICALL int          GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name);
+GL_APICALL GLint        GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name);
 GL_APICALL void         GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params);
 GL_APICALL void         GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params);
 GL_APICALL void         GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer);
diff --git a/ndk/platforms/android-5/include/pthread.h b/ndk/platforms/android-5/include/pthread.h
index a20a52d..ba40fa1 100644
--- a/ndk/platforms/android-5/include/pthread.h
+++ b/ndk/platforms/android-5/include/pthread.h
@@ -262,9 +262,4 @@
 } /* extern "C" */
 #endif
 
-/************ TO FIX ************/
-
-#define LONG_LONG_MAX __LONG_LONG_MAX__
-#define LONG_LONG_MIN (-__LONG_LONG_MAX__ - 1)
-
 #endif /* _PTHREAD_H_ */
diff --git a/ndk/platforms/android-8/include/android/bitmap.h b/ndk/platforms/android-8/include/android/bitmap.h
index 5078277..6e18763 100644
--- a/ndk/platforms/android-8/include/android/bitmap.h
+++ b/ndk/platforms/android-8/include/android/bitmap.h
@@ -24,11 +24,14 @@
 extern "C" {
 #endif
 
-#define ANDROID_BITMAP_RESUT_SUCCESS            0
+#define ANDROID_BITMAP_RESULT_SUCCESS            0
 #define ANDROID_BITMAP_RESULT_BAD_PARAMETER     -1
 #define ANDROID_BITMAP_RESULT_JNI_EXCEPTION     -2
 #define ANDROID_BITMAP_RESULT_ALLOCATION_FAILED -3
 
+/* Backward compatibility: this macro used to be misspelled. */
+#define ANDROID_BITMAP_RESUT_SUCCESS ANDROID_BITMAP_RESULT_SUCCESS
+
 enum AndroidBitmapFormat {
     ANDROID_BITMAP_FORMAT_NONE      = 0,
     ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
diff --git a/ndk/platforms/android-8/include/pthread.h b/ndk/platforms/android-8/include/pthread.h
index f7a596a..7741fcf 100644
--- a/ndk/platforms/android-8/include/pthread.h
+++ b/ndk/platforms/android-8/include/pthread.h
@@ -267,9 +267,4 @@
 } /* extern "C" */
 #endif
 
-/************ TO FIX ************/
-
-#define LONG_LONG_MAX __LONG_LONG_MAX__
-#define LONG_LONG_MIN (-__LONG_LONG_MAX__ - 1)
-
 #endif /* _PTHREAD_H_ */
diff --git a/ndk/platforms/android-8/include/stdio.h b/ndk/platforms/android-8/include/stdio.h
index c38ed5a..172c8d0 100644
--- a/ndk/platforms/android-8/include/stdio.h
+++ b/ndk/platforms/android-8/include/stdio.h
@@ -39,7 +39,7 @@
 #define	_STDIO_H_
 
 #include <sys/cdefs.h>
-#include <sys/_types.h>
+#include <sys/types.h>
 
 /* va_list and size_t must be defined by stdio.h according to Posix */
 #define __need___va_list
@@ -49,30 +49,9 @@
 #define __need_size_t
 #include <stddef.h>
 
+#define __need_NULL
 #include <stddef.h>
 
-#if __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE
-#include <sys/types.h>	/* XXX should be removed */
-#endif
-
-#ifndef	_SIZE_T_DEFINED_
-#define	_SIZE_T_DEFINED_
-typedef	unsigned long    size_t;
-#endif
-
-#ifndef	_OFF_T_DEFINED_
-#define	_OFF_T_DEFINED_
-typedef	long    off_t;
-#endif
-
-#ifndef NULL
-#ifdef 	__GNUG__
-#define	NULL	__null
-#else
-#define	NULL	0L
-#endif
-#endif
-
 #define	_FSTDIO			/* Define for new stdio with functions. */
 
 typedef off_t fpos_t;		/* stdio file position type */
diff --git a/ndk/platforms/android-8/include/wchar.h b/ndk/platforms/android-8/include/wchar.h
index 97e1b5c..b9c7b0b 100644
--- a/ndk/platforms/android-8/include/wchar.h
+++ b/ndk/platforms/android-8/include/wchar.h
@@ -50,7 +50,7 @@
 
 __BEGIN_DECLS
 
-typedef int                     wint_t;
+typedef __WINT_TYPE__           wint_t;
 typedef struct { int  dummy; }  mbstate_t;
 
 typedef enum {
diff --git a/ndk/platforms/android-8/samples/bitmap-plasma/jni/plasma.c b/ndk/platforms/android-8/samples/bitmap-plasma/jni/plasma.c
index 79cd66d..d5f98fb 100644
--- a/ndk/platforms/android-8/samples/bitmap-plasma/jni/plasma.c
+++ b/ndk/platforms/android-8/samples/bitmap-plasma/jni/plasma.c
@@ -187,7 +187,6 @@
 
 static void fill_plasma( AndroidBitmapInfo*  info, void*  pixels, double  t )
 {
-    Fixed ft  = FIXED_FROM_FLOAT(t/1000.);
     Fixed yt1 = FIXED_FROM_FLOAT(t/1230.);
     Fixed yt2 = yt1;
     Fixed xt10 = FIXED_FROM_FLOAT(t/3000.);
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/cpu-features.h b/ndk/platforms/android-9/arch-mips/include/asm/cpu-features.h
index b3642c2..50ce572 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/cpu-features.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/cpu-features.h
@@ -161,26 +161,45 @@
 #define cpu_has_userlocal (cpu_data[0].options & MIPS_CPU_ULRI)
 #endif
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef cpu_has_nofpuex
+#define cpu_has_nofpuex (cpu_data[0].options & MIPS_CPU_NOFPUEX)
+#endif
+#ifndef cpu_has_64bits
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define cpu_has_64bits (cpu_data[0].isa_level & MIPS_CPU_ISA_64BIT)
+#endif
+#ifndef cpu_has_64bit_zero_reg
+#define cpu_has_64bit_zero_reg (cpu_data[0].isa_level & MIPS_CPU_ISA_64BIT)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
+#ifndef cpu_has_64bit_gp_regs
+#define cpu_has_64bit_gp_regs 0
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef cpu_has_64bit_addresses
+#define cpu_has_64bit_addresses 0
+#endif
 #ifndef cpu_has_vint
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define cpu_has_vint 0
 #endif
 #ifndef cpu_has_veic
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define cpu_has_veic 0
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
 #ifndef cpu_has_inclusive_pcaches
 #define cpu_has_inclusive_pcaches (cpu_data[0].options & MIPS_CPU_INCLUSIVE_CACHES)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #ifndef cpu_dcache_line_size
 #define cpu_dcache_line_size() cpu_data[0].dcache.linesz
 #endif
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #ifndef cpu_icache_line_size
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define cpu_icache_line_size() cpu_data[0].icache.linesz
 #endif
 #ifndef cpu_scache_line_size
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define cpu_scache_line_size() cpu_data[0].scache.linesz
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
 #endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/elf.h b/ndk/platforms/android-9/arch-mips/include/asm/elf.h
index 6ccb622..6f79694 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/elf.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/elf.h
@@ -186,29 +186,33 @@
 typedef double elf_fpreg_t;
 typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define elf_check_arch(hdr)  ({   int __res = 1;   struct elfhdr *__h = (hdr);     if (__h->e_machine != EM_MIPS)   __res = 0;   if (__h->e_ident[EI_CLASS] != ELFCLASS32)   __res = 0;   if ((__h->e_flags & EF_MIPS_ABI2) != 0)   __res = 0;   if (((__h->e_flags & EF_MIPS_ABI) != 0) &&   ((__h->e_flags & EF_MIPS_ABI) != EF_MIPS_ABI_O32))   __res = 0;     __res;  })
+#define ELF_CLASS ELFCLASS32
 #ifdef __MIPSEB__
 #define ELF_DATA ELFDATA2MSB
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #elif __MIPSEL__
 #define ELF_DATA ELFDATA2LSB
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
 #define ELF_ARCH EM_MIPS
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
 struct mips_abi;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SET_PERSONALITY(ex, ibcs2)  do {   if (ibcs2)   set_personality(PER_SVR4);   set_personality(PER_LINUX);     current->thread.abi = &mips_abi;  } while (0)
 struct task_struct;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define ELF_CORE_COPY_REGS(elf_regs, regs)   elf_dump_regs((elf_greg_t *)&(elf_regs), regs);
 #define ELF_CORE_COPY_TASK_REGS(tsk, elf_regs) dump_task_regs(tsk, elf_regs)
 #define ELF_CORE_COPY_FPREGS(tsk, elf_fpregs)   dump_task_fpu(tsk, elf_fpregs)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define USE_ELF_CORE_DUMP
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define ELF_EXEC_PAGESIZE PAGE_SIZE
 #define ELF_HWCAP (0)
 #define ELF_PLATFORM (NULL)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define ELF_PLAT_INIT(_r, load_addr) do {   _r->regs[1] = _r->regs[2] = _r->regs[3] = _r->regs[4] = 0;   _r->regs[5] = _r->regs[6] = _r->regs[7] = _r->regs[8] = 0;   _r->regs[9] = _r->regs[10] = _r->regs[11] = _r->regs[12] = 0;   _r->regs[13] = _r->regs[14] = _r->regs[15] = _r->regs[16] = 0;   _r->regs[17] = _r->regs[18] = _r->regs[19] = _r->regs[20] = 0;   _r->regs[21] = _r->regs[22] = _r->regs[23] = _r->regs[24] = 0;   _r->regs[25] = _r->regs[26] = _r->regs[27] = _r->regs[28] = 0;   _r->regs[30] = _r->regs[31] = 0;  } while (0)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #ifndef ELF_ET_DYN_BASE
 #define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
 #endif
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/fcntl.h b/ndk/platforms/android-9/arch-mips/include/asm/fcntl.h
index 2686340..73de4ad 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/fcntl.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/fcntl.h
@@ -43,6 +43,18 @@
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define F_SETLKW64 35
 #endif
+struct flock {
+ short l_type;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ short l_whence;
+ off_t l_start;
+ off_t l_len;
+ long l_sysid;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __kernel_pid_t l_pid;
+ long pad[4];
+};
+#define HAVE_ARCH_STRUCT_FLOCK
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #include <asm-generic/fcntl.h>
 #endif
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/mach-generic/spaces.h b/ndk/platforms/android-9/arch-mips/include/asm/mach-generic/spaces.h
index cbda237..0ec1f57 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/mach-generic/spaces.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/mach-generic/spaces.h
@@ -23,8 +23,19 @@
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define PHYS_OFFSET _AC(0, UL)
 #endif
-#ifndef PAGE_OFFSET
-#define PAGE_OFFSET (CAC_BASE + PHYS_OFFSET)
+#define CAC_BASE _AC(0x80000000, UL)
+#define IO_BASE _AC(0xa0000000, UL)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define UNCAC_BASE _AC(0xa0000000, UL)
+#ifndef MAP_BASE
+#define MAP_BASE _AC(0xc0000000, UL)
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#ifndef HIGHMEM_START
+#define HIGHMEM_START _AC(0x20000000, UL)
+#endif
+#ifndef PAGE_OFFSET
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PAGE_OFFSET (CAC_BASE + PHYS_OFFSET)
 #endif
 #endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/mman.h b/ndk/platforms/android-9/arch-mips/include/asm/mman.h
index 9e51c67..cb42c6a 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/mman.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/mman.h
@@ -47,22 +47,33 @@
 #define MAP_POPULATE 0x10000  
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MAP_NONBLOCK 0x20000  
+#define MAP_STACK 0x40000  
+#define MAP_HUGETLB 0x80000  
 #define MS_ASYNC 0x0001  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MS_INVALIDATE 0x0002  
 #define MS_SYNC 0x0004  
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MCL_CURRENT 1  
 #define MCL_FUTURE 2  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MADV_NORMAL 0  
 #define MADV_RANDOM 1  
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MADV_SEQUENTIAL 2  
 #define MADV_WILLNEED 3  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MADV_DONTNEED 4  
 #define MADV_REMOVE 9  
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define MADV_DONTFORK 10  
 #define MADV_DOFORK 11  
-#define MAP_FILE 0
-#endif
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MADV_MERGEABLE 12  
+#define MADV_UNMERGEABLE 13  
+#define MADV_HWPOISON 100  
+#define MADV_HUGEPAGE 14  
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MADV_NOHUGEPAGE 15  
+#define MADV_DONTDUMP 16  
+#define MADV_DODUMP 17  
+#define MAP_FILE 0
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/module.h b/ndk/platforms/android-9/arch-mips/include/asm/module.h
index 45808e9..dd24290 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/module.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/module.h
@@ -49,8 +49,20 @@
  Elf64_Byte r_type;
  Elf64_Sxword r_addend;
 } Elf64_Mips_Rela;
+#define Elf_Shdr Elf32_Shdr
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define Elf_Sym Elf32_Sym
+#define Elf_Ehdr Elf32_Ehdr
+#define Elf_Addr Elf32_Addr
+#define Elf_Mips_Rel Elf32_Rel
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define Elf_Mips_Rela Elf32_Rela
+#define ELF_MIPS_R_SYM(rel) ELF32_R_SYM(rel.r_info)
+#define ELF_MIPS_R_TYPE(rel) ELF32_R_TYPE(rel.r_info)
 #error MODULE_PROC_FAMILY undefined for your processor configuration
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define MODULE_KERNEL_TYPE "32BIT "
 #define MODULE_KERNEL_SMTC ""
 #define MODULE_ARCH_VERMAGIC   MODULE_PROC_FAMILY MODULE_KERNEL_TYPE MODULE_KERNEL_SMTC
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/msgbuf.h b/ndk/platforms/android-9/arch-mips/include/asm/msgbuf.h
index 31a1887..d81da73 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/msgbuf.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/msgbuf.h
@@ -21,18 +21,21 @@
 struct msqid64_ds {
  struct ipc64_perm msg_perm;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ unsigned long __unused1;
  __kernel_time_t msg_stime;
+ unsigned long __unused2;
  __kernel_time_t msg_rtime;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ unsigned long __unused3;
  __kernel_time_t msg_ctime;
  unsigned long msg_cbytes;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long msg_qnum;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long msg_qbytes;
  __kernel_pid_t msg_lspid;
  __kernel_pid_t msg_lrpid;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long __unused4;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long __unused5;
 };
 #endif
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/pgalloc.h b/ndk/platforms/android-9/arch-mips/include/asm/pgalloc.h
index e3ef3b8..0f16346 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/pgalloc.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/pgalloc.h
@@ -24,6 +24,8 @@
 #include <linux/sched.h>
 #define pmd_pgtable(pmd) pmd_page(pmd)
 #define __pte_free_tlb(tlb,pte)  do {   pgtable_page_dtor(pte);   tlb_remove_page((tlb), pte);  } while (0)
-#define check_pgt_cache() do { } while (0)
+#define pmd_free(mm, x) do { } while (0)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __pmd_free_tlb(tlb, x) do { } while (0)
+#define check_pgt_cache() do { } while (0)
 #endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/pgtable-32.h b/ndk/platforms/android-9/arch-mips/include/asm/pgtable-32.h
new file mode 100644
index 0000000..f005083
--- /dev/null
+++ b/ndk/platforms/android-9/arch-mips/include/asm/pgtable-32.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _ASM_PGTABLE_32_H
+#define _ASM_PGTABLE_32_H
+#include <asm/addrspace.h>
+#include <asm/page.h>
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#include <linux/linkage.h>
+#include <asm/cachectl.h>
+#include <asm/fixmap.h>
+#include <asm-generic/pgtable-nopmd.h>
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PGDIR_SHIFT (2 * PAGE_SHIFT + PTE_ORDER - PTE_T_LOG2)
+#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
+#define PGDIR_MASK (~(PGDIR_SIZE-1))
+#define __PGD_ORDER (32 - 3 * PAGE_SHIFT + PGD_T_LOG2 + PTE_T_LOG2)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PGD_ORDER (__PGD_ORDER >= 0 ? __PGD_ORDER : 0)
+#define PUD_ORDER aieeee_attempt_to_allocate_pud
+#define PMD_ORDER 1
+#define PTE_ORDER 0
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PTRS_PER_PGD (USER_PTRS_PER_PGD * 2)
+#define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t))
+#define USER_PTRS_PER_PGD (0x80000000UL/PGDIR_SIZE)
+#define FIRST_USER_ADDRESS 0
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define VMALLOC_START MAP_BASE
+#define PKMAP_BASE (0xfe000000UL)
+#define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE)
+#define pte_ERROR(e)   printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pgd_ERROR(e)   printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
+#define pmd_bad(pmd) (pmd_val(pmd) & ~PAGE_MASK)
+#define pte_page(x) pfn_to_page(pte_pfn(x))
+#define pte_pfn(x) ((unsigned long)((x).pte >> _PFN_SHIFT))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pfn_pte(pfn, prot) __pte(((unsigned long long)(pfn) << _PFN_SHIFT) | pgprot_val(prot))
+#define __pgd_offset(address) pgd_index(address)
+#define __pud_offset(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1))
+#define __pmd_offset(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pgd_offset_k(address) pgd_offset(&init_mm, address)
+#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
+#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr))
+#define __pte_offset(address)   (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pte_offset(dir, address)   ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))
+#define pte_offset_kernel(dir, address)   ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))
+#define pte_offset_map(dir, address)   ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address))
+#define pte_unmap(pte) ((void)(pte))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __swp_type(x) (((x).val >> 8) & 0x1f)
+#define __swp_offset(x) ((x).val >> 13)
+#define __swp_entry(type,offset)   ((swp_entry_t) { ((type) << 8) | ((offset) << 13) })
+#define PTE_FILE_MAX_BITS 28
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pte_to_pgoff(_pte) ((((_pte).pte >> 1) & 0x7) |   (((_pte).pte >> 2) & 0x8) |   (((_pte).pte >> 8) << 4))
+#define pgoff_to_pte(off) ((pte_t) { (((off) & 0x7) << 1) |   (((off) & 0x8) << 2) |   (((off) >> 4) << 8) |   _PAGE_FILE })
+#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
+#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/pgtable.h b/ndk/platforms/android-9/arch-mips/include/asm/pgtable.h
index ceb4343..46a5ba1 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/pgtable.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/pgtable.h
@@ -18,61 +18,62 @@
  ****************************************************************************/
 #ifndef _ASM_PGTABLE_H
 #define _ASM_PGTABLE_H
+#include <asm/pgtable-32.h>
 #include <asm/io.h>
-#include <asm/pgtable-bits.h>
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#include <asm/pgtable-bits.h>
 struct mm_struct;
 struct vm_area_struct;
 #define PAGE_NONE __pgprot(_PAGE_PRESENT | _CACHE_CACHABLE_NONCOHERENT)
-#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE |   _page_cachable_default)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE |   _page_cachable_default)
 #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_READ |   _page_cachable_default)
 #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_READ |   _page_cachable_default)
 #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE |   _PAGE_GLOBAL | _page_cachable_default)
-#define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE |   _page_cachable_default)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PAGE_USERIO __pgprot(_PAGE_PRESENT | _PAGE_READ | _PAGE_WRITE |   _page_cachable_default)
 #define PAGE_KERNEL_UNCACHED __pgprot(_PAGE_PRESENT | __READABLE |   __WRITEABLE | _PAGE_GLOBAL | _CACHE_UNCACHED)
 #define __P000 __pgprot(0)
 #define __P001 __pgprot(0)
-#define __P010 __pgprot(0)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __P010 __pgprot(0)
 #define __P011 __pgprot(0)
 #define __P100 __pgprot(0)
 #define __P101 __pgprot(0)
-#define __P110 __pgprot(0)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __P110 __pgprot(0)
 #define __P111 __pgprot(0)
 #define __S000 __pgprot(0)
 #define __S001 __pgprot(0)
-#define __S010 __pgprot(0)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __S010 __pgprot(0)
 #define __S011 __pgprot(0)
 #define __S100 __pgprot(0)
 #define __S101 __pgprot(0)
-#define __S110 __pgprot(0)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __S110 __pgprot(0)
 #define __S111 __pgprot(0)
 #define ZERO_PAGE(vaddr)   (virt_to_page((void *)(empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask))))
 #define pmd_phys(pmd) virt_to_phys((void *)pmd_val(pmd))
-#define pmd_page(pmd) (pfn_to_page(pmd_phys(pmd) >> PAGE_SHIFT))
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define pmd_page(pmd) (pfn_to_page(pmd_phys(pmd) >> PAGE_SHIFT))
 #define pmd_page_vaddr(pmd) pmd_val(pmd)
 #define pte_none(pte) (!(pte_val(pte) & ~_PAGE_GLOBAL))
 #define pte_present(pte) (pte_val(pte) & _PAGE_PRESENT)
-#define set_pte_at(mm, addr, ptep, pteval) set_pte(ptep, pteval)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define set_pte_at(mm, addr, ptep, pteval) set_pte(ptep, pteval)
 #define set_pmd(pmdptr, pmdval) do { *(pmdptr) = (pmdval); } while(0)
 #define PGD_T_LOG2 (__builtin_ffs(sizeof(pgd_t)) - 1)
 #define PMD_T_LOG2 (__builtin_ffs(sizeof(pmd_t)) - 1)
-#define PTE_T_LOG2 (__builtin_ffs(sizeof(pte_t)) - 1)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PTE_T_LOG2 (__builtin_ffs(sizeof(pte_t)) - 1)
 #define pgprot_noncached pgprot_noncached
 #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot))
 #define kern_addr_valid(addr) (1)
-#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)   remap_pfn_range(vma, vaddr, pfn, size, prot)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define io_remap_pfn_range(vma, vaddr, pfn, size, prot)   remap_pfn_range(vma, vaddr, pfn, size, prot)
 #include <asm-generic/pgtable.h>
 #define HAVE_ARCH_UNMAPPED_AREA
 #define pgtable_cache_init() do { } while (0)
-#endif
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/processor.h b/ndk/platforms/android-9/arch-mips/include/asm/processor.h
index 3563121..fe9ee76 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/processor.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/processor.h
@@ -29,61 +29,65 @@
 #include <asm/prefetch.h>
 #include <asm/system.h>
 #define current_text_addr() ({ __label__ _l; _l: &&_l;})
-#define NUM_FPU_REGS 32
+#define TASK_SIZE 0x7fff8000UL
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define STACK_TOP TASK_SIZE
+#define TASK_UNMAPPED_BASE ((TASK_SIZE / 3) & ~(PAGE_SIZE))
+#define NUM_FPU_REGS 32
 typedef __u64 fpureg_t;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 struct mips_fpu_struct {
  fpureg_t fpr[NUM_FPU_REGS];
  unsigned int fcr31;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 };
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define NUM_DSP_REGS 6
 typedef __u32 dspreg_t;
 struct mips_dsp_state {
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  dspreg_t dspr[NUM_DSP_REGS];
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned int dspcontrol;
 };
 #define INIT_CPUMASK {   {0,}  }
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 typedef struct {
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long seg;
 } mm_segment_t;
 #define ARCH_MIN_TASKALIGN 8
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 struct mips_abi;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 struct thread_struct {
  unsigned long reg16;
  unsigned long reg17, reg18, reg19, reg20, reg21, reg22, reg23;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long reg29, reg30, reg31;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long cp0_status;
  struct mips_fpu_struct fpu;
  struct mips_dsp_state dsp;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long cp0_badvaddr;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long cp0_baduaddr;
  unsigned long error_code;
  unsigned long trap_no;
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long irix_trampoline;
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
  unsigned long irix_oldctx;
  struct mips_abi *abi;
 };
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define FPAFF_INIT
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define INIT_THREAD {       .reg16 = 0,   .reg17 = 0,   .reg18 = 0,   .reg19 = 0,   .reg20 = 0,   .reg21 = 0,   .reg22 = 0,   .reg23 = 0,   .reg29 = 0,   .reg30 = 0,   .reg31 = 0,       .cp0_status = 0,       .fpu = {   .fpr = {0,},   .fcr31 = 0,   },       FPAFF_INIT       .dsp = {   .dspr = {0, },   .dspcontrol = 0,   },       .cp0_badvaddr = 0,   .cp0_baduaddr = 0,   .error_code = 0,   .trap_no = 0,   .irix_trampoline = 0,   .irix_oldctx = 0,  }
 struct task_struct;
 #define release_thread(thread) do { } while(0)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define prepare_to_copy(tsk) do { } while (0)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __KSTK_TOS(tsk) ((unsigned long)task_stack_page(tsk) + THREAD_SIZE - 32)
 #define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk) - 1)
 #define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29])
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status)
 #define cpu_relax() barrier()
 #define return_address() ({__asm__ __volatile__("":::"$31");__builtin_return_address(0);})
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/ptrace.h b/ndk/platforms/android-9/arch-mips/include/asm/ptrace.h
index 2b71e70..43cfcf1 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/ptrace.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/ptrace.h
@@ -33,29 +33,31 @@
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define ACX 78
 struct pt_regs {
+ unsigned long pad0[6];
  unsigned long regs[32];
- unsigned long cp0_status;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ unsigned long cp0_status;
  unsigned long hi;
  unsigned long lo;
  unsigned long cp0_badvaddr;
- unsigned long cp0_cause;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ unsigned long cp0_cause;
  unsigned long cp0_epc;
 } __attribute__ ((aligned (8)));
 #define PTRACE_GETREGS 12
-#define PTRACE_SETREGS 13
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PTRACE_SETREGS 13
 #define PTRACE_GETFPREGS 14
 #define PTRACE_SETFPREGS 15
 #define PTRACE_OLDSETOPTIONS 21
-#define PTRACE_GET_THREAD_AREA 25
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PTRACE_GET_THREAD_AREA 25
 #define PTRACE_SET_THREAD_AREA 26
 #define PTRACE_PEEKTEXT_3264 0xc0
 #define PTRACE_PEEKDATA_3264 0xc1
-#define PTRACE_POKETEXT_3264 0xc2
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define PTRACE_POKETEXT_3264 0xc2
 #define PTRACE_POKEDATA_3264 0xc3
 #define PTRACE_GET_THREAD_AREA_3264 0xc4
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/reg.h b/ndk/platforms/android-9/arch-mips/include/asm/reg.h
index 9174e27..1b8e8ee 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/reg.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/reg.h
@@ -18,57 +18,54 @@
  ****************************************************************************/
 #ifndef __ASM_MIPS_REG_H
 #define __ASM_MIPS_REG_H
-#ifdef WANT_COMPAT_REG_H
 #define EF_R0 6
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R1 7
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R2 8
 #define EF_R3 9
 #define EF_R4 10
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R5 11
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R6 12
 #define EF_R7 13
 #define EF_R8 14
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R9 15
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R10 16
 #define EF_R11 17
 #define EF_R12 18
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R13 19
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R14 20
 #define EF_R15 21
 #define EF_R16 22
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R17 23
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R18 24
 #define EF_R19 25
 #define EF_R20 26
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R21 27
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R22 28
 #define EF_R23 29
 #define EF_R24 30
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R25 31
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R26 32
 #define EF_R27 33
 #define EF_R28 34
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R29 35
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_R30 36
 #define EF_R31 37
 #define EF_LO 38
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_HI 39
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_CP0_EPC 40
 #define EF_CP0_BADVADDR 41
 #define EF_CP0_STATUS 42
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_CP0_CAUSE 43
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define EF_UNUSED0 44
 #define EF_SIZE 180
 #endif
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/resource.h b/ndk/platforms/android-9/arch-mips/include/asm/resource.h
index e841072..1374d7d 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/resource.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/resource.h
@@ -24,6 +24,7 @@
 #define RLIMIT_RSS 7  
 #define RLIMIT_NPROC 8  
 #define RLIMIT_MEMLOCK 9  
-#include <asm-generic/resource.h>
+#define RLIM_INFINITY 0x7fffffffUL
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#include <asm-generic/resource.h>
 #endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/siginfo.h b/ndk/platforms/android-9/arch-mips/include/asm/siginfo.h
index f3e508a..8fdbf77 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/siginfo.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/siginfo.h
@@ -24,73 +24,75 @@
 #define HAVE_ARCH_SIGINFO_T
 #define HAVE_ARCH_COPY_SIGINFO
 struct siginfo;
-#include <asm-generic/siginfo.h>
+#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#include <asm-generic/siginfo.h>
 typedef struct siginfo {
  int si_signo;
  int si_code;
- int si_errno;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ int si_errno;
  int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
  union {
  int _pad[SI_PAD_SIZE];
- struct {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ struct {
  pid_t _pid;
  __ARCH_SI_UID_T _uid;
  } _kill;
- struct {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ struct {
  timer_t _tid;
  int _overrun;
  char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
- sigval_t _sigval;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ sigval_t _sigval;
  int _sys_private;
  } _timer;
  struct {
- pid_t _pid;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ pid_t _pid;
  __ARCH_SI_UID_T _uid;
  sigval_t _sigval;
  } _rt;
- struct {
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ struct {
  pid_t _pid;
  __ARCH_SI_UID_T _uid;
  int _status;
- clock_t _utime;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ clock_t _utime;
  clock_t _stime;
  } _sigchld;
  struct {
- pid_t _pid;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ pid_t _pid;
  clock_t _utime;
  int _status;
  clock_t _stime;
- } _irix_sigchld;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ } _irix_sigchld;
  struct {
  void __user *_addr;
 #ifdef __ARCH_SI_TRAPNO
- int _trapno;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ int _trapno;
 #endif
  } _sigfault;
  struct {
- __ARCH_SI_BAND_T _band;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+ __ARCH_SI_BAND_T _band;
  int _fd;
  } _sigpoll;
  } _sifields;
-} siginfo_t;
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+} siginfo_t;
 #undef SI_ASYNCIO
 #undef SI_TIMER
 #undef SI_MESGQ
-#define SI_ASYNCIO -2  
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SI_ASYNCIO -2  
 #define SI_TIMER __SI_CODE(__SI_TIMER, -3)  
 #define SI_MESGQ __SI_CODE(__SI_MESGQ, -4)  
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/socket.h b/ndk/platforms/android-9/arch-mips/include/asm/socket.h
index ff8a3ba..4dbbe85 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/socket.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/socket.h
@@ -42,30 +42,39 @@
 #define SO_RCVTIMEO 0x1006  
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_ACCEPTCONN 0x1009
+#define SO_PROTOCOL 0x1028  
+#define SO_DOMAIN 0x1029  
 #define SO_NO_CHECK 11
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PRIORITY 12
 #define SO_BSDCOMPAT 14
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PASSCRED 17
 #define SO_PEERCRED 18
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_SECURITY_AUTHENTICATION 22
 #define SO_SECURITY_ENCRYPTION_TRANSPORT 23
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_SECURITY_ENCRYPTION_NETWORK 24
 #define SO_BINDTODEVICE 25
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_ATTACH_FILTER 26
 #define SO_DETACH_FILTER 27
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PEERNAME 28
 #define SO_TIMESTAMP 29
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SCM_TIMESTAMP SO_TIMESTAMP
 #define SO_PEERSEC 30
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_SNDBUFFORCE 31
 #define SO_RCVBUFFORCE 33
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SO_PASSSEC 34
 #define SO_TIMESTAMPNS 35
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define SCM_TIMESTAMPNS SO_TIMESTAMPNS
 #define SO_MARK 36
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SO_TIMESTAMPING 37
+#define SCM_TIMESTAMPING SO_TIMESTAMPING
+#define SO_RXQ_OVFL 40
+#define SO_WIFI_STATUS 41
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define SCM_WIFI_STATUS SO_WIFI_STATUS
 #endif
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/string.h b/ndk/platforms/android-9/arch-mips/include/asm/string.h
index 856f61b..6f375a3 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/string.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/string.h
@@ -18,8 +18,16 @@
  ****************************************************************************/
 #ifndef _ASM_STRING_H
 #define _ASM_STRING_H
+#ifndef IN_STRING_C
+#define __HAVE_ARCH_STRCPY
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __HAVE_ARCH_STRNCPY
+#define __HAVE_ARCH_STRCMP
+#endif
+#define __HAVE_ARCH_STRNCMP
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __HAVE_ARCH_MEMSET
 #define __HAVE_ARCH_MEMCPY
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __HAVE_ARCH_MEMMOVE
 #endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/uaccess.h b/ndk/platforms/android-9/arch-mips/include/asm/uaccess.h
index 3703af3..96025d3 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/uaccess.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/uaccess.h
@@ -23,35 +23,45 @@
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #include <linux/thread_info.h>
 #include <asm-generic/uaccess.h>
+#define __UA_LIMIT 0x80000000UL
+#define __UA_ADDR ".word"
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __UA_LA "la"
+#define __UA_ADDU "addu"
+#define __UA_t0 "$8"
+#define __UA_t1 "$9"
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define KERNEL_DS ((mm_segment_t) { 0UL })
 #define USER_DS ((mm_segment_t) { __UA_LIMIT })
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define VERIFY_READ 0
 #define VERIFY_WRITE 1
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define get_ds() (KERNEL_DS)
 #define get_fs() (current_thread_info()->addr_limit)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define set_fs(x) (current_thread_info()->addr_limit = (x))
 #define segment_eq(a, b) ((a).seg == (b).seg)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __ua_size(size)   ((__builtin_constant_p(size) && (signed long) (size) > 0) ? 0 : (size))
 #define __access_mask get_fs().seg
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __access_ok(addr, size, mask)   (((signed long)((mask) & ((addr) | ((addr) + (size)) | __ua_size(size)))) == 0)
 #define access_ok(type, addr, size)   likely(__access_ok((unsigned long)(addr), (size), __access_mask))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define put_user(x,ptr)   __put_user_check((x), (ptr), sizeof(*(ptr)))
 #define get_user(x,ptr)   __get_user_check((x), (ptr), sizeof(*(ptr)))
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __put_user(x,ptr)   __put_user_nocheck((x), (ptr), sizeof(*(ptr)))
 #define __get_user(x,ptr)   __get_user_nocheck((x), (ptr), sizeof(*(ptr)))
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 struct __large_struct { unsigned long buf[100]; };
 #define __m(x) (*(struct __large_struct __user *)(x))
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __GET_USER_DW(val, ptr) __get_user_asm_ll32(val, ptr)
 #define __get_user_common(val, size, ptr)  do {   switch (size) {   case 1: __get_user_asm(val, "lb", ptr); break;   case 2: __get_user_asm(val, "lh", ptr); break;   case 4: __get_user_asm(val, "lw", ptr); break;   case 8: __GET_USER_DW(val, ptr); break;   default: __get_user_unknown(); break;   }  } while (0)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __get_user_nocheck(x, ptr, size)  ({   long __gu_err;     __get_user_common((x), size, ptr);   __gu_err;  })
 #define __get_user_check(x, ptr, size)  ({   long __gu_err = -EFAULT;   const __typeof__(*(ptr)) __user * __gu_ptr = (ptr);     if (likely(access_ok(VERIFY_READ, __gu_ptr, size)))   __get_user_common((x), size, __gu_ptr);     __gu_err;  })
 #define __get_user_asm(val, insn, addr)  {   long __gu_tmp;     __asm__ __volatile__(   "1:	" insn "	%1, %3				\n"   "2:							\n"   "	.section .fixup,\"ax\"				\n"   "3:	li	%0, %4					\n"   "	j	2b					\n"   "	.previous					\n"   "	.section __ex_table,\"a\"			\n"   "	"__UA_ADDR "\t1b, 3b				\n"   "	.previous					\n"   : "=r" (__gu_err), "=r" (__gu_tmp)   : "0" (0), "o" (__m(addr)), "i" (-EFAULT));     (val) = (__typeof__(*(addr))) __gu_tmp;  }
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __get_user_asm_ll32(val, addr)  {   union {   unsigned long long l;   __typeof__(*(addr)) t;   } __gu_tmp;     __asm__ __volatile__(   "1:	lw	%1, (%3)				\n"   "2:	lw	%D1, 4(%3)				\n"   "3:	.section	.fixup,\"ax\"			\n"   "4:	li	%0, %4					\n"   "	move	%1, $0					\n"   "	move	%D1, $0					\n"   "	j	3b					\n"   "	.previous					\n"   "	.section	__ex_table,\"a\"		\n"   "	" __UA_ADDR "	1b, 4b				\n"   "	" __UA_ADDR "	2b, 4b				\n"   "	.previous					\n"   : "=r" (__gu_err), "=&r" (__gu_tmp.l)   : "0" (0), "r" (addr), "i" (-EFAULT));     (val) = __gu_tmp.t;  }
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __PUT_USER_DW(ptr) __put_user_asm_ll32(ptr)
 #define __put_user_nocheck(x, ptr, size)  ({   __typeof__(*(ptr)) __pu_val;   long __pu_err = 0;     __pu_val = (x);   switch (size) {   case 1: __put_user_asm("sb", ptr); break;   case 2: __put_user_asm("sh", ptr); break;   case 4: __put_user_asm("sw", ptr); break;   case 8: __PUT_USER_DW(ptr); break;   default: __put_user_unknown(); break;   }   __pu_err;  })
 #define __put_user_check(x, ptr, size)  ({   __typeof__(*(ptr)) __user *__pu_addr = (ptr);   __typeof__(*(ptr)) __pu_val = (x);   long __pu_err = -EFAULT;     if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) {   switch (size) {   case 1: __put_user_asm("sb", __pu_addr); break;   case 2: __put_user_asm("sh", __pu_addr); break;   case 4: __put_user_asm("sw", __pu_addr); break;   case 8: __PUT_USER_DW(__pu_addr); break;   default: __put_user_unknown(); break;   }   }   __pu_err;  })
 #define __put_user_asm(insn, ptr)  {   __asm__ __volatile__(   "1:	" insn "	%z2, %3		# __put_user_asm\n"   "2:							\n"   "	.section	.fixup,\"ax\"			\n"   "3:	li	%0, %4					\n"   "	j	2b					\n"   "	.previous					\n"   "	.section	__ex_table,\"a\"		\n"   "	" __UA_ADDR "	1b, 3b				\n"   "	.previous					\n"   : "=r" (__pu_err)   : "0" (0), "Jr" (__pu_val), "o" (__m(ptr)),   "i" (-EFAULT));  }
diff --git a/ndk/platforms/android-9/arch-mips/include/asm/unistd.h b/ndk/platforms/android-9/arch-mips/include/asm/unistd.h
index 38e84cc..4a8744f 100644
--- a/ndk/platforms/android-9/arch-mips/include/asm/unistd.h
+++ b/ndk/platforms/android-9/arch-mips/include/asm/unistd.h
@@ -433,749 +433,814 @@
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_pipe2 (__NR_Linux + 328)
 #define __NR_inotify_init1 (__NR_Linux + 329)
-#define __NR_Linux_syscalls 329
+#define __NR_preadv (__NR_Linux + 330)
+#define __NR_pwritev (__NR_Linux + 331)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_rt_tgsigqueueinfo (__NR_Linux + 332)
+#define __NR_perf_event_open (__NR_Linux + 333)
+#define __NR_accept4 (__NR_Linux + 334)
+#define __NR_recvmmsg (__NR_Linux + 335)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fanotify_init (__NR_Linux + 336)
+#define __NR_fanotify_mark (__NR_Linux + 337)
+#define __NR_prlimit64 (__NR_Linux + 338)
+#define __NR_name_to_handle_at (__NR_Linux + 339)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_open_by_handle_at (__NR_Linux + 340)
+#define __NR_clock_adjtime (__NR_Linux + 341)
+#define __NR_syncfs (__NR_Linux + 342)
+#define __NR_sendmmsg (__NR_Linux + 343)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_setns (__NR_Linux + 344)
+#define __NR_process_vm_readv (__NR_Linux + 345)
+#define __NR_process_vm_writev (__NR_Linux + 346)
+#define __NR_Linux_syscalls 346
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #endif
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_O32_Linux 4000
-#define __NR_O32_Linux_syscalls 329
+#define __NR_O32_Linux_syscalls 346
 #if _MIPS_SIM == _MIPS_SIM_ABI64
-#define __NR_Linux 5000
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_Linux 5000
 #define __NR_read (__NR_Linux + 0)
 #define __NR_write (__NR_Linux + 1)
 #define __NR_open (__NR_Linux + 2)
-#define __NR_close (__NR_Linux + 3)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_close (__NR_Linux + 3)
 #define __NR_stat (__NR_Linux + 4)
 #define __NR_fstat (__NR_Linux + 5)
 #define __NR_lstat (__NR_Linux + 6)
-#define __NR_poll (__NR_Linux + 7)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_poll (__NR_Linux + 7)
 #define __NR_lseek (__NR_Linux + 8)
 #define __NR_mmap (__NR_Linux + 9)
 #define __NR_mprotect (__NR_Linux + 10)
-#define __NR_munmap (__NR_Linux + 11)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_munmap (__NR_Linux + 11)
 #define __NR_brk (__NR_Linux + 12)
 #define __NR_rt_sigaction (__NR_Linux + 13)
 #define __NR_rt_sigprocmask (__NR_Linux + 14)
-#define __NR_ioctl (__NR_Linux + 15)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_ioctl (__NR_Linux + 15)
 #define __NR_pread64 (__NR_Linux + 16)
 #define __NR_pwrite64 (__NR_Linux + 17)
 #define __NR_readv (__NR_Linux + 18)
-#define __NR_writev (__NR_Linux + 19)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_writev (__NR_Linux + 19)
 #define __NR_access (__NR_Linux + 20)
 #define __NR_pipe (__NR_Linux + 21)
 #define __NR__newselect (__NR_Linux + 22)
-#define __NR_sched_yield (__NR_Linux + 23)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sched_yield (__NR_Linux + 23)
 #define __NR_mremap (__NR_Linux + 24)
 #define __NR_msync (__NR_Linux + 25)
 #define __NR_mincore (__NR_Linux + 26)
-#define __NR_madvise (__NR_Linux + 27)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_madvise (__NR_Linux + 27)
 #define __NR_shmget (__NR_Linux + 28)
 #define __NR_shmat (__NR_Linux + 29)
 #define __NR_shmctl (__NR_Linux + 30)
-#define __NR_dup (__NR_Linux + 31)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_dup (__NR_Linux + 31)
 #define __NR_dup2 (__NR_Linux + 32)
 #define __NR_pause (__NR_Linux + 33)
 #define __NR_nanosleep (__NR_Linux + 34)
-#define __NR_getitimer (__NR_Linux + 35)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_getitimer (__NR_Linux + 35)
 #define __NR_setitimer (__NR_Linux + 36)
 #define __NR_alarm (__NR_Linux + 37)
 #define __NR_getpid (__NR_Linux + 38)
-#define __NR_sendfile (__NR_Linux + 39)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sendfile (__NR_Linux + 39)
 #define __NR_socket (__NR_Linux + 40)
 #define __NR_connect (__NR_Linux + 41)
 #define __NR_accept (__NR_Linux + 42)
-#define __NR_sendto (__NR_Linux + 43)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sendto (__NR_Linux + 43)
 #define __NR_recvfrom (__NR_Linux + 44)
 #define __NR_sendmsg (__NR_Linux + 45)
 #define __NR_recvmsg (__NR_Linux + 46)
-#define __NR_shutdown (__NR_Linux + 47)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_shutdown (__NR_Linux + 47)
 #define __NR_bind (__NR_Linux + 48)
 #define __NR_listen (__NR_Linux + 49)
 #define __NR_getsockname (__NR_Linux + 50)
-#define __NR_getpeername (__NR_Linux + 51)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_getpeername (__NR_Linux + 51)
 #define __NR_socketpair (__NR_Linux + 52)
 #define __NR_setsockopt (__NR_Linux + 53)
 #define __NR_getsockopt (__NR_Linux + 54)
-#define __NR_clone (__NR_Linux + 55)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_clone (__NR_Linux + 55)
 #define __NR_fork (__NR_Linux + 56)
 #define __NR_execve (__NR_Linux + 57)
 #define __NR_exit (__NR_Linux + 58)
-#define __NR_wait4 (__NR_Linux + 59)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_wait4 (__NR_Linux + 59)
 #define __NR_kill (__NR_Linux + 60)
 #define __NR_uname (__NR_Linux + 61)
 #define __NR_semget (__NR_Linux + 62)
-#define __NR_semop (__NR_Linux + 63)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_semop (__NR_Linux + 63)
 #define __NR_semctl (__NR_Linux + 64)
 #define __NR_shmdt (__NR_Linux + 65)
 #define __NR_msgget (__NR_Linux + 66)
-#define __NR_msgsnd (__NR_Linux + 67)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_msgsnd (__NR_Linux + 67)
 #define __NR_msgrcv (__NR_Linux + 68)
 #define __NR_msgctl (__NR_Linux + 69)
 #define __NR_fcntl (__NR_Linux + 70)
-#define __NR_flock (__NR_Linux + 71)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_flock (__NR_Linux + 71)
 #define __NR_fsync (__NR_Linux + 72)
 #define __NR_fdatasync (__NR_Linux + 73)
 #define __NR_truncate (__NR_Linux + 74)
-#define __NR_ftruncate (__NR_Linux + 75)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_ftruncate (__NR_Linux + 75)
 #define __NR_getdents (__NR_Linux + 76)
 #define __NR_getcwd (__NR_Linux + 77)
 #define __NR_chdir (__NR_Linux + 78)
-#define __NR_fchdir (__NR_Linux + 79)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fchdir (__NR_Linux + 79)
 #define __NR_rename (__NR_Linux + 80)
 #define __NR_mkdir (__NR_Linux + 81)
 #define __NR_rmdir (__NR_Linux + 82)
-#define __NR_creat (__NR_Linux + 83)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_creat (__NR_Linux + 83)
 #define __NR_link (__NR_Linux + 84)
 #define __NR_unlink (__NR_Linux + 85)
 #define __NR_symlink (__NR_Linux + 86)
-#define __NR_readlink (__NR_Linux + 87)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_readlink (__NR_Linux + 87)
 #define __NR_chmod (__NR_Linux + 88)
 #define __NR_fchmod (__NR_Linux + 89)
 #define __NR_chown (__NR_Linux + 90)
-#define __NR_fchown (__NR_Linux + 91)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fchown (__NR_Linux + 91)
 #define __NR_lchown (__NR_Linux + 92)
 #define __NR_umask (__NR_Linux + 93)
 #define __NR_gettimeofday (__NR_Linux + 94)
-#define __NR_getrlimit (__NR_Linux + 95)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_getrlimit (__NR_Linux + 95)
 #define __NR_getrusage (__NR_Linux + 96)
 #define __NR_sysinfo (__NR_Linux + 97)
 #define __NR_times (__NR_Linux + 98)
-#define __NR_ptrace (__NR_Linux + 99)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_ptrace (__NR_Linux + 99)
 #define __NR_getuid (__NR_Linux + 100)
 #define __NR_syslog (__NR_Linux + 101)
 #define __NR_getgid (__NR_Linux + 102)
-#define __NR_setuid (__NR_Linux + 103)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_setuid (__NR_Linux + 103)
 #define __NR_setgid (__NR_Linux + 104)
 #define __NR_geteuid (__NR_Linux + 105)
 #define __NR_getegid (__NR_Linux + 106)
-#define __NR_setpgid (__NR_Linux + 107)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_setpgid (__NR_Linux + 107)
 #define __NR_getppid (__NR_Linux + 108)
 #define __NR_getpgrp (__NR_Linux + 109)
 #define __NR_setsid (__NR_Linux + 110)
-#define __NR_setreuid (__NR_Linux + 111)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_setreuid (__NR_Linux + 111)
 #define __NR_setregid (__NR_Linux + 112)
 #define __NR_getgroups (__NR_Linux + 113)
 #define __NR_setgroups (__NR_Linux + 114)
-#define __NR_setresuid (__NR_Linux + 115)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_setresuid (__NR_Linux + 115)
 #define __NR_getresuid (__NR_Linux + 116)
 #define __NR_setresgid (__NR_Linux + 117)
 #define __NR_getresgid (__NR_Linux + 118)
-#define __NR_getpgid (__NR_Linux + 119)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_getpgid (__NR_Linux + 119)
 #define __NR_setfsuid (__NR_Linux + 120)
 #define __NR_setfsgid (__NR_Linux + 121)
 #define __NR_getsid (__NR_Linux + 122)
-#define __NR_capget (__NR_Linux + 123)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_capget (__NR_Linux + 123)
 #define __NR_capset (__NR_Linux + 124)
 #define __NR_rt_sigpending (__NR_Linux + 125)
 #define __NR_rt_sigtimedwait (__NR_Linux + 126)
-#define __NR_rt_sigqueueinfo (__NR_Linux + 127)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_rt_sigqueueinfo (__NR_Linux + 127)
 #define __NR_rt_sigsuspend (__NR_Linux + 128)
 #define __NR_sigaltstack (__NR_Linux + 129)
 #define __NR_utime (__NR_Linux + 130)
-#define __NR_mknod (__NR_Linux + 131)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_mknod (__NR_Linux + 131)
 #define __NR_personality (__NR_Linux + 132)
 #define __NR_ustat (__NR_Linux + 133)
 #define __NR_statfs (__NR_Linux + 134)
-#define __NR_fstatfs (__NR_Linux + 135)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fstatfs (__NR_Linux + 135)
 #define __NR_sysfs (__NR_Linux + 136)
 #define __NR_getpriority (__NR_Linux + 137)
 #define __NR_setpriority (__NR_Linux + 138)
-#define __NR_sched_setparam (__NR_Linux + 139)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sched_setparam (__NR_Linux + 139)
 #define __NR_sched_getparam (__NR_Linux + 140)
 #define __NR_sched_setscheduler (__NR_Linux + 141)
 #define __NR_sched_getscheduler (__NR_Linux + 142)
-#define __NR_sched_get_priority_max (__NR_Linux + 143)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sched_get_priority_max (__NR_Linux + 143)
 #define __NR_sched_get_priority_min (__NR_Linux + 144)
 #define __NR_sched_rr_get_interval (__NR_Linux + 145)
 #define __NR_mlock (__NR_Linux + 146)
-#define __NR_munlock (__NR_Linux + 147)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_munlock (__NR_Linux + 147)
 #define __NR_mlockall (__NR_Linux + 148)
 #define __NR_munlockall (__NR_Linux + 149)
 #define __NR_vhangup (__NR_Linux + 150)
-#define __NR_pivot_root (__NR_Linux + 151)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_pivot_root (__NR_Linux + 151)
 #define __NR__sysctl (__NR_Linux + 152)
 #define __NR_prctl (__NR_Linux + 153)
 #define __NR_adjtimex (__NR_Linux + 154)
-#define __NR_setrlimit (__NR_Linux + 155)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_setrlimit (__NR_Linux + 155)
 #define __NR_chroot (__NR_Linux + 156)
 #define __NR_sync (__NR_Linux + 157)
 #define __NR_acct (__NR_Linux + 158)
-#define __NR_settimeofday (__NR_Linux + 159)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_settimeofday (__NR_Linux + 159)
 #define __NR_mount (__NR_Linux + 160)
 #define __NR_umount2 (__NR_Linux + 161)
 #define __NR_swapon (__NR_Linux + 162)
-#define __NR_swapoff (__NR_Linux + 163)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_swapoff (__NR_Linux + 163)
 #define __NR_reboot (__NR_Linux + 164)
 #define __NR_sethostname (__NR_Linux + 165)
 #define __NR_setdomainname (__NR_Linux + 166)
-#define __NR_create_module (__NR_Linux + 167)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_create_module (__NR_Linux + 167)
 #define __NR_init_module (__NR_Linux + 168)
 #define __NR_delete_module (__NR_Linux + 169)
 #define __NR_get_kernel_syms (__NR_Linux + 170)
-#define __NR_query_module (__NR_Linux + 171)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_query_module (__NR_Linux + 171)
 #define __NR_quotactl (__NR_Linux + 172)
 #define __NR_nfsservctl (__NR_Linux + 173)
 #define __NR_getpmsg (__NR_Linux + 174)
-#define __NR_putpmsg (__NR_Linux + 175)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_putpmsg (__NR_Linux + 175)
 #define __NR_afs_syscall (__NR_Linux + 176)
 #define __NR_reserved177 (__NR_Linux + 177)
 #define __NR_gettid (__NR_Linux + 178)
-#define __NR_readahead (__NR_Linux + 179)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_readahead (__NR_Linux + 179)
 #define __NR_setxattr (__NR_Linux + 180)
 #define __NR_lsetxattr (__NR_Linux + 181)
 #define __NR_fsetxattr (__NR_Linux + 182)
-#define __NR_getxattr (__NR_Linux + 183)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_getxattr (__NR_Linux + 183)
 #define __NR_lgetxattr (__NR_Linux + 184)
 #define __NR_fgetxattr (__NR_Linux + 185)
 #define __NR_listxattr (__NR_Linux + 186)
-#define __NR_llistxattr (__NR_Linux + 187)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_llistxattr (__NR_Linux + 187)
 #define __NR_flistxattr (__NR_Linux + 188)
 #define __NR_removexattr (__NR_Linux + 189)
 #define __NR_lremovexattr (__NR_Linux + 190)
-#define __NR_fremovexattr (__NR_Linux + 191)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fremovexattr (__NR_Linux + 191)
 #define __NR_tkill (__NR_Linux + 192)
 #define __NR_reserved193 (__NR_Linux + 193)
 #define __NR_futex (__NR_Linux + 194)
-#define __NR_sched_setaffinity (__NR_Linux + 195)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sched_setaffinity (__NR_Linux + 195)
 #define __NR_sched_getaffinity (__NR_Linux + 196)
 #define __NR_cacheflush (__NR_Linux + 197)
 #define __NR_cachectl (__NR_Linux + 198)
-#define __NR_sysmips (__NR_Linux + 199)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sysmips (__NR_Linux + 199)
 #define __NR_io_setup (__NR_Linux + 200)
 #define __NR_io_destroy (__NR_Linux + 201)
 #define __NR_io_getevents (__NR_Linux + 202)
-#define __NR_io_submit (__NR_Linux + 203)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_io_submit (__NR_Linux + 203)
 #define __NR_io_cancel (__NR_Linux + 204)
 #define __NR_exit_group (__NR_Linux + 205)
 #define __NR_lookup_dcookie (__NR_Linux + 206)
-#define __NR_epoll_create (__NR_Linux + 207)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_epoll_create (__NR_Linux + 207)
 #define __NR_epoll_ctl (__NR_Linux + 208)
 #define __NR_epoll_wait (__NR_Linux + 209)
 #define __NR_remap_file_pages (__NR_Linux + 210)
-#define __NR_rt_sigreturn (__NR_Linux + 211)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_rt_sigreturn (__NR_Linux + 211)
 #define __NR_set_tid_address (__NR_Linux + 212)
 #define __NR_restart_syscall (__NR_Linux + 213)
 #define __NR_semtimedop (__NR_Linux + 214)
-#define __NR_fadvise64 (__NR_Linux + 215)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fadvise64 (__NR_Linux + 215)
 #define __NR_timer_create (__NR_Linux + 216)
 #define __NR_timer_settime (__NR_Linux + 217)
 #define __NR_timer_gettime (__NR_Linux + 218)
-#define __NR_timer_getoverrun (__NR_Linux + 219)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_timer_getoverrun (__NR_Linux + 219)
 #define __NR_timer_delete (__NR_Linux + 220)
 #define __NR_clock_settime (__NR_Linux + 221)
 #define __NR_clock_gettime (__NR_Linux + 222)
-#define __NR_clock_getres (__NR_Linux + 223)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_clock_getres (__NR_Linux + 223)
 #define __NR_clock_nanosleep (__NR_Linux + 224)
 #define __NR_tgkill (__NR_Linux + 225)
 #define __NR_utimes (__NR_Linux + 226)
-#define __NR_mbind (__NR_Linux + 227)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_mbind (__NR_Linux + 227)
 #define __NR_get_mempolicy (__NR_Linux + 228)
 #define __NR_set_mempolicy (__NR_Linux + 229)
 #define __NR_mq_open (__NR_Linux + 230)
-#define __NR_mq_unlink (__NR_Linux + 231)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_mq_unlink (__NR_Linux + 231)
 #define __NR_mq_timedsend (__NR_Linux + 232)
 #define __NR_mq_timedreceive (__NR_Linux + 233)
 #define __NR_mq_notify (__NR_Linux + 234)
-#define __NR_mq_getsetattr (__NR_Linux + 235)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_mq_getsetattr (__NR_Linux + 235)
 #define __NR_vserver (__NR_Linux + 236)
 #define __NR_waitid (__NR_Linux + 237)
 #define __NR_add_key (__NR_Linux + 239)
-#define __NR_request_key (__NR_Linux + 240)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_request_key (__NR_Linux + 240)
 #define __NR_keyctl (__NR_Linux + 241)
 #define __NR_set_thread_area (__NR_Linux + 242)
 #define __NR_inotify_init (__NR_Linux + 243)
-#define __NR_inotify_add_watch (__NR_Linux + 244)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_inotify_add_watch (__NR_Linux + 244)
 #define __NR_inotify_rm_watch (__NR_Linux + 245)
 #define __NR_migrate_pages (__NR_Linux + 246)
 #define __NR_openat (__NR_Linux + 247)
-#define __NR_mkdirat (__NR_Linux + 248)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_mkdirat (__NR_Linux + 248)
 #define __NR_mknodat (__NR_Linux + 249)
 #define __NR_fchownat (__NR_Linux + 250)
 #define __NR_futimesat (__NR_Linux + 251)
-#define __NR_newfstatat (__NR_Linux + 252)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_newfstatat (__NR_Linux + 252)
 #define __NR_unlinkat (__NR_Linux + 253)
 #define __NR_renameat (__NR_Linux + 254)
 #define __NR_linkat (__NR_Linux + 255)
-#define __NR_symlinkat (__NR_Linux + 256)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_symlinkat (__NR_Linux + 256)
 #define __NR_readlinkat (__NR_Linux + 257)
 #define __NR_fchmodat (__NR_Linux + 258)
 #define __NR_faccessat (__NR_Linux + 259)
-#define __NR_pselect6 (__NR_Linux + 260)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_pselect6 (__NR_Linux + 260)
 #define __NR_ppoll (__NR_Linux + 261)
 #define __NR_unshare (__NR_Linux + 262)
 #define __NR_splice (__NR_Linux + 263)
-#define __NR_sync_file_range (__NR_Linux + 264)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sync_file_range (__NR_Linux + 264)
 #define __NR_tee (__NR_Linux + 265)
 #define __NR_vmsplice (__NR_Linux + 266)
 #define __NR_move_pages (__NR_Linux + 267)
-#define __NR_set_robust_list (__NR_Linux + 268)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_set_robust_list (__NR_Linux + 268)
 #define __NR_get_robust_list (__NR_Linux + 269)
 #define __NR_kexec_load (__NR_Linux + 270)
 #define __NR_getcpu (__NR_Linux + 271)
-#define __NR_epoll_pwait (__NR_Linux + 272)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_epoll_pwait (__NR_Linux + 272)
 #define __NR_ioprio_set (__NR_Linux + 273)
 #define __NR_ioprio_get (__NR_Linux + 274)
 #define __NR_utimensat (__NR_Linux + 275)
-#define __NR_signalfd (__NR_Linux + 276)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_signalfd (__NR_Linux + 276)
 #define __NR_timerfd (__NR_Linux + 277)
 #define __NR_eventfd (__NR_Linux + 278)
 #define __NR_fallocate (__NR_Linux + 279)
-#define __NR_timerfd_create (__NR_Linux + 280)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_timerfd_create (__NR_Linux + 280)
 #define __NR_timerfd_gettime (__NR_Linux + 281)
 #define __NR_timerfd_settime (__NR_Linux + 282)
 #define __NR_signalfd4 (__NR_Linux + 283)
-#define __NR_eventfd2 (__NR_Linux + 284)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_eventfd2 (__NR_Linux + 284)
 #define __NR_epoll_create1 (__NR_Linux + 285)
 #define __NR_dup3 (__NR_Linux + 286)
 #define __NR_pipe2 (__NR_Linux + 287)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_inotify_init1 (__NR_Linux + 288)
+#define __NR_preadv (__NR_Linux + 289)
+#define __NR_pwritev (__NR_Linux + 290)
+#define __NR_rt_tgsigqueueinfo (__NR_Linux + 291)
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define __NR_Linux_syscalls 288
+#define __NR_perf_event_open (__NR_Linux + 292)
+#define __NR_accept4 (__NR_Linux + 293)
+#define __NR_recvmmsg (__NR_Linux + 294)
+#define __NR_fanotify_init (__NR_Linux + 295)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fanotify_mark (__NR_Linux + 296)
+#define __NR_prlimit64 (__NR_Linux + 297)
+#define __NR_name_to_handle_at (__NR_Linux + 298)
+#define __NR_open_by_handle_at (__NR_Linux + 299)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_clock_adjtime (__NR_Linux + 300)
+#define __NR_syncfs (__NR_Linux + 301)
+#define __NR_sendmmsg (__NR_Linux + 302)
+#define __NR_setns (__NR_Linux + 303)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_process_vm_readv (__NR_Linux + 304)
+#define __NR_process_vm_writev (__NR_Linux + 305)
+#define __NR_Linux_syscalls 305
 #endif
-#define __NR_64_Linux 5000
-#define __NR_64_Linux_syscalls 288
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_64_Linux 5000
+#define __NR_64_Linux_syscalls 305
 #if _MIPS_SIM == _MIPS_SIM_NABI32
 #define __NR_Linux 6000
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_read (__NR_Linux + 0)
 #define __NR_write (__NR_Linux + 1)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_open (__NR_Linux + 2)
 #define __NR_close (__NR_Linux + 3)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_stat (__NR_Linux + 4)
 #define __NR_fstat (__NR_Linux + 5)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lstat (__NR_Linux + 6)
 #define __NR_poll (__NR_Linux + 7)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lseek (__NR_Linux + 8)
 #define __NR_mmap (__NR_Linux + 9)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mprotect (__NR_Linux + 10)
 #define __NR_munmap (__NR_Linux + 11)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_brk (__NR_Linux + 12)
 #define __NR_rt_sigaction (__NR_Linux + 13)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rt_sigprocmask (__NR_Linux + 14)
 #define __NR_ioctl (__NR_Linux + 15)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_pread64 (__NR_Linux + 16)
 #define __NR_pwrite64 (__NR_Linux + 17)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_readv (__NR_Linux + 18)
 #define __NR_writev (__NR_Linux + 19)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_access (__NR_Linux + 20)
 #define __NR_pipe (__NR_Linux + 21)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR__newselect (__NR_Linux + 22)
 #define __NR_sched_yield (__NR_Linux + 23)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mremap (__NR_Linux + 24)
 #define __NR_msync (__NR_Linux + 25)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mincore (__NR_Linux + 26)
 #define __NR_madvise (__NR_Linux + 27)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_shmget (__NR_Linux + 28)
 #define __NR_shmat (__NR_Linux + 29)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_shmctl (__NR_Linux + 30)
 #define __NR_dup (__NR_Linux + 31)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_dup2 (__NR_Linux + 32)
 #define __NR_pause (__NR_Linux + 33)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_nanosleep (__NR_Linux + 34)
 #define __NR_getitimer (__NR_Linux + 35)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setitimer (__NR_Linux + 36)
 #define __NR_alarm (__NR_Linux + 37)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getpid (__NR_Linux + 38)
 #define __NR_sendfile (__NR_Linux + 39)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_socket (__NR_Linux + 40)
 #define __NR_connect (__NR_Linux + 41)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_accept (__NR_Linux + 42)
 #define __NR_sendto (__NR_Linux + 43)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_recvfrom (__NR_Linux + 44)
 #define __NR_sendmsg (__NR_Linux + 45)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_recvmsg (__NR_Linux + 46)
 #define __NR_shutdown (__NR_Linux + 47)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_bind (__NR_Linux + 48)
 #define __NR_listen (__NR_Linux + 49)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getsockname (__NR_Linux + 50)
 #define __NR_getpeername (__NR_Linux + 51)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_socketpair (__NR_Linux + 52)
 #define __NR_setsockopt (__NR_Linux + 53)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getsockopt (__NR_Linux + 54)
 #define __NR_clone (__NR_Linux + 55)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fork (__NR_Linux + 56)
 #define __NR_execve (__NR_Linux + 57)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_exit (__NR_Linux + 58)
 #define __NR_wait4 (__NR_Linux + 59)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_kill (__NR_Linux + 60)
 #define __NR_uname (__NR_Linux + 61)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_semget (__NR_Linux + 62)
 #define __NR_semop (__NR_Linux + 63)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_semctl (__NR_Linux + 64)
 #define __NR_shmdt (__NR_Linux + 65)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_msgget (__NR_Linux + 66)
 #define __NR_msgsnd (__NR_Linux + 67)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_msgrcv (__NR_Linux + 68)
 #define __NR_msgctl (__NR_Linux + 69)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fcntl (__NR_Linux + 70)
 #define __NR_flock (__NR_Linux + 71)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fsync (__NR_Linux + 72)
 #define __NR_fdatasync (__NR_Linux + 73)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_truncate (__NR_Linux + 74)
 #define __NR_ftruncate (__NR_Linux + 75)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getdents (__NR_Linux + 76)
 #define __NR_getcwd (__NR_Linux + 77)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_chdir (__NR_Linux + 78)
 #define __NR_fchdir (__NR_Linux + 79)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rename (__NR_Linux + 80)
 #define __NR_mkdir (__NR_Linux + 81)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rmdir (__NR_Linux + 82)
 #define __NR_creat (__NR_Linux + 83)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_link (__NR_Linux + 84)
 #define __NR_unlink (__NR_Linux + 85)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_symlink (__NR_Linux + 86)
 #define __NR_readlink (__NR_Linux + 87)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_chmod (__NR_Linux + 88)
 #define __NR_fchmod (__NR_Linux + 89)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_chown (__NR_Linux + 90)
 #define __NR_fchown (__NR_Linux + 91)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lchown (__NR_Linux + 92)
 #define __NR_umask (__NR_Linux + 93)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_gettimeofday (__NR_Linux + 94)
 #define __NR_getrlimit (__NR_Linux + 95)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getrusage (__NR_Linux + 96)
 #define __NR_sysinfo (__NR_Linux + 97)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_times (__NR_Linux + 98)
 #define __NR_ptrace (__NR_Linux + 99)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getuid (__NR_Linux + 100)
 #define __NR_syslog (__NR_Linux + 101)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getgid (__NR_Linux + 102)
 #define __NR_setuid (__NR_Linux + 103)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setgid (__NR_Linux + 104)
 #define __NR_geteuid (__NR_Linux + 105)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getegid (__NR_Linux + 106)
 #define __NR_setpgid (__NR_Linux + 107)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getppid (__NR_Linux + 108)
 #define __NR_getpgrp (__NR_Linux + 109)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setsid (__NR_Linux + 110)
 #define __NR_setreuid (__NR_Linux + 111)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setregid (__NR_Linux + 112)
 #define __NR_getgroups (__NR_Linux + 113)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setgroups (__NR_Linux + 114)
 #define __NR_setresuid (__NR_Linux + 115)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getresuid (__NR_Linux + 116)
 #define __NR_setresgid (__NR_Linux + 117)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getresgid (__NR_Linux + 118)
 #define __NR_getpgid (__NR_Linux + 119)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setfsuid (__NR_Linux + 120)
 #define __NR_setfsgid (__NR_Linux + 121)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getsid (__NR_Linux + 122)
 #define __NR_capget (__NR_Linux + 123)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_capset (__NR_Linux + 124)
 #define __NR_rt_sigpending (__NR_Linux + 125)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rt_sigtimedwait (__NR_Linux + 126)
 #define __NR_rt_sigqueueinfo (__NR_Linux + 127)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_rt_sigsuspend (__NR_Linux + 128)
 #define __NR_sigaltstack (__NR_Linux + 129)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_utime (__NR_Linux + 130)
 #define __NR_mknod (__NR_Linux + 131)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_personality (__NR_Linux + 132)
 #define __NR_ustat (__NR_Linux + 133)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_statfs (__NR_Linux + 134)
 #define __NR_fstatfs (__NR_Linux + 135)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sysfs (__NR_Linux + 136)
 #define __NR_getpriority (__NR_Linux + 137)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setpriority (__NR_Linux + 138)
 #define __NR_sched_setparam (__NR_Linux + 139)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sched_getparam (__NR_Linux + 140)
 #define __NR_sched_setscheduler (__NR_Linux + 141)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sched_getscheduler (__NR_Linux + 142)
 #define __NR_sched_get_priority_max (__NR_Linux + 143)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sched_get_priority_min (__NR_Linux + 144)
 #define __NR_sched_rr_get_interval (__NR_Linux + 145)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mlock (__NR_Linux + 146)
 #define __NR_munlock (__NR_Linux + 147)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mlockall (__NR_Linux + 148)
 #define __NR_munlockall (__NR_Linux + 149)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_vhangup (__NR_Linux + 150)
 #define __NR_pivot_root (__NR_Linux + 151)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR__sysctl (__NR_Linux + 152)
 #define __NR_prctl (__NR_Linux + 153)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_adjtimex (__NR_Linux + 154)
 #define __NR_setrlimit (__NR_Linux + 155)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_chroot (__NR_Linux + 156)
 #define __NR_sync (__NR_Linux + 157)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_acct (__NR_Linux + 158)
 #define __NR_settimeofday (__NR_Linux + 159)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mount (__NR_Linux + 160)
 #define __NR_umount2 (__NR_Linux + 161)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_swapon (__NR_Linux + 162)
 #define __NR_swapoff (__NR_Linux + 163)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_reboot (__NR_Linux + 164)
 #define __NR_sethostname (__NR_Linux + 165)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setdomainname (__NR_Linux + 166)
 #define __NR_create_module (__NR_Linux + 167)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_init_module (__NR_Linux + 168)
 #define __NR_delete_module (__NR_Linux + 169)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_get_kernel_syms (__NR_Linux + 170)
 #define __NR_query_module (__NR_Linux + 171)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_quotactl (__NR_Linux + 172)
 #define __NR_nfsservctl (__NR_Linux + 173)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getpmsg (__NR_Linux + 174)
 #define __NR_putpmsg (__NR_Linux + 175)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_afs_syscall (__NR_Linux + 176)
 #define __NR_reserved177 (__NR_Linux + 177)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_gettid (__NR_Linux + 178)
 #define __NR_readahead (__NR_Linux + 179)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_setxattr (__NR_Linux + 180)
 #define __NR_lsetxattr (__NR_Linux + 181)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fsetxattr (__NR_Linux + 182)
 #define __NR_getxattr (__NR_Linux + 183)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lgetxattr (__NR_Linux + 184)
 #define __NR_fgetxattr (__NR_Linux + 185)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_listxattr (__NR_Linux + 186)
 #define __NR_llistxattr (__NR_Linux + 187)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_flistxattr (__NR_Linux + 188)
 #define __NR_removexattr (__NR_Linux + 189)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lremovexattr (__NR_Linux + 190)
 #define __NR_fremovexattr (__NR_Linux + 191)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_tkill (__NR_Linux + 192)
 #define __NR_reserved193 (__NR_Linux + 193)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_futex (__NR_Linux + 194)
 #define __NR_sched_setaffinity (__NR_Linux + 195)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_sched_getaffinity (__NR_Linux + 196)
 #define __NR_cacheflush (__NR_Linux + 197)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_cachectl (__NR_Linux + 198)
 #define __NR_sysmips (__NR_Linux + 199)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_io_setup (__NR_Linux + 200)
 #define __NR_io_destroy (__NR_Linux + 201)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_io_getevents (__NR_Linux + 202)
 #define __NR_io_submit (__NR_Linux + 203)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_io_cancel (__NR_Linux + 204)
 #define __NR_exit_group (__NR_Linux + 205)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_lookup_dcookie (__NR_Linux + 206)
 #define __NR_epoll_create (__NR_Linux + 207)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_epoll_ctl (__NR_Linux + 208)
 #define __NR_epoll_wait (__NR_Linux + 209)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_remap_file_pages (__NR_Linux + 210)
 #define __NR_rt_sigreturn (__NR_Linux + 211)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fcntl64 (__NR_Linux + 212)
 #define __NR_set_tid_address (__NR_Linux + 213)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_restart_syscall (__NR_Linux + 214)
 #define __NR_semtimedop (__NR_Linux + 215)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fadvise64 (__NR_Linux + 216)
 #define __NR_statfs64 (__NR_Linux + 217)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fstatfs64 (__NR_Linux + 218)
 #define __NR_sendfile64 (__NR_Linux + 219)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timer_create (__NR_Linux + 220)
 #define __NR_timer_settime (__NR_Linux + 221)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timer_gettime (__NR_Linux + 222)
 #define __NR_timer_getoverrun (__NR_Linux + 223)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timer_delete (__NR_Linux + 224)
 #define __NR_clock_settime (__NR_Linux + 225)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_clock_gettime (__NR_Linux + 226)
 #define __NR_clock_getres (__NR_Linux + 227)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_clock_nanosleep (__NR_Linux + 228)
 #define __NR_tgkill (__NR_Linux + 229)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_utimes (__NR_Linux + 230)
 #define __NR_mbind (__NR_Linux + 231)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_get_mempolicy (__NR_Linux + 232)
 #define __NR_set_mempolicy (__NR_Linux + 233)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mq_open (__NR_Linux + 234)
 #define __NR_mq_unlink (__NR_Linux + 235)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mq_timedsend (__NR_Linux + 236)
 #define __NR_mq_timedreceive (__NR_Linux + 237)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mq_notify (__NR_Linux + 238)
 #define __NR_mq_getsetattr (__NR_Linux + 239)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_vserver (__NR_Linux + 240)
 #define __NR_waitid (__NR_Linux + 241)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_add_key (__NR_Linux + 243)
 #define __NR_request_key (__NR_Linux + 244)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_keyctl (__NR_Linux + 245)
 #define __NR_set_thread_area (__NR_Linux + 246)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_inotify_init (__NR_Linux + 247)
 #define __NR_inotify_add_watch (__NR_Linux + 248)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_inotify_rm_watch (__NR_Linux + 249)
 #define __NR_migrate_pages (__NR_Linux + 250)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_openat (__NR_Linux + 251)
 #define __NR_mkdirat (__NR_Linux + 252)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_mknodat (__NR_Linux + 253)
 #define __NR_fchownat (__NR_Linux + 254)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_futimesat (__NR_Linux + 255)
 #define __NR_newfstatat (__NR_Linux + 256)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_unlinkat (__NR_Linux + 257)
 #define __NR_renameat (__NR_Linux + 258)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_linkat (__NR_Linux + 259)
 #define __NR_symlinkat (__NR_Linux + 260)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_readlinkat (__NR_Linux + 261)
 #define __NR_fchmodat (__NR_Linux + 262)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_faccessat (__NR_Linux + 263)
 #define __NR_pselect6 (__NR_Linux + 264)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_ppoll (__NR_Linux + 265)
 #define __NR_unshare (__NR_Linux + 266)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_splice (__NR_Linux + 267)
 #define __NR_sync_file_range (__NR_Linux + 268)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_tee (__NR_Linux + 269)
 #define __NR_vmsplice (__NR_Linux + 270)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_move_pages (__NR_Linux + 271)
 #define __NR_set_robust_list (__NR_Linux + 272)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_get_robust_list (__NR_Linux + 273)
 #define __NR_kexec_load (__NR_Linux + 274)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_getcpu (__NR_Linux + 275)
 #define __NR_epoll_pwait (__NR_Linux + 276)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_ioprio_set (__NR_Linux + 277)
 #define __NR_ioprio_get (__NR_Linux + 278)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_utimensat (__NR_Linux + 279)
 #define __NR_signalfd (__NR_Linux + 280)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timerfd (__NR_Linux + 281)
 #define __NR_eventfd (__NR_Linux + 282)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_fallocate (__NR_Linux + 283)
 #define __NR_timerfd_create (__NR_Linux + 284)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_timerfd_gettime (__NR_Linux + 285)
 #define __NR_timerfd_settime (__NR_Linux + 286)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_signalfd4 (__NR_Linux + 287)
 #define __NR_eventfd2 (__NR_Linux + 288)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_epoll_create1 (__NR_Linux + 289)
 #define __NR_dup3 (__NR_Linux + 290)
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_pipe2 (__NR_Linux + 291)
 #define __NR_inotify_init1 (__NR_Linux + 292)
-#define __NR_Linux_syscalls 292
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_preadv (__NR_Linux + 293)
+#define __NR_pwritev (__NR_Linux + 294)
+#define __NR_rt_tgsigqueueinfo (__NR_Linux + 295)
+#define __NR_perf_event_open (__NR_Linux + 296)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_accept4 (__NR_Linux + 297)
+#define __NR_recvmmsg (__NR_Linux + 298)
+#define __NR_getdents64 (__NR_Linux + 299)
+#define __NR_fanotify_init (__NR_Linux + 300)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_fanotify_mark (__NR_Linux + 301)
+#define __NR_prlimit64 (__NR_Linux + 302)
+#define __NR_name_to_handle_at (__NR_Linux + 303)
+#define __NR_open_by_handle_at (__NR_Linux + 304)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_clock_adjtime (__NR_Linux + 305)
+#define __NR_syncfs (__NR_Linux + 306)
+#define __NR_sendmmsg (__NR_Linux + 307)
+#define __NR_setns (__NR_Linux + 308)
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_process_vm_readv (__NR_Linux + 309)
+#define __NR_process_vm_writev (__NR_Linux + 310)
+#define __NR_Linux_syscalls 310
 #endif
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_N32_Linux 6000
-#define __NR_N32_Linux_syscalls 292
+#define __NR_N32_Linux_syscalls 310
 #endif
diff --git a/ndk/platforms/android-9/arch-mips/include/fenv.h b/ndk/platforms/android-9/arch-mips/include/fenv.h
index 583d002..ed69cf8 100644
--- a/ndk/platforms/android-9/arch-mips/include/fenv.h
+++ b/ndk/platforms/android-9/arch-mips/include/fenv.h
@@ -23,198 +23,203 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/lib/msun/mips/fenv.h,v 1.1 2008/04/26 12:20:29 imp Exp $
+ * $FreeBSD: src/lib/msun/arm/fenv.h,v 1.5 2005/03/16 19:03:45 das Exp $
  */
 
-#ifndef	_FENV_H_
-#define	_FENV_H_
+/*
+   Rewritten for Android.
+*/
 
-#include <sys/cdefs.h>
-#include <sys/_types.h>
+/* MIPS FPU floating point control register bits.
+ *
+ * 31-25  -> floating point conditions code bits set by FP compare
+ *           instructions
+ * 24     -> flush denormalized results to zero instead of
+ *           causing unimplemented operation exception.
+ * 23     -> Condition bit
+ * 22     -> In conjunction with FS detects denormalized
+ *           operands and replaces them internally with 0.
+ * 21     -> In conjunction with FS forces denormalized operands
+ *           to the closest normalized value.
+ * 20-18  -> reserved (read as 0, write with 0)
+ * 17     -> cause bit for unimplemented operation
+ * 16     -> cause bit for invalid exception
+ * 15     -> cause bit for division by zero exception
+ * 14     -> cause bit for overflow exception
+ * 13     -> cause bit for underflow exception
+ * 12     -> cause bit for inexact exception
+ * 11     -> enable exception for invalid exception
+ * 10     -> enable exception for division by zero exception
+ *  9     -> enable exception for overflow exception
+ *  8     -> enable exception for underflow exception
+ *  7     -> enable exception for inexact exception
+ *  6     -> flag invalid exception
+ *  5     -> flag division by zero exception
+ *  4     -> flag overflow exception
+ *  3     -> flag underflow exception
+ *  2     -> flag inexact exception
+ *  1-0   -> rounding control
+ *
+ *
+ * Rounding Control:
+ * 00 - rounding to nearest (RN)
+ * 01 - rounding toward zero (RZ)
+ * 10 - rounding (up) toward plus infinity (RP)
+ * 11 - rounding (down)toward minus infinity (RM)
+ */
+
+#ifndef _FENV_H_
+#define _FENV_H_
+
+#include <sys/types.h>
 
 __BEGIN_DECLS
 
-typedef	__uint32_t	fenv_t;
-typedef	__uint32_t	fexcept_t;
+typedef __uint32_t    fenv_t;
+typedef __uint32_t    fexcept_t;
 
 /* Exception flags */
-#define	FE_INVALID	0x0001
-#define	FE_DIVBYZERO	0x0002
-#define	FE_OVERFLOW	0x0004
-#define	FE_UNDERFLOW	0x0008
-#define	FE_INEXACT	0x0010
-#define	FE_ALL_EXCEPT	(FE_DIVBYZERO | FE_INEXACT | \
-			 FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
+#define FE_INVALID      0x40
+#define FE_DIVBYZERO    0x20
+#define FE_OVERFLOW     0x10
+#define FE_UNDERFLOW    0x08
+#define FE_INEXACT      0x04
+#define FE_ALL_EXCEPT   (FE_DIVBYZERO | FE_INEXACT | \
+                         FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
+#define _FCSR_CAUSE_SHIFT  10
+#define _ENABLE_SHIFT 5
+#define _FCSR_ENABLE_MASK (FE_ALL_EXCEPT << _ENABLE_SHIFT)
 
 /* Rounding modes */
-#define	FE_TONEAREST	0x0000
-#define	FE_TOWARDZERO	0x0001
-#define	FE_UPWARD	0x0002
-#define	FE_DOWNWARD	0x0003
-#define	_ROUND_MASK	(FE_TONEAREST | FE_DOWNWARD | \
-			 FE_UPWARD | FE_TOWARDZERO)
-
+#define FE_TONEAREST    0x0000
+#define FE_TOWARDZERO   0x0001
+#define FE_UPWARD       0x0002
+#define FE_DOWNWARD     0x0003
+#define _FCSR_RMODE_SHIFT 0
+#define _FCSR_RMASK       0x3
 /* Default floating-point environment */
-extern const fenv_t	__fe_dfl_env;
-#define	FE_DFL_ENV	(&__fe_dfl_env)
+extern const fenv_t    __fe_dfl_env;
+#define FE_DFL_ENV    (&__fe_dfl_env)
 
-/* We need to be able to map status flag positions to mask flag positions */
-#define _FPUSW_SHIFT	16
-#define	_ENABLE_MASK	(FE_ALL_EXCEPT << _FPUSW_SHIFT)
-
-#ifdef	ARM_HARD_FLOAT
-#define	__rfs(__fpsr)	__asm __volatile("rfs %0" : "=r" (*(__fpsr)))
-#define	__wfs(__fpsr)	__asm __volatile("wfs %0" : : "r" (__fpsr))
-#else
-#define __rfs(__fpsr)
-#define __wfs(__fpsr)
+static __inline int fegetenv(fenv_t* __envp) {
+   fenv_t _fcsr = 0;
+#ifdef  __mips_hard_float
+   __asm__ __volatile__("cfc1 %0,$31" : "=r" (_fcsr));
 #endif
-
-static __inline int
-feclearexcept(int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	__fpsr &= ~__excepts;
-	__wfs(__fpsr);
-	return (0);
+   *__envp = _fcsr;
+   return 0;
 }
 
-static __inline int
-fegetexceptflag(fexcept_t *__flagp, int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	*__flagp = __fpsr & __excepts;
-	return (0);
+static __inline int fesetenv(const fenv_t* __envp) {
+  fenv_t _fcsr = *__envp;
+#ifdef  __mips_hard_float
+  __asm__ __volatile__("ctc1 %0,$31" : : "r" (_fcsr));
+#endif
+  return 0;
 }
 
-static __inline int
-fesetexceptflag(const fexcept_t *__flagp, int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	__fpsr &= ~__excepts;
-	__fpsr |= *__flagp & __excepts;
-	__wfs(__fpsr);
-	return (0);
+static __inline int feclearexcept(int __excepts) {
+  fexcept_t __fcsr;
+  fegetenv(&__fcsr);
+  __excepts &= FE_ALL_EXCEPT;
+  __fcsr &= ~(__excepts | (__excepts << _FCSR_CAUSE_SHIFT));
+  fesetenv(&__fcsr);
+  return 0;
 }
 
-static __inline int
-feraiseexcept(int __excepts)
-{
-	fexcept_t __ex = __excepts;
-
-	fesetexceptflag(&__ex, __excepts);	/* XXX */
-	return (0);
+static __inline int fegetexceptflag(fexcept_t* __flagp, int __excepts) {
+  fexcept_t __fcsr;
+  fegetenv(&__fcsr);
+  *__flagp = __fcsr & __excepts & FE_ALL_EXCEPT;
+  return 0;
 }
 
-static __inline int
-fetestexcept(int __excepts)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	return (__fpsr & __excepts);
+static __inline int fesetexceptflag(const fexcept_t* __flagp, int __excepts) {
+  fexcept_t __fcsr;
+  fegetenv(&__fcsr);
+  /* Ensure that flags are all legal */
+  __excepts &= FE_ALL_EXCEPT;
+  __fcsr &= ~__excepts;
+  __fcsr |= *__flagp & __excepts;
+  fesetenv(&__fcsr);
+  return 0;
 }
 
-static __inline int
-fegetround(void)
-{
-
-	/*
-	 * Apparently, the rounding mode is specified as part of the
-	 * instruction format on ARM, so the dynamic rounding mode is
-	 * indeterminate.  Some FPUs may differ.
-	 */
-	return (-1);
+static __inline int feraiseexcept(int __excepts) {
+  fexcept_t __fcsr;
+  fegetenv(&__fcsr);
+  /* Ensure that flags are all legal */
+  __excepts &= FE_ALL_EXCEPT;
+  /* Cause bit needs to be set as well for generating the exception*/
+  __fcsr |= __excepts | (__excepts << _FCSR_CAUSE_SHIFT);
+  fesetenv(&__fcsr);
+  return 0;
 }
 
-static __inline int
-fesetround(int __round)
-{
-
-	return (-1);
+static __inline int fetestexcept(int __excepts) {
+  fexcept_t __FCSR;
+  fegetenv(&__FCSR);
+  return (__FCSR & __excepts & FE_ALL_EXCEPT);
 }
 
-static __inline int
-fegetenv(fenv_t *__envp)
-{
-
-	__rfs(__envp);
-	return (0);
+static __inline int fegetround(void) {
+  fenv_t _fcsr;
+  fegetenv(&_fcsr);
+  return (_fcsr & _FCSR_RMASK);
 }
 
-static __inline int
-feholdexcept(fenv_t *__envp)
-{
-	fenv_t __env;
-
-	__rfs(&__env);
-	*__envp = __env;
-	__env &= ~(FE_ALL_EXCEPT | _ENABLE_MASK);
-	__wfs(__env);
-	return (0);
+static __inline int fesetround(int __round) {
+  fenv_t _fcsr;
+  fegetenv(&_fcsr);
+  _fcsr &= ~_FCSR_RMASK;
+  _fcsr |= (__round & _FCSR_RMASK ) ;
+  fesetenv(&_fcsr);
+  return 0;
 }
 
-static __inline int
-fesetenv(const fenv_t *__envp)
-{
-
-	__wfs(*__envp);
-	return (0);
+static __inline int feholdexcept(fenv_t* __envp) {
+  fenv_t __env;
+  fegetenv(&__env);
+  *__envp = __env;
+  __env &= ~(FE_ALL_EXCEPT | _FCSR_ENABLE_MASK);
+  fesetenv(&__env);
+  return 0;
 }
 
-static __inline int
-feupdateenv(const fenv_t *__envp)
-{
-	fexcept_t __fpsr;
-
-	__rfs(&__fpsr);
-	__wfs(*__envp);
-	feraiseexcept(__fpsr & FE_ALL_EXCEPT);
-	return (0);
+static __inline int feupdateenv(const fenv_t* __envp) {
+  fexcept_t __fcsr;
+  fegetenv(&__fcsr);
+  fesetenv(__envp);
+  feraiseexcept(__fcsr & FE_ALL_EXCEPT);
+  return 0;
 }
 
 #if __BSD_VISIBLE
 
-static __inline int
-feenableexcept(int __mask)
-{
-	fenv_t __old_fpsr, __new_fpsr;
-
-	__rfs(&__old_fpsr);
-	__new_fpsr = __old_fpsr | (__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT;
-	__wfs(__new_fpsr);
-	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
+static __inline int feenableexcept(int __mask) {
+  fenv_t __old_fcsr, __new_fcsr;
+  fegetenv(&__old_fcsr);
+  __new_fcsr = __old_fcsr | (__mask & FE_ALL_EXCEPT) << _ENABLE_SHIFT;
+  fesetenv(&__new_fcsr);
+  return ((__old_fcsr >> _ENABLE_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
-fedisableexcept(int __mask)
-{
-	fenv_t __old_fpsr, __new_fpsr;
-
-	__rfs(&__old_fpsr);
-	__new_fpsr = __old_fpsr & ~((__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT);
-	__wfs(__new_fpsr);
-	return ((__old_fpsr >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
+static __inline int fedisableexcept(int __mask) {
+  fenv_t __old_fcsr, __new_fcsr;
+  fegetenv(&__old_fcsr);
+  __new_fcsr = __old_fcsr & ~((__mask & FE_ALL_EXCEPT) << _ENABLE_SHIFT);
+  fesetenv(&__new_fcsr);
+  return ((__old_fcsr >> _ENABLE_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static __inline int
-fegetexcept(void)
-{
-	fenv_t __fpsr;
-
-	__rfs(&__fpsr);
-	return ((__fpsr & _ENABLE_MASK) >> _FPUSW_SHIFT);
+static __inline int fegetexcept(void) {
+  fenv_t __fcsr;
+  fegetenv(&__fcsr);
+  return ((__fcsr & _FCSR_ENABLE_MASK) >> _ENABLE_SHIFT);
 }
 
 #endif /* __BSD_VISIBLE */
 
 __END_DECLS
 
-#endif	/* !_FENV_H_ */
-
+#endif /* !_FENV_H_ */
diff --git a/ndk/platforms/android-9/arch-mips/include/machine/_types.h b/ndk/platforms/android-9/arch-mips/include/machine/_types.h
index 1cc6c21..05f79ef 100644
--- a/ndk/platforms/android-9/arch-mips/include/machine/_types.h
+++ b/ndk/platforms/android-9/arch-mips/include/machine/_types.h
@@ -105,8 +105,6 @@
 typedef float			__float_t;
 typedef long long		__off_t;
 typedef long			__ptrdiff_t;
-/*typedef	unsigned long		__size_t;*/
-typedef	long			__ssize_t;
 typedef	int			__time_t;
 typedef int			__timer_t;
 #if defined(__GNUC__) && __GNUC__ >= 3
@@ -124,12 +122,6 @@
 typedef	void *			__wctrans_t;
 typedef	void *			__wctype_t;
 
-#ifdef __MIPSEB__
-#define _BYTE_ORDER _BIG_ENDIAN
-#else
-#define _BYTE_ORDER _LITTLE_ENDIAN
-#endif
-
 #if defined(_KERNEL)
 typedef struct label_t {
 	__register_t val[14];
diff --git a/ndk/platforms/android-9/arch-mips/include/machine/endian.h b/ndk/platforms/android-9/arch-mips/include/machine/endian.h
new file mode 100644
index 0000000..41a9004
--- /dev/null
+++ b/ndk/platforms/android-9/arch-mips/include/machine/endian.h
@@ -0,0 +1,70 @@
+/*	$OpenBSD: endian.h,v 1.5 2006/02/27 23:35:59 miod Exp $ */
+
+/*
+ * Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#ifndef _MIPS64_ENDIAN_H_
+#define _MIPS64_ENDIAN_H_
+
+#ifdef __GNUC__
+
+#if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
+#define __swap16md(x) ({					\
+    register uint16_t _x = (x);					\
+    register uint16_t _r;					\
+    __asm volatile ("wsbh %0, %1" : "=r" (_r) : "r" (_x));	\
+    _r;								\
+})
+
+#define __swap32md(x) ({					\
+    register uint32_t _x = (x);					\
+    register uint32_t _r;					\
+    __asm volatile ("wsbh %0, %1; rotr %0, %0, 16" : "=r" (_r) : "r" (_x)); \
+    _r;								\
+})
+
+#define __swap64md(x) ({					\
+    uint64_t _swap64md_x = (x);					\
+    (uint64_t) __swap32md(_swap64md_x >> 32) |			\
+        (uint64_t) __swap32md(_swap64md_x & 0xffffffff) << 32;	\
+})
+
+/* Tell sys/endian.h we have MD variants of the swap macros.  */
+#define MD_SWAP
+
+#endif  /* __mips32r2__ */
+#endif  /* __GNUC__ */
+
+#if defined(__MIPSEB__)
+#define _BYTE_ORDER _BIG_ENDIAN
+#else
+#define _BYTE_ORDER _LITTLE_ENDIAN
+#endif
+#define __STRICT_ALIGNMENT
+#include <sys/types.h>
+#include <sys/endian.h>
+
+#endif /* _MIPS64_ENDIAN_H_ */
diff --git a/ndk/platforms/android-9/arch-mips/lib-bootstrap/crtbegin_dynamic.o b/ndk/platforms/android-9/arch-mips/lib-bootstrap/crtbegin_dynamic.o
new file mode 100644
index 0000000..d3c366b
--- /dev/null
+++ b/ndk/platforms/android-9/arch-mips/lib-bootstrap/crtbegin_dynamic.o
Binary files differ
diff --git a/ndk/platforms/android-9/arch-mips/lib-bootstrap/crtend_android.o b/ndk/platforms/android-9/arch-mips/lib-bootstrap/crtend_android.o
new file mode 100644
index 0000000..6936f73
--- /dev/null
+++ b/ndk/platforms/android-9/arch-mips/lib-bootstrap/crtend_android.o
Binary files differ
diff --git a/ndk/platforms/android-9/arch-mips/lib-bootstrap/libc.so b/ndk/platforms/android-9/arch-mips/lib-bootstrap/libc.so
new file mode 100755
index 0000000..8462482
--- /dev/null
+++ b/ndk/platforms/android-9/arch-mips/lib-bootstrap/libc.so
Binary files differ
diff --git a/ndk/platforms/android-9/arch-mips/lib-bootstrap/libdl.so b/ndk/platforms/android-9/arch-mips/lib-bootstrap/libdl.so
new file mode 100755
index 0000000..62d382e
--- /dev/null
+++ b/ndk/platforms/android-9/arch-mips/lib-bootstrap/libdl.so
Binary files differ
diff --git a/ndk/platforms/android-9/arch-x86/include/asm/socket.h b/ndk/platforms/android-9/arch-x86/include/asm/socket.h
index b520169..50a9874 100644
--- a/ndk/platforms/android-9/arch-x86/include/asm/socket.h
+++ b/ndk/platforms/android-9/arch-x86/include/asm/socket.h
@@ -16,54 +16,4 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _ASM_SOCKET_H
-#define _ASM_SOCKET_H
-#include <asm/sockios.h>
-#define SOL_SOCKET 1
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_DEBUG 1
-#define SO_REUSEADDR 2
-#define SO_TYPE 3
-#define SO_ERROR 4
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_DONTROUTE 5
-#define SO_BROADCAST 6
-#define SO_SNDBUF 7
-#define SO_RCVBUF 8
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_SNDBUFFORCE 32
-#define SO_RCVBUFFORCE 33
-#define SO_KEEPALIVE 9
-#define SO_OOBINLINE 10
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_NO_CHECK 11
-#define SO_PRIORITY 12
-#define SO_LINGER 13
-#define SO_BSDCOMPAT 14
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_PASSCRED 16
-#define SO_PEERCRED 17
-#define SO_RCVLOWAT 18
-#define SO_SNDLOWAT 19
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_RCVTIMEO 20
-#define SO_SNDTIMEO 21
-#define SO_SECURITY_AUTHENTICATION 22
-#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_SECURITY_ENCRYPTION_NETWORK 24
-#define SO_BINDTODEVICE 25
-#define SO_ATTACH_FILTER 26
-#define SO_DETACH_FILTER 27
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_PEERNAME 28
-#define SO_TIMESTAMP 29
-#define SCM_TIMESTAMP SO_TIMESTAMP
-#define SO_ACCEPTCONN 30
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define SO_PEERSEC 31
-#define SO_PASSSEC 34
-#define SO_TIMESTAMPNS 35
-#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
-/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#endif
+#include <asm-generic/socket.h>
diff --git a/ndk/platforms/android-9/arch-x86/include/asm/unistd_32.h b/ndk/platforms/android-9/arch-x86/include/asm/unistd_32.h
index 4536585..b2193a2 100644
--- a/ndk/platforms/android-9/arch-x86/include/asm/unistd_32.h
+++ b/ndk/platforms/android-9/arch-x86/include/asm/unistd_32.h
@@ -16,8 +16,8 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef _ASM_I386_UNISTD_H_
-#define _ASM_I386_UNISTD_H_
+#ifndef _ASM_X86_UNISTD_32_H
+#define _ASM_X86_UNISTD_32_H
 #define __NR_restart_syscall 0
 #define __NR_exit 1
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
@@ -417,9 +417,35 @@
 #define __NR_utimensat 320
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 #define __NR_signalfd 321
-#define __NR_timerfd 322
+#define __NR_timerfd_create 322
 #define __NR_eventfd 323
 #define __NR_fallocate 324
 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
-#define __NR_perf_event_open 364
+#define __NR_timerfd_settime 325
+#define __NR_timerfd_gettime 326
+#define __NR_signalfd4 327
+#define __NR_eventfd2 328
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_epoll_create1 329
+#define __NR_dup3 330
+#define __NR_pipe2 331
+#define __NR_inotify_init1 332
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_preadv 333
+#define __NR_pwritev 334
+#define __NR_rt_tgsigqueueinfo 335
+#define __NR_perf_event_open 336
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_recvmmsg 337
+#define __NR_fanotify_init 338
+#define __NR_fanotify_mark 339
+#define __NR_prlimit64 340
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_name_to_handle_at 341
+#define __NR_open_by_handle_at 342
+#define __NR_clock_adjtime 343
+#define __NR_syncfs 344
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define __NR_sendmmsg 345
+#define __NR_setns 346
 #endif
diff --git a/ndk/platforms/android-9/arch-x86/include/fenv.h b/ndk/platforms/android-9/arch-x86/include/fenv.h
index 4e322b7..c0421c0 100644
--- a/ndk/platforms/android-9/arch-x86/include/fenv.h
+++ b/ndk/platforms/android-9/arch-x86/include/fenv.h
@@ -29,8 +29,7 @@
 #ifndef	_FENV_H_
 #define	_FENV_H_
 
-#include <sys/cdefs.h>
-#include <sys/_types.h>
+#include <sys/types.h>
 
 __BEGIN_DECLS
 
diff --git a/ndk/platforms/android-9/arch-x86/include/machine/_types.h b/ndk/platforms/android-9/arch-x86/include/machine/_types.h
index d3d9eeb..d217822 100644
--- a/ndk/platforms/android-9/arch-x86/include/machine/_types.h
+++ b/ndk/platforms/android-9/arch-x86/include/machine/_types.h
@@ -35,29 +35,6 @@
 #ifndef _I386__TYPES_H_
 #define _I386__TYPES_H_
 
-/* the kernel defines size_t as unsigned int, but g++ wants it to be unsigned long */
-#ifndef _SIZE_T_DEFINED_
-#  define _SIZE_T_DEFINED_
-#  ifdef __ANDROID__
-     typedef unsigned int  size_t;
-#  else
-     typedef unsigned long  size_t;
-#  endif
-#endif
-#if !defined(_SSIZE_T) && !defined(_SSIZE_T_DEFINED_)
-#define _SSIZE_T
-#define _SSIZE_T_DEFINED_
-typedef long int       ssize_t;
-#endif
-#ifndef _PTRDIFF_T
-#define _PTRDIFF_T
-#  ifdef __ANDROID__
-     typedef int            ptrdiff_t;
-#  else
-     typedef long           ptrdiff_t;
-#  endif
-#endif
-
 /* 7.18.1.1 Exact-width integer types */
 typedef	__signed char		__int8_t;
 typedef	unsigned char		__uint8_t;
diff --git a/ndk/platforms/android-9/arch-x86/include/endian.h b/ndk/platforms/android-9/arch-x86/include/machine/endian.h
similarity index 98%
rename from ndk/platforms/android-9/arch-x86/include/endian.h
rename to ndk/platforms/android-9/arch-x86/include/machine/endian.h
index 4a70536..e7ad257 100644
--- a/ndk/platforms/android-9/arch-x86/include/endian.h
+++ b/ndk/platforms/android-9/arch-x86/include/machine/endian.h
@@ -65,6 +65,7 @@
 #endif	/* __GNUC__ */
 
 #define _BYTE_ORDER _LITTLE_ENDIAN
+#include <sys/types.h>
 #include <sys/endian.h>
 
 #endif /* _I386_ENDIAN_H_ */
diff --git a/ndk/platforms/android-9/arch-x86/lib-bootstrap/crtbegin_dynamic.o b/ndk/platforms/android-9/arch-x86/lib-bootstrap/crtbegin_dynamic.o
new file mode 100644
index 0000000..19ebcb9
--- /dev/null
+++ b/ndk/platforms/android-9/arch-x86/lib-bootstrap/crtbegin_dynamic.o
Binary files differ
diff --git a/ndk/platforms/android-9/arch-x86/lib-bootstrap/crtend_android.o b/ndk/platforms/android-9/arch-x86/lib-bootstrap/crtend_android.o
new file mode 100644
index 0000000..173dad3
--- /dev/null
+++ b/ndk/platforms/android-9/arch-x86/lib-bootstrap/crtend_android.o
Binary files differ
diff --git a/ndk/platforms/android-9/arch-x86/lib-bootstrap/libc.so b/ndk/platforms/android-9/arch-x86/lib-bootstrap/libc.so
new file mode 100755
index 0000000..2b729fc
--- /dev/null
+++ b/ndk/platforms/android-9/arch-x86/lib-bootstrap/libc.so
Binary files differ
diff --git a/ndk/platforms/android-9/arch-x86/lib-bootstrap/libdl.so b/ndk/platforms/android-9/arch-x86/lib-bootstrap/libdl.so
new file mode 100755
index 0000000..e328e30
--- /dev/null
+++ b/ndk/platforms/android-9/arch-x86/lib-bootstrap/libdl.so
Binary files differ
diff --git a/ndk/platforms/android-9/arch-x86/lib/libc.a b/ndk/platforms/android-9/arch-x86/lib/libc.a
index 90220b0..29b1726 100644
--- a/ndk/platforms/android-9/arch-x86/lib/libc.a
+++ b/ndk/platforms/android-9/arch-x86/lib/libc.a
Binary files differ
diff --git a/ndk/platforms/android-9/arch-x86/symbols/libc.so.functions.txt b/ndk/platforms/android-9/arch-x86/symbols/libc.so.functions.txt
index 121dc51..60772cc 100644
--- a/ndk/platforms/android-9/arch-x86/symbols/libc.so.functions.txt
+++ b/ndk/platforms/android-9/arch-x86/symbols/libc.so.functions.txt
@@ -761,8 +761,10 @@
 sigaltstack
 sigblock
 siginterrupt
+siglongjmp
 sigpending
 sigprocmask
+sigsetjmp
 sigsetmask
 sigsuspend
 sigwait
diff --git a/ndk/platforms/android-9/include/SLES/OpenSLES_AndroidConfiguration.h b/ndk/platforms/android-9/include/SLES/OpenSLES_AndroidConfiguration.h
index bff6410..ad9cad6 100644
--- a/ndk/platforms/android-9/include/SLES/OpenSLES_AndroidConfiguration.h
+++ b/ndk/platforms/android-9/include/SLES/OpenSLES_AndroidConfiguration.h
@@ -19,6 +19,7 @@
 
 #ifdef __cplusplus
 extern "C" {
+#endif
 
 /*---------------------------------------------------------------------------*/
 /* Android AudioRecorder configuration                                       */
@@ -63,6 +64,7 @@
 
 
 
+#ifdef __cplusplus
 }
 #endif /* __cplusplus */
 
diff --git a/ndk/platforms/android-9/include/android/bitmap.h b/ndk/platforms/android-9/include/android/bitmap.h
index 160e34a..fabb7f4 100644
--- a/ndk/platforms/android-9/include/android/bitmap.h
+++ b/ndk/platforms/android-9/include/android/bitmap.h
@@ -23,11 +23,14 @@
 
 __BEGIN_DECLS
 
-#define ANDROID_BITMAP_RESUT_SUCCESS            0
+#define ANDROID_BITMAP_RESULT_SUCCESS            0
 #define ANDROID_BITMAP_RESULT_BAD_PARAMETER     -1
 #define ANDROID_BITMAP_RESULT_JNI_EXCEPTION     -2
 #define ANDROID_BITMAP_RESULT_ALLOCATION_FAILED -3
 
+/* Backward compatibility: this macro used to be misspelled. */
+#define ANDROID_BITMAP_RESUT_SUCCESS ANDROID_BITMAP_RESULT_SUCCESS
+
 enum AndroidBitmapFormat {
     ANDROID_BITMAP_FORMAT_NONE      = 0,
     ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
diff --git a/ndk/platforms/android-9/include/pthread.h b/ndk/platforms/android-9/include/pthread.h
index 4baf82f..c3f055e 100644
--- a/ndk/platforms/android-9/include/pthread.h
+++ b/ndk/platforms/android-9/include/pthread.h
@@ -42,9 +42,13 @@
     int volatile value;
 } pthread_mutex_t;
 
-#define  PTHREAD_MUTEX_INITIALIZER             {0}
-#define  PTHREAD_RECURSIVE_MUTEX_INITIALIZER   {0x4000}
-#define  PTHREAD_ERRORCHECK_MUTEX_INITIALIZER  {0x8000}
+#define  __PTHREAD_MUTEX_INIT_VALUE            0
+#define  __PTHREAD_RECURSIVE_MUTEX_INIT_VALUE  0x4000
+#define  __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE 0x8000
+
+#define  PTHREAD_MUTEX_INITIALIZER             {__PTHREAD_MUTEX_INIT_VALUE}
+#define  PTHREAD_RECURSIVE_MUTEX_INITIALIZER   {__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE}
+#define  PTHREAD_ERRORCHECK_MUTEX_INITIALIZER  {__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE}
 
 enum {
     PTHREAD_MUTEX_NORMAL = 0,
@@ -306,9 +310,4 @@
 } /* extern "C" */
 #endif
 
-/************ TO FIX ************/
-
-#define LONG_LONG_MAX __LONG_LONG_MAX__
-#define LONG_LONG_MIN (-__LONG_LONG_MAX__ - 1)
-
 #endif /* _PTHREAD_H_ */
diff --git a/ndk/platforms/android-9/include/sys/cdefs.h b/ndk/platforms/android-9/include/sys/cdefs.h
index 849e2b8..92035d4 100644
--- a/ndk/platforms/android-9/include/sys/cdefs.h
+++ b/ndk/platforms/android-9/include/sys/cdefs.h
@@ -79,7 +79,7 @@
 #define	___STRING(x)	__STRING(x)
 #define	___CONCAT(x,y)	__CONCAT(x,y)
 
-#if __STDC__ || defined(__cplusplus)
+#if defined(__STDC__) || defined(__cplusplus)
 #define	__P(protos)	protos		/* full-blown ANSI C */
 #define	__CONCAT(x,y)	x ## y
 #define	__STRING(x)	#x
@@ -213,7 +213,7 @@
  * C99 defines the restrict type qualifier keyword, which was made available
  * in GCC 2.92.
  */
-#if __STDC_VERSION__ >= 199901L
+#if defined(__STDC__VERSION__) && __STDC_VERSION__ >= 199901L
 #define	__restrict	restrict
 #else
 #if !__GNUC_PREREQ__(2, 92)
@@ -225,7 +225,7 @@
  * C99 defines __func__ predefined identifier, which was made available
  * in GCC 2.95.
  */
-#if !(__STDC_VERSION__ >= 199901L)
+#if !defined(__STDC_VERSION__) || !(__STDC_VERSION__ >= 199901L)
 #if __GNUC_PREREQ__(2, 6)
 #define	__func__	__PRETTY_FUNCTION__
 #elif __GNUC_PREREQ__(2, 4)
@@ -497,5 +497,6 @@
 #endif
 
 #define  __BIONIC__   1
+#include <android/api-level.h>
 
 #endif /* !_SYS_CDEFS_H_ */
diff --git a/ndk/platforms/android-9/include/wchar.h b/ndk/platforms/android-9/include/wchar.h
index 86d6d73..fea648c 100644
--- a/ndk/platforms/android-9/include/wchar.h
+++ b/ndk/platforms/android-9/include/wchar.h
@@ -51,7 +51,7 @@
 
 __BEGIN_DECLS
 
-typedef int                     wint_t;
+typedef __WINT_TYPE__           wint_t;
 typedef struct { int  dummy; }  mbstate_t;
 
 typedef enum {
diff --git a/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c b/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c
index 105c64a..5e7946b 100644
--- a/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c
+++ b/ndk/platforms/android-9/samples/native-audio/jni/native-audio-jni.c
@@ -125,6 +125,7 @@
         // the most likely other result is SL_RESULT_BUFFER_INSUFFICIENT,
         // which for this code example would indicate a programming error
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -153,24 +154,29 @@
     // create engine
     result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // realize the engine
     result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the engine interface, which is needed in order to create other objects
     result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // create output mix, with environmental reverb specified as a non-required interface
     const SLInterfaceID ids[1] = {SL_IID_ENVIRONMENTALREVERB};
     const SLboolean req[1] = {SL_BOOLEAN_FALSE};
     result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // realize the output mix
     result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the environmental reverb interface
     // this could fail if the environmental reverb effect is not available,
@@ -181,6 +187,7 @@
     if (SL_RESULT_SUCCESS == result) {
         result = (*outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties(
                 outputMixEnvironmentalReverb, &reverbSettings);
+        (void)result;
     }
     // ignore unsuccessful result codes for environmental reverb, as it is optional for this example
 
@@ -212,43 +219,51 @@
     result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk,
             3, ids, req);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // realize the player
     result = (*bqPlayerObject)->Realize(bqPlayerObject, SL_BOOLEAN_FALSE);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the play interface
     result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_PLAY, &bqPlayerPlay);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the buffer queue interface
     result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_BUFFERQUEUE,
             &bqPlayerBufferQueue);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // register callback on the buffer queue
     result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallback, NULL);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the effect send interface
     result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_EFFECTSEND,
             &bqPlayerEffectSend);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
 #if 0   // mute/solo is not supported for sources that are known to be mono, as this is
     // get the mute/solo interface
     result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_MUTESOLO, &bqPlayerMuteSolo);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 #endif
 
     // get the volume interface
     result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_VOLUME, &bqPlayerVolume);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // set the player's state to playing
     result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_PLAYING);
     assert(SL_RESULT_SUCCESS == result);
-
+    (void)result;
 }
 
 
@@ -259,7 +274,7 @@
     SLresult result;
 
     // convert Java string to UTF-8
-    const jbyte *utf8 = (*env)->GetStringUTFChars(env, uri, NULL);
+    const char *utf8 = (*env)->GetStringUTFChars(env, uri, NULL);
     assert(NULL != utf8);
 
     // configure audio source
@@ -280,6 +295,7 @@
     // note that an invalid URI is not detected here, but during prepare/prefetch on Android,
     // or possibly during Realize on other platforms
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // release the Java string and UTF-8
     (*env)->ReleaseStringUTFChars(env, uri, utf8);
@@ -296,18 +312,22 @@
     // get the play interface
     result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_PLAY, &uriPlayerPlay);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the seek interface
     result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_SEEK, &uriPlayerSeek);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the mute/solo interface
     result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_MUTESOLO, &uriPlayerMuteSolo);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the volume interface
     result = (*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_VOLUME, &uriPlayerVolume);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     return JNI_TRUE;
 }
@@ -327,7 +347,7 @@
         result = (*uriPlayerPlay)->SetPlayState(uriPlayerPlay, isPlaying ?
             SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_PAUSED);
         assert(SL_RESULT_SUCCESS == result);
-
+        (void)result;
     }
 
 }
@@ -346,7 +366,7 @@
         result = (*uriPlayerSeek)->SetLoop(uriPlayerSeek, (SLboolean) isLooping, 0,
                 SL_TIME_UNKNOWN);
         assert(SL_RESULT_SUCCESS == result);
-
+        (void)result;
     }
 
 }
@@ -372,6 +392,7 @@
     if (NULL != muteSoloItf) {
         result = (*muteSoloItf)->SetChannelMute(muteSoloItf, chan, mute);
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -383,6 +404,7 @@
     if (NULL != muteSoloItf) {
         result = (*muteSoloItf)->SetChannelSolo(muteSoloItf, chan, solo);
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -425,6 +447,7 @@
     if (NULL != volumeItf) {
         result = (*volumeItf)->SetVolumeLevel(volumeItf, millibel);
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -436,6 +459,7 @@
     if (NULL != volumeItf) {
         result = (*volumeItf)->SetMute(volumeItf, mute);
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -447,6 +471,7 @@
     if (NULL != volumeItf) {
         result = (*volumeItf)->EnableStereoPosition(volumeItf, enable);
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -458,6 +483,7 @@
     if (NULL != volumeItf) {
         result = (*volumeItf)->SetStereoPosition(volumeItf, permille);
         assert(SL_RESULT_SUCCESS == result);
+        (void)result;
     }
 }
 
@@ -487,7 +513,6 @@
 jboolean Java_com_example_nativeaudio_NativeAudio_selectClip(JNIEnv* env, jclass clazz, jint which,
         jint count)
 {
-    short *oldBuffer = nextBuffer;
     switch (which) {
     case 0:     // CLIP_NONE
         nextBuffer = (short *) NULL;
@@ -545,13 +570,13 @@
     SLresult result;
 
     // convert Java string to UTF-8
-    const jbyte *utf8 = (*env)->GetStringUTFChars(env, filename, NULL);
+    const char *utf8 = (*env)->GetStringUTFChars(env, filename, NULL);
     assert(NULL != utf8);
 
     // use asset manager to open asset by filename
     AAssetManager* mgr = AAssetManager_fromJava(env, assetManager);
     assert(NULL != mgr);
-    AAsset* asset = AAssetManager_open(mgr, (const char *) utf8, AASSET_MODE_UNKNOWN);
+    AAsset* asset = AAssetManager_open(mgr, utf8, AASSET_MODE_UNKNOWN);
 
     // release the Java string and UTF-8
     (*env)->ReleaseStringUTFChars(env, filename, utf8);
@@ -582,30 +607,37 @@
     result = (*engineEngine)->CreateAudioPlayer(engineEngine, &fdPlayerObject, &audioSrc, &audioSnk,
             3, ids, req);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // realize the player
     result = (*fdPlayerObject)->Realize(fdPlayerObject, SL_BOOLEAN_FALSE);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the play interface
     result = (*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_PLAY, &fdPlayerPlay);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the seek interface
     result = (*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_SEEK, &fdPlayerSeek);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the mute/solo interface
     result = (*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_MUTESOLO, &fdPlayerMuteSolo);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the volume interface
     result = (*fdPlayerObject)->GetInterface(fdPlayerObject, SL_IID_VOLUME, &fdPlayerVolume);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // enable whole file looping
     result = (*fdPlayerSeek)->SetLoop(fdPlayerSeek, SL_BOOLEAN_TRUE, 0, SL_TIME_UNKNOWN);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     return JNI_TRUE;
 }
@@ -624,7 +656,7 @@
         result = (*fdPlayerPlay)->SetPlayState(fdPlayerPlay, isPlaying ?
             SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_PAUSED);
         assert(SL_RESULT_SUCCESS == result);
-
+        (void)result;
     }
 
 }
@@ -666,16 +698,19 @@
     // get the record interface
     result = (*recorderObject)->GetInterface(recorderObject, SL_IID_RECORD, &recorderRecord);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // get the buffer queue interface
     result = (*recorderObject)->GetInterface(recorderObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
             &recorderBufferQueue);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // register callback on the buffer queue
     result = (*recorderBufferQueue)->RegisterCallback(recorderBufferQueue, bqRecorderCallback,
             NULL);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     return JNI_TRUE;
 }
@@ -689,8 +724,10 @@
     // in case already recording, stop recording and clear buffer queue
     result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_STOPPED);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
     result = (*recorderBufferQueue)->Clear(recorderBufferQueue);
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // the buffer is not valid for playback yet
     recorderSize = 0;
@@ -702,11 +739,12 @@
     // the most likely other result is SL_RESULT_BUFFER_INSUFFICIENT,
     // which for this code example would indicate a programming error
     assert(SL_RESULT_SUCCESS == result);
+    (void)result;
 
     // start recording
     result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_RECORDING);
     assert(SL_RESULT_SUCCESS == result);
-
+    (void)result;
 }
 
 
diff --git a/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c b/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c
index 01ec644..6175033 100644
--- a/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c
+++ b/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c
@@ -192,7 +192,6 @@
 
 static void fill_plasma(ANativeWindow_Buffer* buffer, double  t)
 {
-    Fixed ft  = FIXED_FROM_FLOAT(t/1000.);
     Fixed yt1 = FIXED_FROM_FLOAT(t/1230.);
     Fixed yt2 = yt1;
     Fixed xt10 = FIXED_FROM_FLOAT(t/3000.);
@@ -407,7 +406,7 @@
     stats_endFrame(&engine->stats);
 }
 
-static int engine_term_display(struct engine* engine) {
+static void engine_term_display(struct engine* engine) {
     engine->animating = 0;
 }
 
diff --git a/ndk/samples/module-exports/jni/bar/bar.c b/ndk/samples/module-exports/jni/bar/bar.c
index 71b21d2..155241d 100644
--- a/ndk/samples/module-exports/jni/bar/bar.c
+++ b/ndk/samples/module-exports/jni/bar/bar.c
@@ -1,4 +1,5 @@
 #include "bar.h"
+#include "foo.h"
 
 int  bar(int  x)
 {
diff --git a/ndk/sources/android/libportable/Android.mk b/ndk/sources/android/libportable/Android.mk
index 86b097c..82349e9 100644
--- a/ndk/sources/android/libportable/Android.mk
+++ b/ndk/sources/android/libportable/Android.mk
@@ -26,47 +26,65 @@
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_CLASS := SHARED_LIBRARIES
 
-LOCAL_CFLAGS := -I $(LOCAL_PATH)/common/include
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/common/include
+
+# Uncomment the next line to easily enable Lib-Portable logging during development.
+# LOCAL_CFLAGS += -DLOG_NDEBUG=0
 
 ifeq ($(TARGET_ARCH),mips)
 libportable_arch_src_files += \
+			arch-mips/clone.c \
+			arch-mips/epoll.c \
+			arch-mips/errno.c \
+			arch-mips/eventfd.c \
+			arch-mips/fcntl.c \
+			arch-mips/filefd.c \
+			arch-mips/flags.c \
+			arch-mips/inotify.c \
 			arch-mips/ioctl.c \
 			arch-mips/mmap.c \
-			arch-mips/resource.c \
-			arch-mips/stat.c \
-			arch-mips/statfs.c \
 			arch-mips/open.c \
 			arch-mips/poll.c \
+			arch-mips/pipe.c \
+			arch-mips/pthread.c \
+			arch-mips/resource.c \
+			arch-mips/signal.c \
 			arch-mips/socket.c \
 			arch-mips/sockopt.c \
-			arch-mips/fcntl.c \
-			arch-mips/epoll.c \
-			arch-mips/errno.c
+			arch-mips/stat.c \
+			arch-mips/statfs.c \
+			arch-mips/syscall.c \
+			arch-mips/timer.c \
+			arch-mips/timerfd.c \
+			arch-mips/waitpid.c
+
+libportable_arch_src_files += \
+			arch-mips/_setjmp.S \
+			arch-mips/setjmp.S \
+			arch-mips/sigsetjmp.S
+
 endif
 
 ifeq ($(TARGET_ARCH),arm)
 libportable_arch_src_files += \
-			arch-arm/stat.c \
-			arch-arm/socket.c \
-			arch-arm/sockopt.c \
-			arch-arm/epoll.c \
-			arch-arm/errno.c
+			arch-arm/unwind.c
 endif
 
 ifeq ($(TARGET_ARCH),x86)
 libportable_arch_src_files += \
-			arch-x86/ioctl.c \
-			arch-x86/stat.c \
-			arch-x86/open.c \
-			arch-x86/socket.c \
-			arch-x86/sockopt.c \
-			arch-x86/fcntl.c \
 			arch-x86/epoll.c \
-			arch-x86/errno.c
+			arch-x86/fcntl.c \
+			arch-x86/ioctl.c \
+			arch-x86/open.c \
+			arch-x86/stat.c
 endif
 
 LOCAL_SRC_FILES := \
         $(libportable_common_src_files) \
         $(libportable_arch_src_files)
 
+LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures
+
+LOCAL_SHARED_LIBRARIES += liblog
+
 include $(BUILD_SHARED_LIBRARY)
diff --git a/ndk/sources/android/libportable/arch-arm/epoll.c b/ndk/sources/android/libportable/arch-arm/epoll.c
deleted file mode 100644
index f703ba1..0000000
--- a/ndk/sources/android/libportable/arch-arm/epoll.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/epoll.h>
-
-int epoll_ctl_portable(int epfd, int op, int fd, struct epoll_event *event)
-{
-    return epoll_ctl(epfd, op, fd, event);
-}
-
-int epoll_wait_portable(int epfd, struct epoll_event *events, int max, int timeout)
-{
-    return epoll_wait(epfd, events, max, timeout);
-}
-
diff --git a/ndk/sources/android/libportable/arch-arm/errno.c b/ndk/sources/android/libportable/arch-arm/errno.c
deleted file mode 100644
index ffa5998..0000000
--- a/ndk/sources/android/libportable/arch-arm/errno.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern volatile int*   __errno(void);
-volatile int* __errno_portable()
-{
-  return __errno();
-}
diff --git a/ndk/sources/android/libportable/arch-arm/socket.c b/ndk/sources/android/libportable/arch-arm/socket.c
deleted file mode 100644
index 7e7ca9b..0000000
--- a/ndk/sources/android/libportable/arch-arm/socket.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/linux-syscalls.h>
-
-int socket_portable(int domain, int type, int protocol) {
-    return socket(domain, type, protocol);
-}
diff --git a/ndk/sources/android/libportable/arch-arm/sockopt.c b/ndk/sources/android/libportable/arch-arm/sockopt.c
deleted file mode 100644
index c86ded3..0000000
--- a/ndk/sources/android/libportable/arch-arm/sockopt.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-extern int setsockopt(int, int, int, const void *, socklen_t);
-int setsockopt_portable(int s, int level, int optname, const void *optval, socklen_t optlen)
-{
-    return setsockopt(s, level, optname, optval, optlen);
-}
-
-extern int getsockopt (int, int, int, void *, socklen_t *);
-int getsockopt_portable(int s, int level, int optname, void *optval, socklen_t *optlen)
-{
-    return getsockopt(s, level, optname, optval, optlen);
-}
diff --git a/ndk/sources/android/libportable/arch-arm/stat.c b/ndk/sources/android/libportable/arch-arm/stat.c
deleted file mode 100644
index 20a34ad..0000000
--- a/ndk/sources/android/libportable/arch-arm/stat.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stat_portable.h>
-
-/* Note: The Portable Header will define stat to stat_portable */
-int stat_portable(const char *path, struct stat_portable *s)
-{
-   return stat(path, s);
-}
-
-int fstat_portable(int fd, struct stat_portable *s)
-{
-    return fstat(fd, s);
-}   
-
-int lstat_portable(const char *path, struct stat_portable *s)
-{
-    return lstat(path, s);
-}
-
-int fstatat_portable(int dirfd, const char *path, struct stat_portable *s, int flags)
-{
-    return fstatat(dirfd, path, s, flags);
-}
diff --git a/ndk/sources/android/libportable/arch-arm/unwind.c b/ndk/sources/android/libportable/arch-arm/unwind.c
new file mode 100644
index 0000000..99f2dac
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-arm/unwind.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <stdint.h>
+
+struct _Unwind_Context;
+
+typedef enum {
+  _UVRSC_CORE = 0,  // integer register
+  _UVRSC_VFP = 1, // vfp
+  _UVRSC_WMMXD = 3, // Intel WMMX data register
+  _UVRSC_WMMXC = 4  // Intel WMMX control register
+} _Unwind_VRS_RegClass;
+
+typedef enum {
+  _UVRSD_UINT32 = 0,
+  _UVRSD_VFPX = 1,
+  _UVRSD_UINT64 = 3,
+  _UVRSD_FLOAT = 4,
+  _UVRSD_DOUBLE = 5
+} _Unwind_VRS_DataRepresentation;
+
+typedef enum {
+  _UVRSR_OK = 0,
+  _UVRSR_NOT_IMPLEMENTED = 1,
+  _UVRSR_FAILED = 2
+} _Unwind_VRS_Result;
+
+_Unwind_VRS_Result _Unwind_VRS_Get(struct _Unwind_Context *context,
+                                   _Unwind_VRS_RegClass regclass,
+                                   uint32_t regno,
+                                   _Unwind_VRS_DataRepresentation representation,
+                                   void* valuep);
+
+_Unwind_VRS_Result _Unwind_VRS_Set(struct _Unwind_Context *context,
+                                   _Unwind_VRS_RegClass regclass,
+                                   uint32_t regno,
+                                   _Unwind_VRS_DataRepresentation representation,
+                                   void* valuep);
+
+#define UNWIND_POINTER_REG  12
+#define UNWIND_STACK_REG    13
+#define UNWIND_IP_REG       15
+
+uint64_t WRAP(_Unwind_GetGR)(struct _Unwind_Context* ctx, int index) {
+  uint32_t val;
+  _Unwind_VRS_Get(ctx, _UVRSC_CORE, index, _UVRSD_UINT32, &val);
+  return (uint64_t)val;
+}
+
+void WRAP(_Unwind_SetGR)(struct _Unwind_Context* ctx, int index, uint64_t new_value) {
+  uint32_t val = (uint32_t)new_value;
+  _Unwind_VRS_Set(ctx, _UVRSC_CORE, index, _UVRSD_UINT32, &val);
+}
+
+uint64_t WRAP(_Unwind_GetIP)(struct _Unwind_Context* ctx) {
+  return WRAP(_Unwind_GetGR)(ctx, UNWIND_IP_REG) & ~1; // thumb bit
+}
+
+void WRAP(_Unwind_SetIP)(struct _Unwind_Context* ctx, uintptr_t new_value) {
+  uint32_t val = (uint32_t)new_value;
+  // Propagate thumb bit to instruction pointer
+  uint32_t thumbState = WRAP(_Unwind_GetGR)(ctx, UNWIND_IP_REG) & 1;
+  uint64_t new_val = (uint64_t)(val | thumbState);
+  WRAP(_Unwind_SetGR)(ctx, UNWIND_IP_REG, new_val);
+}
diff --git a/ndk/sources/android/libportable/arch-mips/_setjmp.S b/ndk/sources/android/libportable/arch-mips/_setjmp.S
new file mode 100644
index 0000000..bceeff7
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/_setjmp.S
@@ -0,0 +1,193 @@
+/* Derived from: $OpenBSD: _setjmp.S,v 1.4 2005/08/07 16:40:15 espie Exp $ */
+
+/*
+ * Copyright (c) 2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Opsycon AB nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <machine/asm.h>
+#include <machine/regnum.h>
+
+#include "jboffsets.h"
+
+/*
+ * _setjmp, _longjmp (not restoring signal state)
+ *
+ * XXX FPSET should probably be taken from SR setting. hmmm...
+ *  GPOFF and FRAMESIZE must be the same for both _setjmp and _longjmp!
+ *
+ */
+
+FRAMESZ= MKFSIZ(0,4)
+GPOFF= FRAMESZ-2*REGSZ
+
+#define FPREG64_S(FPR, OFF, BASE)       \
+        swc1    FPR, OFF(BASE)  ;       \
+        mfhc1   t0, FPR         ;       \
+        sw      t0, OFF+4(BASE) ;
+
+#define FPREG64_L(FPR, OFF, BASE)       \
+        lw      t0, OFF+4(BASE) ;       \
+        lw      t1, OFF(BASE)   ;       \
+        mtc1    t1, FPR         ;       \
+        mthc1   t0, FPR         ;       \
+
+LEAF(_setjmp_portable, FRAMESZ)
+        PTR_SUBU sp, FRAMESZ
+        SETUP_GP64(GPOFF, _setjmp)
+        SAVE_GP(GPOFF)
+        .set    noreorder
+#if defined(__mips64)
+        dli     v0, MAGIC__SETJMP
+#else
+        li      v0, MAGIC__SETJMP
+#endif
+        REG_S   v0, JB_MAGIC(a0)
+        REG_S   s0, JB_S0(a0)
+        REG_S   s1, JB_S1(a0)
+        REG_S   s2, JB_S2(a0)
+        REG_S   s3, JB_S3(a0)
+        REG_S   s4, JB_S4(a0)
+        REG_S   s5, JB_S5(a0)
+        REG_S   s6, JB_S6(a0)
+        REG_S   s7, JB_S7(a0)
+        REG_S   s8, JB_S8(a0)
+        REG_L   v0, GPOFF(sp)
+        REG_S   v0, JB_GP(a0)
+        PTR_ADDU v0, sp, FRAMESZ
+        REG_S   v0, JB_SP(a0)
+        REG_S   ra, JB_PC(a0)
+
+#if !defined(SOFTFLOAT)
+        /*
+         * Would be nice if we could tell if the FP registers are currently being used;
+         * Assume they are, and use pointer to jmp_buf in a0 to save FP registers and the
+         * jmp_buf.fpused flag.
+         */
+        li      v0, 1                           # v0 = 1
+        REG_S   v0, JB_FPUSED(a0)               # a0->jb_fpused = v0:1
+        cfc1    v0, $31
+#if _MIPS_FPSET == 32
+        FPREG64_S($f20, JB_F20, a0)
+        FPREG64_S($f21, JB_F21, a0)
+        FPREG64_S($f22, JB_F22, a0)
+        FPREG64_S($f23, JB_F23, a0)
+        FPREG64_S($f24, JB_F24, a0)
+        FPREG64_S($f25, JB_F25, a0)
+        FPREG64_S($f26, JB_F26, a0)
+        FPREG64_S($f27, JB_F27, a0)
+        FPREG64_S($f28, JB_F28, a0)
+        FPREG64_S($f29, JB_F29, a0)
+        FPREG64_S($f30, JB_F30, a0)
+        FPREG64_S($f31, JB_F31, a0)
+#else
+        swc1    $f20, JB_F20(a0)
+        swc1    $f21, JB_F21(a0)
+        swc1    $f22, JB_F22(a0)
+        swc1    $f23, JB_F23(a0)
+        swc1    $f24, JB_F24(a0)
+        swc1    $f25, JB_F25(a0)
+        swc1    $f26, JB_F26(a0)
+        swc1    $f27, JB_F27(a0)
+        swc1    $f28, JB_F28(a0)
+        swc1    $f29, JB_F29(a0)
+        swc1    $f30, JB_F30(a0)
+        swc1    $f31, JB_F31(a0)
+#endif
+        REG_S   v0, JB_FSR(a0)
+#endif /* !SOFTFLOAT */
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+        j       ra
+         move   v0, zero
+END(_setjmp_portable)
+
+LEAF(_longjmp_portable, FRAMESZ)
+        PTR_SUBU sp, FRAMESZ
+        SETUP_GP64(GPOFF, _longjmp)
+        SAVE_GP(GPOFF)
+        .set    noreorder
+        REG_L   v0, JB_MAGIC(a0)
+        bne     v0, MAGIC__SETJMP, botch                # jump if error
+        REG_L   ra, JB_PC(a0)
+        REG_L   v0, JB_FSR(a0)
+        REG_L   s0, JB_S0(a0)
+        REG_L   s1, JB_S1(a0)
+        REG_L   s2, JB_S2(a0)
+        REG_L   s3, JB_S3(a0)
+        REG_L   s4, JB_S4(a0)
+        REG_L   s5, JB_S5(a0)
+        REG_L   s6, JB_S6(a0)
+        REG_L   s7, JB_S7(a0)
+        REG_L   s8, JB_S8(a0)
+        REG_L   gp, JB_GP(a0)
+        REG_L   sp, JB_SP(a0)
+#if !defined(SOFTFLOAT)
+        ctc1    v0, $31
+#if _MIPS_FPSET == 32
+        FPREG64_L($f20, JB_F20, a0)
+        FPREG64_L($f21, JB_F21, a0)
+        FPREG64_L($f22, JB_F22, a0)
+        FPREG64_L($f23, JB_F23, a0)
+        FPREG64_L($f24, JB_F24, a0)
+        FPREG64_L($f25, JB_F25, a0)
+        FPREG64_L($f26, JB_F26, a0)
+        FPREG64_L($f27, JB_F27, a0)
+        FPREG64_L($f28, JB_F28, a0)
+        FPREG64_L($f29, JB_F29, a0)
+        FPREG64_L($f30, JB_F30, a0)
+        FPREG64_L($f31, JB_F31, a0)
+#else
+        lwc1    $f20, JB_F20(a0)
+        lwc1    $f21, JB_F21(a0)
+        lwc1    $f22, JB_F22(a0)
+        lwc1    $f23, JB_F23(a0)
+        lwc1    $f24, JB_F24(a0)
+        lwc1    $f25, JB_F25(a0)
+        lwc1    $f26, JB_F26(a0)
+        lwc1    $f27, JB_F27(a0)
+        lwc1    $f28, JB_F28(a0)
+        lwc1    $f29, JB_F29(a0)
+        lwc1    $f30, JB_F30(a0)
+        lwc1    $f31, JB_F31(a0)
+#endif
+#endif /* !SOFTFLOAT */
+        bne     a1, zero, 1f
+         nop
+        li      a1, 1                   # never return 0!
+1:
+        j       ra
+         move   v0, a1
+
+botch:
+        jal     longjmperror
+        nop
+        jal     abort
+        nop
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+END(_longjmp_portable)
diff --git a/ndk/sources/android/libportable/arch-mips/clone.c b/ndk/sources/android/libportable/arch-mips/clone.c
new file mode 100644
index 0000000..7498ef6
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/clone.c
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define _GNU_SOURCE
+#include <portability.h>
+#include <sched.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <signal_portable.h>
+#include <portability.h>
+#include <stdio.h>
+#include <errno.h>
+#include <filefd_portable.h>
+
+#define PORTABLE_TAG "clone_portable"
+#include <log_portable.h>
+
+
+/*
+ * This function maps the clone function call defined in:
+ *      $TOP/bionic/libc/bionic/bionic_clone.c
+ *
+ * which calls the __bionic_clone() system call which is defined in:
+ *      $TOP/bionic/libc/unistd/arch-mips/bionic/clone.S
+ *
+ * We have to map the low byte of the 'flags' parameter which
+ * contains the number of the termination signal sent to the
+ * parent when the child dies.
+ *
+ * Note that if this signal is specified as anything other than
+ * SIGCHLD, then the parent process must specify the __WALL or
+ * __WCLONE options when waiting for the child with wait(2).
+ *
+ * If no signal is specified, then the parent process is not
+ * signaled when the child terminates.
+ */
+int WRAP(clone)(int (*fn)(void *), void *child_stack, int port_flags, void *arg, ...)
+{
+    va_list     args;
+    int         ret;
+    int         mips_flags;
+    void        *new_tls = NULL;
+    int         *child_tidptr = NULL;
+    int         *parent_tidptr = NULL;
+    int         mips_term_signum;
+    char        *mips_term_signame;
+    int         portable_term_signum;
+    char        *portable_term_signame;
+    int         cloning_vm = ((port_flags & CLONE_VM) == CLONE_VM);
+    int         cloning_files = ((port_flags & CLONE_FILES) == CLONE_FILES);
+    int         cloning_sighand = ((port_flags & CLONE_SIGHAND) == CLONE_SIGHAND);
+
+    ALOGV(" ");
+    ALOGV("%s(fn:%p, child_stack:%p, port_flags:0x%x, arg:%p, ...) {", __func__,
+              fn,    child_stack,    port_flags,      arg);
+
+    /* Shared file descriptor table requires shared memory. */
+    if (cloning_files != cloning_vm) {
+        ALOGE("%s: cloning_files:%d != cloning_vm:%d) ...", __func__,
+                   cloning_files,      cloning_vm);
+
+        ALOGE("%s: ... port_flags:0x%x Not Supported by Lib-Portable!", __func__,
+                       port_flags);
+    }
+
+    /* Shared signal handler table requires shared memory. */
+    if (cloning_sighand != cloning_vm) {
+        ALOGE("%s: cloning_sighand:%d != cloning_vm:%d) ...",  __func__,
+                   cloning_sighand,      cloning_vm);
+
+        ALOGE("%s: ... port_flags:0x%x Not Supported by Lib-Portable!", __func__,
+                       port_flags);
+    }
+
+    /* Extract optional parameters - they are cumulative. */
+    va_start(args, arg);
+    if (port_flags & (CLONE_PARENT_SETTID|CLONE_SETTLS|CLONE_CHILD_SETTID)) {
+        parent_tidptr = va_arg(args, int*);
+    }
+    if (port_flags & (CLONE_SETTLS|CLONE_CHILD_SETTID)) {
+        new_tls = va_arg(args, void*);
+    }
+    if (port_flags & CLONE_CHILD_SETTID) {
+        child_tidptr = va_arg(args, int*);
+    }
+    va_end(args);
+
+    /*
+     * Map the LSB of the flags as explained above.
+     */
+    portable_term_signum = port_flags & 0xFF;
+    if (portable_term_signum == 0) {
+        mips_flags = port_flags;
+    } else {
+        portable_term_signame = map_portable_signum_to_name(portable_term_signum);
+        ALOGV("%s: portable_term_signum:0x%x:'%s'", __func__,
+                   portable_term_signum, portable_term_signame);
+        mips_term_signum = signum_pton(portable_term_signum);
+        mips_term_signame = map_mips_signum_to_name(mips_term_signum);
+        ALOGV("%s: mips_term_signum:0x%x:'%s'", __func__,
+                   mips_term_signum, mips_term_signame);
+        mips_flags = (port_flags & ~0xFF) | (mips_term_signum & 0xFF);
+    }
+    ALOGV("%s: clone(%p, %p, 0x%x, %p, %p, %p, %p);", __func__,
+           fn, child_stack, mips_flags, arg, parent_tidptr, new_tls, child_tidptr);
+
+    ret = REAL(clone)(fn, child_stack, mips_flags, arg, parent_tidptr,
+                new_tls, child_tidptr);
+
+    if (ret > 0) {
+        /*
+         * Disable mapping in the parent if the child could interfere
+         * and make things even worse than skipping the signal and
+         * file read mapping.
+         */
+        if (cloning_files != cloning_vm) {
+            filefd_disable_mapping();
+        }
+        if (cloning_sighand != cloning_vm) {
+            signal_disable_mapping();
+        }
+    }
+
+    ALOGV("%s: return(ret:%d); }", __func__, ret);
+    return ret;
+}
diff --git a/ndk/sources/android/libportable/arch-mips/epoll.c b/ndk/sources/android/libportable/arch-mips/epoll.c
index f703ba1..ef75695 100644
--- a/ndk/sources/android/libportable/arch-mips/epoll.c
+++ b/ndk/sources/android/libportable/arch-mips/epoll.c
@@ -14,15 +14,16 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <sys/epoll.h>
 
-int epoll_ctl_portable(int epfd, int op, int fd, struct epoll_event *event)
+int WRAP(epoll_ctl)(int epfd, int op, int fd, struct epoll_event *event)
 {
-    return epoll_ctl(epfd, op, fd, event);
+    return REAL(epoll_ctl)(epfd, op, fd, event);
 }
 
-int epoll_wait_portable(int epfd, struct epoll_event *events, int max, int timeout)
+int WRAP(epoll_wait)(int epfd, struct epoll_event *events, int max, int timeout)
 {
-    return epoll_wait(epfd, events, max, timeout);
+    return REAL(epoll_wait)(epfd, events, max, timeout);
 }
 
diff --git a/ndk/sources/android/libportable/arch-mips/errno.c b/ndk/sources/android/libportable/arch-mips/errno.c
index 7372c67..14e2925 100644
--- a/ndk/sources/android/libportable/arch-mips/errno.c
+++ b/ndk/sources/android/libportable/arch-mips/errno.c
@@ -14,16 +14,22 @@
  * limitations under the License.
  */
 
+#include <portability.h>
+#include <pthread.h>
+#include <string.h>
 #include <errno.h>
 #include <errno_portable.h>
 
+#define PORTABLE_TAG "errno_portable"
+#include <log_portable.h>
+
 #if ENAMETOOLONG==ENAMETOOLONG_PORTABLE
 #error Bad build environment
 #endif
 
-static inline int mips_change_errno(int mips_errno)
+__hidden int errno_ntop(int native_errno)
 {
-    switch (mips_errno) {
+    switch (native_errno) {
       case ENAMETOOLONG: return ENAMETOOLONG_PORTABLE;
       case ENOLCK: return ENOLCK_PORTABLE;
       case ENOSYS: return ENOSYS_PORTABLE;
@@ -121,14 +127,244 @@
       case EOWNERDEAD: return EOWNERDEAD_PORTABLE;
       case ENOTRECOVERABLE: return ENOTRECOVERABLE_PORTABLE;
     }
-    return mips_errno;
+    return native_errno;
 }
 
-extern volatile int*   __errno(void);
-volatile int* __errno_portable()
+__hidden int errno_pton(int portable_errno)
 {
-  /* Note that writing to static_errno will not affect the underlying system. */
-  static int static_errno;
-  static_errno = mips_change_errno(*__errno());
-  return &static_errno;
+    switch (portable_errno) {
+      case ENAMETOOLONG_PORTABLE: return ENAMETOOLONG;
+      case ENOLCK_PORTABLE: return ENOLCK;
+      case ENOSYS_PORTABLE: return ENOSYS;
+      case ENOTEMPTY_PORTABLE: return ENOTEMPTY;
+      case ELOOP_PORTABLE: return ELOOP;
+      case EWOULDBLOCK_PORTABLE: return EWOULDBLOCK;
+      case ENOMSG_PORTABLE: return ENOMSG;
+      case EIDRM_PORTABLE: return EIDRM;
+      case ECHRNG_PORTABLE: return ECHRNG;
+      case EL2NSYNC_PORTABLE: return EL2NSYNC;
+      case EL3HLT_PORTABLE: return EL3HLT;
+      case EL3RST_PORTABLE: return EL3RST;
+      case ELNRNG_PORTABLE: return ELNRNG;
+      case EUNATCH_PORTABLE: return EUNATCH;
+      case ENOCSI_PORTABLE: return ENOCSI;
+      case EL2HLT_PORTABLE: return EL2HLT;
+      case EBADE_PORTABLE: return EBADE;
+      case EBADR_PORTABLE: return EBADR;
+      case EXFULL_PORTABLE: return EXFULL;
+      case ENOANO_PORTABLE: return ENOANO;
+      case EBADRQC_PORTABLE: return EBADRQC;
+      case EBADSLT_PORTABLE: return EBADSLT;
+      case EDEADLOCK_PORTABLE: return EDEADLOCK;
+      case EBFONT_PORTABLE: return EBFONT;
+      case ENOSTR_PORTABLE: return ENOSTR;
+      case ENODATA_PORTABLE: return ENODATA;
+      case ETIME_PORTABLE: return ETIME;
+      case ENOSR_PORTABLE: return ENOSR;
+      case ENONET_PORTABLE: return ENONET;
+      case ENOPKG_PORTABLE: return ENOPKG;
+      case EREMOTE_PORTABLE: return EREMOTE;
+      case ENOLINK_PORTABLE: return ENOLINK;
+      case EADV_PORTABLE: return EADV;
+      case ESRMNT_PORTABLE: return ESRMNT;
+      case ECOMM_PORTABLE: return ECOMM;
+      case EPROTO_PORTABLE: return EPROTO;
+      case EMULTIHOP_PORTABLE: return EMULTIHOP;
+      case EDOTDOT_PORTABLE: return EDOTDOT;
+      case EBADMSG_PORTABLE: return EBADMSG;
+      case EOVERFLOW_PORTABLE: return EOVERFLOW;
+      case ENOTUNIQ_PORTABLE: return ENOTUNIQ;
+      case EBADFD_PORTABLE: return EBADFD;
+      case EREMCHG_PORTABLE: return EREMCHG;
+      case ELIBACC_PORTABLE: return ELIBACC;
+      case ELIBBAD_PORTABLE: return ELIBBAD;
+      case ELIBSCN_PORTABLE: return ELIBSCN;
+      case ELIBMAX_PORTABLE: return ELIBMAX;
+      case ELIBEXEC_PORTABLE: return ELIBEXEC;
+      case EILSEQ_PORTABLE: return EILSEQ;
+      case ERESTART_PORTABLE: return ERESTART;
+      case ESTRPIPE_PORTABLE: return ESTRPIPE;
+      case EUSERS_PORTABLE: return EUSERS;
+      case ENOTSOCK_PORTABLE: return ENOTSOCK;
+      case EDESTADDRREQ_PORTABLE: return EDESTADDRREQ;
+      case EMSGSIZE_PORTABLE: return EMSGSIZE;
+      case EPROTOTYPE_PORTABLE: return EPROTOTYPE;
+      case ENOPROTOOPT_PORTABLE: return ENOPROTOOPT;
+      case EPROTONOSUPPORT_PORTABLE: return EPROTONOSUPPORT;
+      case ESOCKTNOSUPPORT_PORTABLE: return ESOCKTNOSUPPORT;
+      case EOPNOTSUPP_PORTABLE: return EOPNOTSUPP;
+      case EPFNOSUPPORT_PORTABLE: return EPFNOSUPPORT;
+      case EAFNOSUPPORT_PORTABLE: return EAFNOSUPPORT;
+      case EADDRINUSE_PORTABLE: return EADDRINUSE;
+      case EADDRNOTAVAIL_PORTABLE: return EADDRNOTAVAIL;
+      case ENETDOWN_PORTABLE: return ENETDOWN;
+      case ENETUNREACH_PORTABLE: return ENETUNREACH;
+      case ENETRESET_PORTABLE: return ENETRESET;
+      case ECONNABORTED_PORTABLE: return ECONNABORTED;
+      case ECONNRESET_PORTABLE: return ECONNRESET;
+      case ENOBUFS_PORTABLE: return ENOBUFS;
+      case EISCONN_PORTABLE: return EISCONN;
+      case ENOTCONN_PORTABLE: return ENOTCONN;
+      case ESHUTDOWN_PORTABLE: return ESHUTDOWN;
+      case ETOOMANYREFS_PORTABLE: return ETOOMANYREFS;
+      case ETIMEDOUT_PORTABLE: return ETIMEDOUT;
+      case ECONNREFUSED_PORTABLE: return ECONNREFUSED;
+      case EHOSTDOWN_PORTABLE: return EHOSTDOWN;
+      case EHOSTUNREACH_PORTABLE: return EHOSTUNREACH;
+      case EALREADY_PORTABLE: return EALREADY;
+      case EINPROGRESS_PORTABLE: return EINPROGRESS;
+      case ESTALE_PORTABLE: return ESTALE;
+      case EUCLEAN_PORTABLE: return EUCLEAN;
+      case ENOTNAM_PORTABLE: return ENOTNAM;
+      case ENAVAIL_PORTABLE: return ENAVAIL;
+      case EISNAM_PORTABLE: return EISNAM;
+      case EREMOTEIO_PORTABLE: return EREMOTEIO;
+      case EDQUOT_PORTABLE: return EDQUOT;
+      case ENOMEDIUM_PORTABLE: return ENOMEDIUM;
+      case EMEDIUMTYPE_PORTABLE: return EMEDIUMTYPE;
+      case ECANCELED_PORTABLE: return ECANCELED;
+      case ENOKEY_PORTABLE: return ENOKEY;
+      case EKEYEXPIRED_PORTABLE: return EKEYEXPIRED;
+      case EKEYREVOKED_PORTABLE: return EKEYREVOKED;
+      case EKEYREJECTED_PORTABLE: return EKEYREJECTED;
+      case EOWNERDEAD_PORTABLE: return EOWNERDEAD;
+      case ENOTRECOVERABLE_PORTABLE: return ENOTRECOVERABLE;
+    }
+    return portable_errno;
+}
+
+/* Key for the thread-specific portable errno */
+static pthread_key_t errno_key;
+
+/* Once-only initialisation of the key */
+static pthread_once_t errno_key_once = PTHREAD_ONCE_INIT;
+
+/* Free the thread-specific portable errno */
+static void errno_key_destroy(void *buf)
+{
+    if (buf)
+        free(buf);
+}
+
+/* Allocate the key */
+static void errno_key_create(void)
+{
+    pthread_key_create(&errno_key, errno_key_destroy);
+}
+
+struct errno_state {
+    int pshadow;                /* copy of last portable errno */
+    int perrno;                 /* portable errno that may be modified by app */
+};
+
+/* Return the thread-specific portable errno */
+static struct errno_state *errno_key_data(void)
+{
+    struct errno_state *data;
+    static struct errno_state errno_state;
+
+    pthread_once(&errno_key_once, errno_key_create);
+    data = (struct errno_state *)pthread_getspecific(errno_key);
+    if (data == NULL) {
+        data = malloc(sizeof(struct errno_state));
+        pthread_setspecific(errno_key, data);
+    }
+    if (data == NULL)
+        data = &errno_state;
+    return data;
+}
+
+/*
+ * Attempt to return a thread specific location containnig the portable errno.
+ * This can be assigned to without affecting the native errno. If the key
+ * allocation fails fall back to using the native errno location.
+ */
+volatile int* WRAP(__errno)()
+{
+    struct errno_state *p;
+    int save_errno;
+
+    /* pthread_* calls may modify errno so use a copy */
+    save_errno = *REAL(__errno)();
+
+    p = errno_key_data();
+
+    ALOGV(" ");
+    ALOGV("%s(): { save_errno = errno:%d, (p:%p)->{pshadow:%d, perrno:%d}", __func__,
+                   save_errno,             p,   p->pshadow, p->perrno);
+
+    if (save_errno == 0 && p->pshadow != p->perrno) {
+        /*
+         * portable errno has changed but native hasn't
+         * - copy portable error back to native
+         */
+        p->pshadow = p->perrno;
+        save_errno = errno_pton(p->perrno);
+    }
+    else if (save_errno != 0 && p->pshadow == p->perrno) {
+        /*
+         * Native errno has changed but portable hasn't
+         * - copy native error to portable.
+         */
+        p->pshadow = p->perrno = errno_ntop(save_errno);
+        save_errno = 0;
+    }
+    else if (save_errno != 0 && p->pshadow != p->perrno) {
+        /*
+         * Both native and portable errno values have changed
+         * so give priority to native errno
+         * - copy native error to portable
+         */
+        p->pshadow = p->perrno = errno_ntop(save_errno);
+        save_errno = 0;
+    }
+
+    ALOGV("%s: new save_errno:%d p:%p->{pshadow:%d, perrno:%d}", __func__,
+                   save_errno,   p,  p->pshadow, p->perrno);
+
+    *REAL(__errno)() = save_errno;
+
+    ALOGV("%s: return (&p->perrno):%p; }", __func__, &p->perrno);
+
+    /* return pointer to the modifiable portable errno value */
+    return &p->perrno;
+}
+
+
+/* set portable errno */
+void WRAP(__set_errno)(int portable_errno)
+{
+    struct errno_state *p;
+    int save_errno;
+
+    /* pthread_* calls may modify errno so use a copy */
+    save_errno = *REAL(__errno)();
+
+    p = errno_key_data();
+
+    ALOGV("%s(): { save_errno = errno:%d, p:%p->{pshadow:%d, perrno:%d}", __func__,
+                   save_errno,            p,  p->pshadow, p->perrno);
+
+    p->pshadow = p->perrno = portable_errno;
+
+    save_errno = errno_pton(portable_errno);
+
+    ALOGV("%s: new save_errno:%d, p:%p->{pshadow:%d, perrno:%d}", __func__,
+                   save_errno,    p,  p->pshadow, p->perrno);
+
+    *REAL(__errno)() = save_errno;
+
+    ALOGV("%s: return; }", __func__);
+}
+
+extern char* REAL(strerror)(int);
+char *WRAP(strerror)(int errnum)
+{
+    return REAL(strerror)(errno_pton(errnum));
+}
+
+/* BSD style strerror_r */
+int WRAP(strerror_r)(int errnum, char *buf, size_t buflen)
+{
+    return REAL(strerror_r)(errno_pton(errnum), buf, buflen);
 }
diff --git a/ndk/sources/android/libportable/arch-mips/eventfd.c b/ndk/sources/android/libportable/arch-mips/eventfd.c
new file mode 100644
index 0000000..35285d9
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/eventfd.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <asm/unistd-portable.h>
+#include <asm/unistd.h>
+
+#include <fcntl_portable.h>
+#include <sys/eventfd.h>
+#include <eventfd_portable.h>
+#include <filefd_portable.h>
+
+#define PORTABLE_TAG "eventfd_portable"
+#include <log_portable.h>
+
+
+/* NOTE: LTP defaults to using O_NONBLOCK even if EFD_NONBLOCK is defined */
+
+
+/*
+ * Portable to Native event flags mapper.
+ */
+static inline int efd_flags_pton(int portable_flags)
+{
+    int native_flags = 0;
+
+    ALOGV("%s(portable_flags:0x%x) {", __func__, portable_flags);
+
+    if (portable_flags & EFD_NONBLOCK_PORTABLE) {
+        native_flags |= EFD_NONBLOCK;
+        portable_flags &= ~EFD_NONBLOCK_PORTABLE;
+    }
+
+    if (portable_flags & EFD_CLOEXEC_PORTABLE) {
+        native_flags |= EFD_CLOEXEC;
+        portable_flags &= EFD_CLOEXEC_PORTABLE;
+    }
+
+    if (portable_flags & EFD_SEMAPHORE_PORTABLE) {
+        native_flags |= EFD_SEMAPHORE;
+        portable_flags &= EFD_SEMAPHORE_PORTABLE;
+    }
+
+    if (portable_flags != 0) {
+        ALOGW("%s: portable_flags:0x%x != 0; Unsupported Flags being used!",
+        __func__,  portable_flags);
+    }
+    ALOGV("%s: return(native_flags:%d); }", __func__, native_flags);
+    return native_flags;
+}
+
+
+/*
+ * In the original eventfd() the portable_flags were unused up to
+ * linux 2.6.26 and had to be zero. Android simply uses the
+ * new eventfd2 system call number, so it likely best to just use
+ * the Android eventfd() for both eventfd and eventfd2 system calls.
+ */
+int WRAP(eventfd)(unsigned int initval, int portable_flags) {
+    int rv;
+    int native_flags;
+
+    ALOGV(" ");
+    ALOGV("%s(initval:%u, portable_flags:%d) {", __func__,
+              initval,    portable_flags);
+
+    native_flags = efd_flags_pton(portable_flags);
+
+    rv = REAL(eventfd)(initval, native_flags);
+    if (rv >= 0) {
+        if (native_flags & EFD_CLOEXEC) {
+            filefd_CLOEXEC_enabled(rv);
+        }
+        filefd_opened(rv, EVENT_FD_TYPE);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
diff --git a/ndk/sources/android/libportable/arch-mips/fcntl.c b/ndk/sources/android/libportable/arch-mips/fcntl.c
index 31874b5..174b027 100644
--- a/ndk/sources/android/libportable/arch-mips/fcntl.c
+++ b/ndk/sources/android/libportable/arch-mips/fcntl.c
@@ -14,48 +14,426 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <fcntl.h>
+#include <errno.h>
 #include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <errno_portable.h>
+#include <portability.h>
 #include <fcntl_portable.h>
+#include <filefd_portable.h>
+
+#include <portability.h>
 
 #if F_GETLK_PORTABLE==F_GETLK
 #error Bad build environment
 #endif
 
-static inline int mips_change_cmd(int cmd)
+#define PORTABLE_TAG "fcntl_portable"
+#include <log_portable.h>
+
+static char *map_portable_cmd_to_name(int cmd)
 {
+    char *name;
+
     switch(cmd) {
-    case F_GETLK_PORTABLE:
-        return F_GETLK;
-    case F_SETLK_PORTABLE:
-        return F_SETLK;
-    case F_SETLKW_PORTABLE:
-        return F_SETLKW;
-    case F_SETOWN_PORTABLE:
-        return F_SETOWN;
-    case F_GETOWN_PORTABLE:
-        return F_GETOWN;
-    case F_GETLK64_PORTABLE:
-        return F_GETLK64;
-    case F_SETLK64_PORTABLE:
-        return F_SETLK64;
-    case F_SETLKW64_PORTABLE:
-        return F_SETLKW64;
+    case F_DUPFD_PORTABLE:              name = "F_DUPFD_PORTABLE";              break;  /* 0 */
+    case F_GETFD_PORTABLE:              name = "F_GETFD_PORTABLE";              break;  /* 1 */
+    case F_SETFD_PORTABLE:              name = "F_SETFD_PORTABLE";              break;  /* 2 */
+    case F_GETFL_PORTABLE:              name = "F_GETFL_PORTABLE";              break;  /* 3 */
+    case F_SETFL_PORTABLE:              name = "F_SETFL_PORTABLE";              break;  /* 4 */
+    case F_GETLK_PORTABLE:              name = "F_GETLK_PORTABLE";              break;  /* 5 */
+    case F_SETLK_PORTABLE:              name = "F_SETLK_PORTABLE";              break;  /* 6 */
+    case F_SETLKW_PORTABLE:             name = "F_SETLKW_PORTABLE";             break;  /* 7 */
+    case F_SETOWN_PORTABLE:             name = "F_SETOWN_PORTABLE";             break;  /* 8 */
+    case F_GETOWN_PORTABLE:             name = "F_GETOWN_PORTABLE";             break;  /* 9 */
+    case F_SETSIG_PORTABLE:             name = "F_SETSIG_PORTABLE";             break;  /* 10 */
+    case F_GETSIG_PORTABLE:             name = "F_GETSIG_PORTABLE";             break;  /* 11 */
+    case F_GETLK64_PORTABLE:            name = "F_GETLK64_PORTABLE";            break;  /* 12 */
+    case F_SETLK64_PORTABLE:            name = "F_SETLK64_PORTABLE";            break;  /* 13 */
+    case F_SETLKW64_PORTABLE:           name = "F_SETLKW64_PORTABLE";           break;  /* 14 */
+    case F_SETLEASE_PORTABLE:           name = "F_SETLEASE_PORTABLE";           break;  /* 1024 */
+    case F_GETLEASE_PORTABLE:           name = "F_GETLEASE_PORTABLE";           break;  /* 1025 */
+    case F_NOTIFY_PORTABLE:             name = "F_NOTIFY_PORTABLE";             break;  /* 1026 */
+    case F_CANCELLK_PORTABLE:           name = "F_CANCELLK_PORTABLE";           break;  /* 1029 */
+    case F_DUPFD_CLOEXEC_PORTABLE:      name = "F_DUPFD_CLOEXEC_PORTABLE";      break;  /* 1030 */
+    default:                            name = "<UNKNOWN>";                     break;
     }
-    return cmd;
+    return name;
+}
+
+
+/*
+ * Maps a fcntl portable cmd to a native command.
+ */
+static int fcntl_cmd_pton(int portable_cmd)
+{
+    int native_cmd;
+    char *error_msg = NULL;
+
+    switch(portable_cmd) {
+    case F_DUPFD_PORTABLE:      /* 0 --> 0 */
+        native_cmd =  F_DUPFD;
+        break;
+
+    case F_GETFD_PORTABLE:      /* 1 --> 1 */
+        native_cmd = F_GETFD;
+        break;
+
+    case F_SETFD_PORTABLE:      /* 2 --> 2 */
+        native_cmd = F_SETFD;
+        break;
+
+    case F_GETFL_PORTABLE:      /* 3 --> 3 */
+        native_cmd = F_GETFL;
+        break;
+
+    case F_SETFL_PORTABLE:      /* 4 --> 4 */
+        native_cmd = F_SETFL;
+        break;
+
+    case F_GETLK_PORTABLE:      /* 5 --> 14 */
+        native_cmd = F_GETLK;
+        break;
+
+    case F_SETLK_PORTABLE:      /* 6 --> 6 */
+        native_cmd = F_SETLK;
+        break;
+
+    case F_SETLKW_PORTABLE:     /* 7 --> 7 */
+        native_cmd = F_SETLKW;
+        break;
+
+    case F_SETOWN_PORTABLE:     /* 8 --> 24 */
+        native_cmd = F_SETOWN;
+        break;
+
+    case F_GETOWN_PORTABLE:     /* 9 --> 23 */
+        native_cmd = F_GETOWN;
+        break;
+
+    case F_SETSIG_PORTABLE:     /* 10 --> 10 */
+        native_cmd = F_SETSIG;
+        break;
+
+    case F_GETSIG_PORTABLE:     /* 11 --> 11 */
+        native_cmd = F_GETSIG;
+        break;
+
+    case F_GETLK64_PORTABLE:    /* 12 --> 33 */
+        native_cmd = F_GETLK64;
+        break;
+
+    case F_SETLK64_PORTABLE:    /* 13 --> 34 */
+        native_cmd = F_SETLK64;
+        break;
+
+    case F_SETLKW64_PORTABLE:   /* 14 --> 35 */
+        native_cmd = F_SETLKW64;
+        break;
+
+    case F_SETLEASE_PORTABLE:   /* 1024 --> 1024 */
+        native_cmd =  F_SETLEASE;
+        break;
+
+    case F_GETLEASE_PORTABLE:   /* 1025 --> 1025 */
+        native_cmd = F_GETLEASE;
+        break;
+
+    case F_NOTIFY_PORTABLE:      /* 1026 --> 1026 */
+        native_cmd = F_NOTIFY;
+        break;
+
+    case F_CANCELLK_PORTABLE:      /* 1029 --> void */
+        error_msg = "Case F_CANCELLK_PORTABLE: Not supported by MIPS. ";
+        native_cmd = portable_cmd;
+        break;
+
+    case F_DUPFD_CLOEXEC_PORTABLE: /* 1030 --> VOID; Not currently used by Bionic */
+        error_msg = "Case F_DUPFD_CLOEXEC_PORTABLE: Not supported by MIPS. ";
+        native_cmd = portable_cmd;
+        break;
+
+    default:
+        error_msg = "Case Default: Command Not Supported. ";
+        native_cmd = portable_cmd;
+        break;
+    }
+
+done:
+    if (error_msg != NULL) {
+        ALOGE("%s(portable_cmd:%d:0x%x): %sreturn(native_cmd:%d:0x%x);", __func__,
+                  portable_cmd, portable_cmd, error_msg, native_cmd, native_cmd);
+    } else {
+        ALOGV("%s(portable_cmd:%d:0x%x): return(native_cmd:%d:0x%x);", __func__,
+                  portable_cmd, portable_cmd,   native_cmd, native_cmd);
+    }
+    return native_cmd;
+}
+
+
+static int fcntl_flags_pton(int flags)
+{
+    int mipsflags = flags & O_ACCMODE_PORTABLE;
+
+    if (flags & O_CREAT_PORTABLE)
+        mipsflags |= O_CREAT;
+    if (flags & O_EXCL_PORTABLE)
+        mipsflags |= O_EXCL;
+    if (flags & O_NOCTTY_PORTABLE)
+        mipsflags |= O_NOCTTY;
+    if (flags & O_TRUNC_PORTABLE)
+        mipsflags |= O_TRUNC;
+    if (flags & O_APPEND_PORTABLE)
+        mipsflags |= O_APPEND;
+    if (flags & O_NONBLOCK_PORTABLE)
+        mipsflags |= O_NONBLOCK;
+    if (flags & O_SYNC_PORTABLE)
+        mipsflags |= O_SYNC;
+    if (flags & FASYNC_PORTABLE)
+        mipsflags |= FASYNC;
+    if (flags & O_DIRECT_PORTABLE)
+        mipsflags |= O_DIRECT;
+    if (flags & O_LARGEFILE_PORTABLE)
+        mipsflags |= O_LARGEFILE;
+    if (flags & O_DIRECTORY_PORTABLE)
+        mipsflags |= O_DIRECTORY;
+    if (flags & O_NOFOLLOW_PORTABLE)
+        mipsflags |= O_NOFOLLOW;
+    if (flags & O_NOATIME_PORTABLE)
+        mipsflags |= O_NOATIME;
+    if (flags & O_NDELAY_PORTABLE)
+        mipsflags |= O_NDELAY;
+
+    ALOGV("%s(flags:0x%x): return(mipsflags:0x%x);", __func__,
+              flags,              mipsflags);
+
+    return mipsflags;
+}
+
+static int fcntl_flags_ntop(int flags)
+{
+    int portableflags = flags & O_ACCMODE_PORTABLE;
+
+    if (flags & O_CREAT)
+        portableflags |= O_CREAT_PORTABLE;
+    if (flags & O_EXCL)
+        portableflags |= O_EXCL_PORTABLE;
+    if (flags & O_NOCTTY)
+        portableflags |= O_NOCTTY_PORTABLE;
+    if (flags & O_TRUNC)
+        portableflags |= O_TRUNC_PORTABLE;
+    if (flags & O_APPEND)
+        portableflags |= O_APPEND_PORTABLE;
+    if (flags & O_NONBLOCK)
+        portableflags |= O_NONBLOCK_PORTABLE;
+    if (flags & O_SYNC)
+        portableflags |= O_SYNC_PORTABLE;
+    if (flags & FASYNC)
+        portableflags |= FASYNC_PORTABLE;
+    if (flags & O_DIRECT)
+        portableflags |= O_DIRECT_PORTABLE;
+    if (flags & O_LARGEFILE)
+        portableflags |= O_LARGEFILE_PORTABLE;
+    if (flags & O_DIRECTORY)
+        portableflags |= O_DIRECTORY_PORTABLE;
+    if (flags & O_NOFOLLOW)
+        portableflags |= O_NOFOLLOW_PORTABLE;
+    if (flags & O_NOATIME)
+        portableflags |= O_NOATIME_PORTABLE;
+    if (flags & O_NDELAY)
+        portableflags |= O_NDELAY_PORTABLE;
+
+    ALOGV("%s(flags:0x%x): return(portableflags:0x%x);", __func__,
+              flags,              portableflags);
+
+    return portableflags;
 }
 
 extern int __fcntl64(int, int, void *);
 
-int fcntl_portable(int fd, int cmd, ...)
+/*
+ * For 32 bit flocks we are converting a portable/ARM struct flock to a MIPS struct flock:
+ *
+ * MIPS:                        ARM:
+ *     struct flock {           struct flock_portable {
+ *       short l_type;            short l_type;
+ *
+ *       short l_whence;          short l_whence;
+ *       off_t l_start;           loff_t l_start;
+ *       off_t l_len;             loff_t l_len;
+ *       long l_sysid;
+ *
+ *       __kernel_pid_t l_pid;    pid_t l_pid;
+ *       long pad[4];
+ *     };                       }
+ *
+ * which have identically sized structure members:
+ *
+ * For a 64 bit flocks we only have to deal with
+ * a four byte padding in the ARM/Portable structure:
+ *
+ *    MIPS:                     ARM:
+ *        struct flock64 {      struct flock64_portable {
+ *        short l_type;           short l_type;
+ *        short l_whence;         short l_whence;
+ *                                unsigned char __padding[4];   <----  NOTE
+ *        loff_t l_start;         loff_t l_start;
+ *        loff_t l_len;           loff_t l_len;
+ *        pid_t l_pid;            pid_t l_pid;
+ *      }                       }
+ */
+int WRAP(fcntl)(int fd, int portable_cmd, ...)
 {
+    int flags;
     va_list ap;
-    void * arg;
+    void *arg;
+    int mips_cmd;
+    int result = 0;
+    struct flock flock;                                 /* Native MIPS structure */
+    struct flock64 flock64;                             /* Native MIPS structure */
+    char *portable_cmd_name = map_portable_cmd_to_name(portable_cmd);
+    struct flock_portable *flock_portable = NULL;
+    struct flock64_portable *flock64_portable = NULL;
 
-    va_start(ap, cmd);
+    ALOGV(" ");
+    ALOGV("%s(fd:%d, portable_cmd:%d:'%s', ...) {",  __func__,
+              fd,    portable_cmd,
+                     portable_cmd_name);
+
+
+    va_start(ap, portable_cmd);
     arg = va_arg(ap, void *);
     va_end(ap);
 
-    return __fcntl64(fd, mips_change_cmd(cmd), arg);
+    mips_cmd = fcntl_cmd_pton(portable_cmd);
+    switch(mips_cmd) {
+    case F_GETLK:
+    case F_SETLK:
+    case F_SETLKW:
+        flock_portable = (struct flock_portable *) arg;
+
+        if (invalid_pointer(flock_portable)) {
+            ALOGE("%s: flock_portable:%p == {NULL||-1}", __func__, flock_portable);
+            *REAL(__errno)() = EFAULT;
+            result = -1;
+            goto done;
+        }
+
+        /*
+         * Lock type and Whence are the same for all ARCHs
+         *      (F_RDLCK:0,   F_WRLCK:1,  F_UNLCK:2)
+         *      (SEEK_SET:0, SEEK_CUR:1, SEEK_END:2)
+         */
+        flock.l_type = flock_portable->l_type;
+        flock.l_whence = flock_portable->l_whence;
+        flock.l_start = (off_t) flock_portable->l_start;
+        flock.l_len =  (off_t) flock_portable->l_len;
+        flock.l_sysid = 0L;
+        flock.l_pid = flock_portable->l_pid;    /* Perhaps 0 would be better */
+
+        result = __fcntl64(fd, mips_cmd, (void *) &flock);
+
+        flock_portable->l_type = flock.l_type;
+        flock_portable->l_whence = flock.l_whence;
+        flock_portable->l_start = flock.l_start;
+        flock_portable->l_len = flock.l_len;
+        flock_portable->l_pid = flock.l_pid;
+        break;
+
+    case F_GETLK64:
+    case F_SETLK64:
+    case F_SETLKW64:
+        flock64_portable = (struct flock64_portable *) arg;
+
+        if (invalid_pointer(flock_portable)) {
+            ALOGE("%s: flock_portable:%p == {NULL||-1}", __func__, flock_portable);
+            *REAL(__errno)() = EFAULT;
+            result = -1;
+            goto done;
+        }
+
+        /*
+         * Lock type and Whence are the same for all ARCHs
+         *      (F_RDLCK:0,   F_WRLCK:1,  F_UNLCK:2)
+         *      (SEEK_SET:0, SEEK_CUR:1, SEEK_END:2)
+         */
+        flock64.l_type = flock64_portable->l_type;
+        flock64.l_whence = flock64_portable->l_whence;
+        flock64.l_start = (off_t) flock64_portable->l_start;
+        flock64.l_len =  (off_t) flock64_portable->l_len;
+        flock64.l_pid = flock64_portable->l_pid;        /* Perhaps 0 would be better */
+
+        result = __fcntl64(fd, mips_cmd, (void *) &flock);
+
+        flock64_portable->l_type = flock64.l_type;
+        flock64_portable->l_whence = flock64.l_whence;
+        flock64_portable->l_start = flock64.l_start;
+        flock64_portable->l_len = flock64.l_len;
+        flock64_portable->l_pid = flock64.l_pid;
+        break;
+
+    case F_SETFL:
+        flags = fcntl_flags_pton((int)arg);
+        result = __fcntl64(fd, mips_cmd, (void *)flags);
+        break;
+
+    case F_GETFL:
+        result = __fcntl64(fd, mips_cmd, arg);
+        if (result != -1)
+            result = fcntl_flags_ntop(result);
+        break;
+
+    case F_DUPFD:
+    case F_GETFD:
+    case F_SETFD:
+    case F_SETOWN:
+    case F_GETOWN:
+    case F_SETSIG:
+    case F_GETSIG:
+    case F_SETLEASE:
+    case F_GETLEASE:
+    case F_NOTIFY:
+        ALOGV("%s: Calling __fcntl64(fd:%d, mips_cmd:0x%x, arg:%p);", __func__,
+                                     fd,    mips_cmd,      arg);
+
+        result = __fcntl64(fd, mips_cmd, arg);
+
+        if (result < 0) {
+            ALOGV("%s: result = %d = __fcntl64(fd:%d, mips_cmd:0x%x, arg:%p);", __func__,
+                       result,                 fd,    mips_cmd,      arg);
+        } else {
+            if (mips_cmd == F_SETFD) {
+                /*
+                 * File descriptor flag bits got set or cleared.
+                 */
+                flags = (int)arg;
+                if (flags & FD_CLOEXEC) {
+                    filefd_CLOEXEC_enabled(fd);
+                } else {
+                    filefd_CLOEXEC_disabled(fd);
+                }
+            }
+        }
+        break;
+
+    default:
+        /*
+         * This is likely a rare situation, abort() would hang fcntl13 LTP test.
+         */
+        ALOGE("%s: mips_cmd:%d doesn't appear to be supported;", __func__,
+                   mips_cmd);
+
+        ALOGV("%s: Assume it doesn't need to be mapped!", __func__);
+
+        result = __fcntl64(fd, mips_cmd, arg);
+    }
+
+done:
+    ALOGV("%s: return(result:%d); }", __func__, result);
+    return result;
 }
 
diff --git a/ndk/sources/android/libportable/arch-mips/filefd.c b/ndk/sources/android/libportable/arch-mips/filefd.c
new file mode 100644
index 0000000..d80eb3d
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/filefd.c
@@ -0,0 +1,502 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <errno_portable.h>
+#include <filefd_portable.h>
+#include <signal_portable.h>
+#include <sys/atomics.h>
+
+#define PORTABLE_TAG "filefd_portable"
+#include <log_portable.h>
+
+/*
+ * Maintaining a list of special file descriptors in lib-portable:
+ * ---------------------------------------------------------------
+ *
+ * These are file descriptors which were opened with system calls
+ * which make it possible to read kernel data structures via the
+ * read system call. See man pages for:
+ *      signalfd(2)
+ *      eventfd(2)
+ *      timerfd_create(2)
+ *
+ * The files conditioned with signalfd(2) need to have their reads
+ * intercepted to correct signal numbers. This is done using this table
+ * of mapped files.
+ *
+ * The signalfd(2) semantics are maintained across execve(2) by exporting
+ * and importing environment variables for file descriptors that are not
+ * marked as close-on-execute. For example testing import code with:
+ * Eg:
+ *      export ANDROID_PORTABLE_MAPPED_FILE_DESCRIPTORS=10,17
+ *      export ANDROID_PORTABLE_MAPPED_FILE_TYPES=2,1
+ *
+ *      Where
+ *          filefd_mapped_file[10] = SIGNAL_FD_TYPE:2
+ *          filefd_FD_CLOEXEC_file[10] = 0;
+ *      and
+ *          filefd_mapped_file[17] = EVENT_FD_TYPE:1
+ *          filefd_FD_CLOEXEC_file[17] = 0;
+ *
+ * A table of CLOEXEC_files is maintained via call-backs
+ * in open_portable() and fcntl_portable() which indicates
+ * the files with close-on-execute semantics.
+ *
+ * The signalfd(2) fork(2) and thread semantics are not
+ * affected by the mapping of signalfd() file descriptor reads.
+ *
+ * This algorithm requires that threads have the same sharing
+ * attributes for file descriptors and memory and will be disabled
+ * by a call from clone() if the environment is unsuitable for it's use.
+ */
+
+static char *fd_env_name = "ANDROID_PORTABLE_MAPPED_FILE_DESCRIPTORS";
+static char *type_env_name = "ANDROID_PORTABLE_MAPPED_FILE_TYPES";
+static enum filefd_type filefd_mapped_file[__FD_SETSIZE];
+static int  filefd_FD_CLOEXEC_file[__FD_SETSIZE];
+
+static volatile int filefd_mapped_files = 0;
+static volatile int filefd_enabled = 1;
+
+/*
+ * Assuming sizeof(int)==4, and __FD_SETSIZE < 10000 each token will
+ * occupy a maximum of 5 characters (4 digits + delimiter:','). The tokens
+ * are the numbers above, a file descriptor (0..9999), and the filefd_type's
+ * which are a single digit.
+ *
+ * The arrays used to manipulate the environment variables are allocated using
+ * malloc to avoid overrunning the stack.
+ */
+#if __FD_SETSIZE >= 10000
+#error MAX_ENV_SIZE must be increased
+#endif
+
+#define MAX_ENV_SIZE (__FD_SETSIZE * 5)
+
+static int export_fd_env()
+{
+    const int max_env_size = MAX_ENV_SIZE;
+    int type_env_bytes_remaining = max_env_size;
+    char *type_env_allocated = NULL, *type_env;
+    int fd_env_bytes_remaining = max_env_size;
+    char *fd_env_allocated = NULL, *fd_env;
+    int exported_file_descriptors = 0;
+    enum filefd_type fd_type;
+    int overwrite = 1;
+    int fd_count = 0;
+    int saved_errno;
+    int fd_cloexec;
+    int len;
+    int rv1;
+    int rv2;
+    int rv;
+    int fd;
+
+    ALOGV("%s:() {", __func__);
+
+    saved_errno = *REAL(__errno)();
+
+    type_env_allocated = malloc(max_env_size);
+    fd_env_allocated = malloc(max_env_size);
+    if (type_env_allocated == NULL || fd_env_allocated == NULL) {
+        ALOGE("%s: type_env_allocated:%p, fd_env_allocated:%p; FIXME!", __func__,
+                   type_env_allocated,    fd_env_allocated);
+
+        rv = -1;
+        goto done;
+    } else {
+        ALOGV("%s: type_env_allocated:%p, fd_env_allocated:%p;", __func__,
+                   type_env_allocated,    fd_env_allocated);
+    }
+
+    type_env = type_env_allocated;
+    fd_env = fd_env_allocated;
+
+    for (fd = 0; fd < __FD_SETSIZE; fd++) {
+        fd_type = filefd_mapped_file[fd];
+        if (fd_type != UNUSED_FD_TYPE) {
+            ++fd_count;
+            ALOGV("%s: fd_type = %d = filefd_mapped_file[fd:%d]; ++fdcount:%d;", __func__,
+                       fd_type,                          fd,       fd_count);
+
+            fd_cloexec = filefd_FD_CLOEXEC_file[fd];
+            ALOGV("%s: fd_cloexec = %d = filefd_FD_CLOEXEC_file[fd:%d];", __func__,
+                       fd_cloexec,                              fd);
+
+            if (fd_cloexec == 0) {
+                rv = snprintf(fd_env, fd_env_bytes_remaining, "%d,", fd);
+                ASSERT(rv > 0);
+                fd_env += rv;
+                fd_env_bytes_remaining -= rv;
+                rv = snprintf(type_env, type_env_bytes_remaining, "%d,", filefd_mapped_file[fd]);
+                ASSERT(rv > 0);
+                type_env += rv;
+                type_env_bytes_remaining -= rv;
+                exported_file_descriptors++;
+            }
+
+            /*
+             * There is a chance of inconsistent results here if
+             * another thread is updating the array while it was
+             * being copied, but this code is only run during exec
+             * so the state of the file descriptors that the child
+             * sees will be inconsistent anyway.
+             */
+            if (fd_count == filefd_mapped_files)
+                break;
+        }
+    }
+    if (fd_count != filefd_mapped_files) {
+        ALOGE("%s: fd_count:%d != filefd_mapped_files:%d; [Likely Race; add futex?]", __func__,
+                   fd_count,      filefd_mapped_files);
+
+    }
+    if (exported_file_descriptors == 0) {
+        rv1 = unsetenv(fd_env_name);
+        rv2 = unsetenv(type_env_name);
+        if (rv1 != 0 || rv2 != 0) {
+            ALOGV("%s: Note: unsetenv() failed!", __func__);
+        }
+        rv = 0;
+    } else {
+        if (fd_env > fd_env_allocated) {
+            fd_env--;                           /* backup fd_env to last ',' */
+        }
+        *fd_env = '\0';
+
+        if (type_env > type_env_allocated) {
+            type_env--;                         /* backup type_env to last ',' */
+        }
+        *type_env = '\0';
+
+        rv = setenv(fd_env_name, fd_env_allocated, overwrite);
+        if (rv != 0) {
+            ALOGE("%s: rv:%d = setenv(fd_env_name:'%s', fd_env_allocated:'%s' ...);", __func__,
+                       rv,            fd_env_name,      fd_env_allocated);
+        } else {
+            ALOGV("%s: rv:%d = setenv(fd_env_name:'%s', fd_env_allocated:'%s' ...);", __func__,
+                       rv,            fd_env_name,      fd_env_allocated);
+        }
+        if (rv != 0) goto done;
+
+        rv = setenv(type_env_name, type_env_allocated, overwrite);
+
+        if (rv != 0) {
+            ALOGE("%s: rv:%d = setenv(type_env_name:'%s', type_env_allocated:'%s' ...);",
+            __func__,  rv,            type_env_name,      type_env_allocated);
+        } else {
+            ALOGV("%s: rv:%d = setenv(type_env_name:'%s', type_env_allocated:'%s' ...);",
+            __func__,  rv,            type_env_name,      type_env_allocated);
+        }
+    }
+
+done:
+    if (type_env_allocated)
+        free(type_env_allocated);
+
+    if (fd_env_allocated)
+        free(fd_env_allocated);
+
+    *REAL(__errno)() = saved_errno;
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+static int import_fd_env(int verify)
+{
+    char *type_env_allocated = NULL;
+    char *fd_env_allocated = NULL;
+    char *type_token_saved_ptr;
+    char *fd_token_saved_ptr;
+    enum filefd_type fd_type;
+    char *type_env, *fd_env;
+    int saved_errno;
+    char *type_token;
+    char *fd_token;
+    int rv = 0;
+    int fd;
+
+    ALOGV("%s:(verify:%d) {", __func__, verify);
+
+    saved_errno = *REAL(__errno)();
+
+    /*
+     * get file descriptor environment pointer and make a
+     * a copy of the string.
+     */
+    fd_env = getenv(fd_env_name);
+    if (fd_env == NULL) {
+        ALOGV("%s: fd_env = NULL = getenv('%s');", __func__,
+                                   fd_env_name);
+        goto done;
+    } else {
+        ALOGV("%s: fd_env = '%s' = getenv('%s');", __func__,
+                   fd_env,         fd_env_name);
+
+        fd_env_allocated = malloc(strlen(fd_env)+1);
+        if (fd_env_allocated == NULL) {
+            ALOGE("%s: fd_env_allocated = NULL; malloc failed", __func__);
+            goto done;
+        }
+        strcpy(fd_env_allocated, fd_env);
+    }
+
+    /*
+     * get file descriptor environment pointer and make a copy of
+     * the string to our stack.
+     */
+    type_env = getenv(type_env_name);
+    if (type_env == NULL) {
+        ALOGV("%s: type_env = NULL = getenv(type_env_name:'%s');", __func__,
+                                            type_env_name);
+        goto done;
+    } else {
+        ALOGV("%s: type_env = '%s' = getenv(type_env_name:'%s');", __func__,
+                   type_env,                type_env_name);
+
+        type_env_allocated = malloc(strlen(type_env)+1);
+        if (type_env_allocated == NULL) {
+            ALOGE("%s: type_env_allocated = NULL; malloc failed", __func__);
+            goto done;
+        }
+        strcpy(type_env_allocated, type_env);
+    }
+
+    /*
+     * Setup strtok_r(), use it to parse the env tokens, and
+     * initialise the filefd_mapped_file array.
+     */
+    fd_token = strtok_r(fd_env_allocated, ",", &fd_token_saved_ptr);
+    type_token = strtok_r(type_env_allocated, ",", &type_token_saved_ptr);
+    while (fd_token && type_token) {
+        fd = atoi(fd_token);
+        ASSERT(fd >= 0 );
+        ASSERT(fd < __FD_SETSIZE);
+
+        fd_type = (enum filefd_type) atoi(type_token);
+        ASSERT(fd_type > UNUSED_FD_TYPE);
+        ASSERT(fd_type < MAX_FD_TYPE);
+
+        if (fd >= 0 && fd < __FD_SETSIZE) {
+            if (fd_type > UNUSED_FD_TYPE && fd_type < MAX_FD_TYPE) {
+                if (verify) {
+                    ASSERT(filefd_mapped_file[fd] == fd_type);
+                    ALOGV("%s: filefd_mapped_file[fd:%d] == fd_type:%d;", __func__,
+                                                  fd,       fd_type);
+                } else {
+                    ASSERT(filefd_mapped_file[fd] == UNUSED_FD_TYPE);
+
+                    __atomic_inc(&filefd_mapped_files);
+                    ALOGV("%s: ++filefd_mapped_files:%d;", __func__,
+                                 filefd_mapped_files);
+
+                    filefd_mapped_file[fd] = fd_type;
+                    ALOGV("%s: filefd_mapped_file[fd:%d] = fd_type:%d;", __func__,
+                                                  fd,      fd_type);
+                }
+            }
+        }
+
+        fd_token = strtok_r(NULL, ",", &fd_token_saved_ptr);
+        type_token = strtok_r(NULL, ",", &type_token_saved_ptr);
+    }
+
+done:
+    if (type_env_allocated)
+        free(type_env_allocated);
+    if (fd_env_allocated)
+        free(fd_env_allocated);
+
+    *REAL(__errno)() = saved_errno;
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+/*
+ * This function will get run by the linker when the library is loaded.
+ */
+static void __attribute__ ((constructor)) linker_import_fd_env(void)
+{
+    int rv;
+    int verify_consistancy = 0;
+
+    ALOGV(" ");
+    ALOGV("%s() {", __func__);
+
+    rv = import_fd_env(verify_consistancy);     /* File type table not verified. */
+
+    ALOGV("%s: }", __func__);
+}
+
+
+__hidden void filefd_opened(int fd, enum filefd_type fd_type)
+{
+    ALOGV("%s(fd:%d) {", __func__, fd);
+
+    if (fd >= 0 && fd < __FD_SETSIZE) {
+        if (filefd_mapped_file[fd] == UNUSED_FD_TYPE) {
+            __atomic_inc(&filefd_mapped_files);
+            filefd_mapped_file[fd] = fd_type;
+        }
+        ASSERT(filefd_mapped_file[fd] == fd_type);
+    }
+
+    ALOGV("%s: }", __func__);
+}
+
+__hidden void filefd_closed(int fd)
+{
+    ALOGV("%s(fd:%d) {", __func__, fd);
+
+    if (fd >= 0 && fd < __FD_SETSIZE) {
+        if (filefd_mapped_file[fd] != UNUSED_FD_TYPE) {
+            filefd_mapped_file[fd] = UNUSED_FD_TYPE;
+            filefd_FD_CLOEXEC_file[fd] = 0;
+            __atomic_dec(&filefd_mapped_files);
+        }
+    }
+    ALOGV("%s: }", __func__);
+}
+
+
+__hidden void filefd_CLOEXEC_enabled(int fd)
+{
+    ALOGV("%s:(fd:%d) {", __func__, fd);
+
+    if (fd >= 0 && fd < __FD_SETSIZE) {
+        filefd_FD_CLOEXEC_file[fd] = 1;
+    }
+
+    ALOGV("%s: }", __func__);
+}
+
+__hidden void filefd_CLOEXEC_disabled(int fd)
+{
+    ALOGV("%s:(fd:%d) {", __func__, fd);
+
+    if (fd >= 0 && fd < __FD_SETSIZE) {
+        filefd_FD_CLOEXEC_file[fd] = 0;
+    }
+
+    ALOGV("%s: }", __func__);
+}
+
+
+__hidden void filefd_disable_mapping()
+{
+    ALOGV("%s:() {", __func__);
+
+    filefd_enabled = 0;
+
+    ALOGV("%s: }", __func__);
+}
+
+
+int WRAP(close)(int fd)
+{
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(fd:%d) {", __func__, fd);
+
+    rv = REAL(close)(fd);
+    filefd_closed(fd);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(read)(int fd, void *buf, size_t count)
+{
+    int rv;
+    enum filefd_type fd_type;
+
+    ALOGV(" ");
+    ALOGV("%s(fd:%d, buf:0x%p, count:%d) {", __func__,
+              fd,    buf,      count);
+
+    fd_type = filefd_mapped_file[fd];
+    ALOGV("%s:fd_type:%d", __func__,
+              fd_type);
+
+    switch (fd_type) {
+    /* Reads on these descriptors are portable; no need to be mapped. */
+    case UNUSED_FD_TYPE:
+    case EVENT_FD_TYPE:
+    case INOTIFY_FD_TYPE:
+    case TIMER_FD_TYPE:
+        rv = REAL(read)(fd, buf, count);
+        break;
+
+    /* The read() of a signalfd() file descriptor needs to be mapped. */
+    case SIGNAL_FD_TYPE:
+        if (filefd_enabled) {
+            rv = read_signalfd_mapper(fd, buf, count);
+        } else {
+            rv = REAL(read)(fd, buf, count);
+        }
+        break;
+
+    default:
+        ALOGE("Unknown fd_type:%d!", fd_type);
+        rv = REAL(read)(fd, buf, count);
+        break;
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+/*
+ * Export PORTABLE environment variables before execve().
+ * Tries a second time if it detects an extremely unlikely
+ * race condition.
+ */
+int WRAP(execve)(const char *filename, char *const argv[],  char *const envp[])
+{
+    int rv;
+    int mapped_files = filefd_mapped_files;
+    int verify_consistancy = 1;
+
+    ALOGV(" ");
+    ALOGV("%s(filename:%p, argv:%p, envp:%p) {", __func__,
+              filename,    argv,    envp);
+
+    export_fd_env();
+
+    if (mapped_files != filefd_mapped_files) {
+        export_fd_env();
+    }
+    import_fd_env(verify_consistancy);          /* File type table consistancy verified. */
+
+    rv = REAL(execve)(filename, argv, envp);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
diff --git a/ndk/sources/android/libportable/arch-mips/flags.c b/ndk/sources/android/libportable/arch-mips/flags.c
new file mode 100644
index 0000000..f18b8d9
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/flags.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <fcntl_portable.h>
+
+#define PORTABLE_TAG "flags_portable"
+#include <log_portable.h>
+
+
+/* __sflags is an internal bionic routine but the symbol is exported and there are callers... */
+extern int __sflags(const char *, int *);
+
+int
+WRAP(__sflags)(const char *mode, int *optr)
+{
+    int rv;
+    int nflags, pflags;
+
+    ALOGV(" ");
+    ALOGV("%s(mode:%p, optr:%p) {", __func__, mode, optr);
+
+    rv = __sflags(mode, &nflags);
+
+    /* error - no change to *optr */
+    if (rv == 0)
+        goto done;
+
+    pflags = nflags & O_ACCMODE;
+    if (nflags & O_CREAT)
+        pflags |= O_CREAT_PORTABLE;
+    if (nflags & O_TRUNC)
+        pflags |= O_TRUNC_PORTABLE;
+    if (nflags & O_APPEND)
+        pflags |= O_APPEND_PORTABLE;
+
+    /* Set *optr to portable flags */
+    *optr = pflags;
+
+done:
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
diff --git a/ndk/sources/android/libportable/arch-mips/inotify.c b/ndk/sources/android/libportable/arch-mips/inotify.c
new file mode 100644
index 0000000..76b1cac
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/inotify.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <asm/unistd.h>
+#include <asm/unistd-portable.h>
+
+#include <fcntl_portable.h>
+#include <inotify_portable.h>
+
+#include <filefd_portable.h>
+
+
+#define PORTABLE_TAG "inotify_portable"
+#include <log_portable.h>
+
+extern int syscall(int, ...);
+
+
+/*
+ * NOTE: LTP defaults to using O_CLOEXEC for IN_CLOEXEC,
+ *       and 02000000 if O_CLOEXEC isn't defined.
+ */
+
+
+/*
+ * Portable to Native event flags mapper.
+ */
+static inline int in_flags_pton(int portable_flags)
+{
+    int native_flags = 0;
+
+    ALOGV("%s(portable_flags:0x%x) {", __func__, portable_flags);
+
+    if (portable_flags & IN_NONBLOCK_PORTABLE) {
+        native_flags |= IN_NONBLOCK;
+    }
+
+    if (portable_flags & IN_CLOEXEC_PORTABLE) {
+        native_flags |= IN_CLOEXEC;
+    }
+
+    ALOGV("%s: return(native_flags:%d); }", __func__, native_flags);
+    return native_flags;
+}
+
+
+int WRAP(inotify_init1)(int portable_flags) {
+    int rv;
+    int native_flags;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_flags:%d) {", __func__,
+              portable_flags);
+
+    native_flags = in_flags_pton(portable_flags);
+
+    rv = syscall(__NR_inotify_init1, native_flags);
+    if (rv >= 0) {
+        if (native_flags & IN_CLOEXEC) {
+            filefd_CLOEXEC_enabled(rv);
+        }
+        filefd_opened(rv, INOTIFY_FD_TYPE);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
diff --git a/ndk/sources/android/libportable/arch-mips/ioctl.c b/ndk/sources/android/libportable/arch-mips/ioctl.c
index cbd517f..7e82a6a 100644
--- a/ndk/sources/android/libportable/arch-mips/ioctl.c
+++ b/ndk/sources/android/libportable/arch-mips/ioctl.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <stdarg.h>
 #include <sys/ioctl.h>
 #include <ioctls_portable.h>
@@ -213,7 +214,7 @@
 }
 
 extern int __ioctl(int, int, void *);
-int ioctl_portable(int fd, int request, ...)
+int WRAP(ioctl)(int fd, int request, ...)
 {
     va_list ap;
     void * arg;
diff --git a/ndk/sources/android/libportable/arch-mips/jboffsets.h b/ndk/sources/android/libportable/arch-mips/jboffsets.h
new file mode 100644
index 0000000..b43d77a
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/jboffsets.h
@@ -0,0 +1,46 @@
+#ifndef _JBOFFSETS_H_
+#define _JBOFFSETS_H_
+
+/*
+ * Normally the same layout is used for saving the registers in jmp_buf
+ * as that used in struct sigcontext. For portability all of the registers need
+ * to be stored in the space available in a portable jmp_buf so this code
+ * packs the register together.
+ */
+
+#define JB_MASK         (0*REGSZ)
+#define JB_PC           (1*REGSZ)
+#define JB_MAGIC        (2*REGSZ)
+#define JB_S0           (3*REGSZ)
+#define JB_S1           (4*REGSZ)
+#define JB_S2           (5*REGSZ)
+#define JB_S3           (6*REGSZ)
+#define JB_S4           (7*REGSZ)
+#define JB_S5           (8*REGSZ)
+#define JB_S6           (9*REGSZ)
+#define JB_S7           (10*REGSZ)
+#define JB_S8           (11*REGSZ)
+#define JB_GP           (12*REGSZ)
+#define JB_SP           (13*REGSZ)
+#define JB_SAVEMASK     (14*REGSZ)
+#define JB_FPUSED       (15*REGSZ)
+#define JB_FSR          (16*REGSZ)
+#define JB_FPBASE       (18*REGSZ)
+#define JB_F20          (JB_FPBASE+0*REGSZ_FP)
+#define JB_F21          (JB_FPBASE+1*REGSZ_FP)
+#define JB_F22          (JB_FPBASE+2*REGSZ_FP)
+#define JB_F23          (JB_FPBASE+3*REGSZ_FP)
+#define JB_F24          (JB_FPBASE+4*REGSZ_FP)
+#define JB_F25          (JB_FPBASE+5*REGSZ_FP)
+#define JB_F26          (JB_FPBASE+6*REGSZ_FP)
+#define JB_F27          (JB_FPBASE+7*REGSZ_FP)
+#define JB_F28          (JB_FPBASE+8*REGSZ_FP)
+#define JB_F29          (JB_FPBASE+9*REGSZ_FP)
+#define JB_F30          (JB_FPBASE+10*REGSZ_FP)
+#define JB_F31          (JB_FPBASE+11*REGSZ_FP)
+
+/* Use different magic numbers to avoid misuse of native vs portable contexts */
+#define MAGIC_SETJMP    0xACEDBEAD
+#define MAGIC__SETJMP   0xBEAD1CAB
+
+#endif /* _JBOFFSETS_H_ */
diff --git a/ndk/sources/android/libportable/arch-mips/mmap.c b/ndk/sources/android/libportable/arch-mips/mmap.c
index d165e2b..f2c3a1a 100644
--- a/ndk/sources/android/libportable/arch-mips/mmap.c
+++ b/ndk/sources/android/libportable/arch-mips/mmap.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <unistd.h>
 #include <errno.h>
 #include <sys/mman.h>
@@ -23,71 +24,106 @@
 #error Bad build environment
 #endif
 
-static inline int mips_change_prot(int prot)
+#define PORTABLE_TAG "mmap_portable"
+#include <log_portable.h>
+
+static inline int mmap_prot_pton(int portable_prot)
 {
+    int native_prot = portable_prot;
+
+    ALOGV("%s(portable_prot:0x%x) {", __func__, portable_prot);
+
     /* Only PROT_SEM is different */
-    if (prot & PROT_SEM_PORTABLE) {
-        prot &= ~PROT_SEM_PORTABLE;
-        prot |= PROT_SEM;
+    if (portable_prot & PROT_SEM_PORTABLE) {
+        native_prot &= ~PROT_SEM_PORTABLE;
+        native_prot |= PROT_SEM;
     }
 
-    return prot;
+    ALOGV("%s: return(native_prot:0x%x); }", __func__, native_prot);
+    return native_prot;
 }
 
-static inline int mips_change_flags(int flags)
+
+static inline int mmap_flags_pton(int portable_flags)
 {
-    int mipsflags = 0;
-    if (flags & MAP_SHARED_PORTABLE)
-       mipsflags |= MAP_SHARED;
-    if (flags & MAP_PRIVATE_PORTABLE)
-       mipsflags |= MAP_PRIVATE;
-    if (flags & MAP_FIXED_PORTABLE)
-       mipsflags |= MAP_FIXED;
-    if (flags & MAP_ANONYMOUS_PORTABLE)
-       mipsflags |= MAP_ANONYMOUS;
-    if (flags & MAP_GROWSDOWN_PORTABLE)
-       mipsflags |= MAP_GROWSDOWN;
-    if (flags & MAP_DENYWRITE_PORTABLE)
-       mipsflags |= MAP_DENYWRITE;
-    if (flags & MAP_EXECUTABLE_PORTABLE)
-       mipsflags |= MAP_EXECUTABLE;
-    if (flags & MAP_LOCKED_PORTABLE)
-       mipsflags |= MAP_LOCKED;
-    if (flags & MAP_NORESERVE_PORTABLE)
-       mipsflags |= MAP_NORESERVE;
-    if (flags & MAP_POPULATE_PORTABLE)
-       mipsflags |= MAP_POPULATE;
-    if (flags & MAP_NONBLOCK_PORTABLE)
-       mipsflags |= MAP_NONBLOCK;
+    int native_flags = 0;
 
-    return mipsflags;
-}
+    ALOGV("%s(portable_flags:0x%x) {", __func__, portable_flags);
 
-#define  MMAP2_SHIFT  12
-extern void *__mmap2(void *, size_t, int, int, int, size_t);
-void *mmap_portable(void *addr, size_t size, int prot, int flags, int fd, long offset)
-{
-    void *ret;
-    int mips_prot, mips_flags;
-
-    if (offset & ((1UL << MMAP2_SHIFT)-1)) {
-        errno = EINVAL;
-        return MAP_FAILED;
+    if (portable_flags & MAP_SHARED_PORTABLE) {
+       native_flags |= MAP_SHARED;
+    }
+    if (portable_flags & MAP_PRIVATE_PORTABLE) {
+       native_flags |= MAP_PRIVATE;
+    }
+    if (portable_flags & MAP_FIXED_PORTABLE) {
+       native_flags |= MAP_FIXED;
+    }
+    if (portable_flags & MAP_ANONYMOUS_PORTABLE) {
+       native_flags |= MAP_ANONYMOUS;
+    }
+    if (portable_flags & MAP_GROWSDOWN_PORTABLE) {
+       native_flags |= MAP_GROWSDOWN;
+    }
+    if (portable_flags & MAP_DENYWRITE_PORTABLE) {
+       native_flags |= MAP_DENYWRITE;
+    }
+    if (portable_flags & MAP_EXECUTABLE_PORTABLE) {
+       native_flags |= MAP_EXECUTABLE;
+    }
+    if (portable_flags & MAP_LOCKED_PORTABLE) {
+       native_flags |= MAP_LOCKED;
+    }
+    if (portable_flags & MAP_NORESERVE_PORTABLE) {
+       native_flags |= MAP_NORESERVE;
+    }
+    if (portable_flags & MAP_POPULATE_PORTABLE) {
+       native_flags |= MAP_POPULATE;
+    }
+    if (portable_flags & MAP_NONBLOCK_PORTABLE) {
+       native_flags |= MAP_NONBLOCK;
     }
 
-    mips_prot = mips_change_prot(prot);
-    mips_flags = mips_change_flags(flags);
-    ret = __mmap2(addr, size, mips_prot, mips_flags, fd,
-                  (size_t)offset >> MMAP2_SHIFT);
-
-    if (ret && (mips_flags & (MAP_PRIVATE | MAP_ANONYMOUS)))
-            madvise(ret, size, MADV_MERGEABLE);
-
-    return ret;
+    ALOGV("%s: return(native_flags:0x%x); }", __func__, native_flags);
+    return native_flags;
 }
 
-extern int    mprotect(const void *, size_t, int);
-int mprotect_portable(const void *addr, size_t size, int prot)
+extern void* REAL(mmap)(void *, size_t, int, int, int, off_t);
+void *WRAP(mmap)(void *addr, size_t size, int prot, int flags, int fd, long byte_offset)
 {
-    return mprotect(addr, size, mips_change_prot(prot));
+    int native_prot, native_flags;
+    int saved_errno;
+    void *ret_addr;
+
+    ALOGV(" ");
+    ALOGV("%s(addr:%p, size:%d, prot:0x%x, flags:0x%x, fd:%d, byte_offset:0x%lx) {", __func__,
+              addr,    size,    prot,      flags,      fd,    byte_offset);
+
+    native_prot = mmap_prot_pton(prot);
+    native_flags = mmap_flags_pton(flags);
+
+    ret_addr = REAL(mmap)(addr, size, native_prot, native_flags, fd, byte_offset);
+
+    ALOGV("%s: return(ret_addr:%p); }", __func__, ret_addr);
+    return ret_addr;
+}
+
+
+extern int mprotect(const void *, size_t, int);
+
+int WRAP(mprotect)(const void *addr, size_t size, int portable_prot)
+{
+    int rv;
+    int native_prot;
+
+    ALOGV(" ");
+    ALOGV("%s(addr:%p, size:%d, portable_prot:0x%x); {", __func__,
+              addr,    size,    portable_prot);
+
+    native_prot = mmap_prot_pton(portable_prot);
+
+    rv = REAL(mprotect)(addr, size, native_prot);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
 }
diff --git a/ndk/sources/android/libportable/arch-mips/open.c b/ndk/sources/android/libportable/arch-mips/open.c
index 2f4dcd7..99ed7f9 100644
--- a/ndk/sources/android/libportable/arch-mips/open.c
+++ b/ndk/sources/android/libportable/arch-mips/open.c
@@ -14,59 +14,78 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdarg.h>
+#include <portability.h>
 #include <fcntl_portable.h>
+#include <filefd_portable.h>
+
+#define PORTABLE_TAG "open_portable"
+#include <log_portable.h>
 
 
 #if O_CREAT_PORTABLE==O_CREAT
 #error Bad build environment
 #endif
 
-static inline int mips_change_flags(int flags)
+
+static inline int open_flags_pton(int flags)
 {
     int mipsflags = flags & O_ACCMODE_PORTABLE;
-    if (flags & O_CREAT_PORTABLE)
-	mipsflags |= O_CREAT;
-    if (flags & O_EXCL_PORTABLE)
-	mipsflags |= O_EXCL;
-    if (flags & O_NOCTTY_PORTABLE)
-	mipsflags |= O_NOCTTY;
-    if (flags & O_TRUNC_PORTABLE)
-	mipsflags |= O_TRUNC;
-    if (flags & O_APPEND_PORTABLE)
-	mipsflags |= O_APPEND;
-    if (flags & O_NONBLOCK_PORTABLE)
-	mipsflags |= O_NONBLOCK;
-    if (flags & O_SYNC_PORTABLE)
-	mipsflags |= O_SYNC;
-    if (flags & FASYNC_PORTABLE)
-	mipsflags |= FASYNC;
-    if (flags & O_DIRECT_PORTABLE)
-	mipsflags |= O_DIRECT;
-    if (flags & O_LARGEFILE_PORTABLE)
-	mipsflags |= O_LARGEFILE;
-    if (flags & O_DIRECTORY_PORTABLE)
-	mipsflags |= O_DIRECTORY;
-    if (flags & O_NOFOLLOW_PORTABLE)
-	mipsflags |= O_NOFOLLOW;
-    if (flags & O_NOATIME_PORTABLE)
-	mipsflags |= O_NOATIME;
-    if (flags & O_NDELAY_PORTABLE)
-	mipsflags |= O_NDELAY;
 
+    ALOGV("%s(flags:0x%x) {", __func__, flags);
+
+    if (flags & O_CREAT_PORTABLE)
+        mipsflags |= O_CREAT;
+    if (flags & O_EXCL_PORTABLE)
+        mipsflags |= O_EXCL;
+    if (flags & O_NOCTTY_PORTABLE)
+        mipsflags |= O_NOCTTY;
+    if (flags & O_TRUNC_PORTABLE)
+        mipsflags |= O_TRUNC;
+    if (flags & O_APPEND_PORTABLE)
+        mipsflags |= O_APPEND;
+    if (flags & O_NONBLOCK_PORTABLE)
+        mipsflags |= O_NONBLOCK;
+    if (flags & O_SYNC_PORTABLE)
+        mipsflags |= O_SYNC;
+    if (flags & FASYNC_PORTABLE)
+        mipsflags |= FASYNC;
+    if (flags & O_DIRECT_PORTABLE)
+        mipsflags |= O_DIRECT;
+    if (flags & O_LARGEFILE_PORTABLE)
+        mipsflags |= O_LARGEFILE;
+    if (flags & O_DIRECTORY_PORTABLE)
+        mipsflags |= O_DIRECTORY;
+    if (flags & O_NOFOLLOW_PORTABLE)
+        mipsflags |= O_NOFOLLOW;
+    if (flags & O_NOATIME_PORTABLE)
+        mipsflags |= O_NOATIME;
+    if (flags & O_NDELAY_PORTABLE)
+        mipsflags |= O_NDELAY;
+
+    ALOGV("%s: return(mipsflags:0x%x); }", __func__, mipsflags);
     return mipsflags;
 }
 
+
 extern int  __open(const char*, int, int);
-int open_portable(const char *pathname, int flags, ...)
+
+int WRAP(open)(const char *pathname, int flags, ...)
 {
     mode_t  mode = 0;
+    int native_flags;
+    int fd;
+
+    ALOGV(" ");
+    ALOGV("%s(pathname:%p, flags:0x%x, ...) {", __func__,
+              pathname,    flags);
+
     flags |= O_LARGEFILE_PORTABLE;
 
-    if (flags & O_CREAT_PORTABLE)
-    {
+    if (flags & O_CREAT_PORTABLE) {
         va_list  args;
 
         va_start(args, flags);
@@ -74,18 +93,40 @@
         va_end(args);
     }
 
-    return __open(pathname, mips_change_flags(flags), mode);
+    native_flags = open_flags_pton(flags);
+
+    fd = __open(pathname, native_flags, mode);
+    if (fd == -1) {
+        /* Can't print pathname as a string, might be bogus */
+        ALOGV("%s: fd = %d = __open(pathname:%p, native_flags:0x%x, mode:0x%x);", __func__,
+                   fd,              pathname,    native_flags,      mode);
+    } else {
+        if (flags & O_CLOEXEC) {
+            filefd_CLOEXEC_enabled(fd);
+        } else {
+            filefd_CLOEXEC_disabled(fd);
+        }
+    }
+    ALOGV("%s: return(fd:%d); }", __func__, fd);
+    return fd;
 }
 
+
 extern int  __openat(int, const char*, int, int);
-int openat_portable(int fd, const char *pathname, int flags, ...)
+
+int WRAP(openat)(int dirfd, const char *pathname, int flags, ...)
 {
     mode_t  mode = 0;
+    int native_flags;
+    int fd;
+
+    ALOGV(" ");
+    ALOGV("%s(dirfd:%d, pathname:0x%p, flags:0x%x, ...) {", __func__,
+              dirfd,    pathname,      flags);
 
     flags |= O_LARGEFILE_PORTABLE;
 
-    if (flags & O_CREAT_PORTABLE)
-    {
+    if (flags & O_CREAT_PORTABLE) {
         va_list  args;
 
         va_start(args, flags);
@@ -93,5 +134,20 @@
         va_end(args);
     }
 
-    return __openat(fd, pathname, mips_change_flags(flags), mode);
+    native_flags = open_flags_pton(flags);
+
+    fd = __openat(dirfd, pathname, native_flags, mode);
+
+    if (fd == -1) {
+        ALOGV("%s: fd = %d = __open(pathname:0x%p, native_flags:0x%x, mode:0x%d);", __func__,
+                   fd,              pathname,      native_flags,      mode);
+    } else {
+        if (flags & O_CLOEXEC) {
+            filefd_CLOEXEC_enabled(fd);
+        } else {
+            filefd_CLOEXEC_disabled(fd);
+        }
+    }
+    ALOGV("%s: return(fd:%d); }", __func__, fd);
+    return fd;
 }
diff --git a/ndk/sources/android/libportable/arch-mips/pipe.c b/ndk/sources/android/libportable/arch-mips/pipe.c
new file mode 100644
index 0000000..fa80266
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/pipe.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define _GNU_SOURCE             /* GLibc compatibility to declare pipe2(2) */
+#include <portability.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <portability.h>
+#include <asm/unistd.h>
+#include <asm/unistd-portable.h>
+
+#include <fcntl_portable.h>
+#include <asm/unistd-portable.h>
+#include <asm/unistd.h>
+#include <filefd_portable.h>
+
+
+#define PORTABLE_TAG "pipe_portable"
+#include <log_portable.h>
+
+extern int syscall(int, ...);
+
+
+/* NOTE: LTP defaults to using O_NONBLOCK even if O_NONBLOCK is defined */
+
+
+/*
+ * Portable to Native event flags mapper.
+ */
+static inline int tdf_flags_pton(int portable_flags)
+{
+    int native_flags = 0;
+
+    ALOGV("%s(portable_flags:0x%x) {", __func__, portable_flags);
+
+    if (portable_flags & O_NONBLOCK_PORTABLE) {
+        native_flags |= O_NONBLOCK;
+    }
+
+    if (portable_flags & O_CLOEXEC_PORTABLE) {
+        native_flags |= O_CLOEXEC;
+    }
+
+    ALOGV("%s: return(native_flags:%d); }", __func__, native_flags);
+    return native_flags;
+}
+
+
+int WRAP(pipe2)(int pipefd[2], int portable_flags) {
+    int native_flags;
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(pipefd[2]:%p, portable_flags:0x%x) {", __func__,
+              pipefd,       portable_flags);
+
+    native_flags = tdf_flags_pton(portable_flags);
+
+    rv = REAL(pipe2)(pipefd, native_flags);
+    if (rv >= 0) {
+        ALOGV("%s: pipe2() returned pipefd[0]:%d, pipefd[1]:%d", __func__,
+                                    pipefd[0],    pipefd[1]);
+
+        if (native_flags & O_CLOEXEC) {
+            filefd_CLOEXEC_enabled(pipefd[0]);
+            filefd_CLOEXEC_enabled(pipefd[1]);
+        }
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
diff --git a/ndk/sources/android/libportable/arch-mips/poll.c b/ndk/sources/android/libportable/arch-mips/poll.c
index 955c094..3f97176 100644
--- a/ndk/sources/android/libportable/arch-mips/poll.c
+++ b/ndk/sources/android/libportable/arch-mips/poll.c
@@ -14,9 +14,63 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <poll.h>
 #include <poll_portable.h>
 
+/*
+ *_XOPEN_SOURCE added the ability to not only poll for data coming in or out
+ * but now also the ability to poll for high priority input and output. Though
+ * the normal priority is equivalent to the original I/O it was assigned new bits:
+ *       POLLIN  Equivalent to POLLRDNORM
+ *       POLLOUT Equivalent to POLLWRNORM
+ *
+ * The Linux kernel sets both POLLIN and POLLRDNORM when data is available and sets
+ * both POLLOUT and POLLWRNORM when data can be written; so the new priority BAND bits
+ * just supplement the meaning of the prior POLLIN and POLLOUT bits as well as the
+ * new POLLRDNORM and POLLWRNORM bits.
+ *
+ * The DECNet Protocol can set the poll in  priority flag, POLLRDBAND.
+ * ATM as well as a whole bunch of other protocols can set the poll out priority flag,
+ * POLLWRBAND.
+ *
+ * MIPS and SPARC likely assigned the new XOPEN poll out event flags in UNIX well before
+ * UNIX was ported to X86.  It appears that Intel chose different bits and that was
+ * established by Linus as the the generic case and later also chosen by ARM.
+ *
+ *     POLLWRNORM:0x100 -  MIPS used POLLOUT:0x0004, which is equivalent in meaning.
+ *
+ *     POLLWRBAND:0x200 -  MIPS used 0x0100. which is POLLWRNORM:0x100.
+ *
+ * Summary:
+ * ========
+ *    Both Normal and Priority flags can be mapped to MIPS flags (left to right below).
+ *    Only the Priority poll out flag can be mapped back to portable because MIPS
+ *    is using the same number as POLLOUT for POLLWRNORM (right to left below).
+ *
+ *                    ARM/GENERIC/PORTABLE           MIPS
+ *                    ====================          ======
+ *      POLLIN          0x0001                      0x0001
+ *      POLLPRI         0x0002                      0x0002
+ *      POLLOUT         0x0004 <-----+              0x0004
+ *      POLLERR         0x0008        \             0x0008
+ *      POLLHUP         0x0010         \            0x0010
+ *      POLLNVAL        0x0020          \           0x0020
+ *      POLLRDNORM      0x0040           \          0x0040
+ *      POLLRDBAND      0x0080            \         0x0080
+ *      POLLWRNORM      0x0100  -----------+<---->  0x0004
+ *      POLLWRBAND      0x0200 <----------------->  0x0100
+ *      POLLMSG         0x0400                      0x0400
+ *      POLLREMOVE      0x1000                      0x1000
+ *      POLLRDHUP       0x2000                      0x2000
+ *
+ *  The loss of the high priority notice for the polling
+ *  of output data is likely minor as it was only being used
+ *  in DECNet. Also, the poll system call and device poll
+ *  implementations processes POLLOUT and POLLWRNORM event
+ *  flags the same.
+ */
+
 #if POLLWRNORM_PORTABLE==POLLWRNORM
 #error Bad build environment
 #endif
@@ -38,7 +92,10 @@
 
 static inline short change_mips_events(short mips_events)
 {
-    /* MIPS POLLWRNORM equals POLLOUT that is the same as POLLOUT_PORTABLE, so we just update POLLWRBNAD_PORTABLE. */
+    /*
+     * MIPS POLLWRNORM equals MIPS POLLOUT, which is the same as POLLOUT_PORTABLE;
+     * so we just map POLLWRBAND to POLLWRBAND_PORTABLE.
+     */
     if (mips_events & POLLWRBAND) {
         mips_events &= ~POLLWRBAND;
         mips_events |= POLLWRBAND_PORTABLE;
@@ -49,7 +106,7 @@
 
 extern int poll(struct pollfd *, nfds_t, long);
 
-int poll_portable(struct pollfd *fds, nfds_t nfds, long timeout)
+int WRAP(poll)(struct pollfd *fds, nfds_t nfds, long timeout)
 {
   nfds_t i;
   int ret;
@@ -57,7 +114,7 @@
   for (i = 0; i < nfds; i++)
       fds->events = mips_change_portable_events(fds->events);
 
-  ret = poll(fds, nfds, timeout);
+  ret = REAL(poll)(fds, nfds, timeout);
 
   for (i = 0; i < nfds; i++) {
       fds->events = change_mips_events(fds->events);
diff --git a/ndk/sources/android/libportable/arch-mips/pthread.c b/ndk/sources/android/libportable/arch-mips/pthread.c
new file mode 100644
index 0000000..41d9478
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/pthread.c
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <pthread.h>
+#include <time.h>
+#include <signal.h>
+#include <signal_portable.h>
+#include <errno.h>
+#include <errno_portable.h>
+
+#define PORTABLE_TAG "pthread_portable"
+#include <log_portable.h>
+
+/*
+ * Macros for STRIP_PARENS() which is used below in PTHREAD_WRAPPER(); cpp magic from:
+ *      http://boost.2283326.n4.nabble.com/preprocessor-removing-parentheses-td2591973.html
+ */
+#define CAT(x, y) CAT_I(x, y)
+#define CAT_I(x, y) x ## y
+
+#define APPLY(macro, args) APPLY_I(macro, args)
+#define APPLY_I(macro, args) macro args
+
+#define STRIP_PARENS(x) EVAL((STRIP_PARENS_I x), x)
+#define STRIP_PARENS_I(...) 1,1
+
+#define EVAL(test, x) EVAL_I(test, x)
+#define EVAL_I(test, x) MAYBE_STRIP_PARENS(TEST_ARITY test, x)
+
+#define TEST_ARITY(...) APPLY(TEST_ARITY_I, (__VA_ARGS__, 2, 1))
+#define TEST_ARITY_I(a,b,c,...) c
+
+#define MAYBE_STRIP_PARENS(cond, x) MAYBE_STRIP_PARENS_I(cond, x)
+#define MAYBE_STRIP_PARENS_I(cond, x) CAT(MAYBE_STRIP_PARENS_, cond)(x)
+
+#define MAYBE_STRIP_PARENS_1(x) x
+#define MAYBE_STRIP_PARENS_2(x) APPLY(MAYBE_STRIP_PARENS_2_I, x)
+#define MAYBE_STRIP_PARENS_2_I(...) __VA_ARGS__
+
+/*
+ * Call pthread function and convert return value (a native errno) to portable error number.
+ */
+#define PTHREAD_WRAPPER(fn, DECLARGS, CALLARGS, fmt)            \
+    int WRAP(fn) DECLARGS                                       \
+    {                                                           \
+        int rv, portable_rv;                                    \
+                                                                \
+        ALOGV(" ");                                             \
+        ALOGV("%s" fmt, __func__, STRIP_PARENS(CALLARGS));      \
+        rv = REAL(fn) CALLARGS;                                 \
+        portable_rv = errno_ntop(rv);                           \
+        ALOGV("%s: return(portable_rv:%d); rv:%d;", __func__,   \
+                          portable_rv,     rv);                 \
+        return portable_rv;                                     \
+    }
+
+PTHREAD_WRAPPER(pthread_attr_init, (pthread_attr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_destroy, (pthread_attr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setdetachstate, (pthread_attr_t *attr, int state), (attr, state),
+                "(attr:%p, state:%d)");
+
+PTHREAD_WRAPPER(pthread_attr_getdetachstate, (pthread_attr_t const *attr, int *state),
+                (attr, state), "(attr:%p, state:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setschedpolicy, (pthread_attr_t *attr, int policy), (attr, policy),
+                "(attr:%p, policy:%d)");
+
+PTHREAD_WRAPPER(pthread_attr_getschedpolicy, (pthread_attr_t const *attr, int *policy),
+                (attr, policy), "(attr:%p, policy:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setschedparam,
+                (pthread_attr_t *attr, struct sched_param const *param), (attr, param),
+                "(attr:%p, param:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_getschedparam,
+                (pthread_attr_t const *attr, struct sched_param *param), (attr, param),
+                "(attr:%p, param:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setstacksize, (pthread_attr_t *attr, size_t stack_size),
+                (attr, stack_size), "(attr:%p, stack_size:%d)");
+
+PTHREAD_WRAPPER(pthread_attr_getstacksize, (pthread_attr_t const *attr, size_t *stack_size),
+                (attr, stack_size), "(attr:%p, stack_size:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setstack, (pthread_attr_t *attr, void *stackaddr, size_t stack_size),
+                (attr, stackaddr, stack_size), "(attr:%p, stackaddr:%p, stack_size:%d)");
+
+PTHREAD_WRAPPER(pthread_attr_getstack, (pthread_attr_t const *attr, void **stackaddr,
+                size_t *stack_size), (attr, stackaddr, stack_size),
+                "(attr:%p, stackaddr:%p stack_size:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setguardsize, (pthread_attr_t *attr, size_t guard_size),
+                (attr, guard_size), "(attr:%p, guard_size:%d)");
+
+PTHREAD_WRAPPER(pthread_attr_getguardsize, (pthread_attr_t const *attr, size_t *guard_size),
+                (attr, guard_size), "(attr:%p, guard_size:%p)");
+
+PTHREAD_WRAPPER(pthread_attr_setscope, (pthread_attr_t *attr, int scope), (attr, scope),
+                "(attr:%p, scope:%d)");
+
+PTHREAD_WRAPPER(pthread_attr_getscope, (pthread_attr_t const *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_getattr_np, (pthread_t thid, pthread_attr_t *attr), (thid, attr),
+                "(thid:%lx, attr:%p)");
+
+PTHREAD_WRAPPER(pthread_create, (pthread_t *thread, const pthread_attr_t *attr,
+                void *(*start_routine) (void *), void *arg),
+                (thread, attr, start_routine, arg),
+                "(thread:%p attr:%p, start_routine:%p, arg:%p)");
+
+// void pthread_exit(void * retval);
+PTHREAD_WRAPPER(pthread_join, (pthread_t thid, void **ret_val), (thid, ret_val),
+                "(thid:%lx, ret_val:%p)");
+
+PTHREAD_WRAPPER(pthread_detach, (pthread_t thid), (thid), "(thid:%lx)");
+
+// pthread_t pthread_self(void);
+// int pthread_equal(pthread_t one, pthread_t two);
+
+PTHREAD_WRAPPER(pthread_getschedparam, (pthread_t thid, int *policy, struct sched_param *param),
+                (thid, policy, param), "(thid:%lx, policy:%p, param:%p)");
+
+PTHREAD_WRAPPER(pthread_setschedparam, (pthread_t thid, int policy,
+                struct sched_param const *param), (thid, policy, param),
+                "(thid:%lx, policy:%d, param:%p)");
+
+PTHREAD_WRAPPER(pthread_mutexattr_init, (pthread_mutexattr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_mutexattr_destroy, (pthread_mutexattr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_mutexattr_gettype, (const pthread_mutexattr_t *attr, int *type),
+                (attr, type), "(attr:%p, type:%p)");
+
+PTHREAD_WRAPPER(pthread_mutexattr_settype, (pthread_mutexattr_t *attr, int type), (attr, type),
+                "(attr:%p, type:%d)");
+
+PTHREAD_WRAPPER(pthread_mutexattr_setpshared, (pthread_mutexattr_t *attr, int pshared),
+                (attr, pshared), "(attr:%p, pshared:%d)");
+
+PTHREAD_WRAPPER(pthread_mutexattr_getpshared, (pthread_mutexattr_t *attr, int *pshared),
+                (attr, pshared), "(attr:%p, pshared:%p)");
+
+PTHREAD_WRAPPER(pthread_mutex_init, (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr),
+                (mutex, attr), "(mutex:%p, attr:%p)");
+
+PTHREAD_WRAPPER(pthread_mutex_destroy, (pthread_mutex_t *mutex), (mutex), "(mutex:%p)");
+
+PTHREAD_WRAPPER(pthread_mutex_lock, (pthread_mutex_t *mutex), (mutex), "(mutex:%p)");
+
+PTHREAD_WRAPPER(pthread_mutex_unlock, (pthread_mutex_t *mutex), (mutex), "(mutex:%p)");
+
+PTHREAD_WRAPPER(pthread_mutex_trylock, (pthread_mutex_t *mutex), (mutex), "(mutex:%p)");
+
+#if 0 /* MISSING FROM BIONIC */
+PTHREAD_WRAPPER(pthread_mutex_timedlock, (pthread_mutex_t *mutex, struct timespec *ts),
+                (mutex, ts), "(mutex:%p, ts:%p)");
+#endif /* MISSING */
+
+PTHREAD_WRAPPER(pthread_condattr_init, (pthread_condattr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_condattr_getpshared, (pthread_condattr_t *attr, int *pshared),
+                (attr, pshared), "(attr:%p, pshared:%p)");
+
+PTHREAD_WRAPPER(pthread_condattr_setpshared, (pthread_condattr_t* attr, int pshared),
+                (attr, pshared), "(attr:%p, pshared:%d)");
+
+PTHREAD_WRAPPER(pthread_condattr_destroy, (pthread_condattr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_init, (pthread_cond_t *cond, const pthread_condattr_t *attr),
+                (cond, attr), "(cond:%p, attr:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_destroy, (pthread_cond_t *cond), (cond), "(cond:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_broadcast, (pthread_cond_t *cond), (cond), "(cond:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_signal, (pthread_cond_t *cond), (cond), "(cond:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_wait, (pthread_cond_t *cond, pthread_mutex_t *mutex),
+                (cond, mutex), "(cond:%p, mutex:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_timedwait, (pthread_cond_t *cond, pthread_mutex_t *mutex,
+                const struct timespec *abstime), (cond, mutex, abstime),
+                "(cond:%p, mutex:%p, abstime:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_timedwait_monotonic_np, (pthread_cond_t *cond,
+                pthread_mutex_t *mutex, const struct timespec *abstime),
+                (cond, mutex, abstime), "(cond:%p, mutex:%p, abstime:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_timedwait_monotonic, (pthread_cond_t *cond, pthread_mutex_t
+                *mutex, const struct timespec *abstime),
+                (cond, mutex, abstime), "(cond:%p, mutex:%p, abstime:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_timedwait_relative_np, (pthread_cond_t *cond, pthread_mutex_t *mutex,
+                const struct timespec *reltime), (cond, mutex, reltime),
+                "(cond:%p, mutex:%p, reltime:%p)");
+
+PTHREAD_WRAPPER(pthread_cond_timeout_np, (pthread_cond_t *cond, pthread_mutex_t *mutex,
+                unsigned msecs), (cond, mutex, msecs), "(cond:%p, mutex:%p, msecs:%u)");
+
+PTHREAD_WRAPPER(pthread_mutex_lock_timeout_np, (pthread_mutex_t *mutex, unsigned msecs),
+                (mutex, msecs), "(mutex:%p, msecs:%u)");
+
+PTHREAD_WRAPPER(pthread_rwlockattr_init, (pthread_rwlockattr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlockattr_destroy, (pthread_rwlockattr_t *attr), (attr), "(attr:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlockattr_setpshared, (pthread_rwlockattr_t *attr, int  pshared),
+                (attr, pshared), "(attr:%p, pshared:%d)");
+
+PTHREAD_WRAPPER(pthread_rwlockattr_getpshared, (pthread_rwlockattr_t *attr, int *pshared),
+                (attr, pshared), "(attr:%p, pshared:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_init, (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr),
+                (rwlock, attr), "(rwlock:%p, attr:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_destroy, (pthread_rwlock_t *rwlock), (rwlock), "(rwlock:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_rdlock, (pthread_rwlock_t *rwlock), (rwlock), "(rwlock:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_tryrdlock, (pthread_rwlock_t *rwlock), (rwlock), "(rwlock:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_timedrdlock, (pthread_rwlock_t *rwlock,
+                const struct timespec *abs_timeout),
+                (rwlock, abs_timeout), "(rwlock:%p, abs_timeout:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_wrlock, (pthread_rwlock_t *rwlock), (rwlock), "(rwlock:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_trywrlock, (pthread_rwlock_t *rwlock), (rwlock), "(rwlock:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_timedwrlock, (pthread_rwlock_t *rwlock,
+                const struct timespec *abs_timeout), (rwlock, abs_timeout),
+                "(rwlock:%p, abs_timeout:%p)");
+
+PTHREAD_WRAPPER(pthread_rwlock_unlock, (pthread_rwlock_t *rwlock), (rwlock), "(rwlock:%p)");
+
+PTHREAD_WRAPPER(pthread_key_create, (pthread_key_t *key, void (*destructor_function)(void *)),
+                (key, destructor_function), "(key:%p, destructor_function:%p)");
+
+PTHREAD_WRAPPER(pthread_key_delete , (pthread_key_t key), (key), "(key:%x)");
+
+PTHREAD_WRAPPER(pthread_setspecific, (pthread_key_t key, const void *value), (key, value),
+                "(key:%x, value:%p)");
+
+// void *pthread_getspecific(pthread_key_t key);
+
+int WRAP(pthread_kill)(pthread_t thread, int portable_signum)
+{
+    char *portable_signame = map_portable_signum_to_name(portable_signum);
+    int mips_signum;
+    int portable_ret, ret;
+
+    ALOGV("%s(thread:%lx, portable_signum:%d)", __func__, thread, portable_signum);
+
+    mips_signum = signum_pton(portable_signum);
+
+    if ((portable_signum != 0) && (mips_signum == 0)) {
+        /* A signal MIPS doesn't support; all we can do is ignore it. */
+        ret = 0;
+    } else {
+        ALOGV("%s: calling pthread_kill(thread:%lx, mips_signum:%d);", __func__,
+                                        thread,     mips_signum);
+        ret = REAL(pthread_kill)(thread, mips_signum);
+    }
+    portable_ret = errno_ntop(ret);
+
+    ALOGV("%s: return portable_ret:%d; ret:%d;", __func__,
+                      portable_ret,    ret);
+
+    return portable_ret;
+}
+
+int WRAP(pthread_sigmask)(int portable_how, const sigset_portable_t *portable_sigset,
+                             sigset_portable_t *portable_oldset)
+{
+    int portable_ret, ret;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_how:%d portable_sigset:%p, portable_oldset:%p)", __func__,
+              portable_how,   portable_sigset,    portable_oldset);
+
+    ret = do_sigmask(portable_how, portable_sigset, portable_oldset, pthread_sigmask, NULL);
+
+    portable_ret = errno_ntop(ret);
+
+    ALOGV("%s: return portable_ret:%d; ret:%d;", __func__,
+                      portable_ret,    ret);
+
+    return portable_ret;
+}
+
+PTHREAD_WRAPPER(pthread_getcpuclockid, (pthread_t tid, clockid_t *clockid), (tid, clockid),
+                "(tid:%lx, clockid:%p)");
+
+PTHREAD_WRAPPER(pthread_once, (pthread_once_t *once_control, void (*init_routine)(void)),
+                (once_control, init_routine), "(once_control:%p, init_routine:%p)");
+
+PTHREAD_WRAPPER(pthread_setname_np, (pthread_t thid, const char *thname), (thid, thname),
+                "(thid:%lx, thname:\"%s\")");
diff --git a/ndk/sources/android/libportable/arch-mips/resource.c b/ndk/sources/android/libportable/arch-mips/resource.c
index 4119e79..91b473d 100644
--- a/ndk/sources/android/libportable/arch-mips/resource.c
+++ b/ndk/sources/android/libportable/arch-mips/resource.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <sys/resource.h>
 #include <resource_portable.h>
 
@@ -38,14 +39,14 @@
     return resource;
 }
 
-extern int getrlimit(int resource, struct rlimit *rlp);
-int getrlimit_portable(int resource, struct rlimit *rlp)
+extern int REAL(getrlimit)(int resource, struct rlimit *rlp);
+int WRAP(getrlimit)(int resource, struct rlimit *rlp)
 {
-    return getrlimit(mips_change_resource(resource), rlp);
+    return REAL(getrlimit)(mips_change_resource(resource), rlp);
 }
 
-extern int setrlimit(int resource, const struct rlimit *rlp);
-int setrlimit_portable(int resource, const struct rlimit *rlp)
+extern int REAL(setrlimit)(int resource, const struct rlimit *rlp);
+int WRAP(setrlimit)(int resource, const struct rlimit *rlp)
 {
-    return setrlimit(mips_change_resource(resource), rlp);
+    return REAL(setrlimit)(mips_change_resource(resource), rlp);
 }
diff --git a/ndk/sources/android/libportable/arch-mips/setjmp.S b/ndk/sources/android/libportable/arch-mips/setjmp.S
new file mode 100644
index 0000000..1532972
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/setjmp.S
@@ -0,0 +1,218 @@
+/* Derived from: $OpenBSD: setjmp.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */
+
+/*
+ * Copyright (c) 2001-2002 Opsycon AB  (www.opsycon.se / www.opsycon.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Opsycon AB nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include <asm-generic/portability.h>
+#include <machine/asm.h>
+#include <machine/regnum.h>
+
+#include "jboffsets.h"
+
+/*
+ * setjmp, longjmp implementation for libc.
+ */
+
+FRAMESZ= MKFSIZ(2,6)
+A1OFF= FRAMESZ-4*REGSZ
+A0OFF= FRAMESZ-3*REGSZ
+GPOFF= FRAMESZ-2*REGSZ
+RAOFF= FRAMESZ-1*REGSZ
+
+#define FPREG64_S(FPR, OFF, BASE)       \
+        swc1    FPR, OFF(BASE)  ;       \
+        mfhc1   t0, FPR         ;       \
+        sw      t0, OFF+4(BASE) ;
+
+#define FPREG64_L(FPR, OFF, BASE)       \
+        lw      t0, OFF+4(BASE) ;       \
+        lw      t1, OFF(BASE)   ;       \
+        mtc1    t1, FPR         ;       \
+        mthc1   t0, FPR         ;       \
+
+
+
+NON_LEAF(WRAP(setjmp), FRAMESZ, ra)
+        .mask   0x80000000, RAOFF
+        PTR_SUBU sp, FRAMESZ                    # allocate stack frame
+        SETUP_GP64(GPOFF, WRAP(setjmp))
+        SAVE_GP(GPOFF)
+        .set    reorder
+        REG_S   ra, RAOFF(sp)                   # save state
+        REG_S   a0, A0OFF(sp)
+
+        move    a0, zero                        # get current signal mask
+        jal     sigblock
+
+        REG_L   v1, A0OFF(sp)                   # v1 = jmpbuf
+        REG_S   v0, JB_MASK(v1)                 # save sc_mask = sigblock(0)
+
+        REG_L   a0, A0OFF(sp)                   # restore jmpbuf
+        REG_L   ra, RAOFF(sp)
+        REG_S   ra, JB_PC(a0)                   # sc_pc = return address
+#if defined(__mips64)
+        dli     v0, MAGIC_SETJMP
+#else
+        li      v0, MAGIC_SETJMP
+#endif
+        REG_S   v0, JB_MAGIC(a0)
+        REG_S   s0, JB_S0(a0)
+        REG_S   s1, JB_S1(a0)
+        REG_S   s2, JB_S2(a0)
+        REG_S   s3, JB_S3(a0)
+        REG_S   s4, JB_S4(a0)
+        REG_S   s5, JB_S5(a0)
+        REG_S   s6, JB_S6(a0)
+        REG_S   s7, JB_S7(a0)
+        REG_S   s8, JB_S8(a0)
+        REG_L   v0, GPOFF(sp)
+        REG_S   v0, JB_GP(a0)
+        PTR_ADDU v0, sp, FRAMESZ
+        REG_S   v0, JB_SP(a0)
+
+#if !defined(SOFTFLOAT)
+        /*
+         * Would be nice if we could tell if the FP registers are currently being used.
+         * Assume they are, and use pointer to jmp_buf in a0 to save FP registers and the
+         * jmp_buf.fpused flag.
+         */
+        li      v0, 1                           # v0 = 1
+        REG_S   v0, JB_FPUSED(a0)               # a0->jb_fpused = v0:1
+        cfc1    v0, $31
+#if _MIPS_FPSET == 32
+        FPREG64_S($f20, JB_F20, a0)
+        FPREG64_S($f21, JB_F21, a0)
+        FPREG64_S($f22, JB_F22, a0)
+        FPREG64_S($f23, JB_F23, a0)
+        FPREG64_S($f24, JB_F24, a0)
+        FPREG64_S($f25, JB_F25, a0)
+        FPREG64_S($f26, JB_F26, a0)
+        FPREG64_S($f27, JB_F27, a0)
+        FPREG64_S($f28, JB_F28, a0)
+        FPREG64_S($f29, JB_F29, a0)
+        FPREG64_S($f30, JB_F30, a0)
+        FPREG64_S($f31, JB_F31, a0)
+#else
+        swc1    $f20, JB_F20(a0)
+        swc1    $f21, JB_F21(a0)
+        swc1    $f22, JB_F22(a0)
+        swc1    $f23, JB_F23(a0)
+        swc1    $f24, JB_F24(a0)
+        swc1    $f25, JB_F25(a0)
+        swc1    $f26, JB_F26(a0)
+        swc1    $f27, JB_F27(a0)
+        swc1    $f28, JB_F28(a0)
+        swc1    $f29, JB_F29(a0)
+        swc1    $f30, JB_F30(a0)
+        swc1    $f31, JB_F31(a0)
+#endif
+        REG_S   v0, JB_FSR(a0)
+#endif /* !SOFTFLOAT */
+        move    v0, zero
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+        j       ra
+
+botch:
+        jal     longjmperror
+        jal     abort
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+END(WRAP(setjmp))
+
+
+LEAF(WRAP(longjmp), FRAMESZ)
+        PTR_SUBU sp, FRAMESZ
+        SETUP_GP64(GPOFF, WRAP(longjmp))
+        SAVE_GP(GPOFF)
+        .set    reorder
+        sw      a1, A1OFF(sp)
+        sw      a0, A0OFF(sp)
+
+        lw      a0, JB_MASK(a0)
+        jal     sigsetmask
+
+        lw      a0, A0OFF(sp)
+        lw      a1, A1OFF(sp)
+
+        .set    noreorder
+        REG_L   v0, JB_MAGIC(a0)
+        bne     v0, MAGIC_SETJMP, botch         # jump if error
+        REG_L   ra, JB_PC(a0)
+        REG_L   s0, JB_S0(a0)
+        REG_L   s1, JB_S1(a0)
+        REG_L   s2, JB_S2(a0)
+        REG_L   s3, JB_S3(a0)
+        REG_L   s4, JB_S4(a0)
+        REG_L   s5, JB_S5(a0)
+        REG_L   s6, JB_S6(a0)
+        REG_L   s7, JB_S7(a0)
+        REG_L   s8, JB_S8(a0)
+        REG_L   gp, JB_GP(a0)
+        REG_L   sp, JB_SP(a0)
+
+#if !defined(SOFTFLOAT)
+        REG_L   v0, JB_FSR(a0)
+        ctc1    v0, $31
+#if _MIPS_FPSET == 32
+        FPREG64_L($f20, JB_F20, a0)
+        FPREG64_L($f21, JB_F21, a0)
+        FPREG64_L($f22, JB_F22, a0)
+        FPREG64_L($f23, JB_F23, a0)
+        FPREG64_L($f24, JB_F24, a0)
+        FPREG64_L($f25, JB_F25, a0)
+        FPREG64_L($f26, JB_F26, a0)
+        FPREG64_L($f27, JB_F27, a0)
+        FPREG64_L($f28, JB_F28, a0)
+        FPREG64_L($f29, JB_F29, a0)
+        FPREG64_L($f30, JB_F30, a0)
+        FPREG64_L($f31, JB_F31, a0)
+#else
+        lwc1    $f20, JB_F20(a0)
+        lwc1    $f21, JB_F21(a0)
+        lwc1    $f22, JB_F22(a0)
+        lwc1    $f23, JB_F23(a0)
+        lwc1    $f24, JB_F24(a0)
+        lwc1    $f25, JB_F25(a0)
+        lwc1    $f26, JB_F26(a0)
+        lwc1    $f27, JB_F27(a0)
+        lwc1    $f28, JB_F28(a0)
+        lwc1    $f29, JB_F29(a0)
+        lwc1    $f30, JB_F30(a0)
+        lwc1    $f31, JB_F31(a0)
+#endif
+#endif /* !SOFTFLOAT */
+        bne     a1, zero, 1f
+         nop
+        li      a1, 1                   # never return 0!
+1:
+        j       ra
+         move   v0, a1
+
+END(WRAP(longjmp))
diff --git a/ndk/sources/android/libportable/arch-mips/signal.c b/ndk/sources/android/libportable/arch-mips/signal.c
new file mode 100644
index 0000000..4d2d258
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/signal.c
@@ -0,0 +1,1772 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <signal_portable.h>
+#include <portability.h>
+#include <stdio.h>
+#include <errno.h>
+#include <errno_portable.h>
+#include <asm/unistd-portable.h>
+#include <asm/unistd.h>
+#include <signalfd_portable.h>
+#include <filefd_portable.h>
+
+#define PORTABLE_TAG "signal_portable"
+#include <log_portable.h>
+
+
+#if SIGBUS_PORTABLE == SIGBUS
+#error Bad build environment
+#endif
+
+typedef void  (*sig3handler_t)(int, siginfo_t *, void *);
+
+static volatile int signal_handler_mapping_enabled = 1;
+
+extern int syscall(int, ...);
+
+
+__hidden void signal_disable_mapping()
+{
+    ALOGV("%s(): signal_handler_mapping_enabled:%d = 0;", __func__,
+                 signal_handler_mapping_enabled);
+
+    signal_handler_mapping_enabled = 0;
+}
+
+
+/*
+ * The next five hidden functions are not exposed in the
+ * libportable shared object. They are used here and other
+ * functions, like waitpid(), which need to map signal numbers.
+ */
+__hidden char *map_portable_signum_to_name(int portable_signum)
+{
+    char *name;
+
+    switch(portable_signum) {
+    case SIGHUP_PORTABLE:       name = "SIGHUP_PORTABLE:1";             break;
+    case SIGINT_PORTABLE:       name = "SIGINT_PORTABLE:2";             break;
+    case SIGQUIT_PORTABLE:      name = "SIGQUIT_PORTABLE:3";            break;
+    case SIGILL_PORTABLE:       name = "SIGILL_PORTABLE:4";             break;
+    case SIGTRAP_PORTABLE:      name = "SIGTRAP_PORTABLE:5";            break;
+    case SIGABRT_PORTABLE:      name = "SIGABRT_PORTABLE:6";            break;
+    case SIGBUS_PORTABLE:       name = "SIGBUS_PORTABLE:7";             break;
+    case SIGFPE_PORTABLE:       name = "SIGFPE_PORTABLE:8";             break;
+    case SIGKILL_PORTABLE:      name = "SIGKILL_PORTABLE:9";            break;
+    case SIGUSR1_PORTABLE:      name = "SIGUSR1_PORTABLE:10";           break;
+    case SIGSEGV_PORTABLE:      name = "SIGSEGV_PORTABLE:11";           break;
+    case SIGUSR2_PORTABLE:      name = "SIGUSR2_PORTABLE:12";           break;
+    case SIGPIPE_PORTABLE:      name = "SIGPIPE_PORTABLE:13";           break;
+    case SIGALRM_PORTABLE:      name = "SIGALRM_PORTABLE:14";           break;
+    case SIGTERM_PORTABLE:      name = "SIGTERM_PORTABLE:15";           break;
+    case SIGSTKFLT_PORTABLE:    name = "SIGSTKFLT_PORTABLE:16";         break;
+    case SIGCHLD_PORTABLE:      name = "SIGCHLD_PORTABLE:17";           break;
+    case SIGCONT_PORTABLE:      name = "SIGCONT_PORTABLE:18";           break;
+    case SIGSTOP_PORTABLE:      name = "SIGSTOP_PORTABLE:19";           break;
+    case SIGTSTP_PORTABLE:      name = "SIGTSTP_PORTABLE:20";           break;
+    case SIGTTIN_PORTABLE:      name = "SIGTTIN_PORTABLE:21";           break;
+    case SIGTTOU_PORTABLE:      name = "SIGTTOU_PORTABLE:22";           break;
+    case SIGURG_PORTABLE:       name = "SIGURG_PORTABLE:23";            break;
+    case SIGXCPU_PORTABLE:      name = "SIGXCPU_PORTABLE:24";           break;
+    case SIGXFSZ_PORTABLE:      name = "SIGXFSZ_PORTABLE:25";           break;
+    case SIGVTALRM_PORTABLE:    name = "SIGVTALRM_PORTABLE:26";         break;
+    case SIGPROF_PORTABLE:      name = "SIGPROF_PORTABLE:27";           break;
+    case SIGWINCH_PORTABLE:     name = "SIGWINCH_PORTABLE:28";          break;
+    case SIGIO_PORTABLE:        name = "SIGIO_PORTABLE:29";             break;
+    case SIGPWR_PORTABLE:       name = "SIGPWR_PORTABLE:30";            break;
+    case SIGSYS_PORTABLE:       name = "SIGSYS_PORTABLE:31";            break;
+    case SIGRTMIN_PORTABLE:     name = "SIGRTMIN_PORTABLE:32";          break;
+
+    case SIGRT_1_PORTABLE:      name = "SIGRT_1_PORTABLE:33";           break;
+    case SIGRT_2_PORTABLE:      name = "SIGRT_2_PORTABLE:34";           break;
+    case SIGRT_3_PORTABLE:      name = "SIGRT_3_PORTABLE:35";           break;
+    case SIGRT_4_PORTABLE:      name = "SIGRT_4_PORTABLE:36";           break;
+    case SIGRT_5_PORTABLE:      name = "SIGRT_5_PORTABLE:37";           break;
+    case SIGRT_6_PORTABLE:      name = "SIGRT_6_PORTABLE:38";           break;
+    case SIGRT_7_PORTABLE:      name = "SIGRT_7_PORTABLE:39";           break;
+    case SIGRT_8_PORTABLE:      name = "SIGRT_8_PORTABLE:40";           break;
+    case SIGRT_9_PORTABLE:      name = "SIGRT_9_PORTABLE:41";           break;
+    case SIGRT_10_PORTABLE:     name = "SIGRT_10_PORTABLE:42";          break;
+    case SIGRT_11_PORTABLE:     name = "SIGRT_11_PORTABLE:43";          break;
+    case SIGRT_12_PORTABLE:     name = "SIGRT_12_PORTABLE:44";          break;
+    case SIGRT_13_PORTABLE:     name = "SIGRT_13_PORTABLE:45";          break;
+    case SIGRT_14_PORTABLE:     name = "SIGRT_14_PORTABLE:46";          break;
+    case SIGRT_15_PORTABLE:     name = "SIGRT_15_PORTABLE:47";          break;
+    case SIGRT_16_PORTABLE:     name = "SIGRT_16_PORTABLE:48";          break;
+    case SIGRT_17_PORTABLE:     name = "SIGRT_17_PORTABLE:49";          break;
+    case SIGRT_18_PORTABLE:     name = "SIGRT_18_PORTABLE:50";          break;
+    case SIGRT_19_PORTABLE:     name = "SIGRT_19_PORTABLE:51";          break;
+    case SIGRT_20_PORTABLE:     name = "SIGRT_20_PORTABLE:52";          break;
+    case SIGRT_21_PORTABLE:     name = "SIGRT_21_PORTABLE:53";          break;
+    case SIGRT_22_PORTABLE:     name = "SIGRT_22_PORTABLE:54";          break;
+    case SIGRT_23_PORTABLE:     name = "SIGRT_23_PORTABLE:55";          break;
+    case SIGRT_24_PORTABLE:     name = "SIGRT_24_PORTABLE:56";          break;
+    case SIGRT_25_PORTABLE:     name = "SIGRT_25_PORTABLE:57";          break;
+    case SIGRT_26_PORTABLE:     name = "SIGRT_26_PORTABLE:58";          break;
+    case SIGRT_27_PORTABLE:     name = "SIGRT_27_PORTABLE:59";          break;
+    case SIGRT_28_PORTABLE:     name = "SIGRT_28_PORTABLE:60";          break;
+    case SIGRT_29_PORTABLE:     name = "SIGRT_29_PORTABLE:61";          break;
+    case SIGRT_30_PORTABLE:     name = "SIGRT_30_PORTABLE:62";          break;
+    case SIGRT_31_PORTABLE:     name = "SIGRT_31_PORTABLE:63";          break;
+    case SIGRTMAX_PORTABLE:     name = "SIGRTMAX_PORTABLE:64";          break;
+
+    default:                    name = "<<UNKNOWN>>";                   break;
+    }
+    return name;
+}
+
+
+__hidden char *map_mips_signum_to_name(int mips_signum)
+{
+    char *name;
+
+    switch(mips_signum) {
+    case SIGHUP:        name = "SIGHUP:1";      break;
+    case SIGINT:        name = "SIGINT:2";      break;
+    case SIGQUIT:       name = "SIGQUIT:3";     break;
+    case SIGILL:        name = "SIGILL:4";      break;
+    case SIGTRAP:       name = "SIGTRAP:5";     break;
+    case SIGIOT:        name = "SIGIOT:6";      break;
+    case SIGEMT:        name = "SIGEMT:7";      break;
+    case SIGFPE:        name = "SIGFPE:8";      break;
+    case SIGKILL:       name = "SIGKILL:9";     break;
+    case SIGBUS:        name = "SIGBUS:10";     break;
+    case SIGSEGV:       name = "SIGSEGV:11";    break;
+    case SIGSYS:        name = "SIGSYS:12";     break;
+    case SIGPIPE:       name = "SIGPIPE:13";    break;
+    case SIGALRM:       name = "SIGALRM:14";    break;
+    case SIGTERM:       name = "SIGTERM:15";    break;
+    case SIGUSR1:       name = "SIGUSR1:16";    break;
+    case SIGUSR2:       name = "SIGUSR2:17";    break;
+    case SIGCHLD:       name = "SIGCHLD:18";    break;
+    case SIGPWR:        name = "SIGPWR:19";     break;
+    case SIGWINCH:      name = "SIGWINCH:20";   break;
+    case SIGURG:        name = "SIGURG:21";     break;
+    case SIGIO:         name = "SIGIO:22";      break;
+    case SIGSTOP:       name = "SIGSTOP:23";    break;
+    case SIGTSTP:       name = "SIGTSTP:24";    break;
+    case SIGCONT:       name = "SIGCONT:25";    break;
+    case SIGTTIN:       name = "SIGTTIN:26";    break;
+    case SIGTTOU:       name = "SIGTTOU:27";    break;
+    case SIGVTALRM:     name = "SIGVTALRM:28";  break;
+    case SIGPROF:       name = "SIGPROF:29";    break;
+    case SIGXCPU:       name = "SIGXCPU:30";    break;
+    case SIGXFSZ:       name = "SIGXFSZ:31";    break;
+
+    case SIGRTMIN:      name = "SIGRTMIN:32";   break;
+    case SIGRT_1:       name = "SIGRT_1:33";    break;
+    case SIGRT_2:       name = "SIGRT_2:34";    break;
+    case SIGRT_3:       name = "SIGRT_3:35";    break;
+    case SIGRT_4:       name = "SIGRT_4:36";    break;
+    case SIGRT_5:       name = "SIGRT_5:37";    break;
+    case SIGRT_6:       name = "SIGRT_6:38";    break;
+    case SIGRT_7:       name = "SIGRT_7:39";    break;
+    case SIGRT_8:       name = "SIGRT_8:40";    break;
+    case SIGRT_9:       name = "SIGRT_9:41";    break;
+    case SIGRT_10:      name = "SIGRT_10:42";   break;
+    case SIGRT_11:      name = "SIGRT_11:43";   break;
+    case SIGRT_12:      name = "SIGRT_12:44";   break;
+    case SIGRT_13:      name = "SIGRT_13:45";   break;
+    case SIGRT_14:      name = "SIGRT_14:46";   break;
+    case SIGRT_15:      name = "SIGRT_15:47";   break;
+    case SIGRT_16:      name = "SIGRT_16:48";   break;
+    case SIGRT_17:      name = "SIGRT_17:49";   break;
+    case SIGRT_18:      name = "SIGRT_18:50";   break;
+    case SIGRT_19:      name = "SIGRT_19:51";   break;
+    case SIGRT_20:      name = "SIGRT_20:52";   break;
+    case SIGRT_21:      name = "SIGRT_21:53";   break;
+    case SIGRT_22:      name = "SIGRT_22:54";   break;
+    case SIGRT_23:      name = "SIGRT_23:55";   break;
+    case SIGRT_24:      name = "SIGRT_24:56";   break;
+    case SIGRT_25:      name = "SIGRT_25:57";   break;
+    case SIGRT_26:      name = "SIGRT_26:58";   break;
+    case SIGRT_27:      name = "SIGRT_27:59";   break;
+    case SIGRT_28:      name = "SIGRT_28:60";   break;
+    case SIGRT_29:      name = "SIGRT_29:61";   break;
+    case SIGRT_30:      name = "SIGRT_30:62";   break;
+    case SIGRT_31:      name = "SIGRT_31:63";   break;
+    case SIGRT_32:      name = "SIGRT_32:64";   break;
+
+    /* NOTE: SIGRT_33...SIGRTMAX-1 Not printed */
+
+    case SIGRTMAX:      name = "SIGRTMAX:128";  break;
+    default:            name = "<<UNKNOWN>>";   break;
+    }
+    return name;
+}
+
+
+/*
+ * Maps a signal number from portable to native.
+ */
+__hidden int signum_pton(int portable_signum)
+{
+    int mips_signum = -1;
+
+    switch(portable_signum) {
+    case SIGHUP_PORTABLE:               /* 1 */
+        return SIGHUP;
+
+    case SIGINT_PORTABLE:               /* 2 */
+        return SIGINT;
+
+    case SIGQUIT_PORTABLE:              /* 3 */
+        return SIGQUIT;
+
+    case SIGILL_PORTABLE:               /* 4 */
+        return SIGILL;
+
+    case SIGTRAP_PORTABLE:              /* 5 */
+        return SIGTRAP;
+
+    case SIGABRT_PORTABLE:              /* 6 */
+        return SIGABRT;
+
+    case SIGBUS_PORTABLE:               /* 7 --> 10 */
+        return SIGBUS;
+
+    case SIGFPE_PORTABLE:               /* 8 */
+        return SIGFPE;
+
+    case SIGKILL_PORTABLE:              /* 9 */
+        return SIGKILL;
+
+    case SIGUSR1_PORTABLE:              /* 10 --> 16 */
+        return SIGUSR1;
+
+    case SIGSEGV_PORTABLE:              /* 11 */
+        return SIGSEGV;
+
+    case SIGUSR2_PORTABLE:              /* 12 --> 17 */
+        return SIGUSR2;
+
+    case SIGPIPE_PORTABLE:              /* 13 */
+        return SIGPIPE;
+
+    case SIGALRM_PORTABLE:              /* 14 */
+        return SIGALRM;
+
+    case SIGTERM_PORTABLE:              /* 15 */
+        return SIGTERM;
+
+    case SIGSTKFLT_PORTABLE:            /* 16 --> 7 */
+        return SIGEMT;                  /* No native SIGSTKFLT exist  ...
+                                           ... mapping it to SIGEMT. */
+
+    case SIGCHLD_PORTABLE:              /* 17 --> 18 */
+        return SIGCHLD;
+
+    case SIGCONT_PORTABLE:              /* 18 --> 25 */
+        return SIGCONT;
+
+    case SIGSTOP_PORTABLE:              /* 19 --> 23 */
+        return SIGSTOP;
+
+    case SIGTSTP_PORTABLE:              /* 20 --> 24 */
+        return SIGTSTP;
+
+    case SIGTTIN_PORTABLE:              /* 21 --> 26 */
+        return SIGTTIN;
+
+    case SIGTTOU_PORTABLE:              /* 22 --> 27 */
+        return SIGTTOU;
+
+    case SIGURG_PORTABLE:               /* 23 --> 21 */
+        return SIGURG;
+
+    case SIGXCPU_PORTABLE:              /* 24 --> 30 */
+        return SIGXCPU;
+
+    case SIGXFSZ_PORTABLE:              /* 25 --> 31 */
+        return SIGXFSZ;
+
+    case SIGVTALRM_PORTABLE:            /* 26 --> 28 */
+        return SIGVTALRM;
+
+    case SIGPROF_PORTABLE:              /* 27 --> 29 */
+        return SIGPROF;
+
+    case SIGWINCH_PORTABLE:             /* 28 --> 20 */
+        return SIGWINCH;
+
+    case SIGIO_PORTABLE:                /* 29 --> 22 */
+        return SIGIO;
+
+    case SIGPWR_PORTABLE:               /* 30 --> 19 */
+        return SIGPWR;
+
+    case SIGSYS_PORTABLE:               /* 31 --> 12 */
+        return SIGSYS;
+    /*
+     * Mapping lower 32 Real Time signals to identical Native signal numbers.
+     * NOTE: SIGRTMAX_PORTABLE == 64 but SIGRTMAX == 128.
+     */
+    case SIGRTMIN_PORTABLE...SIGRTMAX_PORTABLE:         /* 32 ... 64 */
+        ASSERT(SIGRTMIN_PORTABLE == SIGRTMIN);
+        ASSERT(SIGRTMAX_PORTABLE <= SIGRTMAX);
+        return portable_signum;
+
+    default:
+        ALOGE("%s: switch default: NOTE portable_signum:%d Not supported. Just a Test?",
+              __func__,                 portable_signum);
+        /*
+         * User could be LTP testing with bogus signal numbers,
+         * if so we mimic the test.
+         *
+         * If the signal is just outside the PORTABLE range
+         * we use a signal just outside the Native/MIPS range.
+         */
+        if (portable_signum < 0) {
+            mips_signum = portable_signum;
+        } else if (portable_signum > NSIG_PORTABLE) {
+            mips_signum = (portable_signum - NSIG_PORTABLE) +  NSIG;
+        } else {
+            ALOGE("%s: 0 <= portable_signum:%d <= NSIG_PORTABLE:%d; Not supported, return(0);",
+                  __func__, portable_signum,      NSIG_PORTABLE);
+
+            mips_signum = 0;
+        }
+        break;
+    }
+    ALOGV("%s(portable_signum:%d): return(mips_signum:%d);", __func__,
+              portable_signum,            mips_signum);
+
+    return mips_signum;
+}
+
+
+/*
+ * Maps a signal number from native to portable.
+ */
+__hidden int signum_ntop(int mips_signum)
+{
+    int portable_ssignum = -1;
+
+    switch(mips_signum) {
+    case SIGHUP:                        /* 1 */
+        return SIGHUP_PORTABLE;
+
+    case SIGINT:                        /* 2 */
+        return SIGINT_PORTABLE;
+
+    case SIGQUIT:                       /* 3 */
+        return SIGQUIT_PORTABLE;
+
+    case SIGILL:                        /* 4 */
+        return SIGILL_PORTABLE;
+
+    case SIGTRAP:                       /* 5 */
+        return SIGTRAP_PORTABLE;
+
+    case SIGABRT:                       /* 6 */
+        return SIGABRT_PORTABLE;
+
+    case SIGBUS:                        /* 7 <-- 10 */
+        return SIGBUS_PORTABLE;
+
+    case SIGFPE:                        /* 8 */
+        return SIGFPE_PORTABLE;
+
+    case SIGKILL:                       /* 9 */
+        return SIGKILL_PORTABLE;
+
+    case SIGUSR1:                       /* 10 <-- 16 */
+        return SIGUSR1_PORTABLE;
+
+    case SIGSEGV:                       /* 11 */
+        return SIGSEGV_PORTABLE;
+
+    case SIGUSR2:                       /* 12 <-- 17 */
+        return SIGUSR2_PORTABLE;
+
+    case SIGPIPE:                       /* 13 */
+        return SIGPIPE_PORTABLE;
+
+    case SIGALRM:                       /* 14 */
+        return SIGALRM_PORTABLE;
+
+    case SIGTERM:                       /* 15 */
+        return SIGTERM_PORTABLE;
+
+    case SIGEMT:                        /* 16 <--- 7 */
+        return SIGSTKFLT_PORTABLE;      /* No native SIGSTKFLT exist ...
+                                           ... reverse mapping SIGEMT ...
+                                           ...  back to SIGSTKFLT. */
+
+    case SIGCHLD:                       /* 17 <-- 18 */
+        return SIGCHLD_PORTABLE;
+
+    case SIGCONT:                       /* 18 <-- 15 */
+        return SIGCONT_PORTABLE;
+
+    case SIGSTOP:                       /* 19 <-- 23 */
+        return SIGSTOP_PORTABLE;
+
+    case SIGTSTP:                       /* 20 <-- 24 */
+        return SIGTSTP_PORTABLE;
+
+    case SIGTTIN:                       /* 21 <-- 26 */
+        return SIGTTIN_PORTABLE;
+
+    case SIGTTOU:                       /* 22 <-- 27 */
+        return SIGTTOU_PORTABLE;
+
+    case SIGURG:                        /* 23 <-- 21 */
+        return SIGURG_PORTABLE;
+
+    case SIGXCPU:                       /* 24 <-- 30 */
+        return SIGXCPU_PORTABLE;
+
+    case SIGXFSZ:                       /* 25 <-- 31 */
+        return SIGXFSZ_PORTABLE;
+
+    case SIGVTALRM:                     /* 26 <-- 28 */
+        return SIGVTALRM_PORTABLE;
+
+    case SIGPROF:                       /* 27 <-- 29 */
+        return SIGPROF_PORTABLE;
+
+    case SIGWINCH:                      /* 28 <-- 20 */
+        return SIGWINCH_PORTABLE;
+
+    case SIGIO:                         /* 29 <-- 22 */
+        return SIGIO_PORTABLE;
+
+    case SIGPWR:                        /* 30 <-- 19 */
+        return SIGPWR_PORTABLE;
+
+    case SIGSYS:                        /* 31 <-- 12 */
+        return SIGSYS_PORTABLE;
+
+    /*
+     * Mapping lower 32 Real Time signals to identical Portable signal numbers.
+     * NOTE: SIGRTMAX_PORTABLE == 64 but SIGRTMAX == 128.
+     */
+    case SIGRTMIN...SIGRTMAX_PORTABLE:              /* 32 ... 64 */
+        ASSERT(SIGRTMIN == SIGRTMIN_PORTABLE);
+        ASSERT(SIGRTMAX >= SIGRTMAX_PORTABLE);
+        return mips_signum;
+
+   /*
+    * Mapping upper 63 Native Real Time signals to the last Portable signal number.
+    * Shouldn't even be possible to be using these signals.
+    */
+    case (SIGRTMAX_PORTABLE+1)...SIGRTMAX:          /* 65 ... 128 */
+        ASSERT(SIGRTMIN == SIGRTMIN_PORTABLE);
+        ASSERT(SIGRTMAX >= SIGRTMAX_PORTABLE);
+
+        ALOGE("%s: mips_signum:%d Can't be mapped to a unique portable signal;", __func__,
+                   mips_signum);
+
+        ALOGE("%s: Mapping highest 63 Real Time Signals to the largest RT Portable SigNo.",
+                __func__);
+
+        return SIGRTMAX_PORTABLE;
+
+
+    default:
+        ALOGE("%s: switch default: mips_signum:%d Not supported! return(0);", __func__,
+                                   mips_signum);
+#if 0
+        LOG_FATAL("%s: mips_signum:%d is not portable;", __func__, mips_signum);
+#endif
+        return 0;
+    }
+    return portable_ssignum;
+}
+
+
+/*
+ * Deal with siginfo structure being a bit different.
+ * Need to swap errno and code fields.
+ */
+static void siginfo_pton(siginfo_portable_t *portable_sip, siginfo_t *native_sip)
+{
+
+    ALOGV("%s(portable_sip:%p, native_sip:%p) {", __func__,
+              portable_sip,    native_sip);
+
+    ASSERT(sizeof(siginfo_portable_t) == sizeof(siginfo_t));
+
+    /*
+     * Default to the same structure members,
+     * code and errno are swapped between ARM and MIPS,
+     * and errno needs to be translated.
+     *
+     * The signal number isn't translated, as the kernel
+     * will fill it it when it delivers the signal.
+     */
+
+    *native_sip = *((siginfo_t *)portable_sip);
+    native_sip->si_signo = 0;
+    native_sip->si_code = portable_sip->si_code;
+    native_sip->si_errno = errno_pton(portable_sip->si_errno);
+
+    ALOGV("%s: return; }", __func__);
+}
+
+
+static void siginfo_ntop(siginfo_t *native_sip, siginfo_portable_t *portable_sip)
+{
+
+    ALOGV("%s(native_sip,:%p, portable_sip:%p) {", __func__,
+              native_sip,     portable_sip);
+
+    ASSERT(sizeof(siginfo_portable_t) == sizeof(siginfo_t));
+
+    /*
+     * Structure assignment to default to the same structure members,
+     * as only the code and errno are swapped in position between
+     * ARM and MIPS; errno and signal number also need to be translated.
+     */
+    *portable_sip = *((siginfo_portable_t *)native_sip);
+
+    portable_sip->si_signo = signum_ntop(native_sip->si_signo);
+    portable_sip->si_code = native_sip->si_code;
+    portable_sip->si_errno = errno_ntop(native_sip->si_errno);
+
+    ALOGV("%s: return; }", __func__);
+}
+
+
+/*
+ * Array of signal handlers as the portable users expects they
+ * they have been registered in the kernel. Problem is we need
+ * to have our own handler to map the MIPS signal number to a
+ * portable signal number.
+ */
+static sig3handler_portable_t mips_portable_sighandler[NSIG_PORTABLE + 1] = { NULL };
+
+static void mips_sigaction_handler(int mips_signum, siginfo_t *sip, void *ucp)
+{
+    int portable_signum;
+    char *portable_signame;
+    char *mips_signame = map_mips_signum_to_name(mips_signum);
+    sig3handler_portable_t portable_sighandler;
+    siginfo_portable_t portable_si;
+    siginfo_portable_t *portable_sip;
+
+    ALOGV(" ");
+    ALOGV("%s(mips_signum:%d:'%s', sip:%p, ucp:%p) {", __func__,
+              mips_signum,
+              mips_signame,        sip,    ucp);
+
+    portable_signum = signum_ntop(mips_signum);
+    portable_signame = map_portable_signum_to_name(portable_signum);
+    portable_sighandler = mips_portable_sighandler[portable_signum];
+
+    if (invalid_pointer(portable_sighandler)) {
+        /*
+         * If a portable/ARM application tries to set signals in the signal mask > 32
+         * it results in a signal_handler being set to -1:SIG_ERR. Calling a function
+         * at location -1 doesn't produce very informative Android backtraces on MIPS.
+         */
+        ALOGE("%s: invalid_pointer(portable_sighandler:%p); Likely about to Trap or Bus Error!",
+                __func__,          portable_sighandler);
+
+        ALOGE("%s: HINT: Likely best to use gdbserver and look at sigaction arguments.", __func__);
+    }
+    ASSERT(portable_sighandler != NULL);
+    ASSERT(portable_sighandler != (sig3handler_portable_t) SIG_DFL);
+    ASSERT(portable_sighandler != (sig3handler_portable_t) SIG_IGN);
+
+    if (sip == NULL) {
+        portable_sip = NULL;
+    } else {
+        /* Map signinfo from native to portable format */
+        portable_sip = &portable_si;
+        siginfo_ntop(sip, portable_sip);
+    }
+
+
+    ALOGV("%s: Calling portable_sighandler:%p(portable_signum:%d, portable_sip:%p, ucp:%p);",
+          __func__,    portable_sighandler,   portable_signum,    portable_sip,    ucp);
+
+    portable_sighandler(portable_signum, portable_sip, ucp);
+
+    ALOGV("%s: return; }", __func__);
+}
+
+
+static void mips_sighandler(int mips_signum)
+{
+    int portable_signum;
+    char *portable_signame;
+    char *mips_signame = map_mips_signum_to_name(mips_signum);
+    sig3handler_portable_t portable_sighandler;
+
+    ALOGV(" ");
+    ALOGV("%s(mips_signum:%d:'%s') {", __func__, mips_signum, mips_signame);
+
+    mips_sigaction_handler(mips_signum, NULL, NULL);
+
+    ALOGV("%s: return; }", __func__);
+}
+
+
+static sighandler_t sighandler_pton(sighandler_portable_t portable_handler, int sigaction)
+{
+    sighandler_t mips_handler;
+
+    ALOGV("%s(portable_handler:%p, sigaction:%d) {", __func__,
+              portable_handler,    sigaction);
+
+    switch((int) portable_handler) {
+    case (int) SIG_DFL:
+    case (int) SIG_IGN:
+        mips_handler = portable_handler;
+        break;
+
+    default:    /* NOTE: Includes SIG_ERR:-1 */
+        if (invalid_pointer(portable_handler)) {
+            /*
+             * Calling sigaction() with a bogus signal handler doesn't fail,
+             * so we let the portable cases fail later as the native case would.
+             */
+            ALOGE("%s: invalid_pointer(portable_handler:%p)!", __func__, portable_handler);
+            ALOGE("%s: HINT: Likely to cause a BUS Error ....", __func__);
+            ALOGE("%s: HINT: ... when the signal handler is called!", __func__);
+        }
+
+        /*
+         * Signal Mapping can be disabled in the rare case of the clone
+         * flags not being compatble for VM and file descriptors.
+         */
+        if (signal_handler_mapping_enabled) {
+            if (sigaction)
+                mips_handler = (sighandler_t) mips_sigaction_handler;
+            else
+                mips_handler = (sighandler_t) mips_sighandler;
+        } else {
+            mips_handler = portable_handler;        /* Don't MAP */
+        }
+        break;
+    }
+
+    ALOGV("%s: return(mips_handler:%p); }", __func__, mips_handler);
+    return mips_handler;
+}
+
+
+/*
+ * This function maps the signal number and calls one of the low level mips signal()
+ * functions implemented in libc/unistd/signal.c:
+ *              sysv_signal()
+ *              bsd_signal()
+ *
+ * The last 2 parameters to this static function, mips_signal_fn*, specify which of
+ * these functions to call.  We intercept the above to functions, as well as signal(),
+ * and call the associated *_portable() functions below.
+ *
+ * In addition, we intercept the signal_handler with our own handlers that map the
+ * signal number from the MIPS convention to the PORTABLE/ARM convention.
+ */
+static sighandler_portable_t
+do_signal_portable(int portable_signum, sighandler_portable_t portable_handler,
+                   __sighandler_t (mips_signal_fn)(int, __sighandler_t))
+{
+    char *portable_signame = map_portable_signum_to_name(portable_signum);
+    int mips_signum;
+    sighandler_t mips_handler;
+    sighandler_portable_t rv;
+    sighandler_portable_t prev_portable_handler;
+
+    ALOGV("%s(portable_signum:%d:%s, portable_handler:%p,  mips_signal_fn:%p) {", __func__,
+              portable_signum,
+              portable_signame,      portable_handler,     mips_signal_fn);
+
+    mips_signum = signum_pton(portable_signum);
+
+    if ((portable_signum != 0) && ((mips_signum <= 0) || (mips_signum > NSIG))) {
+        /*
+         * Invalid request; Let the kernel generate the proper return value and set errno.
+         */
+        mips_handler = sighandler_pton(portable_handler, 0);
+        rv = mips_signal_fn(mips_signum, mips_handler);
+    } else {
+        /*
+         * We have a usable signal number, redirect it to our signal handler
+         * if a portable handler was provided so we can convert the signal number.
+         * Save our current mapped signal handler for likely return.
+         */
+        prev_portable_handler = (sighandler_portable_t) mips_portable_sighandler[portable_signum];
+
+        mips_handler = sighandler_pton(portable_handler, 0);
+        if (mips_handler != portable_handler) {
+            mips_portable_sighandler[portable_signum] = (sig3handler_portable_t) portable_handler;
+        }
+        rv = mips_signal_fn(mips_signum, mips_handler);
+
+        if ((rv == (sighandler_portable_t) mips_sighandler) ||
+            (rv == (sighandler_portable_t) mips_sigaction_handler)) {
+
+            rv = (sighandler_t) prev_portable_handler;
+        }
+    }
+
+    ALOGV("%s: return(rv:%p); }", __func__, rv);
+    return rv;
+}
+
+
+/*
+ * signal() can't be called directly, due to an in-line function in signal.h which
+ * redirects the call to bsd_signal(). _signal() is a static function; not to be called
+ * directly. This function isn't actually needed.
+ */
+sighandler_portable_t WRAP(signal)(int portable_signum, sighandler_portable_t handler)
+{
+    sighandler_portable_t rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_signum:%d, handler:%p) {", __func__,
+              portable_signum,    handler);
+
+    /* bsd does a SA_RESTART */
+    rv = do_signal_portable(portable_signum, handler, bsd_signal);
+
+    ALOGV("%s: return(ret:%p); }", __func__, rv);
+    return rv;
+}
+
+
+sighandler_portable_t WRAP(sysv_signal)(int portable_signum, sighandler_portable_t handler)
+{
+    sighandler_portable_t rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_signum:%d, handler:%p) {", __func__,
+              portable_signum,    handler);
+
+    /* sysv does a SA_RESETHAND */
+    rv = do_signal_portable(portable_signum, handler, sysv_signal);
+
+    ALOGV("%s: return(ret:%p); }", __func__, rv);
+    return rv;
+}
+
+
+/*
+ * NOTE:
+ *    handler is either the Bionic
+ *      bsd_signal() signal handler
+ * or
+ *      the sysv_signal() signal handler.
+ */
+
+sighandler_portable_t WRAP(bsd_signal)(int portable_signum, sighandler_portable_t handler)
+{
+    sighandler_portable_t rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_signum:%d, handler:%p) {", __func__,
+              portable_signum,    handler);
+
+    /* bsd does a SA_RESTART */
+    rv = do_signal_portable(portable_signum, handler, bsd_signal);
+
+    ALOGV("%s: return(ret:%p); }", __func__, rv);
+    return rv;
+}
+
+
+static int do_kill(int id, int portable_signum, int (*fn)(int, int))
+{
+    char *portable_signame = map_portable_signum_to_name(portable_signum);
+    int mips_signum;
+    int rv;
+
+    ALOGV("%s(id:%d, portable_signum:%d:'%s', fn:%p) {", __func__,
+              id,    portable_signum,
+                     portable_signame,        fn);
+
+    mips_signum = signum_pton(portable_signum);
+
+    if ((portable_signum != 0) && (mips_signum == 0)) {
+        rv = 0;
+    } else {
+        ALOGV("%s: Calling fn:%p(id:%d, mips_signum:%d);", __func__,
+                           fn,   id,    mips_signum);
+
+        rv =  fn(id, mips_signum);
+    }
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(killpg)(int pgrp, int portable_signum)
+{
+    extern int REAL(killpg)(int pgrp, int sig);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(pgrp:%d, portable_signum:%d) {", __func__,
+              pgrp,    portable_signum);
+
+    rv = do_kill(pgrp, portable_signum, REAL(killpg));
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(kill)(pid_t pid, int portable_signum)
+{
+    extern int REAL(kill)(pid_t, int);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(pid:%d, portable_signum:%d) {", __func__,
+              pid,    portable_signum);
+
+    rv = do_kill(pid, portable_signum, REAL(kill));
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(tkill)(int tid, int portable_signum)
+{
+    extern int REAL(tkill)(int, int);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(tid:%d, portable_signum:%d) {", __func__,
+              tid,    portable_signum);
+
+    rv = do_kill(tid, portable_signum, REAL(tkill));
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+/* tgkill is not exported from android-14 libc.so */
+#if 0
+int WRAP(tgkill)(int tgid, int tid, int portable_signum)
+{
+    extern int tgkill(int, int, int);
+    char *portable_signame = map_portable_signum_to_name(portable_signum);
+    int mips_signum;
+    int rv;
+
+    ALOGV("%s(tgid:%d, tid:%d, portable_signum:%d:'%s') {", __func__,
+              tgid,    tid,    portable_signum, portable_signame);
+
+    mips_signum = signum_pton(portable_signum);
+
+    if ((portable_signum != 0) && (mips_signum == 0))
+        rv = 0;
+    else
+        rv = REAL(tgkill)(tgid, tid, mips_signum);
+
+    ALOGV("%s: return rv:%d; }", __func__, rv);
+    return rv;
+}
+#endif
+
+
+int WRAP(raise)(int portable_signum)
+{
+    char *portable_signame = map_portable_signum_to_name(portable_signum);
+    int mips_signum = signum_pton(portable_signum);
+    int rv;
+
+    ALOGV("%s(portable_signum:%d:'%s') {", __func__, portable_signum, portable_signame);
+
+    if ((portable_signum != 0) && (mips_signum == 0))
+        rv = 0;
+    else
+        rv = REAL(raise)(mips_signum);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+void sigset_pton(sigset_portable_t *portable_sigset, sigset_t *mips_sigset)
+{
+    int portable_signum;
+
+    ASSERT(mips_sigset != NULL);
+
+    ALOGV("%s(portable_sigset:%p, mips_sigset:%p) {", __func__,
+              portable_sigset,    mips_sigset);
+
+    sigemptyset(mips_sigset);
+    if (invalid_pointer((void *)portable_sigset)) {
+        ALOGE("%s: portable_sigset:%p is not valid; returning empty set.", __func__,
+                   portable_sigset);
+        goto done;
+    }
+
+    for(portable_signum = 1; portable_signum <= NSIG_PORTABLE; portable_signum++) {
+
+        if (WRAP(sigismember)(portable_sigset, portable_signum)) {
+            char *portable_signame = map_portable_signum_to_name(portable_signum);
+            int mips_signum = signum_pton(portable_signum);
+            char *mips_signame;
+
+            if (mips_signum != 0) {
+                int err;
+
+                mips_signame = map_mips_signum_to_name(mips_signum);
+                ALOGV("%s: sigaddset(mips_sigset:%p, mips_signum:%d:'%s');", __func__,
+                                     mips_sigset,    mips_signum,
+                                                     mips_signame);
+
+                err = sigaddset(mips_sigset, mips_signum);
+                if (err == -1) {
+                    PERROR("sigaddset");
+                }
+            }
+        }
+    }
+
+done:
+    ALOGV("%s: return; }", __func__);
+    return;
+}
+
+
+void
+sigset_ntop(const sigset_t *const_mips_sigset, sigset_portable_t *portable_sigset)
+{
+    int mips_signum;
+    sigset_t *mips_sigset = (sigset_t *) const_mips_sigset;
+
+    ALOGV("%s(const_mips_sigset:%p, portable_sigset:%p) {", __func__,
+              const_mips_sigset,    portable_sigset);
+
+    ASSERT(mips_sigset != NULL);
+
+    if (invalid_pointer((void *)portable_sigset)) {
+        ALOGE("%s: portable_sigset:%p is not Valid; can't return sigset", __func__,
+                   portable_sigset);
+        goto done;
+    }
+    WRAP(sigemptyset)(portable_sigset);
+
+    for(mips_signum = 1; mips_signum <= NSIG; mips_signum++) {
+        if (sigismember(mips_sigset, mips_signum)) {
+            int portable_signum = signum_ntop(mips_signum);
+
+            if (portable_signum != 0)
+                WRAP(sigaddset)(portable_sigset, portable_signum);
+        }
+    }
+
+done:
+    ALOGV("%s: return; }", __func__);
+    return;
+}
+
+
+static int sigaction_flags_pton(int portable_flags)
+{
+    int mips_flags = 0;
+
+    if (portable_flags & SA_NOCLDSTOP_PORTABLE) {
+        mips_flags |= SA_NOCLDSTOP;
+    }
+    if (portable_flags & SA_NOCLDWAIT_PORTABLE) {
+        mips_flags |= SA_NOCLDWAIT;
+    }
+    if (portable_flags & SA_SIGINFO_PORTABLE) {
+        mips_flags |= SA_SIGINFO;
+    }
+    if (portable_flags & SA_THIRTYTWO_PORTABLE) {
+        ALOGV("%s: SA_THIRTYTWO_PORTABLE isn't SUPPORTED.", __func__);
+    }
+    if (portable_flags & SA_RESTORER_PORTABLE) {
+        mips_flags |= SA_RESTORER;
+    }
+    if (portable_flags & SA_ONSTACK_PORTABLE) {
+        mips_flags |= SA_ONSTACK;
+    }
+    if (portable_flags & SA_RESTART_PORTABLE) {
+        mips_flags |= SA_RESTART;
+    }
+    if (portable_flags & SA_NODEFER_PORTABLE) {
+        mips_flags |= SA_NODEFER;
+    }
+    if (portable_flags & SA_RESETHAND_PORTABLE) {
+        mips_flags |= SA_RESETHAND;
+    }
+
+    ALOGV("%s(portable_flags:0x%x) return(mips_flags:0x%x);", __func__,
+              portable_flags,             mips_flags);
+
+    return mips_flags;
+}
+
+
+int sigaction_flags_ntop(int mips_flags)
+{
+    int portable_flags = 0;
+
+    if (mips_flags & SA_NOCLDSTOP)      portable_flags |= SA_NOCLDSTOP_PORTABLE;
+    if (mips_flags & SA_NOCLDWAIT)      portable_flags |= SA_NOCLDWAIT_PORTABLE;
+    if (mips_flags & SA_SIGINFO)        portable_flags |= SA_SIGINFO_PORTABLE;
+#ifdef SA_THIRTYTWO
+    if (mips_flags & SA_THIRTYTWO)      portable_flags |= SA_THIRTYTWO_PORTABLE;
+#endif
+    if (mips_flags & SA_RESTORER)       portable_flags |= SA_RESTORER_PORTABLE;
+    if (mips_flags & SA_ONSTACK)        portable_flags |= SA_ONSTACK_PORTABLE;
+    if (mips_flags & SA_RESTART)        portable_flags |= SA_RESTART_PORTABLE;
+    if (mips_flags & SA_NODEFER)        portable_flags |= SA_NODEFER_PORTABLE;
+    if (mips_flags & SA_RESETHAND)      portable_flags |= SA_RESETHAND_PORTABLE;
+
+    ALOGV("%s(mips_flags:0x%x) return(portable_flags:0x%x);", __func__,
+              mips_flags,             portable_flags);
+
+    return portable_flags;
+}
+
+
+/*
+ * Called by portable/ARM code, which we map and do MIPS system calls.
+ *
+ * The incoming system call used a Portable/ARM sigaction structure:
+ * ------------------------------------------------------------------
+ *   struct sigaction_portable {
+ *     union {
+ *       __sighandler_portable_t        _sa_handler;
+ *       __sigaction_handler_portable_t _sa_sigaction;
+ *     } _u;
+ *     sigset_portable_t sa_mask;
+ *     unsigned long sa_flags;
+ *     void (*sa_restorer)(void);
+ * };
+ *
+ * A similar, but different, structure is used in the MIPS/Native system call:
+ * ---------------------------------------------------------------------------
+ *    struct sigaction {
+ *      unsigned int sa_flags;
+ *      union {
+ *        __sighandler_t                  sa_handler;
+ *        __sigaction_handler_portable_t _sa_sigaction;
+ *      } __u;
+ *      sigset_t sa_mask;
+ *  };
+ *
+ * This sigaction structure needs to be mapped before the MIPS systems call as well as after for
+ * returning the old/previous sigaction. Also, like signal_portable() above, we need to maintain
+ * a table of signal handlers that our intercepting handler can call after it converts the signal
+ * numbers.
+ */
+static int do_sigaction_portable(int portable_signum, const struct sigaction_portable *act,
+                                 struct sigaction_portable *oldact, sigaction_fn fn,
+                                 rt_sigaction_fn rt_fn)
+{
+    int mips_signum;
+    char *mips_signame;
+    struct sigaction mips_act;
+    struct sigaction *mips_act_ptr;
+    struct sigaction mips_oldact;
+    sighandler_t mips_handler;
+    sighandler_portable_t portable_handler;
+    sig3handler_portable_t prev_portable_handler;
+    char *portable_signame = map_portable_signum_to_name(portable_signum);
+    int rv;
+
+    ALOGV("%s(portable_signum:%d:'%s', act:%p, oldact:%p, fn:%p, rt_fn:%p) {", __func__,
+              portable_signum,
+              portable_signame,        act,    oldact,    fn,    rt_fn);
+
+    mips_signum = signum_pton(portable_signum);
+    mips_signame = map_mips_signum_to_name(mips_signum);
+
+    if ((portable_signum != 0) && (mips_signum == 0)) {
+        /* We got a portable signum that we can't map; Ignore the request */
+        rv = 0;
+        goto done;
+    }
+    if (portable_signum > 0 && portable_signum <= NSIG_PORTABLE)
+        prev_portable_handler = mips_portable_sighandler[portable_signum];
+    else
+        prev_portable_handler = NULL;
+
+    memset(&mips_act, 0, sizeof(mips_act));
+
+    if (invalid_pointer((void *)act)) {
+        mips_act_ptr = (struct sigaction *)act;
+    } else {
+        /*
+         * Make the MIPS version of sigaction, which has no sa_restorer function pointer.
+         * Also the handler will be called with a pointer to a to a sigcontext structure
+         * which is totally non-portable.
+         */
+        sigset_pton(((sigset_portable_t *)&act->sa_mask),
+                                    ((sigset_t *) &mips_act.sa_mask));
+
+        mips_act.sa_flags = sigaction_flags_pton(act->sa_flags);
+
+        if (mips_act.sa_flags & SA_SIGINFO) {
+            /*
+             * Providing the three argument version of a signal handler.
+             */
+            portable_handler = (sighandler_portable_t) act->sa_sigaction_portable;
+            if ((portable_signum <= 0) || (portable_signum > NSIG_PORTABLE)) {
+                /*
+                 * Let the kernel generate the proper return value and set errno.
+                 */
+                mips_act.sa_sigaction = (sig3handler_t) portable_handler;
+            } else {
+                mips_handler = sighandler_pton(portable_handler, 1);
+                if (mips_handler != portable_handler) {
+                    mips_portable_sighandler[portable_signum] =
+                                                       (sig3handler_portable_t) portable_handler;
+                }
+                mips_act.sa_sigaction = (sig3handler_t) mips_handler;
+            }
+        } else {
+            /*
+             * Providing the classic single argument version of a signal handler.
+             */
+            portable_handler = act->sa_handler_portable;
+            if ((portable_signum <= 0) || (portable_signum > NSIG_PORTABLE)) {
+                /*
+                 * Let the kernel generate the proper return value and set errno.
+                 */
+                mips_act.sa_handler = (sighandler_t) portable_handler;
+            } else {
+                mips_handler = sighandler_pton(portable_handler, 1);
+                if (mips_handler != portable_handler) {
+                    mips_portable_sighandler[portable_signum] =
+                                                       (sig3handler_portable_t) portable_handler;
+                }
+                mips_act.sa_handler = mips_handler;
+            }
+        }
+        mips_act_ptr = &mips_act;
+    }
+
+    if (fn != NULL) {
+        ASSERT(rt_fn == NULL);
+        rv = fn(mips_signum, mips_act_ptr, &mips_oldact);
+    } else {
+        ASSERT(rt_fn != NULL);
+        rv = rt_fn(mips_signum, mips_act_ptr, &mips_oldact, sizeof(sigset_t));
+    }
+
+    if (rv == 0 && oldact) {
+        if (mips_oldact.sa_sigaction == (__sigaction_handler_portable_t) mips_sigaction_handler ||
+            mips_oldact.sa_sigaction == (__sigaction_handler_portable_t) mips_sighandler) {
+
+            oldact->sa_sigaction_portable =
+                                        (__sigaction_handler_portable_t) prev_portable_handler;
+        } else {
+            oldact->sa_sigaction_portable =
+                                        (__sigaction_handler_portable_t) mips_oldact.sa_sigaction;
+        }
+        sigset_ntop((sigset_t *) &(mips_oldact.sa_mask),
+                                    (sigset_portable_t *) &(oldact->sa_mask));
+
+        oldact->sa_flags = sigaction_flags_ntop(mips_oldact.sa_flags);
+        oldact->sa_restorer = NULL;
+    }
+
+done:
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(sigaction)(int portable_signum, const struct sigaction_portable *act,
+                       struct sigaction_portable *oldact)
+{
+    extern int REAL(sigaction)(int, const struct sigaction *, struct sigaction *);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_signum:%d, act:%p, oldact:%p) {", __func__,
+              portable_signum,    act,    oldact);
+
+    rv = do_sigaction_portable(portable_signum, act, oldact, REAL(sigaction), NULL);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+/*
+ * Currently signalfd() isn't supported by bionic with
+ * only the portable syscall.c code using this code by
+ * intercepting the syscall(__NR_signalfd4, ...) in bionic.
+ */
+__hidden int do_signalfd4_portable(int fd, const sigset_portable_t *portable_sigmask,
+                                   int portable_sigsetsize, int portable_flags)
+{
+    sigset_t native_sigmask;
+    int native_sigsetsize = sizeof(native_sigmask);
+    int native_flags = 0;
+    int rv;
+
+    ALOGV("%s(fd:%d, portable_sigmask:%p, portable_sigsetsize:%d, portable_flags:0x%x) {",
+    __func__, fd,    portable_sigmask,    portable_sigsetsize,    portable_flags);
+
+    sigset_pton((sigset_portable_t *)portable_sigmask, &native_sigmask);
+
+    if (portable_flags & SFD_NONBLOCK_PORTABLE) {
+        native_flags |= SFD_NONBLOCK;
+    }
+    if (portable_flags & SFD_CLOEXEC_PORTABLE) {
+        native_flags |= SFD_CLOEXEC;
+    }
+    rv = syscall(__NR_signalfd4, fd, &native_sigmask, native_sigsetsize, native_flags);
+
+    if (rv >= 0) {
+        if (native_flags & SFD_CLOEXEC) {
+            filefd_CLOEXEC_enabled(rv);
+        }
+
+        /*
+         * Reads on this file descriptor must be mapped to be portable.
+         * The mapping should survive a fork and most clones naturally.
+         * For the system call to be completely portable it has to propagate
+         * these mapped files after an execve(). Environment variables have
+         * been added to do that. See filefd.c for details.
+         */
+        filefd_opened(rv, SIGNAL_FD_TYPE);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+#if 0
+/*
+ * signalfd() isn't available in Bionic yet. When it is, it will be implemented like
+ * the glibc version where the sigsetsize is computed in the bionic code and passed
+ * down to the kernel with __NR_signalfd4.
+ *
+ * This function can't be called from bionic, so there isn't an entry in the experimental
+ * linker.cpp table for testing and this function.
+ */
+int WRAP(signalfd)(int fd, const sigset_portable_t *portable_sigmask, int portable_flags)
+{
+    int portable_sigsetsize = sizeof(sigset_portable_t);
+    int rv;
+
+    ALOGV("%s(fd:%d, portable_sigmask:%p, portable_flags:0x%x) {", __func__,
+              fd,    portable_sigmask,    portable_flags);
+
+    rv = do_signalfd4_portable(fd, portable_sigsetsize, portable_sigmask, portable_flags);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+#endif
+
+
+/*
+ * Called by read_portable() to do signalfd read() mapping.
+ */
+__hidden int read_signalfd_mapper(int fd, void *buf, size_t count)
+{
+    int rv;
+
+    ALOGV("%s(fd:%d, buf:0x%p, count:%d) {", __func__,
+              fd,    buf,      count);
+
+    rv = read(fd, buf, count);
+    if (rv > 0) {
+        int siginfos = rv/sizeof(struct signalfd_siginfo);
+        struct signalfd_siginfo *si = (struct signalfd_siginfo *) buf;
+        int i;
+
+        /* Read signalfd_siginfo structure(s) if read is large enough */
+        for (i = 0; i < siginfos; i++, si++) {
+            int ssi_signo;
+
+            ssi_signo = si->ssi_signo;
+            si->ssi_signo = signum_ntop(si->ssi_signo);
+            ALOGV("%s: si->ssi_signo:%d = signum_ntop(si->ssi_signo:%d); i:%d", __func__,
+                       si->ssi_signo,                     ssi_signo,     i);
+
+            si->ssi_errno = errno_ntop(si->ssi_errno);
+
+            /*
+             * The ssi_codes appear to be generic; defined in
+             * the kernel in include/asm-generic/siginfo.h
+             */
+            if (si->ssi_status > 0 && si->ssi_status <= NSIG) {
+                si->ssi_status = signum_ntop(si->ssi_status);
+            }
+
+            /*
+             * The rest of the struct members, like
+             *  ssi_trapno, ssi_int, ssi_ptr
+             * are not likely worth dealing with.
+             */
+        }
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+int WRAP(sigsuspend)(const sigset_portable_t *portable_sigmask)
+{
+    int rv;
+    sigset_t mips_sigmask;
+
+    ALOGV("%s(portable_sigmask:%p) {", __func__, portable_sigmask);
+
+    if (invalid_pointer((void *)portable_sigmask)) {
+        *REAL(__errno)() = EFAULT;
+        rv = -1;
+    } else {
+        sigset_pton((sigset_portable_t *)portable_sigmask, &mips_sigmask);
+        rv = REAL(sigsuspend)(&mips_sigmask);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(sigpending)(sigset_portable_t *portable_sigset)
+{
+    int rv;
+    sigset_t mips_sigset;
+
+    ALOGV("%s(portable_sigset:%p) {", __func__,
+              portable_sigset);
+
+    if (invalid_pointer((void *)portable_sigset)) {
+        *REAL(__errno)() = EFAULT;
+        rv = -1;
+    } else {
+        rv = REAL(sigpending)(&mips_sigset);
+        sigset_ntop(&mips_sigset, portable_sigset);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(sigwait)(const sigset_portable_t *portable_sigset, int *ptr_to_portable_sig)
+{
+    int rv;
+    sigset_t mips_sigset;
+    int mips_sig;
+    int portable_sig;
+
+    ALOGV("%s(portable_sigset:%p, ptr_to_portable_sig:%p) {", __func__,
+              portable_sigset,    ptr_to_portable_sig);
+
+    if (invalid_pointer((void *)portable_sigset)) {
+        *REAL(__errno)() = EFAULT;
+        rv = -1;
+    } else {
+        sigset_pton((sigset_portable_t *)portable_sigset, &mips_sigset);
+
+        rv = REAL(sigwait)(&mips_sigset, &mips_sig);
+
+        portable_sig = signum_ntop(mips_sig);
+        *ptr_to_portable_sig = portable_sig;
+    }
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(siginterrupt)(int portable_signum, int flag)
+
+{
+    int rv;
+    int mips_signum;
+
+    ALOGV("%s(portable_signum:%d, flag:0x%x) {", __func__,
+              portable_signum,    flag);
+
+    mips_signum = signum_pton(portable_signum);
+
+    if ((portable_signum != 0) && (mips_signum == 0)) {
+        ALOGE("%s: Unsupported portable_signum:%d; Ignoring.", __func__,
+                               portable_signum);
+        rv = 0;
+    } else {
+        rv = REAL(siginterrupt)(mips_signum, flag);
+    }
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+__hidden int do_sigmask(int portable_how, const sigset_portable_t *portable_sigset,
+                        sigset_portable_t *portable_oldset, sigmask_fn fn,
+                        rt_sigmask_fn rt_fn)
+{
+    int rv;
+    int how;
+    char *how_name;
+    sigset_t mips_sigset, *mips_sigset_p;
+    sigset_t mips_oldset, *mips_oldset_p;
+
+    ALOGV("%s(portable_how:%d, portable_sigset:%p, portable_oldset:%p, fn:%p, rt_fn:%p) {",
+    __func__, portable_how,    portable_sigset,    portable_oldset,    fn,    rt_fn);
+
+    switch(portable_how) {
+    case SIG_BLOCK_PORTABLE:    how = SIG_BLOCK;        how_name = "SIG_BLOCK";         break;
+    case SIG_UNBLOCK_PORTABLE:  how = SIG_UNBLOCK;      how_name = "SIG_UNBLOCK";       break;
+    case SIG_SETMASK_PORTABLE:  how = SIG_SETMASK;      how_name = "SIG_SETMASK";       break;
+
+    default:
+        ALOGE("%s: portable_how:%d NOT SUPPORTED!", __func__, portable_how);
+        how = -1;
+        break;
+    }
+
+    if (invalid_pointer((void *)portable_sigset)) {
+        mips_sigset_p = (sigset_t *) portable_sigset;
+    } else {
+        mips_sigset_p = &mips_sigset;
+        memset(mips_sigset_p, 0, sizeof(mips_sigset));
+        sigemptyset(mips_sigset_p);
+        sigset_pton((sigset_portable_t *)portable_sigset, &mips_sigset);
+    }
+
+    if (invalid_pointer((void *)portable_oldset)) {
+        mips_oldset_p = (sigset_t *) portable_oldset;
+    } else {
+        mips_oldset_p = &mips_oldset;
+        memset(mips_oldset_p, 0, sizeof(mips_oldset));
+        sigemptyset(mips_oldset_p);
+    }
+
+    if (fn != NULL) {
+        ASSERT(rt_fn == NULL);
+        rv = fn(how, mips_sigset_p, mips_oldset_p);
+    } else {
+        ASSERT(rt_fn != NULL);
+        rv = rt_fn(how, mips_sigset_p, mips_oldset_p, sizeof(sigset_t));
+    }
+
+    if (rv == 0 && !invalid_pointer(portable_oldset)) {
+        /* Map returned mips_oldset to portable_oldset for return to caller */
+        sigset_ntop(mips_oldset_p, portable_oldset);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(sigprocmask)(int portable_how, const sigset_portable_t *portable_sigset,
+                         sigset_portable_t *portable_oldset)
+{
+    extern int REAL(sigprocmask)(int, const sigset_t *, sigset_t *);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_how:%d, portable_sigset:%p, portable_oldset:%p) {", __func__,
+              portable_how,    portable_sigset,    portable_oldset);
+
+    rv = do_sigmask(portable_how, portable_sigset, portable_oldset, REAL(sigprocmask), NULL);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(__rt_sigaction)(int portable_signum, const struct sigaction_portable *act,
+                            struct sigaction_portable *oldact, size_t sigsetsize)
+{
+    extern int REAL(__rt_sigaction)(int , const struct sigaction *, struct sigaction *, size_t);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_signum:%d, act:%p, oldset:%p, sigsetsize:%d) {", __func__,
+              portable_signum,    act,    oldact,    sigsetsize);
+
+    /* NOTE: ARM kernel is expecting sizeof(sigset_t) to be 8 bytes */
+    if (sigsetsize != (2* sizeof(long))) {
+        *REAL(__errno)() = EINVAL;
+        rv = -1;
+        goto done;
+    }
+    rv = do_sigaction_portable(portable_signum, act, oldact, NULL, REAL(__rt_sigaction));
+
+done:
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+int WRAP(__rt_sigprocmask)(int portable_how,
+                              const sigset_portable_t *portable_sigset,
+                              sigset_portable_t *portable_oldset,
+                              size_t sigsetsize)
+{
+    extern int REAL(__rt_sigprocmask)(int, const sigset_t *, sigset_t *, size_t);
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_how:%d, portable_sigset:%p, portable_oldset:%p, sigsetsize:%d) {",
+    __func__, portable_how,    portable_sigset,    portable_oldset,    sigsetsize);
+
+    /* NOTE: ARM kernel is expecting sizeof(sigset_t) to be 8 bytes */
+    if (sigsetsize != (2* sizeof(long))) {
+        *REAL(__errno)() = EINVAL;
+        rv = -1;
+        goto done;
+    }
+    rv = do_sigmask(portable_how, portable_sigset, portable_oldset, NULL, REAL(__rt_sigprocmask));
+
+ done:
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+
+    return rv;
+}
+
+
+int WRAP(__rt_sigtimedwait)(const sigset_portable_t *portable_sigset,
+                               siginfo_portable_t *portable_siginfo,
+                               const struct timespec *timeout,
+                               size_t portable_sigsetsize)
+{
+    extern int REAL(__rt_sigtimedwait)(const sigset_t *, siginfo_t *, const struct timespec *, size_t);
+
+    sigset_t native_sigset_struct;
+    sigset_t *native_sigset = &native_sigset_struct;
+    siginfo_t native_siginfo_struct;
+    siginfo_t *native_siginfo;
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_sigset:%p, portable_siginfo:%p, timeout:%p, portable_sigsetsize:%d) {",
+    __func__, portable_sigset,    portable_siginfo,    timeout,    portable_sigsetsize);
+
+    /* NOTE: ARM kernel is expecting sizeof(sigset_t) to be 8 bytes */
+    if (portable_sigsetsize != (2* sizeof(long))) {
+        *REAL(__errno)() = EINVAL;
+        rv = -1;
+        goto done;
+    }
+    if (portable_sigset == NULL) {
+        native_sigset = NULL;
+    } else {
+        sigset_pton((sigset_portable_t *)portable_sigset, native_sigset);
+    }
+    if (portable_siginfo == NULL) {
+        native_siginfo = NULL;
+    } else {
+        native_siginfo = &native_siginfo_struct;
+    }
+    rv = REAL(__rt_sigtimedwait)(native_sigset, native_siginfo, timeout, sizeof(sigset_t));
+    if (rv == 0 && native_siginfo != NULL) {
+        /* Map siginfo struct from native to portable format. */
+        siginfo_ntop(native_siginfo, portable_siginfo);
+    }
+
+done:
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+#ifdef  __NR_rt_sigqueueinfo
+
+#if 0
+/*
+ * sigqueue():
+ *    This function became available in UNIX GLIBC after 1993.
+ *    It's not available in any versions of Android yet, and
+ *    it can't be called via syscall(). It's been useful for
+ *    testing with the LTP by the posix testsuite, and tests
+ *    show that it works fine.
+ *
+ * NOTE:
+ *    Android has in incorrect limit on the number of queueable signals
+ *    defined in libc/unistd/sysconf.c:
+ *
+ *        #define  SYSTEM_SIGQUEUE_MAX    32
+ *
+ *    sigqueue() must return EAGAIN if exceeded and we don't on Android.
+ */
+int WRAP(sigqueue)(pid_t pid, int portable_sig, const union sigval value)
+{
+    siginfo_t native_siginfo;
+    siginfo_t *native_sip;
+    siginfo_portable_t portable_siginfo;
+    siginfo_portable_t *portable_sip;
+    int native_sig;
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(pid:%d, portable_sig:%d, value:%p) {", __func__,
+              pid,    portable_sig,    value.sival_ptr);
+
+    native_sig = signum_pton(portable_sig);
+    native_sip = &native_siginfo;
+
+    portable_sip = &portable_siginfo;
+    portable_sip->si_signo = 0;                 /* Filled in by the kernel */
+    portable_sip->si_code = SI_QUEUE;
+    portable_sip->si_pid = getpid();            /* Process ID of sender */
+    portable_sip->si_uid = getuid();            /* Real UID of sender */
+    portable_sip->si_value = value;             /* Last arg supplied */
+
+    siginfo_pton(portable_sip, native_sip);
+
+    /*
+     * man page says sigqueue() is implemented via rt_sigqueueinfo().
+     */
+    ALOGV("%s: calling syscall(__NR_rt_sigqueueinfo:%d, pid:%d, native_sig:%d, native_sip:%p);",
+           __func__,           __NR_rt_sigqueueinfo,    pid,    native_sig,    native_sip);
+
+    rv = syscall(__NR_rt_sigqueueinfo, pid, native_sig, native_sip);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+#endif
+
+
+/*
+ * Real Time version of sigqueueinfo().
+ */
+int WRAP(rt_sigqueueinfo)(pid_t pid, int portable_sig, siginfo_portable_t *portable_sip)
+{
+    int native_sig;
+    siginfo_t native_siginfo, *native_sip;
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(pid:%d, portable_sig:%d, portable_sip:%p) {", __func__,
+              pid,    portable_sig,    portable_sip);
+
+    native_sig = signum_pton(portable_sig);
+
+    if (portable_sip != NULL) {
+        native_sip = &native_siginfo;
+        siginfo_pton(portable_sip, native_sip);
+    } else {
+        native_sip = NULL;
+    }
+    rv = syscall(__NR_rt_sigqueueinfo, pid, native_sig, native_sip);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+#endif /* __NR_rt_sigqueueinfo */
+
+
+#ifdef __NR_rt_tgsigqueueinfo
+/*
+ * Thread Group flavor of the real time version of sigqueueinfo().
+ */
+int WRAP(rt_tgsigqueueinfo)(pid_t tgid, pid_t pid, int portable_sig,
+                               siginfo_portable_t *portable_sip)
+{
+    siginfo_t native_siginfo, *native_sip;
+    int native_sig;
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(tgid:%d, pid:%d, portable_sig:%d, portable_sip:%p) {", __func__,
+              tgid,    pid,    portable_sig,    portable_sip);
+
+    native_sig = signum_pton(portable_sig);
+
+    if (portable_sip != NULL) {
+        native_sip = &native_siginfo;
+        siginfo_pton(portable_sip, native_sip);
+    } else {
+        native_sip = NULL;
+    }
+    rv = syscall(__NR_rt_tgsigqueueinfo, pid, native_sig, native_sip);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+#endif /* __NR_rt_tgsigqueueinfo */
+
+
+/*
+ * ss_flags and ss_size are located in different locations in stack_t structure:
+ *
+ * Incomming ARM/Portable stack_t:                  Outgoing MIPS stack_t:
+ * -------------------------------              ----------------------------
+ *    typedef struct sigaltstack {              typedef struct sigaltstack {
+ *        void __user *ss_sp;                       void *ss_sp;
+ *        int ss_flags;                             size_t ss_size;
+ *        size_t ss_size;                           int ss_flags;
+ *    } stack_t;
+ *
+ */
+int WRAP(sigaltstack)(const portable_stack_t *ss, portable_stack_t *oss)
+{
+    int rv;
+    stack_t new_stack, *mips_ss;
+    stack_t old_stack, *mips_oss;
+
+    ALOGV(" ");
+    ALOGV("%s(ss:%p, oss:%p) {", __func__, ss, oss);
+
+    if (ss == NULL) {
+        mips_ss = NULL;
+    } else {
+        if (invalid_pointer((void *)ss)) {
+            ALOGE("%s: invalid_pointer(ss:%p): Let kernel set proper errno and set return value.",
+                   __func__,           ss);
+
+            mips_ss = (stack_t *) ss;
+        } else {
+            memset(&new_stack, 0, sizeof(stack_t));
+            new_stack.ss_sp = ss->ss_sp;
+            new_stack.ss_flags = ss->ss_flags;
+            new_stack.ss_size = ss->ss_size;
+            mips_ss = &new_stack;
+        }
+    }
+    if (oss == NULL) {
+        mips_oss = NULL;
+    } else {
+        if (invalid_pointer((void *)oss)) {
+            ALOGE("%s: invalid_pointer(oss:%p): Let kernel set proper errno and return value.",
+                   __func__,           oss);
+
+            mips_oss = (stack_t *)oss;
+        } else {
+            memset(&old_stack, 0, sizeof(stack_t));
+            mips_oss = &old_stack;
+        }
+    }
+
+    rv = REAL(sigaltstack)(mips_ss, mips_oss);
+
+    if (!invalid_pointer(oss)) {
+        oss->ss_sp = old_stack.ss_sp;
+        oss->ss_flags = old_stack.ss_flags;
+        oss->ss_size = old_stack.ss_size;
+    }
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+
+    return rv;
+}
diff --git a/ndk/sources/android/libportable/arch-mips/sigsetjmp.S b/ndk/sources/android/libportable/arch-mips/sigsetjmp.S
new file mode 100644
index 0000000..237d46b
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/sigsetjmp.S
@@ -0,0 +1,78 @@
+/* Derived from: $OpenBSD: sigsetjmp.S,v 1.5 2005/08/07 16:40:15 espie Exp $ */
+/*-
+ * Copyright (c) 1991, 1993, 1995,
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Havard Eidnes.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <asm-generic/portability.h>
+#include <machine/asm.h>
+#include <machine/regnum.h>
+
+#include "jboffsets.h"
+
+/*
+ * trampolines for sigsetjmp and siglongjmp save and restore mask.
+ */
+FRAMESZ= MKFSIZ(1,1)
+GPOFF= FRAMESZ-2*REGSZ
+
+LEAF(WRAP(sigsetjmp), FRAMESZ)
+        PTR_SUBU sp, FRAMESZ
+        SETUP_GP64(GPOFF, sigsetjmp)
+        .set    reorder
+        REG_S   a1, JB_SAVEMASK(a0)             # save "savemask"
+        bne     a1, 0x0, 1f                     # do saving of signal mask?
+        LA      t9, _setjmp_portable
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+        jr t9
+
+1:      LA      t9, WRAP(setjmp)
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+        jr t9
+END(WRAP(sigsetjmp))
+
+LEAF(WRAP(siglongjmp), FRAMESZ)
+        PTR_SUBU sp, FRAMESZ
+        SETUP_GP64(GPOFF, WRAP(siglongjmp))
+        .set    reorder
+        REG_L   t0, JB_SAVEMASK(a0)             # get "savemask"
+        bne     t0, 0x0, 1f                     # restore signal mask?
+        LA      t9, _longjmp_portable
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+        jr      t9
+1:
+        LA      t9, WRAP(longjmp)
+        RESTORE_GP64
+        PTR_ADDU sp, FRAMESZ
+        jr      t9
+END(WRAP(siglongjmp))
diff --git a/ndk/sources/android/libportable/arch-mips/socket.c b/ndk/sources/android/libportable/arch-mips/socket.c
index 51b8db0..be2c7e6 100644
--- a/ndk/sources/android/libportable/arch-mips/socket.c
+++ b/ndk/sources/android/libportable/arch-mips/socket.c
@@ -14,31 +14,248 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <unistd.h>
 #include <sys/socket.h>
-#include <sys/linux-syscalls.h>
+#include <fcntl.h>
+#include <netdb.h>
+
 #include <socket_portable.h>
+#include <fcntl_portable.h>
+#include <netdb_portable.h>
+#include <portability.h>
+
+#define PORTABLE_TAG "socket_portable"
+#include <log_portable.h>
 
 
 #if SOCK_STREAM==SOCK_STREAM_PORTABLE
 #error Bad build environment
 #endif
 
-static inline int mips_change_type(int type)
+/* LTP defaults to using O_NONBLOCK if SOCK_NONBLOCK is not defined. */
+#ifndef SOCK_NONBLOCK_PORTABLE
+# define SOCK_NONBLOCK_PORTABLE O_NONBLOCK_PORTABLE
+#endif
+#ifndef SOCK_NONBLOCK
+# define SOCK_NONBLOCK O_NONBLOCK
+#endif
+
+/* Current NDK headers do not define SOCK_CLOEXEC or O_CLOEXEC */
+#if !defined(SOCK_CLOEXEC_PORTABLE) && defined(O_CLOEXEC_PORTABLE)
+# define SOCK_CLOEXEC_PORTABLE O_CLOEXEC_PORTABLE
+#endif
+#if !defined(SOCK_CLOEXEC) && defined(O_CLOEXEC)
+# define SOCK_CLOEXEC O_CLOEXEC
+#endif
+
+
+/*
+ * Portable to Native socktype mapper.
+ */
+static inline int socktype_pton(int portable_type)
 {
-    switch (type) {
-      case SOCK_STREAM_PORTABLE: return SOCK_STREAM;
-      case SOCK_DGRAM_PORTABLE: return SOCK_DGRAM;
-      case SOCK_RAW_PORTABLE: return SOCK_RAW;
-      case SOCK_RDM_PORTABLE: return SOCK_RDM;
-      case SOCK_SEQPACKET_PORTABLE: return SOCK_SEQPACKET;
-      case SOCK_PACKET_PORTABLE: return SOCK_PACKET;
+    int native_type = 0;
+
+    ALOGV("%s(portable_type:0x%x) {", __func__, portable_type);
+
+    if (portable_type & SOCK_NONBLOCK_PORTABLE) {
+        native_type |= SOCK_NONBLOCK;
+        portable_type &= ~SOCK_NONBLOCK_PORTABLE;
     }
-    return type;
+
+#if defined(SOCK_CLOEXEC_PORTABLE) && defined(SOCK_CLOEXEC)
+    if (portable_type & SOCK_CLOEXEC_PORTABLE) {
+        native_type |= SOCK_CLOEXEC;
+        portable_type &= ~SOCK_CLOEXEC_PORTABLE;
+    }
+#endif
+
+    switch (portable_type) {
+    case SOCK_STREAM_PORTABLE: native_type |= SOCK_STREAM; break;
+    case SOCK_DGRAM_PORTABLE: native_type |= SOCK_DGRAM; break;
+    case SOCK_RAW_PORTABLE: native_type |= SOCK_RAW; break;
+    case SOCK_RDM_PORTABLE: native_type |= SOCK_RDM; break;
+    case SOCK_SEQPACKET_PORTABLE: native_type |= SOCK_SEQPACKET; break;
+    case SOCK_PACKET_PORTABLE: native_type |= SOCK_PACKET; break;
+    default:
+        ALOGE("%s: case default: native_type:0x%x |= portable_type:0x%x:[UNKNOWN!];", __func__,
+                                 native_type,        portable_type);
+
+        native_type |= portable_type;
+        break;
+    }
+    ALOGV("%s: return(native_type:%d); }", __func__, native_type);
+    return native_type;
 }
 
-extern int socket(int, int, int);
 
-int socket_portable(int domain, int type, int protocol) {
-    return socket(domain, mips_change_type(type), protocol);
+/*
+ * Native to Portable socktype mapper.
+ */
+static inline int socktype_ntop(int native_type)
+{
+    int portable_type = 0;
+
+    ALOGV("%s(native_type:0x%x) {", __func__, native_type);
+
+    if (native_type & SOCK_NONBLOCK) {
+        portable_type |= SOCK_NONBLOCK_PORTABLE;
+        native_type &= ~SOCK_NONBLOCK;
+    }
+
+#if defined(SOCK_CLOEXEC_PORTABLE) && defined(SOCK_CLOEXEC)
+    if (native_type & SOCK_CLOEXEC) {
+        portable_type |= SOCK_CLOEXEC_PORTABLE;
+        native_type &= ~SOCK_CLOEXEC;
+    }
+#endif
+
+    switch (native_type) {
+    case SOCK_STREAM: portable_type |= SOCK_STREAM_PORTABLE; break;
+    case SOCK_DGRAM: portable_type |= SOCK_DGRAM_PORTABLE; break;
+    case SOCK_RAW: portable_type |= SOCK_RAW_PORTABLE; break;
+    case SOCK_RDM: portable_type |= SOCK_RDM_PORTABLE; break;
+    case SOCK_SEQPACKET: portable_type |= SOCK_SEQPACKET_PORTABLE; break;
+    case SOCK_PACKET: portable_type |= SOCK_PACKET_PORTABLE; break;
+    default:
+        portable_type |= native_type;
+        ALOGE("%s: case default: portable_type:0x%x |= native_type:0x%x:[UNKNOWN!];", __func__,
+                                 portable_type,        native_type);
+    }
+    ALOGV("%s: return(portable_type:%d); }", __func__, portable_type);
+    return portable_type;
+}
+
+
+extern int REAL(socket)(int, int, int);
+
+int WRAP(socket)(int domain, int type, int protocol) {
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(domain:%d, type:%d, protocol:%d) {", __func__,
+              domain,    type,    protocol);
+
+    rv = REAL(socket)(domain, socktype_pton(type), protocol);
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+int WRAP(socketpair)(int domain, int type, int protocol, int sv[2]) {
+    int rv;
+
+    ALOGV(" ");
+    ALOGV("%s(domain:%d, type:%d, protocol:%d, sv[2]:%p) {", __func__,
+              domain,    type,    protocol,    sv);
+
+    rv = REAL(socketpair)(domain, socktype_pton(type), protocol, sv);
+
+    if ((rv != 0) || invalid_pointer(sv)) {
+        ALOGV("%s: return(rv:%d); }", __func__,
+                          rv);
+    } else {
+        ALOGV("%s: return(rv:%d); sv[0]:%d; sv[1]:%d;}", __func__,
+                          rv,     sv[0],    sv[1]);
+    }
+    return rv;
+}
+
+#define PRINT_ADDRINFO(p) {                                                                      \
+    ALOGV("%s: p:%p->{ai_flags:%d, ai_family:%d, ai_socktype:%d, ai_protocol:%d, ...", __func__, \
+               p,  p->ai_flags, p->ai_family, p->ai_socktype, p->ai_protocol);                   \
+                                                                                                 \
+    ALOGV("%s: p:%p->{... ai_addrlen:%d, ai_addr:%p, ai_canonname:%p, p->ai_next:%p);", __func__,\
+               p,      p->ai_addrlen, p->ai_addr, p->ai_canonname, p->ai_next);                  \
+}
+
+/*
+ * Returns a list of portable addrinfo structures that are
+ * later made free with a call to the portable version of
+ * freeaddrinfo(); which is written below this function.
+ */
+int WRAP(getaddrinfo)(const char *node, const char *service,
+                 struct addrinfo_portable *portable_hints,
+                 struct addrinfo_portable **portable_results)
+{
+    int rv;
+    struct addrinfo *native_hints;
+    struct addrinfo **native_results, *rp;
+    int saved_portable_socktype;
+
+    ALOGV(" ");
+    ALOGV("%s(node:%p, service:%p, portable_hints:%p, portable_results:%p) {", __func__,
+              node,    service,    portable_hints,    portable_results);
+
+    PRINT_ADDRINFO(portable_hints);
+
+    /*
+     * The only part of the addrinfo structure that needs to be modified
+     * between ARM and MIPS is the socktype;
+     */
+    ASSERT(sizeof(struct addrinfo_portable) == sizeof(struct addrinfo));
+    native_hints = ((struct addrinfo *) portable_hints);
+    if (native_hints != NULL) {
+        saved_portable_socktype = portable_hints->ai_socktype;
+        native_hints->ai_socktype = socktype_pton(saved_portable_socktype);
+    }
+    ASSERT(portable_results != NULL);
+    native_results = (struct addrinfo **) portable_results;
+
+    rv = REAL(getaddrinfo)(node, service, native_hints, native_results);
+
+    if (native_hints != NULL) {
+        portable_hints->ai_socktype = saved_portable_socktype;
+    }
+
+
+    /*
+     * Map socktypes in the return list of addrinfo structures from native to portable.
+     * Assuming getaddrinfo() has left structure writeable and the list is generated
+     * on each call. This seems to be true when looking at the man page and the code
+     * at:
+     *          ./bionic/libc/netbsd/net/getaddrinfo.c
+     */
+    for (rp = *native_results; rp != NULL; rp = rp->ai_next) {
+        PRINT_ADDRINFO(rp);
+        rp->ai_socktype = socktype_ntop(rp->ai_socktype);
+    }
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
+
+/*
+ * Free the results list returned from a previous call
+ * to the portable version of getaddrinfo().
+ */
+void WRAP(freeaddrinfo)(struct addrinfo_portable *portable_results)
+{
+    struct addrinfo *native_results, *rp;
+
+    ALOGV(" ");
+    ALOGV("%s(portable_results:%p) {", __func__, portable_results);
+
+    PRINT_ADDRINFO(portable_results);
+
+    /*
+     * The only part of each addrinfo structure that needs to be modified
+     * between ARM and MIPS is the socktype;
+     *
+     * Map socktypes in the return list of iportable addrinfo structures back to native.
+     * Again, assuming getaddrinfo() has left structure writeable and the list is generated
+     * on each call. This seems to be true when looking at the man page and the code.
+     */
+    ASSERT(sizeof(struct addrinfo_portable) == sizeof(struct addrinfo));
+    native_results = ((struct addrinfo *) portable_results);
+    for (rp = native_results; rp != NULL; rp = rp->ai_next) {
+        PRINT_ADDRINFO(rp);
+        rp->ai_socktype = socktype_pton(rp->ai_socktype);       /* Likely not really necessary */
+    }
+    REAL(freeaddrinfo)(native_results);
+
+    ALOGV("%s: return; }", __func__);
+    return;
 }
diff --git a/ndk/sources/android/libportable/arch-mips/sockopt.c b/ndk/sources/android/libportable/arch-mips/sockopt.c
index fda4049..6c7ec51 100644
--- a/ndk/sources/android/libportable/arch-mips/sockopt.c
+++ b/ndk/sources/android/libportable/arch-mips/sockopt.c
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <socket_portable.h>
 
-
 #if SOL_SOCKET_PORTABLE==SOL_SOCKET
 #error Build environment
 #endif
@@ -27,8 +27,8 @@
 {
     switch (level) {
     case SOL_SOCKET_PORTABLE:
-	level = SOL_SOCKET;
-	break;
+        level = SOL_SOCKET;
+        break;
     }
     return level;
 }
@@ -38,83 +38,83 @@
 {
     switch (optname) {
     case SO_DEBUG_PORTABLE:
-	return SO_DEBUG;
+        return SO_DEBUG;
     case SO_REUSEADDR_PORTABLE:
-	return SO_REUSEADDR;
+        return SO_REUSEADDR;
     case SO_TYPE_PORTABLE:
-	return SO_TYPE;
+        return SO_TYPE;
     case SO_ERROR_PORTABLE:
-	return SO_ERROR;
+        return SO_ERROR;
     case SO_DONTROUTE_PORTABLE:
-	return SO_DONTROUTE;
+        return SO_DONTROUTE;
     case SO_BROADCAST_PORTABLE:
-	return SO_BROADCAST;
+        return SO_BROADCAST;
     case SO_SNDBUF_PORTABLE:
-	return SO_SNDBUF;
+        return SO_SNDBUF;
     case SO_RCVBUF_PORTABLE:
-	return SO_RCVBUF;
+        return SO_RCVBUF;
     case SO_SNDBUFFORCE_PORTABLE:
-	return SO_SNDBUFFORCE;
+        return SO_SNDBUFFORCE;
     case SO_RCVBUFFORCE_PORTABLE:
-	return SO_RCVBUFFORCE;
+        return SO_RCVBUFFORCE;
     case SO_KEEPALIVE_PORTABLE:
-	return SO_KEEPALIVE;
+        return SO_KEEPALIVE;
     case SO_OOBINLINE_PORTABLE:
-	return SO_OOBINLINE;
+        return SO_OOBINLINE;
     case SO_NO_CHECK_PORTABLE:
-	return SO_NO_CHECK;
+        return SO_NO_CHECK;
     case SO_PRIORITY_PORTABLE:
-	return SO_PRIORITY;
+        return SO_PRIORITY;
     case SO_LINGER_PORTABLE:
-	return SO_LINGER;
+        return SO_LINGER;
     case SO_BSDCOMPAT_PORTABLE:
-	return SO_BSDCOMPAT;
+        return SO_BSDCOMPAT;
     case SO_PASSCRED_PORTABLE:
-	return SO_PASSCRED;
+        return SO_PASSCRED;
     case SO_PEERCRED_PORTABLE:
-	return SO_PEERCRED;
+        return SO_PEERCRED;
     case SO_RCVLOWAT_PORTABLE:
-	return SO_RCVLOWAT;
+        return SO_RCVLOWAT;
     case SO_SNDLOWAT_PORTABLE:
-	return SO_SNDLOWAT;
+        return SO_SNDLOWAT;
     case SO_RCVTIMEO_PORTABLE:
-	return SO_RCVTIMEO;
+        return SO_RCVTIMEO;
     case SO_SNDTIMEO_PORTABLE:
-	return SO_SNDTIMEO;
+        return SO_SNDTIMEO;
     case SO_SECURITY_AUTHENTICATION_PORTABLE:
-	return SO_SECURITY_AUTHENTICATION;
+        return SO_SECURITY_AUTHENTICATION;
     case SO_SECURITY_ENCRYPTION_TRANSPORT_PORTABLE:
-	return SO_SECURITY_ENCRYPTION_TRANSPORT;
+        return SO_SECURITY_ENCRYPTION_TRANSPORT;
     case SO_SECURITY_ENCRYPTION_NETWORK_PORTABLE:
-	return SO_SECURITY_ENCRYPTION_NETWORK;
+        return SO_SECURITY_ENCRYPTION_NETWORK;
     case SO_BINDTODEVICE_PORTABLE:
-	return SO_BINDTODEVICE;
+        return SO_BINDTODEVICE;
     case SO_ATTACH_FILTER_PORTABLE:
-	return SO_ATTACH_FILTER;
+        return SO_ATTACH_FILTER;
     case SO_DETACH_FILTER_PORTABLE:
-	return SO_DETACH_FILTER;
+        return SO_DETACH_FILTER;
     case SO_PEERNAME_PORTABLE:
-	return SO_PEERNAME;
+        return SO_PEERNAME;
     case SO_TIMESTAMP_PORTABLE:
-	return SO_TIMESTAMP;
+        return SO_TIMESTAMP;
     case SO_ACCEPTCONN_PORTABLE:
-	return SO_ACCEPTCONN;
+        return SO_ACCEPTCONN;
     case SO_PEERSEC_PORTABLE:
-	return SO_PEERSEC;
+        return SO_PEERSEC;
     case SO_PASSSEC_PORTABLE:
-	return SO_PASSSEC;
+        return SO_PASSSEC;
     }
     return optname;
 }
 
 extern int setsockopt(int, int, int, const void *, socklen_t);
-int setsockopt_portable(int s, int level, int optname, const void *optval, socklen_t optlen)
+int WRAP(setsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen)
 {
-    return setsockopt(s, mips_change_level(level), mips_change_optname(optname), optval, optlen);
+    return REAL(setsockopt)(s, mips_change_level(level), mips_change_optname(optname), optval, optlen);
 }
 
 extern int getsockopt (int, int, int, void *, socklen_t *);
-int getsockopt_portable(int s, int level, int optname, void *optval, socklen_t *optlen)
+int WRAP(getsockopt)(int s, int level, int optname, void *optval, socklen_t *optlen)
 {
-    return getsockopt(s, mips_change_level(level), mips_change_optname(optname), optval, optlen);
+    return REAL(getsockopt)(s, mips_change_level(level), mips_change_optname(optname), optval, optlen);
 }
diff --git a/ndk/sources/android/libportable/arch-mips/stat.c b/ndk/sources/android/libportable/arch-mips/stat.c
index 6af5eee..8706f86 100644
--- a/ndk/sources/android/libportable/arch-mips/stat.c
+++ b/ndk/sources/android/libportable/arch-mips/stat.c
@@ -14,37 +14,64 @@
  * limitations under the License.
  */
 
+#include <portability.h>
+#include <errno.h>
+#include <errno_portable.h>
 #include <stat_portable.h>
 
 /* Note: The Portable Header will define stat to stat_portable */
-int stat_portable(const char *path, struct stat_portable *s)
+int WRAP(stat)(const char *path, struct stat_portable *s)
 {
     struct stat mips_stat;
-    int ret = stat(path, &mips_stat);
+    int ret;
+
+    if (invalid_pointer(s)) {
+        *REAL(__errno)() = EFAULT;
+        return -1;
+    }
+    ret = REAL(stat)(path, &mips_stat);
     stat_ntop(&mips_stat, s);
     return ret;
 }
 
-int fstat_portable(int fd, struct stat_portable *s)
+int WRAP(fstat)(int fd, struct stat_portable *s)
 {
     struct stat mips_stat;
-    int ret = fstat(fd, &mips_stat);
+    int ret;
+
+    if (invalid_pointer(s)) {
+        *REAL(__errno)() = EFAULT;
+        return -1;
+    }
+    ret = REAL(fstat)(fd, &mips_stat);
     stat_ntop(&mips_stat, s);
     return ret;
 }   
 
-int lstat_portable(const char *path, struct stat_portable *s)
+int WRAP(lstat)(const char *path, struct stat_portable *s)
 {
     struct stat mips_stat;
-    int ret = lstat(path, &mips_stat);
+    int ret;
+
+    if (invalid_pointer(s)) {
+        *REAL(__errno)() = EFAULT;
+        return -1;
+    }
+    ret = REAL(lstat)(path, &mips_stat);
     stat_ntop(&mips_stat, s);
     return ret;
 }
 
-int fstatat_portable(int dirfd, const char *path, struct stat_portable *s, int flags)
+int WRAP(fstatat)(int dirfd, const char *path, struct stat_portable *s, int flags)
 {
     struct stat mips_stat;
-    int ret = fstatat(dirfd, path, &mips_stat, flags);
+    int ret;
+
+    if (invalid_pointer(s)) {
+        *REAL(__errno)() = EFAULT;
+        return -1;
+    }
+    ret = REAL(fstatat)(dirfd, path, &mips_stat, flags);
     stat_ntop(&mips_stat, s);
     return ret;
 }
diff --git a/ndk/sources/android/libportable/arch-mips/statfs.c b/ndk/sources/android/libportable/arch-mips/statfs.c
index cd8b5af..45dfd09 100644
--- a/ndk/sources/android/libportable/arch-mips/statfs.c
+++ b/ndk/sources/android/libportable/arch-mips/statfs.c
@@ -14,8 +14,11 @@
  * limitations under the License.
  */
 
-#include <statfs_portable.h>
+#include <portability.h>
 #include <string.h>
+#include <errno.h>
+#include <errno_portable.h>
+#include <statfs_portable.h>
 
 static inline void statfs_ntop(struct statfs *n_statfs, struct statfs_portable *p_statfs)
 {
@@ -32,18 +35,30 @@
     p_statfs->f_frsize = n_statfs->f_frsize;
 }
 
-int statfs_portable(const char*  path, struct statfs_portable*  stat)
+int WRAP(statfs)(const char*  path, struct statfs_portable*  stat)
 {
     struct statfs mips_stat;
-    int ret = statfs(path, &mips_stat);
+    int ret;
+
+    if (invalid_pointer(stat)) {
+        *REAL(__errno)() = EFAULT;
+        return -1;
+    }
+    ret = REAL(statfs)(path, &mips_stat);
     statfs_ntop(&mips_stat, stat);
     return ret;
 }
 
-int fstatfs_portable(int fd, struct statfs_portable*  stat)
+int WRAP(fstatfs)(int fd, struct statfs_portable*  stat)
 {
     struct statfs mips_stat;
-    int ret = fstatfs(fd, &mips_stat);
+    int ret;
+
+    if (invalid_pointer(stat)) {
+        *REAL(__errno)() = EFAULT;
+        return -1;
+    }
+    ret = REAL(fstatfs)(fd, &mips_stat);
     statfs_ntop(&mips_stat, stat);
     return ret;
 }
diff --git a/ndk/sources/android/libportable/arch-mips/syscall.c b/ndk/sources/android/libportable/arch-mips/syscall.c
new file mode 100644
index 0000000..5e31b80
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/syscall.c
@@ -0,0 +1,640 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <signal.h>
+#include <signal_portable.h>
+#include <time.h>
+#include <errno.h>
+#include <errno_portable.h>
+#include <eventfd_portable.h>
+#include <filefd_portable.h>
+#include <inotify_portable.h>
+#include <timerfd_portable.h>
+#include <asm/unistd-portable.h>
+#include <asm/unistd.h>
+
+#define PORTABLE_TAG "syscall_portable"
+#include <log_portable.h>
+
+#if __NR_gettimeofday_portable == __NR_gettimeofday
+#error "Bad build environment"
+#endif
+
+/*
+ * Minimal syscall support for LTP testing.
+ * These are the system calls that LTP references explicitly.
+ * Not all of them are exported via bionic header so use #ifdef.
+ *
+ * TODO:
+ *    Add existing portable system calls currently redirected from
+ *    experimental Bionic linker code so that calls to them via
+ *    syscall() are also processed. For example, LTP only calls open()
+ *    directly and never does a syscall(__NR_open, ...).
+ */
+
+
+extern int REAL(syscall)(int, ...);
+
+#define MAXARGS 8
+
+int WRAP(syscall)(int portable_number, ...)
+{
+    va_list ap;
+    int native_number, ret;
+    int i, nargs, args[MAXARGS];
+
+    ALOGV(" ");
+    ALOGV("%s(portable_number:%d, ...) {", __func__, portable_number);
+
+    switch (portable_number) {
+#ifdef __NR_add_key_portable
+    case __NR_add_key_portable: native_number = __NR_add_key; break;
+#endif
+
+#ifdef __NR_cacheflush_portable
+    case __NR_cacheflush_portable: {
+        long start, end, flags;
+
+        va_start(ap, portable_number);
+        start = va_arg(ap, long);
+        end = va_arg(ap, long);
+        flags = va_arg(ap, long);
+        va_end(ap);
+
+        ret = cacheflush(start, end, flags);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_capget_portable
+    case __NR_capget_portable: native_number = __NR_capget; break;
+#endif
+
+#ifdef __NR_capset_portable
+    case __NR_capset_portable: native_number = __NR_capset; break;
+#endif
+
+#ifdef __NR_clock_getres_portable
+    case __NR_clock_getres_portable: native_number = __NR_clock_getres; break;
+#endif
+
+#ifdef __NR_clock_nanosleep
+    case __NR_clock_nanosleep_portable: native_number = __NR_clock_nanosleep; break;
+#endif
+
+#ifdef __NR_dup3_portable
+    case __NR_dup3_portable: native_number = __NR_dup3; break;
+#endif
+
+#ifdef __NR_epoll_create_portable
+    case __NR_epoll_create_portable: native_number = __NR_epoll_create; break;
+#endif
+
+#ifdef __NR_epoll_create1_portable
+    case __NR_epoll_create1_portable: native_number = __NR_epoll_create1; break;
+#endif
+
+#ifdef __NR_eventfd_portable
+    /*
+     * Prior to 2.6.27 we only had this system call,
+     * which didn't have a flags argument. The kernel
+     * just provides a zero for flags when this system
+     * call number is used.
+     */
+    case __NR_eventfd_portable: {
+        unsigned int initval;                        /* 64-bit counter initial value */
+        int flags = 0;
+
+        va_start(ap, portable_number);
+
+        initval  = va_arg(ap, int);
+
+        va_end(ap);
+
+        ret = WRAP(eventfd)(initval, flags);      /* Android uses __NR_eventfd2 in eventfd() */
+        goto done;
+    }
+#endif
+
+#ifdef __NR_eventfd2_portable
+    /*
+     * Starting with Linux 2.6.27 a flags argument was added.
+     * Both Bionic and glibc implement the eventfd() now with
+     * the additional flags argument.
+     */
+    case __NR_eventfd2_portable: {
+        unsigned int initval;                        /* 64-bit counter initial value */
+        int flags;
+
+        va_start(ap, portable_number);
+
+        initval  = va_arg(ap, int);
+        flags = va_arg(ap, int);
+
+        va_end(ap);
+
+        ret = WRAP(eventfd)(initval, flags);      /* Android uses __NR_eventfd2 in eventfd() */
+        goto done;
+    }
+#endif
+
+#ifdef __NR_exit_group_portable
+    case __NR_exit_group_portable: native_number = __NR_exit_group; break;
+#endif
+
+#ifdef __NR_faccessat_portable
+    case __NR_faccessat_portable: native_number = __NR_faccessat; break;
+#endif
+
+#ifdef __NR_fallocate_portable
+    case __NR_fallocate_portable: native_number = __NR_fallocate; break;
+#endif
+
+#ifdef __NR_fchmodat_portable
+    case __NR_fchmodat_portable: native_number = __NR_fchmodat; break;
+#endif
+
+#ifdef __NR_fchownat_portable
+    case __NR_fchownat_portable: native_number = __NR_fchownat; break;
+#endif
+
+#ifdef __NR_fstatat64_portable
+    case __NR_fstatat64_portable: native_number = __NR_fstatat64; break;
+#endif
+
+#ifdef __NR_futimesat_portable
+    case __NR_futimesat_portable: native_number = __NR_futimesat; break;
+#endif
+
+#ifdef __NR_getegid_portable
+    case __NR_getegid_portable: native_number = __NR_getegid; break;
+#endif
+
+#ifdef __NR_geteuid_portable
+    case __NR_geteuid_portable: native_number = __NR_geteuid; break;
+#endif
+
+#ifdef __NR_getgid_portable
+    case __NR_getgid_portable: native_number = __NR_getgid; break;
+#endif
+
+#ifdef __NR_get_mempolicy_portable
+    case __NR_get_mempolicy_portable: native_number = __NR_get_mempolicy; break;
+#endif
+
+#ifdef __NR_get_robust_list_portable
+    case __NR_get_robust_list_portable: native_number = __NR_get_robust_list; break;
+#endif
+
+#ifdef __NR_gettid_portable
+    case __NR_gettid_portable: native_number = __NR_gettid; break;
+#endif
+
+#ifdef __NR_gettimeofday_portable
+    case __NR_gettimeofday_portable: native_number = __NR_gettimeofday; break;
+#endif
+
+#ifdef __NR_getuid_portable
+    case __NR_getuid_portable: native_number = __NR_getuid; break;
+#endif
+
+#ifdef __NR_inotify_init_portable
+    case __NR_inotify_init_portable: native_number = __NR_inotify_init; break;
+#endif
+
+#ifdef __NR_inotify_add_watch_portable
+    case __NR_inotify_add_watch_portable: native_number = __NR_inotify_add_watch; break;
+#endif
+
+#ifdef __NR_inotify_init1_portable
+    case __NR_inotify_init1_portable: {
+        int portable_flags;
+
+        va_start(ap, portable_number);
+        portable_flags = va_arg(ap, int);
+        va_end(ap);
+
+        ret = WRAP(inotify_init1)(portable_flags);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_keyctl_portable
+    case __NR_keyctl_portable: native_number = __NR_keyctl; break;
+#endif
+
+#ifdef __NR_linkat
+    case __NR_linkat_portable: native_number = __NR_linkat; break;
+#endif
+
+#ifdef __NR_mbind_portable
+    case __NR_mbind_portable: native_number = __NR_mbind; break;
+#endif
+
+#ifdef __NR_mkdirat_portable
+    case __NR_mkdirat_portable: native_number = __NR_mkdirat; break;
+#endif
+
+#ifdef __NR_mknodat_portable
+    case __NR_mknodat_portable: native_number = __NR_mknodat; break;
+#endif
+
+#ifdef __NR_openat_portable
+    case __NR_openat_portable: native_number = __NR_openat; break;
+#endif
+
+#ifdef __NR_pipe2_portable
+    case __NR_pipe2_portable: {
+        int *pipefd_ptr;
+        int portable_flags;
+
+        va_start(ap, portable_number);
+        pipefd_ptr = va_arg(ap, int *);
+        portable_flags = va_arg(ap, int);
+        va_end(ap);
+
+        ret = WRAP(pipe2)(pipefd_ptr, portable_flags);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_readahead_portable
+    case __NR_readahead_portable: native_number = __NR_readahead; break;
+#endif
+
+#ifdef __NR_readlinkat_portable
+    case __NR_readlinkat_portable: native_number = __NR_readlinkat; break;
+#endif
+
+#ifdef __NR_renameat_portable
+    case __NR_renameat_portable: native_number = __NR_renameat; break;
+#endif
+
+#ifdef __NR_rt_sigaction_portable
+    case __NR_rt_sigaction_portable: {
+        int sig;
+        struct sigaction_portable *act;
+        struct sigaction_portable *oact;
+        size_t sigsetsize;
+
+        va_start(ap, portable_number);
+        sig = va_arg(ap, int);
+        act = va_arg(ap, struct sigaction_portable *);
+        oact = va_arg(ap, struct sigaction_portable *);
+        sigsetsize = va_arg(ap, size_t);
+        va_end(ap);
+        return WRAP(__rt_sigaction)(sig, act, oact, sigsetsize);
+    }
+#endif
+
+#ifdef __NR_rt_sigprocmask_portable
+    case __NR_rt_sigprocmask_portable: {
+        int how;
+        const sigset_portable_t *set;
+        sigset_portable_t *oset;
+        size_t sigsetsize;
+
+        va_start(ap, portable_number);
+        how = va_arg(ap, int);
+        set = va_arg(ap, sigset_portable_t *);
+        oset = va_arg(ap, sigset_portable_t *);
+        sigsetsize = va_arg(ap, size_t);
+        va_end(ap);
+
+        ret = WRAP(__rt_sigprocmask)(how, set, oset, sigsetsize);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_rt_sigtimedwait_portable
+    case __NR_rt_sigtimedwait_portable: {
+        const sigset_portable_t *set;
+        siginfo_portable_t *info;
+        const struct timespec *timeout;
+        size_t sigsetsize;
+
+        va_start(ap, portable_number);
+        set = va_arg(ap, sigset_portable_t *);
+        info = va_arg(ap, siginfo_portable_t *);
+        timeout = va_arg(ap, struct timespec *);
+        sigsetsize = va_arg(ap, size_t);
+        va_end(ap);
+
+        ret = WRAP(__rt_sigtimedwait)(set, info, timeout, sigsetsize);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_rt_sigqueueinfo_portable
+    case __NR_rt_sigqueueinfo_portable: {
+        pid_t pid;
+        int sig;
+        siginfo_portable_t *uinfo;
+
+        va_start(ap, portable_number);
+        pid = va_arg(ap, pid_t);
+        sig = va_arg(ap, int);
+        uinfo = va_arg(ap, siginfo_portable_t *);
+        va_end(ap);
+
+        ret = WRAP(rt_sigqueueinfo)(pid, sig, uinfo);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_setgid_portable
+    case __NR_setgid_portable: native_number = __NR_setgid; break;
+#endif
+
+#ifdef __NR_set_mempolicy_portable
+    case __NR_set_mempolicy_portable: native_number = __NR_set_mempolicy; break;
+#endif
+
+#ifdef __NR_set_robust_list_portable
+    case __NR_set_robust_list_portable: native_number = __NR_set_robust_list; break;
+#endif
+
+#ifdef __NR_set_tid_address_portable
+    case __NR_set_tid_address_portable: native_number = __NR_set_tid_address; break;
+#endif
+
+#ifdef __NR_sgetmask_portable
+    case __NR_sgetmask_portable: native_number = __NR_sgetmask; break;
+#endif
+
+#ifdef __NR_signalfd4_portable
+    case __NR_signalfd4_portable: {
+        int fd;
+        sigset_portable_t *portable_sigmask;
+        int sigsetsize;
+        int flags;
+
+        va_start(ap, portable_number);
+
+        fd = va_arg(ap, int);
+        portable_sigmask = va_arg(ap, sigset_portable_t *);
+        sigsetsize = va_arg(ap, int);
+        flags = va_arg(ap, int);
+
+        va_end(ap);
+
+        ret = do_signalfd4_portable(fd, (const sigset_portable_t *) portable_sigmask, sigsetsize,
+                                    flags);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_socketcall_portable
+    case __NR_socketcall_portable: native_number = __NR_socketcall; break;
+#endif
+
+#ifdef __NR_splice_portable
+    case __NR_splice_portable: native_number = __NR_splice; break;
+#endif
+
+/* REMIND - DOUBLE CHECK THIS ONE */
+#ifdef __NR_ssetmask_portable
+    case __NR_ssetmask_portable: native_number = __NR_ssetmask; break;
+#endif
+
+#ifdef __NR_swapoff_portable
+    case __NR_swapoff_portable: native_number = __NR_swapoff; break;
+#endif
+
+#ifdef __NR_swapon_portable
+    case __NR_swapon_portable: native_number = __NR_swapon; break;
+#endif
+
+#ifdef __NR_symlinkat_portable
+    case __NR_symlinkat_portable: native_number = __NR_symlinkat; break;
+#endif
+
+/*
+ * ARM uses the new, version 2, form of sync_file_range() which
+ * doesn't waste 32 bits between the 32 bit arg and the 64 bit arg.
+ * It does this by moving the last 32 bit arg and placing it with
+ * the 1st 32 bit arg.
+ *
+ * Here's the trivial mapping function in the kernel ARM code:
+ *
+ *   sync_file_range2(int fd, unsigned int flags, loff_t offset, loff_t nbytes) {
+ *       return sys_sync_file_range(fd, offset, nbytes, flags);
+ *   }
+ *
+ * For portability we have to do a similar mapping for the native/MIPS system
+ * call but have to provide the alignment padding expected by the sync_file_range()
+ * system call. We avoid alignment issues while using varargs by avoiding the use
+ * of 64 bit args.
+ */
+#if defined( __NR_arm_sync_file_range_portable)
+    case __NR_arm_sync_file_range_portable: native_number = __NR_sync_file_range; {
+        int fd;
+        int flags;
+        int offset_low, offset_high;
+        int nbytes_low, nbytes_high;
+        int align_fill = 0;
+
+
+        va_start(ap, portable_number);
+        fd = va_arg(ap, int);
+        flags = va_arg(ap, int);
+        offset_low = va_arg(ap, int);
+        offset_high = va_arg(ap, int);
+        nbytes_low = va_arg(ap, int);
+        nbytes_high = va_arg(ap, int);
+        va_end(ap);
+
+        ALOGV("%s: Calling syscall(native_number:%d:'sync_file_range', fd:%d, "
+              "align_fill:0x%x, offset_low:0x%x, offset_high:0x%x, "
+              "nbytes_low:0x%x, nbytes_high:0x%x, flags:0x%x);", __func__,
+              native_number, fd, align_fill, offset_low, offset_high,
+              nbytes_low, nbytes_high, flags);
+
+        ret = REAL(syscall)(native_number, fd, align_fill, offset_low, offset_high,
+                      nbytes_low, nbytes_high, flags);
+
+        goto done;
+    }
+#endif
+
+
+#ifdef __NR__sysctl_portable
+    case __NR__sysctl_portable: native_number = __NR__sysctl; break;
+#endif
+
+#ifdef __NR_sysfs_portable
+    case __NR_sysfs_portable: native_number = __NR_sysfs; break;
+#endif
+
+#ifdef __NR_syslog_portable
+    case __NR_syslog_portable: native_number = __NR_syslog; break;
+#endif
+
+#ifdef __NR_tee_portable
+    case __NR_tee_portable: native_number = __NR_tee; break;
+#endif
+
+#ifdef __NR_timer_create_portable
+    case __NR_timer_create_portable: {
+        clockid_t clockid;
+        struct sigevent *evp;
+        timer_t *timerid;
+
+        va_start(ap, portable_number);
+        clockid = va_arg(ap, clockid_t);
+        evp = va_arg(ap, struct sigevent *);
+        timerid = va_arg(ap, timer_t *);
+        va_end(ap);
+
+        ret = WRAP(timer_create)(clockid, evp, timerid);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_timerfd_create_portable
+    case __NR_timerfd_create_portable: {
+        int clockid;
+        int flags;
+
+        va_start(ap, portable_number);
+        clockid = va_arg(ap, int);              /* clockid is portable */
+        flags = va_arg(ap, int);                /* flags need to be mapped */
+        va_end(ap);
+
+        ret = WRAP(timerfd_create)(clockid, flags);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_timerfd_gettime_portable
+    case __NR_timerfd_gettime_portable: native_number = __NR_timerfd_gettime; break;
+#endif
+
+#ifdef __NR_timerfd_settime_portable
+    case __NR_timerfd_settime_portable: native_number = __NR_timerfd_settime; break;
+#endif
+
+#ifdef __NR_timer_getoverrun_portable
+    case __NR_timer_getoverrun_portable: native_number = __NR_timer_getoverrun; break;
+#endif
+
+#ifdef __NR_timer_gettime_portable
+    case __NR_timer_gettime_portable: native_number = __NR_timer_gettime; break;
+#endif
+
+#ifdef __NR_timer_settime_portable
+    case __NR_timer_settime_portable: native_number = __NR_timer_settime; break;
+#endif
+
+#ifdef __NR_rt_tgsigqueueinfo_portable
+    case __NR_rt_tgsigqueueinfo_portable: {
+        pid_t tgid;
+        pid_t pid;
+        int sig;
+        siginfo_portable_t *uinfo;
+
+        va_start(ap, portable_number);
+        tgid = va_arg(ap, pid_t);
+        pid = va_arg(ap, pid_t);
+        sig = va_arg(ap, int);
+        uinfo = va_arg(ap, siginfo_portable_t *);
+        va_end(ap);
+
+        ret = WRAP(rt_tgsigqueueinfo)(tgid, pid, sig, uinfo);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_tkill_portable
+    case __NR_tkill_portable: {
+        int tid, sig;
+
+        va_start(ap, portable_number);
+        tid = va_arg(ap, int);
+        sig = va_arg(ap, int);
+        va_end(ap);
+
+        ret = WRAP(tkill)(tid, sig);
+        goto done;
+    }
+#endif
+
+#ifdef __NR_uname_portable
+    case __NR_uname_portable: native_number = __NR_uname; break;
+#endif
+
+#ifdef __NR_vmsplice_portable
+    case __NR_vmsplice_portable: native_number = __NR_vmsplice; break;
+#endif
+
+    default:
+        ALOGV("%s(portable_number:%d,  ...): case default; native_number = -1; "
+              "[ERROR: ADD MISSING SYSTEM CALL]", __func__, portable_number);
+
+        native_number = -1;
+        break;
+    }
+
+    ALOGV("%s: native_number = %d", __func__, native_number);
+
+    if (native_number <= 0) {
+        ALOGV("%s: native_number:%d <= 0; ret = -1; [ERROR: FIX SYSTEM CALL]", __func__,
+                   native_number);
+
+        *REAL(__errno)() = ENOSYS;
+        ret = -1;
+        goto done;
+    }
+
+    /*
+     * Get the argument list
+     * This is pretty crappy:
+     *   It assumes that the portable and native arguments are compatible
+     *   It assumes that no more than MAXARGS arguments are passed
+     *
+     * Possible changes:
+     *  o include the argument count for each mapped system call
+     *  o map the syscall into the equivalent library call:
+     *    eg syscall(__NR_gettimeofday_portable, struct timeval *tv, struct timezone *tz) =>
+     *       gettimeofday(struct timeval *tv, struct timezone *tz)
+     *
+     * second option is probably best as it allows argument remapping to take place if needed
+     *
+     */
+    va_start(ap, portable_number);
+    /* For now assume all syscalls take MAXARGS arguments. */
+    nargs = MAXARGS;
+    for (i = 0; i < nargs; i++)
+        args[i] = va_arg(ap, int);
+    va_end(ap);
+
+    ALOGV("%s: Calling syscall(%d, %d, %d, %d, %d, %d, %d, %d, %d);", __func__,
+          native_number, args[0], args[1], args[2], args[3], args[4],
+          args[5], args[6], args[7]);
+
+    ret = REAL(syscall)(native_number, args[0], args[1], args[2], args[3],
+                  args[4], args[5], args[6], args[7]);
+
+done:
+    if (ret == -1) {
+        ALOGV("%s: ret == -1; errno:%d;", __func__, *REAL(__errno)());
+    }
+    ALOGV("%s: return(ret:%d); }", __func__, ret);
+    return ret;
+}
diff --git a/ndk/sources/android/libportable/arch-mips/timer.c b/ndk/sources/android/libportable/arch-mips/timer.c
new file mode 100644
index 0000000..c2844e1
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/timer.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <signal.h>
+#include <signal_portable.h>
+#include <time.h>
+
+int WRAP(timer_create)(clockid_t clockid, struct sigevent *portable_evp,
+                          timer_t *timerid)
+{
+    struct sigevent native_sigevent, *evp = portable_evp;
+
+    if (!invalid_pointer(portable_evp) &&
+        (evp->sigev_notify == SIGEV_SIGNAL ||
+         evp->sigev_notify == SIGEV_THREAD_ID)) {
+
+        native_sigevent = *portable_evp;
+        evp = &native_sigevent;
+        evp->sigev_signo = signum_pton(evp->sigev_signo);
+    }
+    return REAL(timer_create)(clockid, evp, timerid);
+}
diff --git a/ndk/sources/android/libportable/arch-mips/timerfd.c b/ndk/sources/android/libportable/arch-mips/timerfd.c
new file mode 100644
index 0000000..b57c3f2
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/timerfd.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include <asm/unistd.h>
+#include <asm/unistd-portable.h>
+
+#include <fcntl_portable.h>
+#include <timerfd_portable.h>
+
+#include <filefd_portable.h>
+
+
+#define PORTABLE_TAG "timerfd_portable"
+#include <log_portable.h>
+
+extern int syscall(int, ...);
+
+
+/* NOTE: LTP defaults to using O_NONBLOCK even if TFD_NONBLOCK is defined */
+
+
+/*
+ * Portable to Native event flags mapper.
+ */
+static inline int tdf_flags_pton(int portable_flags)
+{
+    int native_flags = 0;
+
+    ALOGV("%s(portable_flags:0x%x) {", __func__, portable_flags);
+
+    if (portable_flags & TFD_NONBLOCK_PORTABLE) {
+        native_flags |= TFD_NONBLOCK;
+    }
+
+    if (portable_flags & TFD_CLOEXEC_PORTABLE) {
+        native_flags |= TFD_CLOEXEC;
+    }
+
+    ALOGV("%s: return(native_flags:%d); }", __func__, native_flags);
+    return native_flags;
+}
+
+
+int WRAP(timerfd_create)(int clockid, int portable_flags) {
+    int rv;
+    int native_flags;
+
+    ALOGV(" ");
+    ALOGV("%s(clockid:%d, portable_flags:%d) {", __func__,
+              clockid,    portable_flags);
+
+    native_flags = tdf_flags_pton(portable_flags);
+
+    rv = REAL(syscall)(__NR_timerfd_create, clockid, native_flags);
+    if (rv >= 0) {
+        if (native_flags & TFD_CLOEXEC) {
+            filefd_CLOEXEC_enabled(rv);
+        }
+        filefd_opened(rv, TIMER_FD_TYPE);
+    }
+
+    ALOGV("%s: return(rv:%d); }", __func__, rv);
+    return rv;
+}
+
diff --git a/ndk/sources/android/libportable/arch-mips/waitpid.c b/ndk/sources/android/libportable/arch-mips/waitpid.c
new file mode 100644
index 0000000..77e6283
--- /dev/null
+++ b/ndk/sources/android/libportable/arch-mips/waitpid.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <portability.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <signal_portable.h>
+#include <stdio.h>
+#include <sys/wait.h>
+
+#define PORTABLE_TAG            "waitpid_portable"
+#include <log_portable.h>
+
+pid_t WRAP(waitpid)(pid_t pid, int *status, int options)
+{
+    pid_t ret;
+
+    ret = REAL(waitpid)(pid, status, options);
+    if (status && ret > 0) {
+        /*
+         * Status layout is identical, so just the signal
+         * number needs to be changed.
+         */
+        if (WIFSIGNALED(*status))
+            *status = (*status & ~0x7f) | signum_ntop(WTERMSIG(*status));
+        else if (WIFSTOPPED(*status))
+            *status = (*status & ~0xff00) | (signum_ntop(WSTOPSIG(*status)) << 8);
+    }
+
+    return ret;
+}
diff --git a/ndk/sources/android/libportable/arch-x86/epoll.c b/ndk/sources/android/libportable/arch-x86/epoll.c
index e2f91f2..c683441 100644
--- a/ndk/sources/android/libportable/arch-x86/epoll.c
+++ b/ndk/sources/android/libportable/arch-x86/epoll.c
@@ -14,23 +14,24 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <sys/epoll.h>
 #include <epoll_portable.h>
 
-int epoll_ctl_portable(int epfd, int op, int fd, struct epoll_event_portable *event)
+int WRAP(epoll_ctl)(int epfd, int op, int fd, struct epoll_event_portable *event)
 {
     struct epoll_event x86_epoll_event;
 
     x86_epoll_event.events = event->events;
     x86_epoll_event.data = event->data;
 
-    return epoll_ctl(epfd, op, fd, &x86_epoll_event);
+    return REAL(epoll_ctl)(epfd, op, fd, &x86_epoll_event);
 }
 
-int epoll_wait_portable(int epfd, struct epoll_event_portable *events, int max, int timeout)
+int WRAP(epoll_wait)(int epfd, struct epoll_event_portable *events, int max, int timeout)
 {
     struct epoll_event x86_epoll_event;
-    int ret = epoll_wait(epfd, &x86_epoll_event, max, timeout);
+    int ret = REAL(epoll_wait)(epfd, &x86_epoll_event, max, timeout);
 
     events->events = x86_epoll_event.events;
     events->data = x86_epoll_event.data;
diff --git a/ndk/sources/android/libportable/arch-x86/errno.c b/ndk/sources/android/libportable/arch-x86/errno.c
deleted file mode 100644
index ffa5998..0000000
--- a/ndk/sources/android/libportable/arch-x86/errno.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern volatile int*   __errno(void);
-volatile int* __errno_portable()
-{
-  return __errno();
-}
diff --git a/ndk/sources/android/libportable/arch-x86/fcntl.c b/ndk/sources/android/libportable/arch-x86/fcntl.c
index 7561f85..74b14c1 100644
--- a/ndk/sources/android/libportable/arch-x86/fcntl.c
+++ b/ndk/sources/android/libportable/arch-x86/fcntl.c
@@ -14,13 +14,14 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <fcntl.h>
 #include <stdarg.h>
 #include <fcntl_portable.h>
 
 extern int __fcntl64(int, int, void *);
 
-int fcntl_portable(int fd, int cmd, ...)
+int WRAP(fcntl)(int fd, int cmd, ...)
 {
     va_list ap;
     void * arg;
diff --git a/ndk/sources/android/libportable/arch-x86/ioctl.c b/ndk/sources/android/libportable/arch-x86/ioctl.c
index ea88c30..01ddbcd 100644
--- a/ndk/sources/android/libportable/arch-x86/ioctl.c
+++ b/ndk/sources/android/libportable/arch-x86/ioctl.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <stdarg.h>
 #include <sys/ioctl.h>
 #include <ioctls_portable.h>
@@ -31,7 +32,7 @@
 }
 
 extern int __ioctl(int, int, void *);
-int ioctl_portable(int fd, int request, ...)
+int WRAP(ioctl)(int fd, int request, ...)
 {
     va_list ap;
     void * arg;
diff --git a/ndk/sources/android/libportable/arch-x86/open.c b/ndk/sources/android/libportable/arch-x86/open.c
index a38f38c..dae578b 100644
--- a/ndk/sources/android/libportable/arch-x86/open.c
+++ b/ndk/sources/android/libportable/arch-x86/open.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <stdarg.h>
@@ -56,7 +57,7 @@
 }
 
 extern int  __open(const char*, int, int);
-int open_portable(const char *pathname, int flags, ...)
+int WRAP(open)(const char *pathname, int flags, ...)
 {
     mode_t  mode = 0;
     flags |= O_LARGEFILE;
diff --git a/ndk/sources/android/libportable/arch-x86/socket.c b/ndk/sources/android/libportable/arch-x86/socket.c
deleted file mode 100644
index 7e7ca9b..0000000
--- a/ndk/sources/android/libportable/arch-x86/socket.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/linux-syscalls.h>
-
-int socket_portable(int domain, int type, int protocol) {
-    return socket(domain, type, protocol);
-}
diff --git a/ndk/sources/android/libportable/arch-x86/sockopt.c b/ndk/sources/android/libportable/arch-x86/sockopt.c
deleted file mode 100644
index c86ded3..0000000
--- a/ndk/sources/android/libportable/arch-x86/sockopt.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2012, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-extern int setsockopt(int, int, int, const void *, socklen_t);
-int setsockopt_portable(int s, int level, int optname, const void *optval, socklen_t optlen)
-{
-    return setsockopt(s, level, optname, optval, optlen);
-}
-
-extern int getsockopt (int, int, int, void *, socklen_t *);
-int getsockopt_portable(int s, int level, int optname, void *optval, socklen_t *optlen)
-{
-    return getsockopt(s, level, optname, optval, optlen);
-}
diff --git a/ndk/sources/android/libportable/arch-x86/stat.c b/ndk/sources/android/libportable/arch-x86/stat.c
index 6b368c8..1d17378 100644
--- a/ndk/sources/android/libportable/arch-x86/stat.c
+++ b/ndk/sources/android/libportable/arch-x86/stat.c
@@ -14,37 +14,38 @@
  * limitations under the License.
  */
 
+#include <portability.h>
 #include <stat_portable.h>
 
 /* Note: The Portable Header will define stat to stat_portable */
-int stat_portable(const char *path, struct stat_portable *s)
+int WRAP(stat)(const char *path, struct stat_portable *s)
 {
     struct stat x86_stat;
-    int ret = stat(path, &x86_stat);
+    int ret = REAL(stat)(path, &x86_stat);
     stat_ntop(&x86_stat, s);
     return ret;
 }
 
-int fstat_portable(int fd, struct stat_portable *s)
+int WRAP(fstat)(int fd, struct stat_portable *s)
 {
     struct stat x86_stat;
-    int ret = fstat(fd, &x86_stat);
+    int ret = REAL(fstat)(fd, &x86_stat);
     stat_ntop(&x86_stat, s);
     return ret;
 }   
 
-int lstat_portable(const char *path, struct stat_portable *s)
+int WRAP(lstat)(const char *path, struct stat_portable *s)
 {
     struct stat x86_stat;
-    int ret = lstat(path, &x86_stat);
+    int ret = REAL(lstat)(path, &x86_stat);
     stat_ntop(&x86_stat, s);
     return ret;
 }
 
-int fstatat_portable(int dirfd, const char *path, struct stat_portable *s, int flags)
+int WRAP(fstatat)(int dirfd, const char *path, struct stat_portable *s, int flags)
 {
     struct stat x86_stat;
-    int ret = fstatat(dirfd, path, &x86_stat, flags);
+    int ret = REAL(fstatat)(dirfd, path, &x86_stat, flags);
     stat_ntop(&x86_stat, s);
     return ret;
 }
diff --git a/ndk/sources/android/libportable/common/include/asm-generic/portability.h b/ndk/sources/android/libportable/common/include/asm-generic/portability.h
new file mode 100644
index 0000000..8d91854
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm-generic/portability.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ASM_PORTABILITY_H_
+#define _ASM_PORTABILITY_H_
+
+#if !defined(__HOST__)
+#define WRAP(f)     f ## _portable
+#define REAL(f)     f
+#else
+/* On host app link with libpportable.a with -Wl,--wrap=symbol, which resolve symbol symbol to __wrap_symbol,
+ * and __real_symbol refer to the original symbol
+ */
+#define WRAP(f)     __wrap_ ## f
+#define REAL(f)     __real_ ## f
+#endif
+
+#endif /* _ASM_PORTABILITY_H_ */
diff --git a/ndk/sources/android/libportable/common/include/asm-generic/siginfo_portable.h b/ndk/sources/android/libportable/common/include/asm-generic/siginfo_portable.h
new file mode 100644
index 0000000..1f13ad8
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm-generic/siginfo_portable.h
@@ -0,0 +1,221 @@
+/****************************************************************************
+ Derived from platforms/android-14/arch-arm/usr/include/asm-generic/siginfo.h
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _ASM_PORTABLE_GENERIC_SIGINFO_H
+#define _ASM_PORTABLE_GENERIC_SIGINFO_H
+
+#include <linux/compiler.h>
+#include <linux/types.h>
+
+typedef union sigval_portable {
+    int sival_int;
+    void __user *sival_ptr;
+} sigval_portable_t;
+
+#ifndef __ARCH_SI_PREAMBLE_SIZE
+#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
+#endif
+
+#define SI_MAX_SIZE 128
+#ifndef SI_PAD_SIZE
+#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
+#endif
+
+#ifndef __ARCH_SI_UID_T
+#define __ARCH_SI_UID_T uid_t
+#endif
+
+#ifndef __ARCH_SI_BAND_T
+#define __ARCH_SI_BAND_T long
+#endif
+
+typedef struct siginfo_portable {
+    int si_signo;
+    int si_errno;
+    int si_code;
+
+    union {
+        int _pad[SI_PAD_SIZE];
+
+        struct {
+                pid_t _pid;
+                __ARCH_SI_UID_T _uid;
+        } _kill;
+
+        struct {
+            timer_t _tid;
+            int _overrun;
+            char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
+            sigval_portable_t _sigval;
+            int _sys_private;
+        } _timer;
+
+        struct {
+            pid_t _pid;
+            __ARCH_SI_UID_T _uid;
+            sigval_t _sigval;
+        } _rt;
+
+        struct {
+            pid_t _pid;
+            __ARCH_SI_UID_T _uid;
+            int _status;
+            clock_t _utime;
+            clock_t _stime;
+        } _sigchld;
+
+        struct {
+            void __user *_addr;
+#ifdef __ARCH_SI_TRAPNO
+            int _trapno;
+#endif
+        } _sigfault;
+
+        struct {
+            __ARCH_SI_BAND_T _band;
+            int _fd;
+        } _sigpoll;
+
+    } _sifields;
+} siginfo_portable_t;
+
+#ifndef si_pid
+#define si_pid _sifields._kill._pid
+#define si_uid _sifields._kill._uid
+#define si_tid _sifields._timer._tid
+#define si_overrun _sifields._timer._overrun
+#define si_sys_private _sifields._timer._sys_private
+#define si_status _sifields._sigchld._status
+#define si_utime _sifields._sigchld._utime
+#define si_stime _sifields._sigchld._stime
+#define si_value _sifields._rt._sigval
+#define si_int _sifields._rt._sigval.sival_int
+#define si_ptr _sifields._rt._sigval.sival_ptr
+#define si_addr _sifields._sigfault._addr
+#ifdef __ARCH_SI_TRAPNO
+#define si_trapno _sifields._sigfault._trapno
+#endif
+#define si_band _sifields._sigpoll._band
+#define si_fd _sifields._sigpoll._fd
+#endif
+
+#ifndef __SI_KILL
+#define __SI_KILL 0
+#define __SI_TIMER 0
+#define __SI_POLL 0
+#define __SI_FAULT 0
+#define __SI_CHLD 0
+#define __SI_RT 0
+#define __SI_MESGQ 0
+#define __SI_CODE(T,N) (N)
+#endif
+
+#ifndef SI_USER
+#define SI_USER 0
+#define SI_KERNEL 0x80
+#define SI_QUEUE -1
+#define SI_TIMER __SI_CODE(__SI_TIMER,-2)
+#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3)
+#define SI_ASYNCIO -4
+#define SI_SIGIO -5
+#define SI_TKILL -6
+#define SI_DETHREAD -7
+
+#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
+#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
+#endif
+
+#ifndef ILL_ILLOPC
+#define ILL_ILLOPC (__SI_FAULT|1)
+#define ILL_ILLOPN (__SI_FAULT|2)
+#define ILL_ILLADR (__SI_FAULT|3)
+#define ILL_ILLTRP (__SI_FAULT|4)
+#define ILL_PRVOPC (__SI_FAULT|5)
+#define ILL_PRVREG (__SI_FAULT|6)
+#define ILL_COPROC (__SI_FAULT|7)
+#define ILL_BADSTK (__SI_FAULT|8)
+#define NSIGILL 8
+#endif
+
+#ifndef FPE_INTDIV
+#define FPE_INTDIV (__SI_FAULT|1)
+#define FPE_INTOVF (__SI_FAULT|2)
+#define FPE_FLTDIV (__SI_FAULT|3)
+#define FPE_FLTOVF (__SI_FAULT|4)
+#define FPE_FLTUND (__SI_FAULT|5)
+#define FPE_FLTRES (__SI_FAULT|6)
+#define FPE_FLTINV (__SI_FAULT|7)
+#define FPE_FLTSUB (__SI_FAULT|8)
+#define NSIGFPE 8
+
+#define SEGV_MAPERR (__SI_FAULT|1)
+#define SEGV_ACCERR (__SI_FAULT|2)
+#define NSIGSEGV 2
+
+#define BUS_ADRALN (__SI_FAULT|1)
+#define BUS_ADRERR (__SI_FAULT|2)
+#define BUS_OBJERR (__SI_FAULT|3)
+#define NSIGBUS 3
+
+#define TRAP_BRKPT (__SI_FAULT|1)
+#define TRAP_TRACE (__SI_FAULT|2)
+#define NSIGTRAP 2
+
+#define CLD_EXITED (__SI_CHLD|1)
+#define CLD_KILLED (__SI_CHLD|2)
+#define CLD_DUMPED (__SI_CHLD|3)
+#define CLD_TRAPPED (__SI_CHLD|4)
+#define CLD_STOPPED (__SI_CHLD|5)
+#define CLD_CONTINUED (__SI_CHLD|6)
+#define NSIGCHLD 6
+
+#define POLL_IN (__SI_POLL|1)
+#define POLL_OUT (__SI_POLL|2)
+#define POLL_MSG (__SI_POLL|3)
+#define POLL_ERR (__SI_POLL|4)
+#define POLL_PRI (__SI_POLL|5)
+#define POLL_HUP (__SI_POLL|6)
+#define NSIGPOLL 6
+
+#define SIGEV_SIGNAL 0
+#define SIGEV_NONE 1
+#define SIGEV_THREAD 2
+#define SIGEV_THREAD_ID 4
+#endif /* FPE_INTDIV */
+
+#ifndef __ARCH_SIGEV_PREAMBLE_SIZE
+#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(int) * 2 + sizeof(sigval_portable_t))
+#endif
+
+#define SIGEV_MAX_SIZE 64
+#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE)   / sizeof(int))
+
+typedef struct sigevent_portable {
+    sigval_portable_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+    union {
+        int _pad[SIGEV_PAD_SIZE];
+        int _tid;
+
+        struct {
+            void (*_function)(sigval_portable_t);
+            void *_attribute;
+        } _sigev_thread;
+     } _sigev_un;
+} sigevent_portable_t;
+
+#define sigev_notify_function _sigev_un._sigev_thread._function
+#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
+#define sigev_notify_thread_id _sigev_un._tid
+
+#endif
diff --git a/ndk/sources/android/libportable/common/include/asm-generic/signal_portable.h b/ndk/sources/android/libportable/common/include/asm-generic/signal_portable.h
new file mode 100644
index 0000000..97b1b40
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm-generic/signal_portable.h
@@ -0,0 +1,21 @@
+/****************************************************************************
+ Derived from platforms/android-14/arch-arm/usr/include/asm-generic/signal.h
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef __ASM_GENERIC_SIGNAL_PORTABLE_H
+#define __ASM_GENERIC_SIGNAL_PORTABLE_H
+
+#define SIG_BLOCK_PORTABLE   0
+#define SIG_UNBLOCK_PORTABLE 1
+#define SIG_SETMASK_PORTABLE 2
+
+#endif
+
diff --git a/ndk/sources/android/libportable/common/include/asm/sigcontext_portable.h b/ndk/sources/android/libportable/common/include/asm/sigcontext_portable.h
new file mode 100644
index 0000000..477b3e8
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm/sigcontext_portable.h
@@ -0,0 +1,40 @@
+/****************************************************************************
+ Derived from gdk/platforms/android-14/arch-arm/usr/include/asm/sigcontext.h
+ ****************************************************************************
+ ***
+ ***   This header was ORIGINALLY automatically generated from a Linux kernel 
+ ***   header of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _ASMARM_SIGCONTEXT_PORTABLE_H
+#define _ASMARM_SIGCONTEXT_PORTABLE_H
+
+struct sigcontext_portable {
+ unsigned long trap_no;
+ unsigned long error_code;
+ unsigned long oldmask;
+ unsigned long arm_r0;
+ unsigned long arm_r1;
+ unsigned long arm_r2;
+ unsigned long arm_r3;
+ unsigned long arm_r4;
+ unsigned long arm_r5;
+ unsigned long arm_r6;
+ unsigned long arm_r7;
+ unsigned long arm_r8;
+ unsigned long arm_r9;
+ unsigned long arm_r10;
+ unsigned long arm_fp;
+ unsigned long arm_ip;
+ unsigned long arm_sp;
+ unsigned long arm_lr;
+ unsigned long arm_pc;
+ unsigned long arm_cpsr;
+ unsigned long fault_address;
+};
+
+#endif
diff --git a/ndk/sources/android/libportable/common/include/asm/siginfo_portable.h b/ndk/sources/android/libportable/common/include/asm/siginfo_portable.h
new file mode 100644
index 0000000..283f23e
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm/siginfo_portable.h
@@ -0,0 +1,17 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _ASM_PORTABLE_SIGINFO_H
+#define _ASM_PORTABLE_SIGINFO_H
+
+#include <asm-generic/siginfo_portable.h>
+
+#endif
diff --git a/ndk/sources/android/libportable/common/include/asm/signal_portable.h b/ndk/sources/android/libportable/common/include/asm/signal_portable.h
new file mode 100644
index 0000000..a9608cc
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm/signal_portable.h
@@ -0,0 +1,185 @@
+/****************************************************************************
+  Derived from gdk/platforms/android-14/arch-arm/usr/include/asm/signal.h
+ ****************************************************************************
+ ***
+ ***   This header was ORIGINALLY automatically generated from a Linux kernel
+ ***   header of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _ASMARM_SIGNAL_PORTABLE_H
+#define _ASMARM_SIGNAL_PORTABLE_H
+
+struct siginfo;                         /* TODO: Change to siginfo_portable */
+
+#define NSIG_PORTABLE 64
+typedef unsigned long sigset_portable_t;
+
+#define SIGHUP_PORTABLE 1
+#define SIGINT_PORTABLE 2
+#define SIGQUIT_PORTABLE 3
+#define SIGILL_PORTABLE 4
+#define SIGTRAP_PORTABLE 5
+#define SIGABRT_PORTABLE 6
+#define SIGIOT_PORTABLE 6
+#define SIGBUS_PORTABLE 7
+#define SIGFPE_PORTABLE 8
+#define SIGKILL_PORTABLE 9
+#define SIGUSR1_PORTABLE 10
+#define SIGSEGV_PORTABLE 11
+#define SIGUSR2_PORTABLE 12
+#define SIGPIPE_PORTABLE 13
+#define SIGALRM_PORTABLE 14
+#define SIGTERM_PORTABLE 15
+#define SIGSTKFLT_PORTABLE 16
+#define SIGCHLD_PORTABLE 17
+#define SIGCONT_PORTABLE 18
+#define SIGSTOP_PORTABLE 19
+#define SIGTSTP_PORTABLE 20
+#define SIGTTIN_PORTABLE 21
+#define SIGTTOU_PORTABLE 22
+#define SIGURG_PORTABLE 23
+#define SIGXCPU_PORTABLE 24
+#define SIGXFSZ_PORTABLE 25
+#define SIGVTALRM_PORTABLE 26
+#define SIGPROF_PORTABLE 27
+#define SIGWINCH_PORTABLE 28
+#define SIGIO_PORTABLE 29
+#define SIGPOLL_PORTABLE SIGIO
+
+#define SIGPWR_PORTABLE 30
+#define SIGSYS_PORTABLE 31
+#define SIGUNUSED_PORTABLE 31
+
+#define SIGSWI_PORTABLE 32
+#define SIGRTMIN_PORTABLE 32
+
+#define SIGRT_1_PORTABLE (SIGRTMIN_PORTABLE + 1)
+#define SIGRT_2_PORTABLE (SIGRTMIN_PORTABLE + 2)
+#define SIGRT_3_PORTABLE (SIGRTMIN_PORTABLE + 3)
+#define SIGRT_4_PORTABLE (SIGRTMIN_PORTABLE + 4)
+#define SIGRT_5_PORTABLE (SIGRTMIN_PORTABLE + 5)
+#define SIGRT_5_PORTABLE (SIGRTMIN_PORTABLE + 5)
+#define SIGRT_6_PORTABLE (SIGRTMIN_PORTABLE + 6)
+#define SIGRT_7_PORTABLE (SIGRTMIN_PORTABLE + 7)
+#define SIGRT_8_PORTABLE (SIGRTMIN_PORTABLE + 8)
+#define SIGRT_9_PORTABLE (SIGRTMIN_PORTABLE + 9)
+#define SIGRT_10_PORTABLE (SIGRTMIN_PORTABLE + 10)
+#define SIGRT_11_PORTABLE (SIGRTMIN_PORTABLE + 11)
+#define SIGRT_12_PORTABLE (SIGRTMIN_PORTABLE + 12)
+#define SIGRT_13_PORTABLE (SIGRTMIN_PORTABLE + 13)
+#define SIGRT_14_PORTABLE (SIGRTMIN_PORTABLE + 14)
+#define SIGRT_15_PORTABLE (SIGRTMIN_PORTABLE + 15)
+#define SIGRT_15_PORTABLE (SIGRTMIN_PORTABLE + 15)
+#define SIGRT_16_PORTABLE (SIGRTMIN_PORTABLE + 16)
+#define SIGRT_17_PORTABLE (SIGRTMIN_PORTABLE + 17)
+#define SIGRT_18_PORTABLE (SIGRTMIN_PORTABLE + 18)
+#define SIGRT_19_PORTABLE (SIGRTMIN_PORTABLE + 19)
+#define SIGRT_20_PORTABLE (SIGRTMIN_PORTABLE + 20)
+#define SIGRT_20_PORTABLE (SIGRTMIN_PORTABLE + 20)
+#define SIGRT_21_PORTABLE (SIGRTMIN_PORTABLE + 21)
+#define SIGRT_22_PORTABLE (SIGRTMIN_PORTABLE + 22)
+#define SIGRT_23_PORTABLE (SIGRTMIN_PORTABLE + 23)
+#define SIGRT_24_PORTABLE (SIGRTMIN_PORTABLE + 24)
+#define SIGRT_25_PORTABLE (SIGRTMIN_PORTABLE + 25)
+#define SIGRT_25_PORTABLE (SIGRTMIN_PORTABLE + 25)
+#define SIGRT_26_PORTABLE (SIGRTMIN_PORTABLE + 26)
+#define SIGRT_27_PORTABLE (SIGRTMIN_PORTABLE + 27)
+#define SIGRT_28_PORTABLE (SIGRTMIN_PORTABLE + 28)
+#define SIGRT_29_PORTABLE (SIGRTMIN_PORTABLE + 29)
+#define SIGRT_30_PORTABLE (SIGRTMIN_PORTABLE + 30)
+#define SIGRT_31_PORTABLE (SIGRTMIN_PORTABLE + 31)
+#define SIGRT_32_PORTABLE (SIGRTMIN_PORTABLE + 32)
+
+#define SIGRTMAX_PORTABLE NSIG_PORTABLE
+
+/*
+ * Define MIPS/Native Real Time Signal Names for debugging.
+ * NOTE:
+ *    Currently only defining the 32 RT signals that the
+ *    lib-portable application can interact with. MIPS has
+ *    an additional 63 signals.
+ */
+#define SIGRT_1 (SIGRTMIN + 1)
+#define SIGRT_2 (SIGRTMIN + 2)
+#define SIGRT_3 (SIGRTMIN + 3)
+#define SIGRT_4 (SIGRTMIN + 4)
+#define SIGRT_5 (SIGRTMIN + 5)
+#define SIGRT_5 (SIGRTMIN + 5)
+#define SIGRT_6 (SIGRTMIN + 6)
+#define SIGRT_7 (SIGRTMIN + 7)
+#define SIGRT_8 (SIGRTMIN + 8)
+#define SIGRT_9 (SIGRTMIN + 9)
+#define SIGRT_10 (SIGRTMIN + 10)
+#define SIGRT_11 (SIGRTMIN + 11)
+#define SIGRT_12 (SIGRTMIN + 12)
+#define SIGRT_13 (SIGRTMIN + 13)
+#define SIGRT_14 (SIGRTMIN + 14)
+#define SIGRT_15 (SIGRTMIN + 15)
+#define SIGRT_15 (SIGRTMIN + 15)
+#define SIGRT_16 (SIGRTMIN + 16)
+#define SIGRT_17 (SIGRTMIN + 17)
+#define SIGRT_18 (SIGRTMIN + 18)
+#define SIGRT_19 (SIGRTMIN + 19)
+#define SIGRT_20 (SIGRTMIN + 20)
+#define SIGRT_20 (SIGRTMIN + 20)
+#define SIGRT_21 (SIGRTMIN + 21)
+#define SIGRT_22 (SIGRTMIN + 22)
+#define SIGRT_23 (SIGRTMIN + 23)
+#define SIGRT_24 (SIGRTMIN + 24)
+#define SIGRT_25 (SIGRTMIN + 25)
+#define SIGRT_25 (SIGRTMIN + 25)
+#define SIGRT_26 (SIGRTMIN + 26)
+#define SIGRT_27 (SIGRTMIN + 27)
+#define SIGRT_28 (SIGRTMIN + 28)
+#define SIGRT_29 (SIGRTMIN + 29)
+#define SIGRT_30 (SIGRTMIN + 30)
+#define SIGRT_31 (SIGRTMIN + 31)
+#define SIGRT_32 (SIGRTMIN + 32)
+/*
+ * NOTE: Native signals SIGRT_33 ... SIGRTMAX
+ * can't be used by a lib-portable application.
+ */
+
+#define SA_NOCLDSTOP_PORTABLE   0x00000001
+#define SA_NOCLDWAIT_PORTABLE   0x00000002
+#define SA_SIGINFO_PORTABLE     0x00000004
+#define SA_THIRTYTWO_PORTABLE   0x02000000
+#define SA_RESTORER_PORTABLE    0x04000000
+#define SA_ONSTACK_PORTABLE     0x08000000
+#define SA_RESTART_PORTABLE     0x10000000
+#define SA_NODEFER_PORTABLE     0x40000000
+#define SA_RESETHAND_PORTABLE   0x80000000
+
+#define SA_NOMASK_PORTSBLE      SA_NODEFER_PORTABLE
+#define SA_ONESHOT_PORTABLE     SA_RESETHAND_PORABLE
+
+
+#include <asm-generic/signal_portable.h>
+
+typedef __signalfn_t __user *__sighandler_portable_t;
+typedef void (*__sigaction_handler_portable_t)(int, struct siginfo *, void *);
+
+struct sigaction_portable {
+ union {
+   __sighandler_portable_t        _sa_handler;
+   __sigaction_handler_portable_t _sa_sigaction;
+ } _u;
+ sigset_portable_t sa_mask;
+ unsigned long sa_flags;
+ void (*sa_restorer)(void);
+};
+
+#define sa_handler_portable     _u._sa_handler
+#define sa_sigaction_portable   _u._sa_sigaction
+
+typedef struct sigaltstack_portable {
+ void __user *ss_sp;
+ int ss_flags;
+ size_t ss_size;
+} portable_stack_t;
+
+#endif
diff --git a/ndk/sources/android/libportable/common/include/asm/unistd-portable.h b/ndk/sources/android/libportable/common/include/asm/unistd-portable.h
new file mode 100644
index 0000000..a542e92
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/asm/unistd-portable.h
@@ -0,0 +1,401 @@
+#ifndef __ASM_UNISTD_PORTABLE_H
+#define __ASM_UNISTD_PORTABLE_H
+
+/* Derived from android-14/arch-arm/usr/include/asm/unistd.h */
+
+#define __NR_SYSCALL_BASE_portable 0
+
+#define __NR_restart_syscall_portable (__NR_SYSCALL_BASE_portable+ 0)
+#define __NR_exit_portable (__NR_SYSCALL_BASE_portable+ 1)
+#define __NR_fork_portable (__NR_SYSCALL_BASE_portable+ 2)
+#define __NR_read_portable (__NR_SYSCALL_BASE_portable+ 3)
+#define __NR_write_portable (__NR_SYSCALL_BASE_portable+ 4)
+#define __NR_open_portable (__NR_SYSCALL_BASE_portable+ 5)
+#define __NR_close_portable (__NR_SYSCALL_BASE_portable+ 6)
+
+#define __NR_creat_portable (__NR_SYSCALL_BASE_portable+ 8)
+#define __NR_link_portable (__NR_SYSCALL_BASE_portable+ 9)
+#define __NR_unlink_portable (__NR_SYSCALL_BASE_portable+ 10)
+#define __NR_execve_portable (__NR_SYSCALL_BASE_portable+ 11)
+#define __NR_chdir_portable (__NR_SYSCALL_BASE_portable+ 12)
+#define __NR_time_portable (__NR_SYSCALL_BASE_portable+ 13)
+#define __NR_mknod_portable (__NR_SYSCALL_BASE_portable+ 14)
+#define __NR_chmod_portable (__NR_SYSCALL_BASE_portable+ 15)
+#define __NR_lchown_portable (__NR_SYSCALL_BASE_portable+ 16)
+
+#define __NR_lseek_portable (__NR_SYSCALL_BASE_portable+ 19)
+#define __NR_getpid_portable (__NR_SYSCALL_BASE_portable+ 20)
+#define __NR_mount_portable (__NR_SYSCALL_BASE_portable+ 21)
+#define __NR_umount_portable (__NR_SYSCALL_BASE_portable+ 22)
+#define __NR_setuid_portable (__NR_SYSCALL_BASE_portable+ 23)
+#define __NR_getuid_portable (__NR_SYSCALL_BASE_portable+ 24)
+#define __NR_stime_portable (__NR_SYSCALL_BASE_portable+ 25)
+#define __NR_ptrace_portable (__NR_SYSCALL_BASE_portable+ 26)
+#define __NR_alarm_portable (__NR_SYSCALL_BASE_portable+ 27)
+
+#define __NR_pause_portable (__NR_SYSCALL_BASE_portable+ 29)
+#define __NR_utime_portable (__NR_SYSCALL_BASE_portable+ 30)
+
+#define __NR_access_portable (__NR_SYSCALL_BASE_portable+ 33)
+#define __NR_nice_portable (__NR_SYSCALL_BASE_portable+ 34)
+
+#define __NR_sync_portable (__NR_SYSCALL_BASE_portable+ 36)
+#define __NR_kill_portable (__NR_SYSCALL_BASE_portable+ 37)
+#define __NR_rename_portable (__NR_SYSCALL_BASE_portable+ 38)
+#define __NR_mkdir_portable (__NR_SYSCALL_BASE_portable+ 39)
+#define __NR_rmdir_portable (__NR_SYSCALL_BASE_portable+ 40)
+#define __NR_dup_portable (__NR_SYSCALL_BASE_portable+ 41)
+#define __NR_pipe_portable (__NR_SYSCALL_BASE_portable+ 42)
+#define __NR_times_portable (__NR_SYSCALL_BASE_portable+ 43)
+
+#define __NR_brk_portable (__NR_SYSCALL_BASE_portable+ 45)
+#define __NR_setgid_portable (__NR_SYSCALL_BASE_portable+ 46)
+#define __NR_getgid_portable (__NR_SYSCALL_BASE_portable+ 47)
+
+#define __NR_geteuid_portable (__NR_SYSCALL_BASE_portable+ 49)
+#define __NR_getegid_portable (__NR_SYSCALL_BASE_portable+ 50)
+#define __NR_acct_portable (__NR_SYSCALL_BASE_portable+ 51)
+#define __NR_umount2_portable (__NR_SYSCALL_BASE_portable+ 52)
+
+#define __NR_ioctl_portable (__NR_SYSCALL_BASE_portable+ 54)
+#define __NR_fcntl_portable (__NR_SYSCALL_BASE_portable+ 55)
+
+#define __NR_setpgid_portable (__NR_SYSCALL_BASE_portable+ 57)
+
+#define __NR_umask_portable (__NR_SYSCALL_BASE_portable+ 60)
+#define __NR_chroot_portable (__NR_SYSCALL_BASE_portable+ 61)
+#define __NR_ustat_portable (__NR_SYSCALL_BASE_portable+ 62)
+#define __NR_dup2_portable (__NR_SYSCALL_BASE_portable+ 63)
+#define __NR_getppid_portable (__NR_SYSCALL_BASE_portable+ 64)
+#define __NR_getpgrp_portable (__NR_SYSCALL_BASE_portable+ 65)
+#define __NR_setsid_portable (__NR_SYSCALL_BASE_portable+ 66)
+#define __NR_sigaction_portable (__NR_SYSCALL_BASE_portable+ 67)
+
+#define __NR_setreuid_portable (__NR_SYSCALL_BASE_portable+ 70)
+#define __NR_setregid_portable (__NR_SYSCALL_BASE_portable+ 71)
+#define __NR_sigsuspend_portable (__NR_SYSCALL_BASE_portable+ 72)
+#define __NR_sigpending_portable (__NR_SYSCALL_BASE_portable+ 73)
+#define __NR_sethostname_portable (__NR_SYSCALL_BASE_portable+ 74)
+#define __NR_setrlimit_portable (__NR_SYSCALL_BASE_portable+ 75)
+#define __NR_getrlimit_portable (__NR_SYSCALL_BASE_portable+ 76)
+#define __NR_getrusage_portable (__NR_SYSCALL_BASE_portable+ 77)
+#define __NR_gettimeofday_portable (__NR_SYSCALL_BASE_portable+ 78)
+#define __NR_settimeofday_portable (__NR_SYSCALL_BASE_portable+ 79)
+#define __NR_getgroups_portable (__NR_SYSCALL_BASE_portable+ 80)
+#define __NR_setgroups_portable (__NR_SYSCALL_BASE_portable+ 81)
+#define __NR_select_portable (__NR_SYSCALL_BASE_portable+ 82)
+#define __NR_symlink_portable (__NR_SYSCALL_BASE_portable+ 83)
+
+#define __NR_readlink_portable (__NR_SYSCALL_BASE_portable+ 85)
+#define __NR_uselib_portable (__NR_SYSCALL_BASE_portable+ 86)
+#define __NR_swapon_portable (__NR_SYSCALL_BASE_portable+ 87)
+#define __NR_reboot_portable (__NR_SYSCALL_BASE_portable+ 88)
+#define __NR_readdir_portable (__NR_SYSCALL_BASE_portable+ 89)
+#define __NR_mmap_portable (__NR_SYSCALL_BASE_portable+ 90)
+#define __NR_munmap_portable (__NR_SYSCALL_BASE_portable+ 91)
+#define __NR_truncate_portable (__NR_SYSCALL_BASE_portable+ 92)
+#define __NR_ftruncate_portable (__NR_SYSCALL_BASE_portable+ 93)
+#define __NR_fchmod_portable (__NR_SYSCALL_BASE_portable+ 94)
+#define __NR_fchown_portable (__NR_SYSCALL_BASE_portable+ 95)
+#define __NR_getpriority_portable (__NR_SYSCALL_BASE_portable+ 96)
+#define __NR_setpriority_portable (__NR_SYSCALL_BASE_portable+ 97)
+
+#define __NR_statfs_portable (__NR_SYSCALL_BASE_portable+ 99)
+#define __NR_fstatfs_portable (__NR_SYSCALL_BASE_portable+100)
+
+#define __NR_socketcall_portable (__NR_SYSCALL_BASE_portable+102)
+#define __NR_syslog_portable (__NR_SYSCALL_BASE_portable+103)
+#define __NR_setitimer_portable (__NR_SYSCALL_BASE_portable+104)
+#define __NR_getitimer_portable (__NR_SYSCALL_BASE_portable+105)
+#define __NR_stat_portable (__NR_SYSCALL_BASE_portable+106)
+#define __NR_lstat_portable (__NR_SYSCALL_BASE_portable+107)
+#define __NR_fstat_portable (__NR_SYSCALL_BASE_portable+108)
+
+#define __NR_vhangup_portable (__NR_SYSCALL_BASE_portable+111)
+
+#define __NR_syscall_portable (__NR_SYSCALL_BASE_portable+113)
+#define __NR_wait4_portable (__NR_SYSCALL_BASE_portable+114)
+#define __NR_swapoff_portable (__NR_SYSCALL_BASE_portable+115)
+#define __NR_sysinfo_portable (__NR_SYSCALL_BASE_portable+116)
+#define __NR_ipc_portable (__NR_SYSCALL_BASE_portable+117)
+#define __NR_fsync_portable (__NR_SYSCALL_BASE_portable+118)
+#define __NR_sigreturn_portable (__NR_SYSCALL_BASE_portable+119)
+#define __NR_clone_portable (__NR_SYSCALL_BASE_portable+120)
+#define __NR_setdomainname_portable (__NR_SYSCALL_BASE_portable+121)
+#define __NR_uname_portable (__NR_SYSCALL_BASE_portable+122)
+
+#define __NR_adjtimex_portable (__NR_SYSCALL_BASE_portable+124)
+#define __NR_mprotect_portable (__NR_SYSCALL_BASE_portable+125)
+#define __NR_sigprocmask_portable (__NR_SYSCALL_BASE_portable+126)
+
+#define __NR_init_module_portable (__NR_SYSCALL_BASE_portable+128)
+#define __NR_delete_module_portable (__NR_SYSCALL_BASE_portable+129)
+
+#define __NR_quotactl_portable (__NR_SYSCALL_BASE_portable+131)
+#define __NR_getpgid_portable (__NR_SYSCALL_BASE_portable+132)
+#define __NR_fchdir_portable (__NR_SYSCALL_BASE_portable+133)
+#define __NR_bdflush_portable (__NR_SYSCALL_BASE_portable+134)
+#define __NR_sysfs_portable (__NR_SYSCALL_BASE_portable+135)
+#define __NR_personality_portable (__NR_SYSCALL_BASE_portable+136)
+
+#define __NR_setfsuid_portable (__NR_SYSCALL_BASE_portable+138)
+#define __NR_setfsgid_portable (__NR_SYSCALL_BASE_portable+139)
+#define __NR__llseek_portable (__NR_SYSCALL_BASE_portable+140)
+#define __NR_getdents_portable (__NR_SYSCALL_BASE_portable+141)
+#define __NR__newselect_portable (__NR_SYSCALL_BASE_portable+142)
+#define __NR_flock_portable (__NR_SYSCALL_BASE_portable+143)
+#define __NR_msync_portable (__NR_SYSCALL_BASE_portable+144)
+#define __NR_readv_portable (__NR_SYSCALL_BASE_portable+145)
+#define __NR_writev_portable (__NR_SYSCALL_BASE_portable+146)
+#define __NR_getsid_portable (__NR_SYSCALL_BASE_portable+147)
+#define __NR_fdatasync_portable (__NR_SYSCALL_BASE_portable+148)
+#define __NR__sysctl_portable (__NR_SYSCALL_BASE_portable+149)
+#define __NR_mlock_portable (__NR_SYSCALL_BASE_portable+150)
+#define __NR_munlock_portable (__NR_SYSCALL_BASE_portable+151)
+#define __NR_mlockall_portable (__NR_SYSCALL_BASE_portable+152)
+#define __NR_munlockall_portable (__NR_SYSCALL_BASE_portable+153)
+#define __NR_sched_setparam_portable (__NR_SYSCALL_BASE_portable+154)
+#define __NR_sched_getparam_portable (__NR_SYSCALL_BASE_portable+155)
+#define __NR_sched_setscheduler_portable (__NR_SYSCALL_BASE_portable+156)
+#define __NR_sched_getscheduler_portable (__NR_SYSCALL_BASE_portable+157)
+#define __NR_sched_yield_portable (__NR_SYSCALL_BASE_portable+158)
+#define __NR_sched_get_priority_max_portable (__NR_SYSCALL_BASE_portable+159)
+#define __NR_sched_get_priority_min_portable (__NR_SYSCALL_BASE_portable+160)
+#define __NR_sched_rr_get_interval_portable (__NR_SYSCALL_BASE_portable+161)
+#define __NR_nanosleep_portable (__NR_SYSCALL_BASE_portable+162)
+#define __NR_mremap_portable (__NR_SYSCALL_BASE_portable+163)
+#define __NR_setresuid_portable (__NR_SYSCALL_BASE_portable+164)
+#define __NR_getresuid_portable (__NR_SYSCALL_BASE_portable+165)
+
+#define __NR_poll_portable (__NR_SYSCALL_BASE_portable+168)
+#define __NR_nfsservctl_portable (__NR_SYSCALL_BASE_portable+169)
+#define __NR_setresgid_portable (__NR_SYSCALL_BASE_portable+170)
+#define __NR_getresgid_portable (__NR_SYSCALL_BASE_portable+171)
+#define __NR_prctl_portable (__NR_SYSCALL_BASE_portable+172)
+#define __NR_rt_sigreturn_portable (__NR_SYSCALL_BASE_portable+173)
+#define __NR_rt_sigaction_portable (__NR_SYSCALL_BASE_portable+174)
+#define __NR_rt_sigprocmask_portable (__NR_SYSCALL_BASE_portable+175)
+#define __NR_rt_sigpending_portable (__NR_SYSCALL_BASE_portable+176)
+#define __NR_rt_sigtimedwait_portable (__NR_SYSCALL_BASE_portable+177)
+#define __NR_rt_sigqueueinfo_portable (__NR_SYSCALL_BASE_portable+178)
+#define __NR_rt_sigsuspend_portable (__NR_SYSCALL_BASE_portable+179)
+#define __NR_pread64_portable (__NR_SYSCALL_BASE_portable+180)
+#define __NR_pwrite64_portable (__NR_SYSCALL_BASE_portable+181)
+#define __NR_chown_portable (__NR_SYSCALL_BASE_portable+182)
+#define __NR_getcwd_portable (__NR_SYSCALL_BASE_portable+183)
+#define __NR_capget_portable (__NR_SYSCALL_BASE_portable+184)
+#define __NR_capset_portable (__NR_SYSCALL_BASE_portable+185)
+#define __NR_sigaltstack_portable (__NR_SYSCALL_BASE_portable+186)
+#define __NR_sendfile_portable (__NR_SYSCALL_BASE_portable+187)
+
+#define __NR_vfork_portable (__NR_SYSCALL_BASE_portable+190)
+#define __NR_ugetrlimit_portable (__NR_SYSCALL_BASE_portable+191)
+#define __NR_mmap2_portable (__NR_SYSCALL_BASE_portable+192)
+#define __NR_truncate64_portable (__NR_SYSCALL_BASE_portable+193)
+#define __NR_ftruncate64_portable (__NR_SYSCALL_BASE_portable+194)
+#define __NR_stat64_portable (__NR_SYSCALL_BASE_portable+195)
+#define __NR_lstat64_portable (__NR_SYSCALL_BASE_portable+196)
+#define __NR_fstat64_portable (__NR_SYSCALL_BASE_portable+197)
+#define __NR_lchown32_portable (__NR_SYSCALL_BASE_portable+198)
+#define __NR_getuid32_portable (__NR_SYSCALL_BASE_portable+199)
+#define __NR_getgid32_portable (__NR_SYSCALL_BASE_portable+200)
+#define __NR_geteuid32_portable (__NR_SYSCALL_BASE_portable+201)
+#define __NR_getegid32_portable (__NR_SYSCALL_BASE_portable+202)
+#define __NR_setreuid32_portable (__NR_SYSCALL_BASE_portable+203)
+#define __NR_setregid32_portable (__NR_SYSCALL_BASE_portable+204)
+#define __NR_getgroups32_portable (__NR_SYSCALL_BASE_portable+205)
+#define __NR_setgroups32_portable (__NR_SYSCALL_BASE_portable+206)
+#define __NR_fchown32_portable (__NR_SYSCALL_BASE_portable+207)
+#define __NR_setresuid32_portable (__NR_SYSCALL_BASE_portable+208)
+#define __NR_getresuid32_portable (__NR_SYSCALL_BASE_portable+209)
+#define __NR_setresgid32_portable (__NR_SYSCALL_BASE_portable+210)
+#define __NR_getresgid32_portable (__NR_SYSCALL_BASE_portable+211)
+#define __NR_chown32_portable (__NR_SYSCALL_BASE_portable+212)
+#define __NR_setuid32_portable (__NR_SYSCALL_BASE_portable+213)
+#define __NR_setgid32_portable (__NR_SYSCALL_BASE_portable+214)
+#define __NR_setfsuid32_portable (__NR_SYSCALL_BASE_portable+215)
+#define __NR_setfsgid32_portable (__NR_SYSCALL_BASE_portable+216)
+#define __NR_getdents64_portable (__NR_SYSCALL_BASE_portable+217)
+#define __NR_pivot_root_portable (__NR_SYSCALL_BASE_portable+218)
+#define __NR_mincore_portable (__NR_SYSCALL_BASE_portable+219)
+#define __NR_madvise_portable (__NR_SYSCALL_BASE_portable+220)
+#define __NR_fcntl64_portable (__NR_SYSCALL_BASE_portable+221)
+
+#define __NR_gettid_portable (__NR_SYSCALL_BASE_portable+224)
+#define __NR_readahead_portable (__NR_SYSCALL_BASE_portable+225)
+#define __NR_setxattr_portable (__NR_SYSCALL_BASE_portable+226)
+#define __NR_lsetxattr_portable (__NR_SYSCALL_BASE_portable+227)
+#define __NR_fsetxattr_portable (__NR_SYSCALL_BASE_portable+228)
+#define __NR_getxattr_portable (__NR_SYSCALL_BASE_portable+229)
+#define __NR_lgetxattr_portable (__NR_SYSCALL_BASE_portable+230)
+#define __NR_fgetxattr_portable (__NR_SYSCALL_BASE_portable+231)
+#define __NR_listxattr_portable (__NR_SYSCALL_BASE_portable+232)
+#define __NR_llistxattr_portable (__NR_SYSCALL_BASE_portable+233)
+#define __NR_flistxattr_portable (__NR_SYSCALL_BASE_portable+234)
+#define __NR_removexattr_portable (__NR_SYSCALL_BASE_portable+235)
+#define __NR_lremovexattr_portable (__NR_SYSCALL_BASE_portable+236)
+#define __NR_fremovexattr_portable (__NR_SYSCALL_BASE_portable+237)
+#define __NR_tkill_portable (__NR_SYSCALL_BASE_portable+238)
+#define __NR_sendfile64_portable (__NR_SYSCALL_BASE_portable+239)
+#define __NR_futex_portable (__NR_SYSCALL_BASE_portable+240)
+#define __NR_sched_setaffinity_portable (__NR_SYSCALL_BASE_portable+241)
+#define __NR_sched_getaffinity_portable (__NR_SYSCALL_BASE_portable+242)
+#define __NR_io_setup_portable (__NR_SYSCALL_BASE_portable+243)
+#define __NR_io_destroy_portable (__NR_SYSCALL_BASE_portable+244)
+#define __NR_io_getevents_portable (__NR_SYSCALL_BASE_portable+245)
+#define __NR_io_submit_portable (__NR_SYSCALL_BASE_portable+246)
+#define __NR_io_cancel_portable (__NR_SYSCALL_BASE_portable+247)
+#define __NR_exit_group_portable (__NR_SYSCALL_BASE_portable+248)
+#define __NR_lookup_dcookie_portable (__NR_SYSCALL_BASE_portable+249)
+#define __NR_epoll_create_portable (__NR_SYSCALL_BASE_portable+250)
+#define __NR_epoll_ctl_portable (__NR_SYSCALL_BASE_portable+251)
+#define __NR_epoll_wait_portable (__NR_SYSCALL_BASE_portable+252)
+#define __NR_remap_file_pages_portable (__NR_SYSCALL_BASE_portable+253)
+
+#define __NR_set_tid_address_portable (__NR_SYSCALL_BASE_portable+256)
+#define __NR_timer_create_portable (__NR_SYSCALL_BASE_portable+257)
+#define __NR_timer_settime_portable (__NR_SYSCALL_BASE_portable+258)
+#define __NR_timer_gettime_portable (__NR_SYSCALL_BASE_portable+259)
+#define __NR_timer_getoverrun_portable (__NR_SYSCALL_BASE_portable+260)
+#define __NR_timer_delete_portable (__NR_SYSCALL_BASE_portable+261)
+#define __NR_clock_settime_portable (__NR_SYSCALL_BASE_portable+262)
+#define __NR_clock_gettime_portable (__NR_SYSCALL_BASE_portable+263)
+#define __NR_clock_getres_portable (__NR_SYSCALL_BASE_portable+264)
+#define __NR_clock_nanosleep_portable (__NR_SYSCALL_BASE_portable+265)
+#define __NR_statfs64_portable (__NR_SYSCALL_BASE_portable+266)
+#define __NR_fstatfs64_portable (__NR_SYSCALL_BASE_portable+267)
+#define __NR_tgkill_portable (__NR_SYSCALL_BASE_portable+268)
+#define __NR_utimes_portable (__NR_SYSCALL_BASE_portable+269)
+#define __NR_arm_fadvise64_64_portable (__NR_SYSCALL_BASE_portable+270)
+#define __NR_pciconfig_iobase_portable (__NR_SYSCALL_BASE_portable+271)
+#define __NR_pciconfig_read_portable (__NR_SYSCALL_BASE_portable+272)
+#define __NR_pciconfig_write_portable (__NR_SYSCALL_BASE_portable+273)
+#define __NR_mq_open_portable (__NR_SYSCALL_BASE_portable+274)
+#define __NR_mq_unlink_portable (__NR_SYSCALL_BASE_portable+275)
+#define __NR_mq_timedsend_portable (__NR_SYSCALL_BASE_portable+276)
+#define __NR_mq_timedreceive_portable (__NR_SYSCALL_BASE_portable+277)
+#define __NR_mq_notify_portable (__NR_SYSCALL_BASE_portable+278)
+#define __NR_mq_getsetattr_portable (__NR_SYSCALL_BASE_portable+279)
+#define __NR_waitid_portable (__NR_SYSCALL_BASE_portable+280)
+#define __NR_socket_portable (__NR_SYSCALL_BASE_portable+281)
+#define __NR_bind_portable (__NR_SYSCALL_BASE_portable+282)
+#define __NR_connect_portable (__NR_SYSCALL_BASE_portable+283)
+#define __NR_listen_portable (__NR_SYSCALL_BASE_portable+284)
+#define __NR_accept_portable (__NR_SYSCALL_BASE_portable+285)
+#define __NR_getsockname_portable (__NR_SYSCALL_BASE_portable+286)
+#define __NR_getpeername_portable (__NR_SYSCALL_BASE_portable+287)
+#define __NR_socketpair_portable (__NR_SYSCALL_BASE_portable+288)
+#define __NR_send_portable (__NR_SYSCALL_BASE_portable+289)
+#define __NR_sendto_portable (__NR_SYSCALL_BASE_portable+290)
+#define __NR_recv_portable (__NR_SYSCALL_BASE_portable+291)
+#define __NR_recvfrom_portable (__NR_SYSCALL_BASE_portable+292)
+#define __NR_shutdown_portable (__NR_SYSCALL_BASE_portable+293)
+#define __NR_setsockopt_portable (__NR_SYSCALL_BASE_portable+294)
+#define __NR_getsockopt_portable (__NR_SYSCALL_BASE_portable+295)
+#define __NR_sendmsg_portable (__NR_SYSCALL_BASE_portable+296)
+#define __NR_recvmsg_portable (__NR_SYSCALL_BASE_portable+297)
+#define __NR_semop_portable (__NR_SYSCALL_BASE_portable+298)
+#define __NR_semget_portable (__NR_SYSCALL_BASE_portable+299)
+#define __NR_semctl_portable (__NR_SYSCALL_BASE_portable+300)
+#define __NR_msgsnd_portable (__NR_SYSCALL_BASE_portable+301)
+#define __NR_msgrcv_portable (__NR_SYSCALL_BASE_portable+302)
+#define __NR_msgget_portable (__NR_SYSCALL_BASE_portable+303)
+#define __NR_msgctl_portable (__NR_SYSCALL_BASE_portable+304)
+#define __NR_shmat_portable (__NR_SYSCALL_BASE_portable+305)
+#define __NR_shmdt_portable (__NR_SYSCALL_BASE_portable+306)
+#define __NR_shmget_portable (__NR_SYSCALL_BASE_portable+307)
+#define __NR_shmctl_portable (__NR_SYSCALL_BASE_portable+308)
+#define __NR_add_key_portable (__NR_SYSCALL_BASE_portable+309)
+#define __NR_request_key_portable (__NR_SYSCALL_BASE_portable+310)
+#define __NR_keyctl_portable (__NR_SYSCALL_BASE_portable+311)
+#define __NR_semtimedop_portable (__NR_SYSCALL_BASE_portable+312)
+#define __NR_vserver_portable (__NR_SYSCALL_BASE_portable+313)
+#define __NR_ioprio_set_portable (__NR_SYSCALL_BASE_portable+314)
+#define __NR_ioprio_get_portable (__NR_SYSCALL_BASE_portable+315)
+#define __NR_inotify_init_portable (__NR_SYSCALL_BASE_portable+316)
+#define __NR_inotify_add_watch_portable (__NR_SYSCALL_BASE_portable+317)
+#define __NR_inotify_rm_watch_portable (__NR_SYSCALL_BASE_portable+318)
+#define __NR_mbind_portable (__NR_SYSCALL_BASE_portable+319)
+#define __NR_get_mempolicy_portable (__NR_SYSCALL_BASE_portable+320)
+#define __NR_set_mempolicy_portable (__NR_SYSCALL_BASE_portable+321)
+
+#define  __NR_openat_portable (__NR_SYSCALL_BASE_portable+322)
+#define  __NR_mkdirat_portable (__NR_SYSCALL_BASE_portable+323)
+#define  __NR_mknodat_portable (__NR_SYSCALL_BASE_portable+324)
+#define  __NR_fchownat_portable (__NR_SYSCALL_BASE_portable+325)
+#define  __NR_futimesat_portable (__NR_SYSCALL_BASE_portable+326)
+#define  __NR_fstatat64_portable (__NR_SYSCALL_BASE_portable+327)
+#define  __NR_unlinkat_portable (__NR_SYSCALL_BASE_portable+328)
+#define  __NR_renameat_portable (__NR_SYSCALL_BASE_portable+329)
+#define  __NR_linkat_portable (__NR_SYSCALL_BASE_portable+330)
+#define  __NR_symlinkat_portable (__NR_SYSCALL_BASE_portable+331)
+#define  __NR_readlinkat_portable (__NR_SYSCALL_BASE_portable+332)
+#define  __NR_fchmodat_portable (__NR_SYSCALL_BASE_portable+333)
+#define  __NR_faccessat_portable (__NR_SYSCALL_BASE_portable+334)
+#define  __NR_pselect6_portable (__NR_SYSCALL_BASE_portable+335)
+#define  __NR_ppoll_portable (__NR_SYSCALL_BASE_portable+336)
+#define  __NR_unshare_portable (__NR_SYSCALL_BASE_portable+337)
+#define  __NR_set_robust_list_portable (__NR_SYSCALL_BASE_portable+338)
+#define  __NR_get_robust_list_portable (__NR_SYSCALL_BASE_portable+339)
+#define  __NR_splice_portable (__NR_SYSCALL_BASE_portable+340)
+#define  __NR_arm_sync_file_range_portable (__NR_SYSCALL_BASE_portable+341)
+#define  __NR_tee_portable (__NR_SYSCALL_BASE_portable+342)
+#define  __NR_vmsplice_portable (__NR_SYSCALL_BASE_portable+343)
+#define  __NR_move_pages_portable (__NR_SYSCALL_BASE_portable+344)
+#define  __NR_getcpu_portable (__NR_SYSCALL_BASE_portable+345)
+#define  __NR_epoll_pwait_portable (__NR_SYSCALL_BASE_portable+346)
+#define  __NR_kexec_load_portable (__NR_SYSCALL_BASE_portable+347)
+#define  __NR_utimensat_portable (__NR_SYSCALL_BASE_portable+348)
+#define  __NR_signalfd_portable (__NR_SYSCALL_BASE_portable+349)
+#define  __NR_timerfd_create_portable (__NR_SYSCALL_BASE_portable+350)
+#define  __NR_eventfd_portable (__NR_SYSCALL_BASE_portable+351)
+#define  __NR_fallocate_portable (__NR_SYSCALL_BASE_portable+352)
+#define  __NR_timerfd_settime_portable (__NR_SYSCALL_BASE_portable+353)
+#define  __NR_timerfd_gettime_portable (__NR_SYSCALL_BASE_portable+354)
+#define  __NR_signalfd4_portable (__NR_SYSCALL_BASE_portable+355)
+#define  __NR_eventfd2_portable (__NR_SYSCALL_BASE_portable+356)
+#define  __NR_epoll_create1_portable (__NR_SYSCALL_BASE_portable+357)
+#define  __NR_dup3_portable (__NR_SYSCALL_BASE_portable+358)
+#define  __NR_pipe2_portable (__NR_SYSCALL_BASE_portable+359)
+#define  __NR_inotify_init1_portable (__NR_SYSCALL_BASE_portable+360)
+#define  __NR_preadv_portable (__NR_SYSCALL_BASE_portable+361)
+#define  __NR_pwritev_portable (__NR_SYSCALL_BASE_portable+362)
+#define  __NR_rt_tgsigqueueinfo_portable (__NR_SYSCALL_BASE_portable+363)
+#define  __NR_perf_event_open_portable (__NR_SYSCALL_BASE_portable+364)
+#define  __NR_recvmmsg_portable (__NR_SYSCALL_BASE_portable+365)
+#define  __NR_accept4_portable (__NR_SYSCALL_BASE_portable+366)
+#define  __NR_fanotify_init_portable (__NR_SYSCALL_BASE_portable+367)
+#define  __NR_fanotify_mark_portable (__NR_SYSCALL_BASE_portable+368)
+#define  __NR_prlimit64_portable (__NR_SYSCALL_BASE_portable+369)
+#define  __NR_name_to_handle_at_portable (__NR_SYSCALL_BASE_portable+370)
+#define  __NR_open_by_handle_at_portable (__NR_SYSCALL_BASE_portable+371)
+#define  __NR_clock_adjtime_portable (__NR_SYSCALL_BASE_portable+372)
+#define  __NR_syncfs_portable (__NR_SYSCALL_BASE_portable+373)
+#define  __NR_sendmmsg_portable (__NR_SYSCALL_BASE_portable+374)
+#define  __NR_setns_portable (__NR_SYSCALL_BASE_portable+375)
+#define  __NR_process_vm_readv_portable (__NR_SYSCALL_BASE_portable+376)
+#define  __NR_process_vm_writev_portable (__NR_SYSCALL_BASE_portable+377)
+
+
+#define __ARM_NR_BASE_portable (__NR_SYSCALL_BASE_portable+0x0f0000)
+#define __ARM_NR_breakpoint_portable (__ARM_NR_BASE_portable+1)
+#define __ARM_NR_cacheflush_portable (__ARM_NR_BASE_portable+2)
+#define __ARM_NR_usr26_portable (__ARM_NR_BASE_portable+3)
+#define __ARM_NR_usr32_portable (__ARM_NR_BASE_portable+4)
+#define __ARM_NR_set_tls_portable (__ARM_NR_BASE_portable+5)
+
+/* Apparently these are not callable using syscall on ARM... */
+#undef __NR_time_portable
+#undef __NR_umount_portable
+#undef __NR_stime_portable
+#undef __NR_alarm_portable
+#undef __NR_utime_portable
+#undef __NR_getrlimit_portable
+#undef __NR_select_portable
+#undef __NR_readdir_portable
+#undef __NR_mmap_portable
+#undef __NR_socketcall_portable
+#undef __NR_syscall_portable
+#undef __NR_ipc_portable
+
+#endif
diff --git a/ndk/sources/android/libportable/common/include/errno_portable.h b/ndk/sources/android/libportable/common/include/errno_portable.h
index c2f6523..61888c6 100644
--- a/ndk/sources/android/libportable/common/include/errno_portable.h
+++ b/ndk/sources/android/libportable/common/include/errno_portable.h
@@ -17,7 +17,14 @@
 #ifndef _ERRNO_PORTABLE_H_
 #define _ERRNO_PORTABLE_H_
 
-/* Derived from development/ndk/platforms/android-3/include/asm-generic/errno.h */
+#include <portability.h>
+
+/*
+ * Derived from development/ndk/platforms/android-3/include/asm-generic/errno.h
+ * NOTE:
+ *   Base errno #defines from 1...35 are ARCH independent and not defined;
+ *   they are defined in ./asm-generic/errno-base.h
+ */
 #define EDEADLK_PORTABLE 35
 #define ENAMETOOLONG_PORTABLE 36
 #define ENOLCK_PORTABLE 37
@@ -120,4 +127,9 @@
 #define EOWNERDEAD_PORTABLE 130
 #define ENOTRECOVERABLE_PORTABLE 131
 
+extern __hidden int errno_ntop(int native_errno);
+extern __hidden int errno_pton(int native_errno);
+
+extern volatile int*   REAL(__errno)(void);
+
 #endif /* _ERRNO_PORTABLE_H */
diff --git a/ndk/sources/android/libportable/common/include/eventfd_portable.h b/ndk/sources/android/libportable/common/include/eventfd_portable.h
new file mode 100644
index 0000000..d72ca8d
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/eventfd_portable.h
@@ -0,0 +1,63 @@
+/*
+ * Derived from bionic/libc/include/sys/eventfd.h
+ *
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _SYS_EVENTFD_PORTABLE_H
+#define _SYS_EVENTFD_PORTABLE_H
+
+#include <portability.h>
+#include <sys/cdefs.h>
+#include <fcntl_portable.h>
+
+__BEGIN_DECLS
+
+/*
+ * EFD_SEMAPHORE is defined in recent linux kernels;
+ * but isn't mentioned elsewhere. See linux 3.4
+ * include/linux/eventfd.h for example.
+ */
+#define EFD_SEMAPHORE           (1 << 0)
+
+#define EFD_SEMAPHORE_PORTABLE  EFD_SEMAPHORE
+#define EFD_CLOEXEC_PORTABLE    O_CLOEXEC_PORTABLE
+#define EFD_NONBLOCK_PORTABLE   O_NONBLOCK_PORTABLE
+
+/* type of event counter */
+typedef uint64_t  eventfd_portable_t;
+
+extern int WRAP(eventfd)(unsigned int initval, int flags);
+
+#if 0
+/* Compatibility with GLibc; libportable versions don't appear to be necessary */
+extern int eventfd_read(int fd, eventfd_t *counter);
+extern int eventfd_write(int fd, const eventfd_t counter);
+#endif
+
+__END_DECLS
+
+#endif /* _SYS_EVENTFD_H */
diff --git a/ndk/sources/android/libportable/common/include/fcntl_portable.h b/ndk/sources/android/libportable/common/include/fcntl_portable.h
index 7240ad3..6e99c8b 100644
--- a/ndk/sources/android/libportable/common/include/fcntl_portable.h
+++ b/ndk/sources/android/libportable/common/include/fcntl_portable.h
@@ -18,7 +18,7 @@
 #define _FCNTL_PORTABLE_H_
 
 /* Derived from development/ndk/platforms/android-3/arch-arm/include/asm/fcntl.h */
-/* NB x86 does not have these and only uses the generic definitions */
+/* NB x86 does not have these and only uses the generic definitions. */
 #define O_DIRECTORY_PORTABLE    040000
 #define O_NOFOLLOW_PORTABLE     0100000
 #define O_DIRECT_PORTABLE       0200000
@@ -72,6 +72,30 @@
 #define O_NDELAY_PORTABLE   O_NONBLOCK_PORTABLE
 #endif
 
+/* From Bionic libc/kernel/common/asm-generic/fcntl.h */
+#ifndef O_CLOEXEC_PORTABLE
+#define O_CLOEXEC_PORTABLE 02000000
+#endif
+
+#ifndef __ARCH_FLOCK64_PAD
+#define __ARCH_FLOCK64_PAD
+#endif
+
+/*
+ * For use with F_GETLK and F_SETLK
+ */
+struct flock_portable {
+   short l_type;
+   short l_whence;
+   off_t l_start;
+   off_t l_len;
+   pid_t l_pid;
+   __ARCH_FLOCK64_PAD
+};
+
+/*
+ * For use with F_GETLK64 and F_SETLK64
+ */
 struct flock64_portable {
    short l_type;
    short l_whence;
@@ -82,9 +106,10 @@
    __ARCH_FLOCK64_PAD
 };
 
+#if 0
 /*
-The X86 Version is
-
+ * The X86 Version is
+ */
 struct flock64 {
    short l_type;
    short l_whence;
@@ -93,22 +118,48 @@
    pid_t l_pid;
    __ARCH_FLOCK64_PAD
 };
-*/
+#endif /* 0 */
+
+
+#ifndef F_DUPFD_PORTABLE
+#define F_DUPFD_PORTABLE 0
+#define F_GETFD_PORTABLE 1
+#define F_SETFD_PORTABLE 2
+#define F_GETFL_PORTABLE 3
+#define F_SETFL_PORTABLE 4
+#endif
 
 #ifndef F_GETLK_PORTABLE
 #define F_GETLK_PORTABLE 5
 #define F_SETLK_PORTABLE 6
 #define F_SETLKW_PORTABLE 7
 #endif
+
 #ifndef F_SETOWN_PORTABLE
 #define F_SETOWN_PORTABLE 8
 #define F_GETOWN_PORTABLE 9
 #endif
 
+#ifndef F_SETSIG_PORTABLE
+#define F_SETSIG_PORTABLE 10
+#define F_GETSIG_PORTABLE 11
+#endif
+
 #ifndef F_GETLK64_PORTABLE
 #define F_GETLK64_PORTABLE 12
 #define F_SETLK64_PORTABLE 13
 #define F_SETLKW64_PORTABLE 14
 #endif
 
+/* This constant seems to be the same for all ARCH's */
+#define F_LINUX_SPECIFIC_BASE_PORTABLE 1024
+
+#define F_SETLEASE_PORTABLE             (F_LINUX_SPECIFIC_BASE+0)       /* 1024 */
+#define F_GETLEASE_PORTABLE             (F_LINUX_SPECIFIC_BASE+1)       /* 1025 */
+#define F_NOTIFY_PORTABLE               (F_LINUX_SPECIFIC_BASE+2)       /* 1026 */
+
+/* Currently these are only supported by X86_64 */
+#define F_CANCELLK_PORTABLE             (F_LINUX_SPECIFIC_BASE+5)       /* 1029 */
+#define F_DUPFD_CLOEXEC_PORTABLE        (F_LINUX_SPECIFIC_BASE+6)       /* 1030 */
+
 #endif /* _FCNTL_PORTABLE_H */
diff --git a/ndk/sources/android/libportable/common/include/filefd_portable.h b/ndk/sources/android/libportable/common/include/filefd_portable.h
new file mode 100644
index 0000000..76cd4b8
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/filefd_portable.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FILEFD_PORTABLE_H_
+#define _FILEFD_PORTABLE_H_
+
+/*
+ * Maintaining a list of special file descriptors in lib-portable
+ * which are maintained across a execve() via environment variables.
+ * See portable/arch-mips/filefd.c for details.
+ */
+enum filefd_type {
+    UNUSED_FD_TYPE = 0,
+    EVENT_FD_TYPE,
+    INOTIFY_FD_TYPE,
+    SIGNAL_FD_TYPE,
+    TIMER_FD_TYPE,
+    MAX_FD_TYPE
+};
+
+extern __hidden void filefd_opened(int fd, enum filefd_type fd_type);
+extern __hidden void filefd_closed(int fd);
+extern __hidden void filefd_CLOEXEC_enabled(int fd);
+extern __hidden void filefd_CLOEXEC_disabled(int fd);
+extern __hidden void filefd_disable_mapping(void);
+
+extern int WRAP(close)(int fd);
+extern int WRAP(read)(int fd, void *buf, size_t count);
+extern int WRAP(pipe2)(int pipefd[2], int portable_flags);
+
+#endif /* _FILEFD_PORTABLE_H_ */
diff --git a/ndk/sources/android/libportable/common/include/inotify_portable.h b/ndk/sources/android/libportable/common/include/inotify_portable.h
new file mode 100644
index 0000000..09d4d64
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/inotify_portable.h
@@ -0,0 +1,51 @@
+/*
+ * Derived from bionic/libc/include/sys/eventfd.h
+ *
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _SYS_INOTIFY_PORTABLE_H
+#define _SYS_INOTIFY_PORTABLE_H
+
+#include <portability.h>
+#include <sys/cdefs.h>
+#include <fcntl.h>
+#include <fcntl_portable.h>
+
+__BEGIN_DECLS
+
+#define  IN_CLOEXEC   O_CLOEXEC
+#define  IN_NONBLOCK  O_NONBLOCK
+
+#define  IN_CLOEXEC_PORTABLE   O_CLOEXEC_PORTABLE
+#define  IN_NONBLOCK_PORTABLE  O_NONBLOCK_PORTABLE
+
+extern int WRAP(inotify_init1)(int flags);
+
+__END_DECLS
+
+#endif /* _SYS_INOTIFY_H */
diff --git a/ndk/sources/android/libportable/common/include/ioctls_portable.h b/ndk/sources/android/libportable/common/include/ioctls_portable.h
index e9e977c..9c03f25 100644
--- a/ndk/sources/android/libportable/common/include/ioctls_portable.h
+++ b/ndk/sources/android/libportable/common/include/ioctls_portable.h
@@ -17,8 +17,9 @@
 #ifndef _IOCTLS_PORTABLE_H_
 #define _IOCTLS_PORTABLE_H_
 
-/* Derived from development/ndk/platforms/android-3/include/asm-generic/ioctl.h */
-
+/*
+ * Derived from development/ndk/platforms/android-3/include/asm-generic/ioctl.h
+ */
 #define _IOC_NRBITS_PORTABLE 8
 #define _IOC_TYPEBITS_PORTABLE 8
 #define _IOC_SIZEBITS_PORTABLE 14
@@ -38,18 +39,37 @@
 #define _IOC_WRITE_PORTABLE 1U
 #define _IOC_READ_PORTABLE 2U
 
-#define _IOC_PORTABLE(dir,type,nr,size)   (((dir) << _IOC_DIRSHIFT_PORTABLE) |   ((type) << _IOC_TYPESHIFT_PORTABLE) |   ((nr) << _IOC_NRSHIFT_PORTABLE) |   ((size) << _IOC_SIZESHIFT_PORTABLE))
+#define _IOC_PORTABLE(dir, type, nr, size) (                                            \
+    ((dir) << _IOC_DIRSHIFT_PORTABLE)    |                                              \
+    ((type) << _IOC_TYPESHIFT_PORTABLE)  |                                              \
+    ((nr) << _IOC_NRSHIFT_PORTABLE)      |                                              \
+    ((size) << _IOC_SIZESHIFT_PORTABLE)                                                 \
+)
 
 extern unsigned int __invalid_size_argument_for_IOC;
-#define _IOC_TYPECHECK_PORTABLE(t)   ((sizeof(t) == sizeof(t[1]) &&   sizeof(t) < (1 << _IOC_SIZEBITS_PORTABLE)) ?   sizeof(t) : __invalid_size_argument_for_IOC)
 
-#define _IO_PORTABLE(type,nr) _IOC_PORTABLE(_IOC_NONE_PORTABLE,(type),(nr),0)
-#define _IOR_PORTABLE(type,nr,size) _IOC_PORTABLE(_IOC_READ_PORTABLE,(type),(nr),(_IOC_TYPECHECK_PORTABLE(size)))
-#define _IOW_PORTABLE(type,nr,size) _IOC_PORTABLE(_IOC_WRITE_PORTABLE,(type),(nr),(_IOC_TYPECHECK_PORTABLE(size)))
-#define _IOWR_PORTABLE(type,nr,size) _IOC_PORTABLE(_IOC_READ_PORTABLE|_IOC_WRITE_PORTABLE,(type),(nr),(_IOC_TYPECHECK_PORTABLE(size)))
+#define _IOC_TYPECHECK_PORTABLE(t) (                                                    \
+    (sizeof(t) == sizeof(t[1]) && sizeof(t) < (1 << _IOC_SIZEBITS_PORTABLE)) ?          \
+    sizeof(t) :                                                                         \
+    __invalid_size_argument_for_IOC                                                     \
+)
 
-/* Derived from development/ndk/platforms/android-3/arch-arm/include/asm/ioctls.h */
+#define _IO_PORTABLE(type, nr) _IOC_PORTABLE(_IOC_NONE_PORTABLE, (type), (nr), 0)
 
+#define _IOR_PORTABLE(type, nr, size)                                                    \
+    _IOC_PORTABLE(_IOC_READ_PORTABLE, (type), (nr), (_IOC_TYPECHECK_PORTABLE(size)))
+
+#define _IOW_PORTABLE(type, nr, size)                                                    \
+    _IOC_PORTABLE(_IOC_WRITE_PORTABLE, (type), (nr), (_IOC_TYPECHECK_PORTABLE(size)))
+
+#define _IOWR_PORTABLE(type, nr, size)                                                   \
+    IOC_PORTABLE(_IOC_READ_PORTABLE |                                                    \
+                 _IOC_WRITE_PORTABLE, (type), (nr), (IOC_TYPECHECK_PORTABLE(size)) )
+
+
+/*
+ * Derived from development/ndk/platforms/android-3/arch-arm/include/asm/ioctls.h
+ */
 #define TCGETS_PORTABLE     0x5401
 #define TCSETS_PORTABLE     0x5402
 #define TCSETSW_PORTABLE    0x5403
@@ -121,8 +141,9 @@
 
 #define TIOCSER_TEMT_PORTABLE   0x01
 
-/* Derived from development/ndk/platforms/android-3/include/sys/ioctl_compat.h */
-
+/*
+ * Derived from development/ndk/platforms/android-3/include/sys/ioctl_compat.h
+ */
 struct tchars_portable {
         char    t_intrc;        /* interrupt */
         char    t_quitc;        /* quit */
@@ -142,11 +163,11 @@
 };
 
 struct sgttyb_portable {
-        char    sg_ispeed;              /* input speed */
-        char    sg_ospeed;              /* output speed */
-        char    sg_erase;               /* erase character */
-        char    sg_kill;                /* kill character */
-        short   sg_flags;               /* mode flags */
+        char    sg_ispeed;      /* input speed */
+        char    sg_ospeed;      /* output speed */
+        char    sg_erase;       /* erase character */
+        char    sg_kill;        /* kill character */
+        short   sg_flags;       /* mode flags */
 };
 
 #ifdef USE_OLD_TTY
@@ -156,23 +177,49 @@
 # define OTIOCGETD_PORTABLE  _IOR_PORTABLE('t', 0, int)       /* get line discipline */
 # define OTIOCSETD_PORTABLE  _IOW_PORTABLE('t', 1, int)       /* set line discipline */
 #endif
-#define TIOCHPCL_PORTABLE    _IO_PORTABLE('t', 2)             /* hang up on last close */
-#define TIOCGETP_PORTABLE    _IOR_PORTABLE('t', 8,struct sgttyb_portable)/* get parameters -- gtty */
-#define TIOCSETP_PORTABLE    _IOW_PORTABLE('t', 9,struct sgttyb_portable)/* set parameters -- stty */
-#define TIOCSETN_PORTABLE    _IOW_PORTABLE('t',10,struct sgttyb_portable)/* as above, but no flushtty*/
-#define TIOCSETC_PORTABLE    _IOW_PORTABLE('t',17,struct tchars_portable)/* set special characters */
-#define TIOCGETC_PORTABLE    _IOR_PORTABLE('t',18,struct tchars_portable)/* get special characters */
 
-#define TIOCLBIS_PORTABLE    _IOW_PORTABLE('t', 127, int)     /* bis local mode bits */
-#define TIOCLBIC_PORTABLE    _IOW_PORTABLE('t', 126, int)     /* bic local mode bits */
-#define TIOCLSET_PORTABLE    _IOW_PORTABLE('t', 125, int)     /* set entire local mode word */
-#define TIOCLGET_PORTABLE    _IOR_PORTABLE('t', 124, int)     /* get local modes */
-#define TIOCSLTC_PORTABLE    _IOW_PORTABLE('t',117,struct ltchars_portable)/* set local special chars*/
-#define TIOCGLTC_PORTABLE    _IOR_PORTABLE('t',116,struct ltchars_portable)/* get local special chars*/
-#define OTIOCCONS_PORTABLE   _IO_PORTABLE('t', 98)    /* for hp300 -- sans int arg */
+/* hang up on last close */
+#define TIOCHPCL_PORTABLE    _IO_PORTABLE('t', 2)
 
-/* Derived from development/ndk/platforms/android-3/arch-arm/include/asm/sockios.h */
+/* get parameters -- gtty */
+#define TIOCGETP_PORTABLE    _IOR_PORTABLE('t', 8,struct sgttyb_portable)
 
+/* set parameters -- stty */
+#define TIOCSETP_PORTABLE    _IOW_PORTABLE('t', 9,struct sgttyb_portable)
+
+/* as above, but no flushtty*/
+#define TIOCSETN_PORTABLE    _IOW_PORTABLE('t',10,struct sgttyb_portable)
+
+/* set special characters */
+#define TIOCSETC_PORTABLE    _IOW_PORTABLE('t',17,struct tchars_portable)
+
+/* get special characters */
+#define TIOCGETC_PORTABLE    _IOR_PORTABLE('t',18,struct tchars_portable)
+
+/* bis local mode bits */
+#define TIOCLBIS_PORTABLE    _IOW_PORTABLE('t', 127, int)
+
+/* bic local mode bits */
+#define TIOCLBIC_PORTABLE    _IOW_PORTABLE('t', 126, int)
+
+/* set entire local mode word */
+#define TIOCLSET_PORTABLE    _IOW_PORTABLE('t', 125, int)
+
+/* get local modes */
+#define TIOCLGET_PORTABLE    _IOR_PORTABLE('t', 124, int)
+
+/* set local special chars*/
+#define TIOCSLTC_PORTABLE    _IOW_PORTABLE('t',117,struct ltchars_portable)
+
+/* get local special chars*/
+#define TIOCGLTC_PORTABLE    _IOR_PORTABLE('t',116,struct ltchars_portable)
+
+ /* for hp300 -- sans int arg */
+#define OTIOCCONS_PORTABLE   _IO_PORTABLE('t', 98)
+
+/*
+ * Derived from development/ndk/platforms/android-3/arch-arm/include/asm/sockios.h
+ */
 #define FIOSETOWN_PORTABLE 0x8901
 #define SIOCSPGRP_PORTABLE 0x8902
 #define FIOGETOWN_PORTABLE 0x8903
diff --git a/ndk/sources/android/libportable/common/include/log_portable.h b/ndk/sources/android/libportable/common/include/log_portable.h
new file mode 100644
index 0000000..1a4fd43
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/log_portable.h
@@ -0,0 +1,101 @@
+/*
+ * ALOG Levels: F - Fatal, E - Error, W - Warning, I - Info, D - Debug, V - Verbose
+ *
+ * Using them to work within the Android logcat logging mechanism:
+ *
+ *    % logcat '*:v'                    [To display Verbose Logging]
+ *    % logcat 'fcntl_portable:v'       [To display just this fcntl logging]
+ *
+ * NOTE: This assumes you only use the 'PORTABLE_TAG'; which is the default.
+ *       For debugging LTP it's been helpful to include the LTP program being tested;
+ *       which is enabled below with #define EXTENDED_LOGGING.
+ *
+ * Logging routines also support ALOG*_IF() and ASSERT(); For details See:
+ *
+ *       ${ANDROID_TOP}/system/core/include/cutils/log.h
+ * and
+ *        http://developer.android.com/tools/debugging/debugging-log.html
+ *
+ * ALOGV is turned off by release builds: Use the #define below with LOG_NDEBUG=0 to enable.
+ *
+ * Strace works fine with ALOG out if a large max string size is used via the -s option;
+ * Example:
+ *
+ *   strace -s 132 ./sigaction01
+ *
+ *   writev(3, [{"\2", 1},
+ *      {"./sigaction01`signal_portable\0", 30},
+ *      {"sigaction_portable(portable_signum:10:'SIGUSR1_PORTABLE:10', ...
+ *      {"map_portable_sigset_to_mips(portable_sigset:0x7fe47a0c, ...
+ *      ...
+ */
+
+ /*
+  * Enable LOG_NDEBUG to have debug code visible in logcat output by default.
+  * Also possible via the Lib-Portable Android.mk  file. Example:
+  *
+  *     # Have logging permanently enable during development.
+  *     LOCAL_CFLAGS += -DLOG_NDEBUG=0
+  */
+// # define LOG_NDEBUG 0
+
+
+// #define EXTENDED_LOGGING        /* Include the current program name in the LOG_TAG */
+#ifdef EXTENDED_LOGGING
+/*
+ * Inline function to put the current program name
+ * and this library into the logcat prefix. Example:
+ *
+ *    V/./sigaction01`signal_portable(605): sigaction_portable(... ) {
+ *      -----------------------------
+ *
+ * Disabled by default in AOSP, enable by removing the // above.
+ * Useful when debugging more than one program; For example LTP has thousands.
+ */
+#define MAX_TAG_LEN 128
+static char my_portable_tag[MAX_TAG_LEN + 1];
+
+static inline char *portable_tag() {
+    extern char *__progname;
+
+    if (my_portable_tag[0] == '\000') {
+        strncat(&my_portable_tag[0], __progname, MAX_TAG_LEN);
+        strncat(&my_portable_tag[0], ".", MAX_TAG_LEN - strlen(my_portable_tag));
+        strncat(&my_portable_tag[0], PORTABLE_TAG, MAX_TAG_LEN - strlen(my_portable_tag));
+    }
+    return my_portable_tag;
+}
+#define LOG_TAG  portable_tag()
+#else /* !EXTENDED_LOGGING */
+#define LOG_TAG PORTABLE_TAG
+#endif
+
+/*
+ * Override LOG_PRI() defined in ${AOSP}/system/core/include/cutils/log.h
+ * to preserve the value of errno while logging.
+ */
+#define LOG_PRI(priority, tag, ...) ({                      \
+    int _errno = *REAL(__errno)();                          \
+    int _rv = android_printLog(priority, tag, __VA_ARGS__); \
+    *REAL(__errno)() = _errno;                              \
+    _rv;                   /* Returned to caller */         \
+})
+
+#if !defined(__HOST__)
+#include <cutils/log.h>
+
+# define PERROR(str)  {                                                                  \
+    ALOGE("%s: PERROR('%s'): errno:%d:'%s'", __func__, str, *REAL(__errno)(), strerror(errno)); \
+}
+
+# define ASSERT(cond) ALOG_ASSERT(cond, "assertion failed:(%s), file: %s, line: %d:%s",  \
+                                 #cond, __FILE__, __LINE__, __func__);
+#else
+#include <assert.h>
+# define PERROR(str) fprintf(stderr, "%s: PERROR('%s'): errno:%d:'%s'", __func__, str, *REAL(__errno)(), strerror(*REAL(__errno)()))
+# define ASSERT(cond) assert(cond)
+# define ALOGV(a,...)
+# define ALOGW(a,...)
+# define ALOGE(a,...)
+
+#endif
\ No newline at end of file
diff --git a/ndk/sources/android/libportable/common/include/netdb_portable.h b/ndk/sources/android/libportable/common/include/netdb_portable.h
new file mode 100644
index 0000000..b3e6528
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/netdb_portable.h
@@ -0,0 +1,281 @@
+/*
+ * Derived from android-14/arch-arm/usr/include/netdb.h
+ *-
+ * Copyright (c) 1980, 1983, 1988, 1993
+ *      The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by the University of
+ *      California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ * -
+ * --Copyright--
+ */
+
+/*
+ *      @(#)netdb.h     8.1 (Berkeley) 6/2/93
+ *      From: Id: netdb.h,v 8.9 1996/11/19 08:39:29 vixie Exp $
+ * $FreeBSD: /repoman/r/ncvs/src/include/netdb.h,v 1.41 2006/04/15 16:20:26 ume Exp $
+ */
+
+#ifndef _NETDB_PORTABLE_H_
+#define _NETDB_PORTABLE_H_
+
+#if 0
+/*
+ * Most of the declararitions are not needed for addrinfo mapping.
+ * Diff of mips and arm code running through cpp show only the
+ * values of ai_socktype being different.
+ */
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#ifndef  _PATH_HEQUIV
+# define _PATH_HEQUIV    "/system/etc/hosts.equiv"
+#endif
+
+#define _PATH_HOSTS     "/system/etc/hosts"
+#define _PATH_NETWORKS  "/system/etc/networks"
+#define _PATH_PROTOCOLS "/system/etc/protocols"
+#define _PATH_SERVICES  "/system/etc/services"
+
+#define  MAXHOSTNAMELEN  256
+
+
+/*
+ * Structures returned by network data base library.  All addresses are
+ * supplied in host order, and returned in network order (suitable for
+ * use in system calls).
+ */
+struct hostent {
+        char    *h_name;        /* official name of host */
+        char    **h_aliases;    /* alias list */
+        int     h_addrtype;     /* host address type */
+        int     h_length;       /* length of address */
+        char    **h_addr_list;  /* list of addresses from name server */
+#define h_addr  h_addr_list[0]  /* address, for backward compatibility */
+};
+
+struct netent {
+        char     *n_name;        /* official name of net */
+        char     **n_aliases;    /* alias list */
+        int      n_addrtype;     /* net address type */
+        uint32_t n_net;          /* network # */
+};
+
+struct servent {
+        char    *s_name;        /* official service name */
+        char    **s_aliases;    /* alias list */
+        int     s_port;         /* port # */
+        char    *s_proto;       /* protocol to use */
+};
+
+struct protoent {
+        char    *p_name;        /* official protocol name */
+        char    **p_aliases;    /* alias list */
+        int     p_proto;        /* protocol # */
+};
+#endif
+
+/*
+ * For mapping MIPS and ARM these structures differ only in the
+ * ai_socktype values.
+ */
+struct addrinfo_portable {
+        int     ai_flags;           /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
+        int     ai_family;          /* PF_xxx */
+        int     ai_socktype;        /* SOCK_xxx */
+        int     ai_protocol;        /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+        socklen_t ai_addrlen;       /* length of ai_addr */
+        char    *ai_canonname;      /* canonical name for hostname */
+        struct  sockaddr *ai_addr;  /* binary address */
+        struct  addrinfo *ai_next;  /* next structure in linked list */
+};
+
+#if 0
+/*
+ * Error return codes from gethostbyname() and gethostbyaddr()
+ * (left in h_errno).
+ */
+
+#define NETDB_INTERNAL  -1      /* see errno */
+#define NETDB_SUCCESS   0       /* no problem */
+#define HOST_NOT_FOUND  1       /* Authoritative Answer Host not found */
+#define TRY_AGAIN       2       /* Non-Authoritative Host not found, or SERVERFAIL */
+#define NO_RECOVERY     3       /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
+#define NO_DATA         4       /* Valid name, no data record of requested type */
+#define NO_ADDRESS      NO_DATA /* no address, look for MX record */
+
+/*
+ * Error return codes from getaddrinfo()
+ */
+#define EAI_ADDRFAMILY   1      /* address family for hostname not supported */
+#define EAI_AGAIN        2      /* temporary failure in name resolution */
+#define EAI_BADFLAGS     3      /* invalid value for ai_flags */
+#define EAI_FAIL         4      /* non-recoverable failure in name resolution */
+#define EAI_FAMILY       5      /* ai_family not supported */
+#define EAI_MEMORY       6      /* memory allocation failure */
+#define EAI_NODATA       7      /* no address associated with hostname */
+#define EAI_NONAME       8      /* hostname nor servname provided, or not known */
+#define EAI_SERVICE      9      /* servname not supported for ai_socktype */
+#define EAI_SOCKTYPE    10      /* ai_socktype not supported */
+#define EAI_SYSTEM      11      /* system error returned in errno */
+#define EAI_BADHINTS    12      /* invalid value for hints */
+#define EAI_PROTOCOL    13      /* resolved protocol is unknown */
+#define EAI_OVERFLOW    14      /* argument buffer overflow */
+#define EAI_MAX         15
+
+/*
+ * Flag values for getaddrinfo()
+ */
+#define AI_PASSIVE      0x00000001 /* get address to use bind() */
+#define AI_CANONNAME    0x00000002 /* fill ai_canonname */
+#define AI_NUMERICHOST  0x00000004 /* prevent host name resolution */
+#define AI_NUMERICSERV  0x00000008 /* prevent service name resolution */
+/* valid flags for addrinfo (not a standard def, apps should not use it) */
+#define AI_MASK \
+    (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | \
+    AI_ADDRCONFIG)
+
+#define AI_ALL          0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
+#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
+#define AI_ADDRCONFIG   0x00000400 /* only if any address is assigned */
+#define AI_V4MAPPED     0x00000800 /* accept IPv4-mapped IPv6 address */
+/* special recommended flags for getipnodebyname */
+#define AI_DEFAULT      (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
+
+/*
+ * Constants for getnameinfo()
+ */
+#define NI_MAXHOST      1025
+#define NI_MAXSERV      32
+
+/*
+ * Flag values for getnameinfo()
+ */
+#define NI_NOFQDN       0x00000001
+#define NI_NUMERICHOST  0x00000002
+#define NI_NAMEREQD     0x00000004
+#define NI_NUMERICSERV  0x00000008
+#define NI_DGRAM        0x00000010
+#if 0 /* obsolete */
+#define NI_WITHSCOPEID  0x00000020
+#endif
+
+/*
+ * Scope delimit character
+ */
+#define SCOPE_DELIMITER '%'
+
+__BEGIN_DECLS
+/* BIONIC-BEGIN */
+#define  h_errno   (*__get_h_errno())
+int*  __get_h_errno(void);
+/* BIONIC-END */
+void endservent(void);
+struct hostent  *gethostbyaddr(const char *, int, int);
+struct hostent  *gethostbyname(const char *);
+int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *);
+struct hostent  *gethostbyname2(const char *, int);
+struct hostent  *gethostent(void);
+struct netent   *getnetbyaddr(uint32_t, int);
+struct netent   *getnetbyname(const char *);
+struct protoent *getprotobyname(const char *);
+struct protoent *getprotobynumber(int);
+struct servent  *getservbyname(const char *, const char *);
+struct servent  *getservbyport(int, const char *);
+struct servent  *getservent(void);
+void herror(const char *);
+const char      *hstrerror(int);
+#endif
+
+int WRAP(getaddrinfo)(const char *, const char *, struct addrinfo_portable *,
+                         struct addrinfo_portable **);
+
+void WRAP(freeaddrinfo)(struct addrinfo_portable *);
+
+#if 0 /* Not needed for addrinfo mapping */
+int getnameinfo(const struct sockaddr *, socklen_t, char *, size_t, char *, size_t, int);
+const char      *gai_strerror(int);
+void setservent(int);
+
+#if 0 /* MISSING FROM BIONIC */
+void endhostent(void);
+void endnetent(void);
+void endnetgrent(void);
+void endprotoent(void);
+void freehostent(struct hostent *);
+
+int gethostbyaddr_r(const char *, int, int, struct hostent *, char *, size_t,
+                    struct hostent **, int *);
+
+int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t,
+                     struct hostent **, int *);
+
+int gethostent_r(struct hostent *, char *, size_t, struct hostent **, int *);
+struct hostent   *getipnodebyaddr(const void *, size_t, int, int *);
+struct hostent   *getipnodebyname(const char *, int, int, int *);
+int getnetbyaddr_r(uint32_t, int, struct netent *, char *, size_t, struct netent**, int *);
+int getnetbyname_r(const char *, struct netent *, char *, size_t, struct netent **, int *);
+int getnetent_r(struct netent *, char *, size_t, struct netent **, int *);
+int getnetgrent(char **, char **, char **);
+int getprotobyname_r(const char *, struct protoent *, char *, size_t, struct protoent **);
+int getprotobynumber_r(int, struct protoent *, char *, size_t, struct protoent **);
+struct protoent  *getprotoent(void);
+int getprotoent_r(struct protoent *, char *, size_t, struct protoent **);
+int innetgr(const char *, const char *, const char *, const char *);
+void sethostent(int);
+void setnetent(int);
+void setprotoent(int);
+struct netent   *getnetent(void);
+void setnetgrent(const char *);
+#endif /* MISSING FROM BIONIC */
+#endif /* Not needed for addrinfo mapping */
+
+
+__END_DECLS
+
+#endif /* !_NETDB_H_ */
diff --git a/ndk/sources/android/libportable/common/include/portability.h b/ndk/sources/android/libportable/common/include/portability.h
new file mode 100644
index 0000000..54f1406
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/portability.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _PORTABILITY_H_
+#define _PORTABILITY_H_
+
+#include "asm-generic/portability.h"
+/*
+ * Common portability helper routines
+ */
+
+/*
+ * Check a portable pointer before we access it
+ * Well behaved programs should not be passing bad pointers
+ * to the kernel but this routine can be used to check a pointer
+ * if we need to use it before calling the kernel
+ *
+ * It does not catch every possible case but it is sufficient for LTP
+ */
+inline static int invalid_pointer(void *p)
+{
+    return p == 0
+        || p == (void *)-1
+#ifdef __mips__
+        || (int)p < 0
+#endif
+        ;
+}
+
+/*
+ * Hidden functions are exposed while linking the libportable shared object
+ * but are not exposed thereafter.
+ */
+#define __hidden __attribute__((visibility("hidden")))
+
+#endif /* _PORTABILITY_H_ */
diff --git a/ndk/sources/android/libportable/common/include/signal_portable.h b/ndk/sources/android/libportable/common/include/signal_portable.h
new file mode 100644
index 0000000..3ea8de1
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/signal_portable.h
@@ -0,0 +1,198 @@
+/*
+ * Derived from gdk/platforms/android-14/arch-arm/usr/include/signal.h
+ *
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _SIGNAL_PORTABLE_H_
+#define _SIGNAL_PORTABLE_H_
+
+#include <portability.h>
+#include <sys/cdefs.h>
+#include <limits.h>             /* For LONG_BIT */
+#include <string.h>             /* For memset() */
+#include <signal.h>
+#include <time.h>
+#include <sys/types.h>
+#include <asm/signal_portable.h>
+#include <asm/sigcontext_portable.h>
+
+#define __ARCH_SI_UID_T __kernel_uid32_t
+#include <asm/siginfo_portable.h>
+#undef __ARCH_SI_UID_T
+
+__BEGIN_DECLS
+
+typedef int sig_atomic_t;
+
+#if 0
+/* _NSIG is used by the SIGRTMAX definition under <asm/signal.h>, however
+ * its definition is part of a #if __KERNEL__ .. #endif block in the original
+ * kernel headers and is thus not part of our cleaned-up versions.
+ *
+ * Looking at the current kernel sources, it is defined as 64 for all
+ * architectures except for the 'mips' one which set it to 128.
+ */
+#ifndef _NSIG_PORTABLE
+#  define _NSIG_PORTABLE  64
+#endif
+#endif
+
+extern const char * const sys_siglist[];
+extern const char * const sys_signame[];
+
+static __inline__ int WRAP(sigismember)(sigset_portable_t *set, int signum)
+{
+    unsigned long *local_set = (unsigned long *)set;
+    signum--;
+    return (int)((local_set[signum/LONG_BIT] >> (signum%LONG_BIT)) & 1);
+}
+
+
+static __inline__ int WRAP(sigaddset)(sigset_portable_t *set, int signum)
+{
+    unsigned long *local_set = (unsigned long *)set;
+    signum--;
+    local_set[signum/LONG_BIT] |= 1UL << (signum%LONG_BIT);
+    return 0;
+}
+
+
+static __inline__ int WRAP(sigdelset)(sigset_portable_t *set, int signum)
+{
+    unsigned long *local_set = (unsigned long *)set;
+    signum--;
+    local_set[signum/LONG_BIT] &= ~(1UL << (signum%LONG_BIT));
+    return 0;
+}
+
+
+static __inline__ int WRAP(sigemptyset)(sigset_portable_t *set)
+{
+    memset(set, 0, sizeof *set);
+    return 0;
+}
+
+static __inline__ int WRAP(sigfillset)(sigset_portable_t *set)
+{
+    memset(set, ~0, sizeof *set);
+    return 0;
+}
+
+/* compatibility types */
+typedef void            (*sig_portable_t)(int);
+typedef sig_portable_t   sighandler_portable_t;
+
+/* Extended compatibility types, for processing a siginfo_t argument */
+typedef void            (*sig3_portable_t)(int, siginfo_portable_t *, void *);
+typedef sig3_portable_t   sig3handler_portable_t;
+
+/* differentiater between sysv and bsd behaviour 8*/
+extern __sighandler_t sysv_signal(int, __sighandler_portable_t);
+extern __sighandler_t bsd_signal(int, __sighandler_portable_t);
+
+#if 0
+/* the default is bsd */
+static __inline__ __sighandler_portable_t WRAP(signal)(int s, sighandler_portable_t f)
+{
+    return bsd_signal(s,f);
+}
+#endif
+
+/* the portable mapped syscall itself */
+extern __sighandler_portable_t WRAP(__signal)(int, __sighandler_portable_t);
+
+extern int WRAP(sigprocmask)(int, const sigset_portable_t *, sigset_portable_t *);
+
+extern int WRAP(sigaction)(int, const struct sigaction_portable *,
+                              struct sigaction_portable *);
+
+extern int WRAP(sigpending)(sigset_portable_t *);
+extern int WRAP(sigsuspend)(const sigset_portable_t *);
+extern int WRAP(sigwait)(const sigset_portable_t *set, int *sig);
+extern int WRAP(siginterrupt)(int  sig, int  flag);
+
+extern int WRAP(raise)(int);
+extern int WRAP(kill)(pid_t, int);
+extern int WRAP(killpg)(int pgrp, int sig);
+extern int WRAP(tkill)(int tid, int portable_signum);
+extern int WRAP(sigaltstack)(const portable_stack_t *ss, portable_stack_t *oss);
+extern int WRAP(timer_create)(clockid_t, struct sigevent *, timer_t *);
+
+#if 0
+extern int WRAP(signalfd)(int fd, const sigset_portable_t *portable_sigmask, int flags);
+#endif
+
+extern __hidden int do_signalfd4_portable(int fd, const sigset_portable_t *portable_sigmask,
+                                          int portable_sigsetsize, int flags);
+
+extern __hidden int read_signalfd_mapper(int fd, void *buf, size_t count);
+extern __hidden char *map_portable_signum_to_name(int portable_signum);
+extern __hidden char *map_mips_signum_to_name(int mips_signum);
+extern __hidden int signum_pton(int portable_signum);
+extern __hidden int signum_ntop(int mips_signum);
+
+typedef int (*sigmask_fn)(int, const sigset_t *, sigset_t *);
+typedef int (*rt_sigmask_fn)(int, const sigset_t *, sigset_t *, size_t);
+typedef int (*sigaction_fn)(int, const struct sigaction *, struct sigaction *);
+typedef int (*rt_sigaction_fn)(int, const struct sigaction *, struct sigaction *, size_t);
+
+
+extern __hidden int do_sigmask(int portable_how, const sigset_portable_t *portable_sigset,
+                               sigset_portable_t *portable_oldset, sigmask_fn fn,
+                               rt_sigmask_fn rt_fn);
+
+
+/* These functions are called from syscall.c and experimental Bionic linker. */
+extern int WRAP(__rt_sigaction)(int portable_signum,
+                                const struct sigaction_portable *act,
+                                struct sigaction_portable *oldact,
+                                size_t sigsetsize);
+
+extern int WRAP(__rt_sigprocmask)(int portable_how,
+                                  const sigset_portable_t *portable_sigset,
+                                  sigset_portable_t *portable_oldset,
+                                  size_t sigsetsize);
+
+extern int WRAP(__rt_sigtimedwait)(const sigset_portable_t *portable_sigset,
+                                   siginfo_portable_t *portable_siginfo,
+                                   const struct timespec *timeout,
+                                   size_t portable_sigsetsize);
+
+
+/* These functions are only called from syscall.c; not experimental Bionic linker. */
+extern __hidden int WRAP(rt_sigqueueinfo)(pid_t pid, int sig, siginfo_portable_t *uinfo);
+
+extern __hidden int WRAP(rt_tgsigqueueinfo)(pid_t tgid, pid_t pid, int sig,
+                                               siginfo_portable_t *uinfo);
+
+
+/* Called by clone when memory and signal handlers aren't compatable. */
+extern __hidden void signal_disable_mapping(void);
+
+__END_DECLS
+
+#endif /* _SIGNAL_PORTABLE_H_ */
diff --git a/ndk/sources/android/libportable/common/include/signalfd_portable.h b/ndk/sources/android/libportable/common/include/signalfd_portable.h
new file mode 100644
index 0000000..54ff470
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/signalfd_portable.h
@@ -0,0 +1,60 @@
+/*
+ *  Derived from Goldfish include/linux/signalfd.h
+ *
+ *  Copyright (C) 2007  Davide Libenzi <davidel@xmailserver.org>
+ *
+ */
+
+#ifndef _LINUX_SIGNALFD_PORTABLE_H
+#define _LINUX_SIGNALFD_PORTABLE_H
+
+#include <linux/types.h>
+#include <fcntl.h>
+
+/* Flags for signalfd4.  */
+#define SFD_CLOEXEC             O_CLOEXEC
+#define SFD_NONBLOCK            O_NONBLOCK
+
+/* For O_CLOEXEC_PORTABLE and O_NONBLOCK_PORTABLE */
+#include "fcntl_portable.h"
+
+#define SFD_CLOEXEC_PORTABLE    O_CLOEXEC_PORTABLE
+#define SFD_NONBLOCK_PORTABLE   O_NONBLOCK_PORTABLE
+
+/*
+ * This structure is the same for Native and Portable.
+ * However for MIPS ssi_signo and ssi_errno differ in their
+ * values and need to be mapped.
+ */
+struct signalfd_siginfo {
+        __u32 ssi_signo;
+        __s32 ssi_errno;
+        __s32 ssi_code;
+        __u32 ssi_pid;
+        __u32 ssi_uid;
+        __s32 ssi_fd;
+        __u32 ssi_tid;
+        __u32 ssi_band;
+        __u32 ssi_overrun;
+        __u32 ssi_trapno;
+        __s32 ssi_status;
+        __s32 ssi_int;
+        __u64 ssi_ptr;
+        __u64 ssi_utime;
+        __u64 ssi_stime;
+        __u64 ssi_addr;
+
+        /*
+         * Pad structure to 128 bytes. Remember to update the
+         * pad size when you add new members. We use a fixed
+         * size structure to avoid compatibility problems with
+         * future versions, and we leave extra space for additional
+         * members. We use fixed size members because this structure
+         * comes out of a read(2) and we really don't want to have
+         * a compat (sp?) on read(2).
+         */
+        __u8 __pad[48];
+};
+
+#endif /* _LINUX_SIGNALFD_PORTABLE_H */
+
diff --git a/ndk/sources/android/libportable/common/include/timerfd_portable.h b/ndk/sources/android/libportable/common/include/timerfd_portable.h
new file mode 100644
index 0000000..d6c294c
--- /dev/null
+++ b/ndk/sources/android/libportable/common/include/timerfd_portable.h
@@ -0,0 +1,51 @@
+/*
+ * Derived from bionic/libc/include/sys/eventfd.h
+ *
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _SYS_TIMERFD_PORTABLE_H
+#define _SYS_TIMERFD_PORTABLE_H
+
+#include <portability.h>
+#include <sys/cdefs.h>
+#include <fcntl.h>
+#include <fcntl_portable.h>
+
+__BEGIN_DECLS
+
+#define  TFD_CLOEXEC   O_CLOEXEC
+#define  TFD_NONBLOCK  O_NONBLOCK
+
+#define  TFD_CLOEXEC_PORTABLE   O_CLOEXEC_PORTABLE
+#define  TFD_NONBLOCK_PORTABLE  O_NONBLOCK_PORTABLE
+
+extern int WRAP(timerfd_create)(int clockid, int flags);
+
+__END_DECLS
+
+#endif /* _SYS_TIMERFD_H */
diff --git a/samples/ApiDemos/res/layout/textclock.xml b/samples/ApiDemos/res/layout/textclock.xml
index f86f616..827c3d3 100644
--- a/samples/ApiDemos/res/layout/textclock.xml
+++ b/samples/ApiDemos/res/layout/textclock.xml
@@ -47,8 +47,8 @@
 
         <!-- Shows seconds -->
         <TextClock
-            android:format12Hour="hh:mm:ss aa"
-            android:format24Hour="kk:mm:ss"
+            android:format12Hour="hh:mm:ss a"
+            android:format24Hour="HH:mm:ss"
 
             android:textSize="20sp"
             android:shadowColor="#7fffffff"
@@ -59,8 +59,8 @@
 
         <!-- Use a fixed time zone -->
         <TextClock
-            android:format12Hour="'Time in Paris:' MMM dd, yyyy h:mmaa"
-            android:format24Hour="'Time in Paris:' MMM dd, yyyy k:mm"
+            android:format12Hour="'Time in Paris:' MMM dd, yyyy h:mma"
+            android:format24Hour="'Time in Paris:' MMM dd, yyyy HH:mm"
             android:timeZone="Europe/Paris"
 
             android:layout_width="wrap_content"
diff --git a/samples/LunarLander/res/layout/lunar_layout.xml b/samples/LunarLander/res/layout/lunar_layout.xml
index f1a8990..bac8188 100644
--- a/samples/LunarLander/res/layout/lunar_layout.xml
+++ b/samples/LunarLander/res/layout/lunar_layout.xml
@@ -15,21 +15,21 @@
 -->
 
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
     
     <com.example.android.lunarlander.LunarView
       android:id="@+id/lunar"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent"/>
+      android:layout_width="fill_parent"
+      android:layout_height="fill_parent"/>
     
     <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" >
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent" >
         <TextView
           android:id="@+id/text"
-		  android:text="@string/lunar_layout_text_text"
-		  android:visibility="visible"
+          android:text="@string/lunar_layout_text_text"
+          android:visibility="visible"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerInParent="true"
diff --git a/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java b/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
index 15c5923..03faee9 100644
--- a/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
+++ b/samples/LunarLander/src/com/example/android/lunarlander/LunarLander.java
@@ -149,8 +149,8 @@
      */
     @Override
     protected void onPause() {
-        super.onPause();
         mLunarView.getThread().pause(); // pause game when Activity pauses
+        super.onPause();
     }
 
     /**
diff --git a/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java b/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
index 2a46147..81e0470 100644
--- a/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
+++ b/samples/LunarLander/src/com/example/android/lunarlander/LunarView.java
@@ -196,6 +196,8 @@
         /** Indicate whether the surface has been created & is ready to draw */
         private boolean mRun = false;
 
+        private final Object mRunLock = new Object();
+
         /** Scratch rect object. */
         private RectF mScratchRect;
 
@@ -356,7 +358,13 @@
                     c = mSurfaceHolder.lockCanvas(null);
                     synchronized (mSurfaceHolder) {
                         if (mMode == STATE_RUNNING) updatePhysics();
-                        doDraw(c);
+                        // Critical section. Do not allow mRun to be set false until
+                        // we are sure all canvas draw operations are complete.
+                        //
+                        // If mRun has been toggled false, inhibit canvas operations.
+                        synchronized (mRunLock) {
+                            if (mRun) doDraw(c);
+                        }
                     }
                 } finally {
                     // do this in a finally so that if an exception is thrown
@@ -427,7 +435,11 @@
          * @param b true to run, false to shut down
          */
         public void setRunning(boolean b) {
-            mRun = b;
+            // Do not allow mRun to be modified while any canvas operations
+            // are potentially in-flight. See doDraw().
+            synchronized (mRunLock) {
+                mRun = b;
+            }
         }
 
         /**
diff --git a/tools/elftree/Android.mk b/tools/elftree/Android.mk
index c2199aa..6327273 100644
--- a/tools/elftree/Android.mk
+++ b/tools/elftree/Android.mk
@@ -29,7 +29,6 @@
 #LOCAL_SHARED_LIBRARIES := $(shared_libraries)
 #LOCAL_STATIC_LIBRARIES := $(static_libraries)
 #LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
-#LOCAL_MODULE_TAGS := debug
 #LOCAL_LDLIBS +=
 #include $(BUILD_EXECUTABLE)
 
diff --git a/tools/emulator/opengl/common.mk b/tools/emulator/opengl/common.mk
index 8f31e17..6dd503e 100644
--- a/tools/emulator/opengl/common.mk
+++ b/tools/emulator/opengl/common.mk
@@ -31,7 +31,6 @@
 emugl-begin-module = \
     $(eval include $(CLEAR_VARS)) \
     $(eval LOCAL_MODULE := $1) \
-    $(eval LOCAL_MODULE_TAGS := debug) \
     $(eval LOCAL_MODULE_CLASS := $(patsubst HOST_%,%,$(patsubst %EXECUTABLE,%EXECUTABLES,$(patsubst %LIBRARY,%LIBRARIES,$2)))) \
     $(eval LOCAL_IS_HOST_MODULE := $(if $3,true,))\
     $(eval LOCAL_C_INCLUDES := $(EMUGL_COMMON_INCLUDES)) \
@@ -239,4 +238,3 @@
     $(eval LOCAL_UNSTRIPPED_PATH := $(TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED)/$1)\
     $(eval _emugl.$(LOCAL_MODULE).moved := true)\
     $(call emugl-export-outer,ADDITIONAL_DEPENDENCIES,$(LOCAL_MODULE_PATH)/$(LOCAL_MODULE)$(TARGET_SHLIB_SUFFIX))
-
diff --git a/tools/emulator/opengl/system/egl/Android.mk b/tools/emulator/opengl/system/egl/Android.mk
index cf55b48..a979089 100644
--- a/tools/emulator/opengl/system/egl/Android.mk
+++ b/tools/emulator/opengl/system/egl/Android.mk
@@ -33,7 +33,6 @@
 LOCAL_SRC_FILES := $(LOCAL_MODULE)
 
 LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/egl
-LOCAL_MODULE_TAGS := debug
 LOCAL_MODULE_CLASS := ETC
 
 include $(BUILD_PREBUILT)
diff --git a/tools/emulator/opengl/tests/gles_android_wrapper/Android.mk b/tools/emulator/opengl/tests/gles_android_wrapper/Android.mk
index f5254b7..d97212d 100644
--- a/tools/emulator/opengl/tests/gles_android_wrapper/Android.mk
+++ b/tools/emulator/opengl/tests/gles_android_wrapper/Android.mk
@@ -56,7 +56,6 @@
 LOCAL_SRC_FILES := $(LOCAL_MODULE)
 
 LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/egl
-LOCAL_MODULE_TAGS := debug
 LOCAL_MODULE_CLASS := ETC
 
 include $(BUILD_PREBUILT)
@@ -70,11 +69,6 @@
 LOCAL_SRC_FILES := $(LOCAL_MODULE)
 
 LOCAL_MODULE_PATH := $(TARGET_OUT)/etc
-LOCAL_MODULE_TAGS := debug
 LOCAL_MODULE_CLASS := ETC
 
 include $(BUILD_PREBUILT)
-
-
-
-
diff --git a/tools/emulator/system/camera/Android.mk b/tools/emulator/system/camera/Android.mk
index 3843c1d..83dcefe 100755
--- a/tools/emulator/system/camera/Android.mk
+++ b/tools/emulator/system/camera/Android.mk
@@ -12,8 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-ifndef BUILD_EMULATOR_CAMERA_HAL
-BUILD_EMULATOR_CAMERA_HAL := true
 
 LOCAL_PATH := $(call my-dir)
 
@@ -71,7 +69,4 @@
 LOCAL_MODULE := camera.goldfish
 endif
 
-LOCAL_MODULE_TAGS := debug
 include $(BUILD_SHARED_LIBRARY)
-
-endif # BUILD_EMULATOR_CAMERA_HAL
diff --git a/tools/emulator/system/gps/Android.mk b/tools/emulator/system/gps/Android.mk
index 9daf4d6..6840f84 100644
--- a/tools/emulator/system/gps/Android.mk
+++ b/tools/emulator/system/gps/Android.mk
@@ -17,8 +17,6 @@
 # development.git/tools/emulator/. The following test is to ensure
 # smooth builds even if the tree contains both versions.
 #
-ifndef BUILD_EMULATOR_GPS_MODULE
-BUILD_EMULATOR_GPS_MODULE := true
 
 LOCAL_PATH := $(call my-dir)
 
@@ -35,7 +33,4 @@
 else
 LOCAL_MODULE := gps.goldfish
 endif
-LOCAL_MODULE_TAGS := debug
 include $(BUILD_SHARED_LIBRARY)
-
-endif # BUILD_EMULATOR_GPS_MODULE
diff --git a/tools/emulator/system/libqemu/tests.mk b/tools/emulator/system/libqemu/tests.mk
index 3e89b23..886973f 100644
--- a/tools/emulator/system/libqemu/tests.mk
+++ b/tools/emulator/system/libqemu/tests.mk
@@ -6,25 +6,25 @@
 include $(CLEAR_VARS)
 LOCAL_MODULE := test-libqemu-1
 LOCAL_SRC_FILES := test_host_1.c
-LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := tests
 include $(BUILD_HOST_EXECUTABLE)
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := test-libqemu-2
 LOCAL_SRC_FILES := test_host_2.c
-LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := tests
 include $(BUILD_HOST_EXECUTABLE)
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := test-libqemu-1
 LOCAL_SRC_FILES := test_guest_1.c test_util.c
-LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := tests
 LOCAL_STATIC_LIBRARIES := libcutils
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := test-libqemu-2
 LOCAL_SRC_FILES := test_guest_2.c test_util.c
-LOCAL_MODULE_TAGS := debug
+LOCAL_MODULE_TAGS := tests
 LOCAL_STATIC_LIBRARIES := libcutils
 include $(BUILD_EXECUTABLE)
diff --git a/tools/emulator/system/lights/Android.mk b/tools/emulator/system/lights/Android.mk
index f0f76dc..3fa04ed 100644
--- a/tools/emulator/system/lights/Android.mk
+++ b/tools/emulator/system/lights/Android.mk
@@ -22,6 +22,5 @@
 LOCAL_SHARED_LIBRARIES := liblog libcutils
 LOCAL_SRC_FILES := lights_qemu.c
 LOCAL_MODULE := lights.goldfish
-LOCAL_MODULE_TAGS := debug
 LOCAL_CFLAGS += -DLIGHT_BACKLIGHT
 include $(BUILD_SHARED_LIBRARY)
diff --git a/tools/emulator/system/qemu-props/Android.mk b/tools/emulator/system/qemu-props/Android.mk
index 1b2932f..885e5b7 100644
--- a/tools/emulator/system/qemu-props/Android.mk
+++ b/tools/emulator/system/qemu-props/Android.mk
@@ -16,13 +16,6 @@
 # that should only run in the emulator.
 #
 
-# We're moving the emulator-specific platform libs to
-# development.git/tools/emulator/. The following test is to ensure
-# smooth builds even if the tree contains both versions.
-#
-ifndef BUILD_EMULATOR_QEMU_PROPS
-BUILD_EMULATOR_QEMU_PROPS := true
-
 LOCAL_PATH := $(call my-dir)
 
 # The 'qemu-props' program is run from /system/etc/init.goldfish.rc
@@ -32,9 +25,4 @@
 LOCAL_MODULE    := qemu-props
 LOCAL_SRC_FILES := qemu-props.c
 LOCAL_SHARED_LIBRARIES := libcutils
-# we don't want this in 'user' builds which don't have
-# emulator-specific binaries.
-LOCAL_MODULE_TAGS := debug
 include $(BUILD_EXECUTABLE)
-
-endif # BUILD_EMULATOR_QEMU_PROPS
diff --git a/tools/emulator/system/qemud/Android.mk b/tools/emulator/system/qemud/Android.mk
index 5666a74..237572c 100644
--- a/tools/emulator/system/qemud/Android.mk
+++ b/tools/emulator/system/qemud/Android.mk
@@ -4,8 +4,6 @@
 # development.git/tools/emulator/. The following test is to ensure
 # smooth builds even if the tree contains both versions.
 #
-ifndef BUILD_EMULATOR_QEMUD
-BUILD_EMULATOR_QEMUD := true
 
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
@@ -18,8 +16,5 @@
 	libcutils \
 
 LOCAL_MODULE:= qemud
-LOCAL_MODULE_TAGS := debug
 
 include $(BUILD_EXECUTABLE)
-
-endif # BUILD_EMULATOR_QEMUD
\ No newline at end of file
diff --git a/tools/emulator/system/sensors/Android.mk b/tools/emulator/system/sensors/Android.mk
index 4ae048b..a1b8967 100644
--- a/tools/emulator/system/sensors/Android.mk
+++ b/tools/emulator/system/sensors/Android.mk
@@ -13,16 +13,8 @@
 # limitations under the License.
 
 
-# We're moving the emulator-specific platform libs to
-# development.git/tools/emulator/. The following test is to ensure
-# smooth builds even if the tree contains both versions.
-#
-ifndef BUILD_EMULATOR_SENSORS_MODULE
-BUILD_EMULATOR_SENSORS_MODULE := true
-
 LOCAL_PATH := $(call my-dir)
 
-ifneq ($(TARGET_PRODUCT),sim)
 # HAL module implemenation stored in
 # hw/<SENSORS_HARDWARE_MODULE_ID>.<ro.hardware>.so
 include $(CLEAR_VARS)
@@ -35,8 +27,4 @@
 else
 LOCAL_MODULE := sensors.goldfish
 endif
-LOCAL_MODULE_TAGS := debug
 include $(BUILD_SHARED_LIBRARY)
-endif
-
-endif # BUILD_EMULATOR_SENSORS_MODULE