Merge "ndk: remove undefined symbols from system headers" into gingerbread
diff --git a/ndk/platforms/android-3/arch-arm/symbols/libc.so.txt b/ndk/platforms/android-3/arch-arm/symbols/libc.so.txt
new file mode 100644
index 0000000..1d13c72
--- /dev/null
+++ b/ndk/platforms/android-3/arch-arm/symbols/libc.so.txt
@@ -0,0 +1,1050 @@
+
+.ARM.extab
+.bss
+.data
+.data.rel.ro
+.rodata
+.text
+MD5_Final
+MD5_Init
+MD5_Update
+SHA1Final
+SHA1Init
+SHA1Transform
+SHA1Update
+_C_ctype_
+_C_tolower_
+_C_toupper_
+_Unwind_Backtrace
+_Unwind_Complete
+_Unwind_DeleteException
+_Unwind_ForcedUnwind
+_Unwind_GetCFA
+_Unwind_GetDataRelBase
+_Unwind_GetLanguageSpecificData
+_Unwind_GetRegionStart
+_Unwind_GetTextRelBase
+_Unwind_RaiseException
+_Unwind_Resume
+_Unwind_Resume_or_Rethrow
+_Unwind_VRS_Get
+_Unwind_VRS_Pop
+_Unwind_VRS_Set
+___Unwind_Backtrace
+___Unwind_ForcedUnwind
+___Unwind_RaiseException
+___Unwind_Resume
+___Unwind_Resume_or_Rethrow
+__adddf3
+__aeabi_atexit
+__aeabi_cdcmpeq
+__aeabi_cdcmple
+__aeabi_cdrcmple
+__aeabi_d2f
+__aeabi_d2iz
+__aeabi_dadd
+__aeabi_dcmpeq
+__aeabi_dcmpge
+__aeabi_dcmpgt
+__aeabi_dcmple
+__aeabi_dcmplt
+__aeabi_ddiv
+__aeabi_dmul
+__aeabi_drsub
+__aeabi_dsub
+__aeabi_f2d
+__aeabi_i2d
+__aeabi_idiv
+__aeabi_idiv0
+__aeabi_idivmod
+__aeabi_l2d
+__aeabi_ldiv0
+__aeabi_ldivmod
+__aeabi_lmul
+__aeabi_memclr
+__aeabi_memclr4
+__aeabi_memclr8
+__aeabi_memcpy
+__aeabi_memcpy4
+__aeabi_memcpy8
+__aeabi_memmove
+__aeabi_memmove4
+__aeabi_memmove8
+__aeabi_memset
+__aeabi_memset4
+__aeabi_memset8
+__aeabi_ui2d
+__aeabi_uidiv
+__aeabi_uidivmod
+__aeabi_ul2d
+__aeabi_uldivmod
+__aeabi_unwind_cpp_pr0
+__aeabi_unwind_cpp_pr1
+__aeabi_unwind_cpp_pr2
+__arc4_getbyte
+__assert
+__assert2
+__atexit
+__atexit_invalid
+__atexit_register_cleanup
+__atomic_cmpxchg
+__atomic_dec
+__atomic_inc
+__atomic_swap
+__b64_ntop
+__b64_pton
+__bionic_brk
+__brk
+__bss_end__
+__bss_start
+__bss_start__
+__clone
+__clz_tab
+__cmpdf2
+__cxa_atexit
+__cxa_begin_cleanup
+__cxa_call_unexpected
+__cxa_finalize
+__cxa_type_match
+__data_start
+__div0
+__divdf3
+__divdi3
+__divsi3
+__dn_comp
+__dn_count_labels
+__dn_skipname
+__dorand48
+__dso_handle
+__dtoa
+__end__
+__eqdf2
+__errno
+__evAddTime
+__evCmpTime
+__evConsIovec
+__evConsTime
+__evNowTime
+__evOptMonoTime
+__evSubTime
+__evTimeSpec
+__evTimeVal
+__evUTCTime
+__exidx_end
+__exidx_start
+__extendsfdf2
+__fcntl
+__fcntl64
+__findenv
+__fixdfsi
+__floatdidf
+__floatsidf
+__floatundidf
+__floatunsidf
+__fork
+__fp_nquery
+__fp_query
+__fremovelock
+__futex_wait
+__futex_wake
+__gedf2
+__get_h_errno
+__get_pc
+__get_res_cache
+__get_sp
+__get_stack_base
+__get_thread
+__getcwd
+__getpriority
+__gnu_Unwind_Backtrace
+__gnu_Unwind_Find_exidx
+__gnu_Unwind_ForcedUnwind
+__gnu_Unwind_RaiseException
+__gnu_Unwind_Restore_VFP
+__gnu_Unwind_Resume
+__gnu_Unwind_Resume_or_Rethrow
+__gnu_Unwind_Save_VFP
+__gnu_ldivmod_helper
+__gnu_uldivmod_helper
+__gnu_unwind_execute
+__gnu_unwind_frame
+__gtdf2
+__hostalias
+__init_tls
+__ioctl
+__isthreaded
+__ledf2
+__libc_android_log_assert
+__libc_android_log_print
+__libc_init
+__libc_init_common
+__llseek
+__loc_aton
+__loc_ntoa
+__ltdf2
+__memcmp16
+__mmap2
+__muldf3
+__muldi3
+__nedf2
+__ns_format_ttl
+__ns_get16
+__ns_get32
+__ns_initparse
+__ns_makecanon
+__ns_msg_getflag
+__ns_name_compress
+__ns_name_ntol
+__ns_name_ntop
+__ns_name_pack
+__ns_name_pton
+__ns_name_rollback
+__ns_name_skip
+__ns_name_uncompress
+__ns_name_unpack
+__ns_parserr
+__ns_put16
+__ns_put32
+__ns_samename
+__ns_skiprr
+__ns_sprintrr
+__ns_sprintrrf
+__open
+__openat
+__p_cdname
+__p_cdnname
+__p_cert_syms
+__p_class
+__p_class_syms
+__p_default_section_syms
+__p_fqname
+__p_fqnname
+__p_key_syms
+__p_option
+__p_query
+__p_rcode
+__p_rcode_syms
+__p_secstodate
+__p_section
+__p_sockun
+__p_time
+__p_type
+__p_type_syms
+__p_update_section_syms
+__page_shift
+__page_size
+__pread64
+__progname
+__pthread_cleanup_pop
+__pthread_cleanup_push
+__pthread_clone
+__pthread_cond_timedwait
+__pthread_cond_timedwait_relative
+__ptrace
+__putlong
+__putshort
+__pwrite64
+__rand48_add
+__rand48_mult
+__rand48_seed
+__reboot
+__res_close
+__res_dnok
+__res_get_nibblesuffix
+__res_get_nibblesuffix2
+__res_get_state
+__res_get_static
+__res_getservers
+__res_hnok
+__res_hostalias
+__res_isourserver
+__res_mailok
+__res_nameinquery
+__res_nametoclass
+__res_nametotype
+__res_nclose
+__res_ndestroy
+__res_ninit
+__res_nmkquery
+__res_nopt
+__res_nquery
+__res_nquerydomain
+__res_nsearch
+__res_nsend
+__res_opt
+__res_ourserver_p
+__res_ownok
+__res_pquery
+__res_put_state
+__res_queriesmatch
+__res_querydomain
+__res_randomid
+__res_send
+__res_send_setqhook
+__res_send_setrhook
+__res_setservers
+__res_vinit
+__restore_core_regs
+__rt_sigaction
+__rt_sigprocmask
+__rt_sigtimedwait
+__sF
+__sFext
+__sclose
+__sdidinit
+__set_errno
+__set_syscall_errno
+__set_tls
+__sflags
+__sflush
+__sfp
+__sfvwrite
+__sglue
+__sigsuspend
+__sinit
+__slbexpand
+__smakebuf
+__sread
+__srefill
+__srget
+__sseek
+__stack_chk_fail
+__stack_chk_guard
+__statfs64
+__subdf3
+__swbuf
+__swhatbuf
+__swrite
+__swsetup
+__sym_ntop
+__sym_ntos
+__sym_ston
+__syslog
+__system_properties_init
+__system_property_area__
+__system_property_find
+__system_property_find_nth
+__system_property_get
+__system_property_read
+__system_property_wait
+__thread_entry
+__timer_create
+__timer_delete
+__timer_getoverrun
+__timer_gettime
+__timer_settime
+__timer_table_start_stop
+__truncdfsf2
+__udivdi3
+__udivsi3
+__wait4
+_bss_end__
+_cleanup
+_ctype_
+_dns_gethtbyaddr
+_dns_gethtbyname
+_dorand48
+_edata
+_end
+_endhtent
+_exit
+_exit_thread
+_exit_with_stack_teardown
+_fwalk
+_gethtbyaddr
+_gethtbyname
+_gethtbyname2
+_gethtent
+_getlong
+_getshort
+_init_thread
+_longjmp
+_mktemp
+_nres
+_ns_flagdata
+_rand48_add
+_rand48_mult
+_rand48_seed
+_res_opcodes
+_resolv_cache_add
+_resolv_cache_create
+_resolv_cache_lookup
+_resolv_cache_reset
+_sethtent
+_setjmp
+_stack
+_thread_atexit_lock
+_thread_atexit_unlock
+_thread_created_hook
+_tolower_tab_
+_toupper_tab_
+abort
+accept
+access
+acct
+alarm
+alphasort
+arc4random
+arc4random_addrandom
+arc4random_buf
+arc4random_stir
+arc4random_uniform
+asctime
+asctime64
+asctime64_r
+asctime_r
+asprintf
+atexit
+atoi
+atol
+atoll
+basename
+basename_r
+bcopy
+bind
+bindresvport
+brk
+bsd_signal
+bsearch
+btowc
+bzero
+cacheflush
+calloc
+capget
+capset
+chdir
+chmod
+chown
+chroot
+clearerr
+clock
+clock_getres
+clock_gettime
+clock_nanosleep
+clock_settime
+close
+closedir
+closelog
+closelog_r
+connect
+copy_TM_to_tm
+copy_tm_to_TM
+creat
+ctime
+ctime64
+ctime64_r
+ctime_r
+daemon
+delete_module
+difftime
+dirfd
+dirname
+dirname_r
+div
+dlindependent_calloc
+dlindependent_comalloc
+dlmallinfo
+dlmalloc_footprint
+dlmalloc_max_footprint
+dlmalloc_stats
+dlmalloc_trim
+dlmalloc_usable_size
+dlmalloc_walk_free_pages
+dlmalloc_walk_heap
+dlmallopt
+dlpvalloc
+dlvalloc
+dn_expand
+dns_change_prop
+dns_last_change_counter
+drand48
+dup
+dup2
+endpwent
+endservent
+endutent
+environ
+epoll_create
+epoll_ctl
+epoll_wait
+erand48
+execl
+execle
+execlp
+execv
+execve
+execvp
+exit
+fake_gmtime_r
+fake_localtime_r
+fchdir
+fchmod
+fchmodat
+fchown
+fchownat
+fclose
+fcntl
+fdopen
+fdopendir
+feof
+ferror
+fflush
+ffs
+fgetc
+fgetln
+fgetpos
+fgets
+fgetwc
+fgetws
+fileno
+flock
+flockfile
+fnmatch
+fopen
+fork
+fpathconf
+fprintf
+fpurge
+fputc
+fputs
+fputwc
+fputws
+fread
+free
+free_malloc_leak_info
+freeaddrinfo
+freedtoa
+freopen
+fscanf
+fseek
+fseeko
+fsetpos
+fstat
+fstatat
+fstatfs
+fsync
+ftell
+ftello
+ftime
+ftok
+ftruncate
+ftrylockfile
+funlockfile
+funopen
+futex
+fwide
+fwprintf
+fwrite
+fwscanf
+gMallocLeakZygoteChild
+gai_strerror
+get_malloc_leak_info
+getaddrinfo
+getc
+getc_unlocked
+getchar
+getchar_unlocked
+getcwd
+getdents
+getdtablesize
+getegid
+getenv
+geteuid
+getgid
+getgrgid
+getgrnam
+getgrouplist
+getgroups
+gethostbyaddr
+gethostbyname
+gethostbyname2
+gethostbyname_r
+gethostent
+gethostname
+getitimer
+getlogin
+getmntent
+getnameinfo
+getnetbyaddr
+getnetbyname
+getopt
+getopt_long
+getopt_long_only
+getpeername
+getpgid
+getpgrp
+getpid
+getppid
+getpriority
+getprotobyname
+getprotobynumber
+getpt
+getpwnam
+getpwuid
+getresgid
+getresuid
+getrlimit
+getrusage
+gets
+getservbyname
+getservbyport
+getservent
+getservent_r
+getsockname
+getsockopt
+gettid
+gettimeofday
+getuid
+getutent
+getwc
+getwchar
+gmtime
+gmtime64
+gmtime64_r
+gmtime_r
+h_errlist
+h_nerr
+herror
+hstrerror
+if_indextoname
+if_nametoindex
+index
+inet_addr
+inet_aton
+inet_nsap_addr
+inet_nsap_ntoa
+inet_ntoa
+inet_ntop
+inet_pton
+init_module
+initgroups
+inotify_add_watch
+inotify_init
+inotify_rm_watch
+ioctl
+isalnum
+isalpha
+isascii
+isatty
+isblank
+iscntrl
+isdigit
+isgraph
+islower
+isprint
+ispunct
+issetugid
+isspace
+isupper
+iswalnum
+iswalpha
+iswcntrl
+iswctype
+iswdigit
+iswgraph
+iswlower
+iswprint
+iswpunct
+iswspace
+iswupper
+iswxdigit
+isxdigit
+jrand48
+kill
+klogctl
+lchown
+ldexp
+ldiv
+link
+listen
+lldiv
+localtime
+localtime64
+localtime64_r
+localtime_r
+longjmp
+longjmperror
+lrand48
+lseek
+lseek64
+lstat
+madvise
+mallinfo
+malloc
+malloc_debug_init
+mbrlen
+mbrtowc
+mbsinit
+mbsrtowcs
+memalign
+memccpy
+memchr
+memcmp
+memcpy
+memmem
+memmove
+memrchr
+memset
+memswap
+mincore
+mkdir
+mkdirat
+mkdtemp
+mknod
+mkstemp
+mkstemps
+mktemp
+mktime
+mktime64
+mlock
+mmap
+mount
+mprotect
+mrand48
+mremap
+msync
+munlock
+munmap
+nanosleep
+nice
+nrand48
+nsdispatch
+open
+openat
+opendir
+openlog
+openlog_r
+optarg
+opterr
+optind
+optopt
+optreset
+pathconf
+pause
+pclose
+perror
+pipe
+poll
+popen
+prctl
+pread
+printf
+pselect
+pthread_attr_destroy
+pthread_attr_getdetachstate
+pthread_attr_getguardsize
+pthread_attr_getschedparam
+pthread_attr_getschedpolicy
+pthread_attr_getscope
+pthread_attr_getstack
+pthread_attr_getstackaddr
+pthread_attr_getstacksize
+pthread_attr_init
+pthread_attr_setdetachstate
+pthread_attr_setguardsize
+pthread_attr_setschedparam
+pthread_attr_setschedpolicy
+pthread_attr_setscope
+pthread_attr_setstack
+pthread_attr_setstackaddr
+pthread_attr_setstacksize
+pthread_cond_broadcast
+pthread_cond_destroy
+pthread_cond_init
+pthread_cond_signal
+pthread_cond_timedwait
+pthread_cond_timedwait_monotonic
+pthread_cond_timeout_np
+pthread_cond_wait
+pthread_create
+pthread_detach
+pthread_equal
+pthread_exit
+pthread_getattr_np
+pthread_getcpuclockid
+pthread_getschedparam
+pthread_getspecific
+pthread_join
+pthread_key_create
+pthread_key_delete
+pthread_kill
+pthread_mutex_destroy
+pthread_mutex_init
+pthread_mutex_lock
+pthread_mutex_trylock
+pthread_mutex_unlock
+pthread_mutexattr_destroy
+pthread_mutexattr_getpshared
+pthread_mutexattr_gettype
+pthread_mutexattr_init
+pthread_mutexattr_setpshared
+pthread_mutexattr_settype
+pthread_once
+pthread_self
+pthread_setschedparam
+pthread_setspecific
+pthread_sigmask
+ptrace
+ptsname
+ptsname_r
+putc
+putc_unlocked
+putchar
+putchar_unlocked
+putenv
+puts
+pututline
+putw
+putwc
+putwchar
+pwrite
+qsort
+raise
+read
+readdir
+readdir_r
+readlink
+readv
+realloc
+realpath
+reboot
+recv
+recvfrom
+recvmsg
+remove
+rename
+renameat
+res_get_dns_changed
+res_init
+res_mkquery
+res_need_init
+res_query
+res_search
+restore_core_regs
+rewind
+rewinddir
+rmdir
+sbrk
+scandir
+scanf
+sched_get_priority_max
+sched_get_priority_min
+sched_getparam
+sched_getscheduler
+sched_rr_get_interval
+sched_setparam
+sched_setscheduler
+sched_yield
+seed48
+select
+sem_close
+sem_destroy
+sem_getvalue
+sem_init
+sem_open
+sem_post
+sem_timedwait
+sem_trywait
+sem_unlink
+sem_wait
+send
+sendfile
+sendmsg
+sendto
+setbuf
+setbuffer
+setegid
+setenv
+seteuid
+setgid
+setgroups
+setitimer
+setjmp
+setlinebuf
+setlocale
+setlogmask
+setlogmask_r
+setpgid
+setpgrp
+setpriority
+setregid
+setresgid
+setresuid
+setreuid
+setrlimit
+setservent
+setsid
+setsockopt
+settimeofday
+setuid
+setutent
+setvbuf
+shutdown
+sigaction
+sigblock
+siginterrupt
+siglongjmp
+sigpending
+sigprocmask
+sigsetjmp
+sigsetmask
+sigsuspend
+sigwait
+sleep
+snprintf
+socket
+socketpair
+sprintf
+srand48
+sscanf
+stat
+statfs
+strcasecmp
+strcasestr
+strcat
+strchr
+strcmp
+strcoll
+strcpy
+strcspn
+strdup
+strerror
+strerror_r
+strftime
+strlcat
+strlcpy
+strlen
+strncasecmp
+strncat
+strncmp
+strncpy
+strndup
+strnlen
+strntoimax
+strntoumax
+strpbrk
+strptime
+strrchr
+strsep
+strsignal
+strspn
+strstr
+strtod
+strtoimax
+strtok
+strtok_r
+strtol
+strtoll
+strtotimeval
+strtoul
+strtoull
+strtoumax
+strxfrm
+swprintf
+swscanf
+symlink
+sync
+sys_siglist
+syscall
+sysconf
+syslog
+syslog_r
+system
+sysv_signal
+tcgetpgrp
+tcsetpgrp
+tempnam
+the_key
+the_once
+time
+timegm64
+timelocal64
+timer_create
+timer_delete
+timer_getoverrun
+timer_gettime
+timer_settime
+times
+tkill
+tmpfile
+tmpnam
+toascii
+tolower
+toupper
+towlower
+towupper
+truncate
+ttyname
+tzname
+tzset
+umask
+umount
+umount2
+uname
+ungetc
+ungetwc
+unlink
+unlinkat
+unlockpt
+unsetenv
+usleep
+utime
+utimes
+utmpname
+valid_tm_mon
+valid_tm_wday
+valloc
+vasprintf
+vfork
+vfprintf
+vfscanf
+vfwprintf
+vprintf
+vscanf
+vsnprintf
+vsprintf
+vsscanf
+vswprintf
+vsyslog
+vsyslog_r
+vwprintf
+wait
+wait3
+waitid
+waitpid
+wcrtomb
+wcscat
+wcschr
+wcscmp
+wcscoll
+wcscpy
+wcscspn
+wcsftime
+wcslen
+wcsncat
+wcsncmp
+wcsncpy
+wcspbrk
+wcsrchr
+wcsrtombs
+wcsspn
+wcsstr
+wcstod
+wcstok
+wcstol
+wcstoul
+wcswcs
+wcswidth
+wcsxfrm
+wctob
+wctype
+wcwidth
+wmemchr
+wmemcmp
+wmemcpy
+wmemmove
+wmemset
+wprintf
+write
+writev
+wscanf
diff --git a/ndk/platforms/android-3/include/fcntl.h b/ndk/platforms/android-3/include/fcntl.h
index 59e7135..7219dd7 100644
--- a/ndk/platforms/android-3/include/fcntl.h
+++ b/ndk/platforms/android-3/include/fcntl.h
@@ -39,6 +39,10 @@
#define O_ASYNC FASYNC
#endif
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 02000000
+#endif
+
extern int open(const char* path, int mode, ...);
extern int openat(int fd, const char* path, int mode, ...);
extern int unlinkat(int dirfd, const char *pathname, int flags);
diff --git a/ndk/platforms/android-3/include/getopt.h b/ndk/platforms/android-3/include/getopt.h
index 6b4954b..ba3c4c9 100644
--- a/ndk/platforms/android-3/include/getopt.h
+++ b/ndk/platforms/android-3/include/getopt.h
@@ -71,15 +71,20 @@
#ifndef _GETOPT_DEFINED_
#define _GETOPT_DEFINED_
int getopt(int, char * const *, const char *);
-int getsubopt(char **, char * const *, char **);
+
extern char *optarg; /* getopt(3) external variables */
extern int opterr;
extern int optind;
extern int optopt;
extern int optreset;
-extern char *suboptarg; /* getsubopt(3) external variable */
+
+#if 0 /* MISSING FROM BIONIC */
+int getsubopt(char **, char * const *, char **);
+extern char *suboptarg; /* getsubopt(3) external variable */
+#endif /* MISSING */
+
#endif
__END_DECLS
-
+
#endif /* !_GETOPT_H_ */
diff --git a/ndk/platforms/android-3/include/grp.h b/ndk/platforms/android-3/include/grp.h
index 86d99f3..4442eb7 100644
--- a/ndk/platforms/android-3/include/grp.h
+++ b/ndk/platforms/android-3/include/grp.h
@@ -56,6 +56,8 @@
__BEGIN_DECLS
struct group *getgrgid(gid_t);
+
+#if 0 /* MISSING FROM BIONIC */
struct group *getgrnam(const char *);
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XPG_VISIBLE
struct group *getgrent(void);
@@ -71,6 +73,7 @@
int setgroupent(int);
char *group_from_gid(gid_t, int);
#endif
+#endif /* MISSING */
int getgrouplist (const char *user, gid_t group,
gid_t *groups, int *ngroups);
diff --git a/ndk/platforms/android-3/include/limits.h b/ndk/platforms/android-3/include/limits.h
index c204e4d..1de8ea6 100644
--- a/ndk/platforms/android-3/include/limits.h
+++ b/ndk/platforms/android-3/include/limits.h
@@ -86,7 +86,7 @@
#include <sys/limits.h>
#if __POSIX_VISIBLE
-#include <arch/syslimits.h>
+#include <sys/syslimits.h>
#endif
#ifndef PAGESIZE
diff --git a/ndk/platforms/android-3/include/locale.h b/ndk/platforms/android-3/include/locale.h
index 65b5c7d..df42921 100644
--- a/ndk/platforms/android-3/include/locale.h
+++ b/ndk/platforms/android-3/include/locale.h
@@ -53,7 +53,9 @@
/* Make libstdc++-v3 happy. */
struct lconv { };
+#if 0 /* MISSING FROM BIONIC */
struct lconv *localeconv(void);
+#endif /* MISSING */
__END_DECLS
diff --git a/ndk/platforms/android-3/include/netdb.h b/ndk/platforms/android-3/include/netdb.h
index c2e08ea..8d3996a 100644
--- a/ndk/platforms/android-3/include/netdb.h
+++ b/ndk/platforms/android-3/include/netdb.h
@@ -203,51 +203,54 @@
#define h_errno (*__get_h_errno())
int* __get_h_errno(void);
/* BIONIC-END */
-void endhostent(void);
-void endnetent(void);
-void endnetgrent(void);
-void endprotoent(void);
void endservent(void);
-void freehostent(struct hostent *);
struct hostent *gethostbyaddr(const char *, int, int);
-int gethostbyaddr_r(const char *, int, int, struct hostent *, char *, size_t, struct hostent **, 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);
-int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *);
struct hostent *gethostent(void);
-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 *);
struct netent *getnetbyaddr(uint32_t, int);
-int getnetbyaddr_r(uint32_t, int, struct netent *, char *, size_t, struct netent**, int *);
struct netent *getnetbyname(const char *);
-int getnetbyname_r(const char *, struct netent *, char *, size_t, struct netent **, int *);
-struct netent *getnetent(void);
-int getnetent_r(struct netent *, char *, size_t, struct netent **, int *);
-int getnetgrent(char **, char **, char **);
struct protoent *getprotobyname(const char *);
-int getprotobyname_r(const char *, struct protoent *, char *, size_t, struct protoent **);
struct protoent *getprotobynumber(int);
-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 **);
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);
-int innetgr(const char *, const char *, const char *, const char *);
-void sethostent(int);
-void setnetent(int);
-void setprotoent(int);
int getaddrinfo(const char *, const char *, const struct addrinfo *, struct addrinfo **);
int getnameinfo(const struct sockaddr *, socklen_t, char *, size_t, char *, size_t, int);
void freeaddrinfo(struct addrinfo *);
const char *gai_strerror(int);
-void setnetgrent(const char *);
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 */
+
__END_DECLS
#endif /* !_NETDB_H_ */
diff --git a/ndk/platforms/android-3/include/nsswitch.h b/ndk/platforms/android-3/include/nsswitch.h
index d19d055..0ddc74e 100644
--- a/ndk/platforms/android-3/include/nsswitch.h
+++ b/ndk/platforms/android-3/include/nsswitch.h
@@ -54,7 +54,7 @@
/*
* Layout of:
* uint32_t ns_src.flags
- */
+ */
/* nsswitch.conf status codes and nsdispatch(3) return values */
#define NS_SUCCESS (1<<0) /* entry was found */
#define NS_UNAVAIL (1<<1) /* source not responding, or corrupt */
@@ -125,7 +125,7 @@
*/
#define NS_FILES_CB(F,C) { NSSRC_FILES, F, __UNCONST(C) },
#define NS_COMPAT_CB(F,C) { NSSRC_COMPAT, F, __UNCONST(C) },
-
+
#ifdef HESIOD
# define NS_DNS_CB(F,C) { NSSRC_DNS, F, __UNCONST(C) },
#else
@@ -153,6 +153,7 @@
* Default sourcelists (if nsswitch.conf is missing, corrupt,
* or the requested database doesn't have an entry)
*/
+#if 0 /* MISSING FROM BIONIC */
extern const ns_src __nsdefaultsrc[];
extern const ns_src __nsdefaultcompat[];
extern const ns_src __nsdefaultcompat_forceall[];
@@ -160,7 +161,7 @@
extern const ns_src __nsdefaultfiles_forceall[];
extern const ns_src __nsdefaultnis[];
extern const ns_src __nsdefaultnis_forceall[];
-
+#endif /* MISSING */
/*
* ns_mtab - `nsswitch method table'
diff --git a/ndk/platforms/android-3/include/pathconf.h b/ndk/platforms/android-3/include/pathconf.h
index 4677f7b..94f9787 100644
--- a/ndk/platforms/android-3/include/pathconf.h
+++ b/ndk/platforms/android-3/include/pathconf.h
@@ -28,6 +28,10 @@
#ifndef _PATHCONF_H_
#define _PATHCONF_H_
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
/* constants to be used for the 'name' paremeter of pathconf/fpathconf */
#define _PC_FILESIZEBITS 0x0000
@@ -54,5 +58,7 @@
extern long fpathconf(int fildes, int name);
extern long pathconf(const char *path, int name);
+__END_DECLS
+
#endif /* _PATHCONF_H_ */
diff --git a/ndk/platforms/android-3/include/pwd.h b/ndk/platforms/android-3/include/pwd.h
index 6f3fad5..1e85efd 100644
--- a/ndk/platforms/android-3/include/pwd.h
+++ b/ndk/platforms/android-3/include/pwd.h
@@ -113,12 +113,14 @@
struct passwd* getpwnam(const char*);
struct passwd* getpwuid(uid_t);
+void endpwent(void);
+
+#if 0 /* MISSING FROM BIONIC */
int getpwnam_r(const char*, struct passwd*, char*, size_t, struct passwd**);
int getpwuid_r(uid_t, struct passwd*, char*, size_t, struct passwd**);
-
-void endpwent(void);
struct passwd* getpwent(void);
int setpwent(void);
+#endif /* MISSING */
__END_DECLS
diff --git a/ndk/platforms/android-3/include/sgtty.h b/ndk/platforms/android-3/include/sgtty.h
index 1ac3100..d433266 100644
--- a/ndk/platforms/android-3/include/sgtty.h
+++ b/ndk/platforms/android-3/include/sgtty.h
@@ -41,8 +41,10 @@
#include <sys/cdefs.h>
__BEGIN_DECLS
+#if 0 /* MISSING FROM BIONIC */
int gtty(int, struct sgttyb *);
int stty(int, struct sgttyb *);
+#endif /* MISSING */
__END_DECLS
#endif /* _SGTTY_H_ */
diff --git a/ndk/platforms/android-3/include/stdio.h b/ndk/platforms/android-3/include/stdio.h
index 791b260..273f630 100644
--- a/ndk/platforms/android-3/include/stdio.h
+++ b/ndk/platforms/android-3/include/stdio.h
@@ -300,12 +300,14 @@
#define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */
__BEGIN_DECLS
+#if 0 /* MISSING FROM BIONIC */
char *ctermid(char *);
char *cuserid(char *);
+#endif /* MISSING */
FILE *fdopen(int, const char *);
int fileno(FILE *);
-#if (__POSIX_VISIBLE >= 199209) || 1 /* ANDROID: Bionic does include this */
+#if (__POSIX_VISIBLE >= 199209)
int pclose(FILE *);
FILE *popen(const char *, const char *);
#endif
diff --git a/ndk/platforms/android-3/include/stdlib.h b/ndk/platforms/android-3/include/stdlib.h
index acfe694..424adb4 100644
--- a/ndk/platforms/android-3/include/stdlib.h
+++ b/ndk/platforms/android-3/include/stdlib.h
@@ -50,13 +50,11 @@
extern __noreturn void exit(int);
extern __noreturn void abort(void);
extern int atexit(void (*)(void));
-extern int on_exit(void (*)(int, void *), void *);
extern char *getenv(const char *);
extern int putenv(const char *);
extern int setenv(const char *, const char *, int);
extern int unsetenv(const char *);
-extern int clearenv(void);
extern char *mktemp (char *);
extern int mkstemp (char *);
@@ -107,6 +105,8 @@
extern long nrand48(unsigned short *);
extern long lrand48(void);
extern unsigned short *seed48(unsigned short*);
+extern double erand48(unsigned short xsubi[3]);
+extern double drand48(void);
extern void srand48(long);
extern unsigned int arc4random(void);
extern void arc4random_stir(void);
@@ -162,6 +162,7 @@
extern lldiv_t lldiv(long long, long long);
+#if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */
/* make STLPort happy */
extern int mblen(const char *, size_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
@@ -170,8 +171,15 @@
/* Likewise, make libstdc++-v3 happy. */
extern int wctomb(char *, wchar_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);
+#endif /* MISSING */
+
#define MB_CUR_MAX 1
+#if 0 /* MISSING FROM BIONIC */
+extern int on_exit(void (*)(int, void *), void *);
+extern int clearenv(void);
+#endif /* MISSING */
+
__END_DECLS
#endif /* _STDLIB_H_ */
diff --git a/ndk/platforms/android-3/include/strings.h b/ndk/platforms/android-3/include/strings.h
index fee7dc4..7f5b328 100644
--- a/ndk/platforms/android-3/include/strings.h
+++ b/ndk/platforms/android-3/include/strings.h
@@ -43,14 +43,16 @@
#include <sys/cdefs.h>
__BEGIN_DECLS
-int bcmp(const void *, const void *, size_t);
void bcopy(const void *, void *, size_t);
void bzero(void *, size_t);
int ffs(int);
char *index(const char *, int);
-char *rindex(const char *, int);
int strcasecmp(const char *, const char *);
int strncasecmp(const char *, const char *, size_t);
+#if 0 /* MISSING FROM BIONIC */
+int bcmp(const void *, const void *, size_t);
+char *rindex(const char *, int);
+#endif /* MISSING */
__END_DECLS
#endif /* !defined(_STRINGS_H_) */
diff --git a/ndk/platforms/android-3/include/sys/cdefs.h b/ndk/platforms/android-3/include/sys/cdefs.h
index fe7033d..2389437 100644
--- a/ndk/platforms/android-3/include/sys/cdefs.h
+++ b/ndk/platforms/android-3/include/sys/cdefs.h
@@ -62,11 +62,6 @@
#define __GNUC_PREREQ__(x, y) 0
#endif
-//XXX #include <machine/cdefs.h>
-
-/* BIONIC: simpler definition */
-#define __BSD_VISIBLE 1
-
#include <sys/cdefs_elf.h>
#if defined(__cplusplus)
@@ -371,6 +366,142 @@
#define __link_set_entry(set, idx) (__link_set_begin(set)[idx])
+/*
+ * Some of the recend FreeBSD sources used in Bionic need this.
+ * Originally, this is used to embed the rcs versions of each source file
+ * in the generated binary. We certainly don't want this in Bionic.
+ */
+#define __FBSDID(s) struct __hack
+
+/*-
+ * The following definitions are an extension of the behavior originally
+ * implemented in <sys/_posix.h>, but with a different level of granularity.
+ * POSIX.1 requires that the macros we test be defined before any standard
+ * header file is included.
+ *
+ * Here's a quick run-down of the versions:
+ * defined(_POSIX_SOURCE) 1003.1-1988
+ * _POSIX_C_SOURCE == 1 1003.1-1990
+ * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option
+ * _POSIX_C_SOURCE == 199309 1003.1b-1993
+ * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995,
+ * and the omnibus ISO/IEC 9945-1: 1996
+ * _POSIX_C_SOURCE == 200112 1003.1-2001
+ * _POSIX_C_SOURCE == 200809 1003.1-2008
+ *
+ * In addition, the X/Open Portability Guide, which is now the Single UNIX
+ * Specification, defines a feature-test macro which indicates the version of
+ * that specification, and which subsumes _POSIX_C_SOURCE.
+ *
+ * Our macros begin with two underscores to avoid namespace screwage.
+ */
+
+/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1
+#undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */
+#define _POSIX_C_SOURCE 199009
+#endif
+
+/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 199209
+#endif
+
+/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
+#ifdef _XOPEN_SOURCE
+#if _XOPEN_SOURCE - 0 >= 700
+#define __XSI_VISIBLE 700
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 200809
+#elif _XOPEN_SOURCE - 0 >= 600
+#define __XSI_VISIBLE 600
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 200112
+#elif _XOPEN_SOURCE - 0 >= 500
+#define __XSI_VISIBLE 500
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 199506
+#endif
+#endif
+
+/*
+ * Deal with all versions of POSIX. The ordering relative to the tests above is
+ * important.
+ */
+#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
+#define _POSIX_C_SOURCE 198808
+#endif
+#ifdef _POSIX_C_SOURCE
+#if _POSIX_C_SOURCE >= 200809
+#define __POSIX_VISIBLE 200809
+#define __ISO_C_VISIBLE 1999
+#elif _POSIX_C_SOURCE >= 200112
+#define __POSIX_VISIBLE 200112
+#define __ISO_C_VISIBLE 1999
+#elif _POSIX_C_SOURCE >= 199506
+#define __POSIX_VISIBLE 199506
+#define __ISO_C_VISIBLE 1990
+#elif _POSIX_C_SOURCE >= 199309
+#define __POSIX_VISIBLE 199309
+#define __ISO_C_VISIBLE 1990
+#elif _POSIX_C_SOURCE >= 199209
+#define __POSIX_VISIBLE 199209
+#define __ISO_C_VISIBLE 1990
+#elif _POSIX_C_SOURCE >= 199009
+#define __POSIX_VISIBLE 199009
+#define __ISO_C_VISIBLE 1990
+#else
+#define __POSIX_VISIBLE 198808
+#define __ISO_C_VISIBLE 0
+#endif /* _POSIX_C_SOURCE */
+#else
+/*-
+ * Deal with _ANSI_SOURCE:
+ * If it is defined, and no other compilation environment is explicitly
+ * requested, then define our internal feature-test macros to zero. This
+ * makes no difference to the preprocessor (undefined symbols in preprocessing
+ * expressions are defined to have value zero), but makes it more convenient for
+ * a test program to print out the values.
+ *
+ * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
+ * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
+ * environment (and in fact we will never get here).
+ */
+#if defined(_ANSI_SOURCE) /* Hide almost everything. */
+#define __POSIX_VISIBLE 0
+#define __XSI_VISIBLE 0
+#define __BSD_VISIBLE 0
+#define __ISO_C_VISIBLE 1990
+#elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */
+#define __POSIX_VISIBLE 0
+#define __XSI_VISIBLE 0
+#define __BSD_VISIBLE 0
+#define __ISO_C_VISIBLE 1999
+#else /* Default environment: show everything. */
+#define __POSIX_VISIBLE 200809
+#define __XSI_VISIBLE 700
+#define __BSD_VISIBLE 1
+#define __ISO_C_VISIBLE 1999
+#endif
+#endif
+
+/*
+ * Default values.
+ */
+#ifndef __XPG_VISIBLE
+# define __XPG_VISIBLE 700
+#endif
+#ifndef __POSIX_VISIBLE
+# define __POSIX_VISIBLE 200809
+#endif
+#ifndef __ISO_C_VISIBLE
+# define __ISO_C_VISIBLE 1999
+#endif
+#ifndef __BSD_VISIBLE
+# define __BSD_VISIBLE 1
+#endif
+
#define __BIONIC__ 1
#endif /* !_SYS_CDEFS_H_ */
diff --git a/ndk/platforms/android-3/include/sys/file.h b/ndk/platforms/android-3/include/sys/file.h
index 06937ff..cf2f4b1 100644
--- a/ndk/platforms/android-3/include/sys/file.h
+++ b/ndk/platforms/android-3/include/sys/file.h
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-// ANDROID: needed for flock()
+/* ANDROID: needed for flock() */
#include <unistd.h>
#include <fcntl.h>
diff --git a/ndk/platforms/android-3/include/sys/fsuid.h b/ndk/platforms/android-3/include/sys/fsuid.h
index 3257bc0..bc47e3d 100644
--- a/ndk/platforms/android-3/include/sys/fsuid.h
+++ b/ndk/platforms/android-3/include/sys/fsuid.h
@@ -33,8 +33,10 @@
__BEGIN_DECLS
+#if 0 /* MISSING FROM BIONIC */
extern int setfsuid(uid_t);
extern int setfsgid(gid_t);
+#endif /* MISSING */
__END_DECLS
diff --git a/ndk/platforms/android-3/include/sys/ioctl_compat.h b/ndk/platforms/android-3/include/sys/ioctl_compat.h
index d79b67a..cab5c80 100644
--- a/ndk/platforms/android-3/include/sys/ioctl_compat.h
+++ b/ndk/platforms/android-3/include/sys/ioctl_compat.h
@@ -39,8 +39,8 @@
#ifndef _SYS_IOCTL_COMPAT_H_
#define _SYS_IOCTL_COMPAT_H_
-//#include <sys/ttychars.h>
-//#include <sys/ttydev.h>
+/*#include <sys/ttychars.h>*/
+/*#include <sys/ttydev.h>*/
struct tchars {
char t_intrc; /* interrupt */
diff --git a/ndk/platforms/android-3/include/sys/mount.h b/ndk/platforms/android-3/include/sys/mount.h
index 62c4ee2..ba88447 100644
--- a/ndk/platforms/android-3/include/sys/mount.h
+++ b/ndk/platforms/android-3/include/sys/mount.h
@@ -92,7 +92,10 @@
const void *);
extern int umount(const char *);
extern int umount2(const char *, int);
+
+#if 0 /* MISSING FROM BIONIC */
extern int pivot_root(const char *, const char *);
+#endif /* MISSING */
__END_DECLS
diff --git a/ndk/platforms/android-3/include/sys/ptrace.h b/ndk/platforms/android-3/include/sys/ptrace.h
index 78a057a..848416b 100644
--- a/ndk/platforms/android-3/include/sys/ptrace.h
+++ b/ndk/platforms/android-3/include/sys/ptrace.h
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-// For all of the defines
+/* For all of the defines */
#include <linux/ptrace.h>
__BEGIN_DECLS
diff --git a/ndk/platforms/android-3/include/sys/sysinfo.h b/ndk/platforms/android-3/include/sys/sysinfo.h
index c7e46e6..d5d1c6e 100644
--- a/ndk/platforms/android-3/include/sys/sysinfo.h
+++ b/ndk/platforms/android-3/include/sys/sysinfo.h
@@ -33,7 +33,9 @@
__BEGIN_DECLS
+#if 0 /* MISSING FROM BIONIC */
extern int sysinfo (struct sysinfo *info);
+#endif /* MISSING */
__END_DECLS
diff --git a/ndk/platforms/android-3/include/sys/types.h b/ndk/platforms/android-3/include/sys/types.h
index b071ee9..33fe30e 100644
--- a/ndk/platforms/android-3/include/sys/types.h
+++ b/ndk/platforms/android-3/include/sys/types.h
@@ -62,8 +62,10 @@
typedef __kernel_key_t key_t;
typedef __kernel_mode_t mode_t;
typedef __kernel_nlink_t nlink_t;
+#ifndef _OFF_T_DEFINED_
#define _OFF_T_DEFINED_
typedef __kernel_off_t off_t;
+#endif
typedef __kernel_loff_t loff_t;
typedef loff_t off64_t; /* GLibc-specific */
diff --git a/ndk/platforms/android-3/include/time.h b/ndk/platforms/android-3/include/time.h
index 6163c6d..b5227d7 100644
--- a/ndk/platforms/android-3/include/time.h
+++ b/ndk/platforms/android-3/include/time.h
@@ -86,8 +86,10 @@
/* global includes */
extern char* tzname[];
+#if 0 /* MISSING FROM BIONIC */
extern int daylight;
extern long int timezone;
+#endif /* MISSING */
#define CLOCKS_PER_SEC 1000000
diff --git a/ndk/platforms/android-3/include/unistd.h b/ndk/platforms/android-3/include/unistd.h
index 205b8dd..6d0515a 100644
--- a/ndk/platforms/android-3/include/unistd.h
+++ b/ndk/platforms/android-3/include/unistd.h
@@ -61,16 +61,13 @@
extern pid_t getpgrp(void);
extern int setpgrp(void);
extern pid_t setsid(void);
-extern pid_t getsid(pid_t);
extern int execv(const char *, char * const *);
extern int execvp(const char *, char * const *);
extern int execve(const char *, char * const *, char * const *);
-extern int execvpe(const char *, char * const *, char * const *);
extern int execl(const char *, const char *, ...);
extern int execlp(const char *, const char *, ...);
extern int execle(const char *, const char *, ...);
-extern int execlpe(const char *, const char *, ...);
extern int capget(cap_user_header_t hdrp, cap_user_data_t datap);
extern int capset(cap_user_header_t hdrp, const cap_user_data_t datap);
extern int prctl(int option, unsigned long arg2, unsigned long arg3,
@@ -94,11 +91,8 @@
extern int setresgid(gid_t, gid_t, gid_t);
extern int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
extern int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
-extern int getfsuid(uid_t);
-extern int setfsuid(uid_t);
extern int issetugid(void);
extern char* getlogin(void);
-extern int getlogin_r(char* name, size_t namesize);
/* Macros for access() */
@@ -140,7 +134,6 @@
extern int ioctl(int, int, ...);
extern int flock(int, int);
extern int fsync(int);
-extern int fdatasync(int);
extern int ftruncate(int, off_t);
extern int pause(void);
@@ -149,9 +142,6 @@
extern void usleep(unsigned long);
extern int gethostname(char *, size_t);
-extern int sethostname(const char *, size_t);
-extern int getdomainname(char *, size_t);
-extern int setdomainname(const char *, size_t);
extern int getdtablesize(void);
@@ -164,6 +154,7 @@
extern int optind, opterr, optopt;
extern int isatty(int);
+extern char* ttyname(int);
extern int acct(const char* filepath);
@@ -186,6 +177,31 @@
extern pid_t tcgetpgrp(int fd);
extern int tcsetpgrp(int fd, pid_t _pid);
+#if 0 /* MISSING FROM BIONIC */
+extern pid_t getsid(pid_t);
+extern int execvpe(const char *, char * const *, char * const *);
+extern int execlpe(const char *, const char *, ...);
+extern int getfsuid(uid_t);
+extern int setfsuid(uid_t);
+extern int fdatasync(int);
+extern int getlogin_r(char* name, size_t namesize);
+extern char* getusershell(void);
+extern void setusershell(void);
+extern void endusershell(void);
+extern int sethostname(const char *, size_t);
+extern int getdomainname(char *, size_t);
+extern int setdomainname(const char *, size_t);
+extern int ttyname_r(int, char*, size_t);
+#endif /* MISSING */
+
+/* Used to retry syscalls that can return EINTR. */
+#define TEMP_FAILURE_RETRY(exp) ({ \
+ typeof (exp) _rc; \
+ do { \
+ _rc = (exp); \
+ } while (_rc == -1 && errno == EINTR); \
+ _rc; })
+
__END_DECLS
#endif /* _UNISTD_H_ */
diff --git a/ndk/platforms/android-3/include/utmp.h b/ndk/platforms/android-3/include/utmp.h
index e362b40..ffd3c92 100644
--- a/ndk/platforms/android-3/include/utmp.h
+++ b/ndk/platforms/android-3/include/utmp.h
@@ -87,4 +87,4 @@
__END_DECLS
-#endif // _UTMP_H_
+#endif /* _UTMP_H_ */
diff --git a/ndk/platforms/android-5/arch-arm/symbols/libc.so.txt b/ndk/platforms/android-5/arch-arm/symbols/libc.so.txt
new file mode 100644
index 0000000..47e9383
--- /dev/null
+++ b/ndk/platforms/android-5/arch-arm/symbols/libc.so.txt
@@ -0,0 +1,1085 @@
+
+.data.rel.ro
+.text
+MD5_Final
+MD5_Init
+MD5_Update
+SHA1Final
+SHA1Init
+SHA1Transform
+SHA1Update
+_C_ctype_
+_C_tolower_
+_C_toupper_
+_Unwind_Backtrace
+_Unwind_Complete
+_Unwind_DeleteException
+_Unwind_ForcedUnwind
+_Unwind_GetCFA
+_Unwind_GetDataRelBase
+_Unwind_GetLanguageSpecificData
+_Unwind_GetRegionStart
+_Unwind_GetTextRelBase
+_Unwind_RaiseException
+_Unwind_Resume
+_Unwind_Resume_or_Rethrow
+_Unwind_VRS_Get
+_Unwind_VRS_Pop
+_Unwind_VRS_Set
+___Unwind_Backtrace
+___Unwind_ForcedUnwind
+___Unwind_RaiseException
+___Unwind_Resume
+___Unwind_Resume_or_Rethrow
+__adddf3
+__addsf3
+__aeabi_atexit
+__aeabi_cdcmpeq
+__aeabi_cdcmple
+__aeabi_cdrcmple
+__aeabi_d2f
+__aeabi_d2iz
+__aeabi_dadd
+__aeabi_dcmpeq
+__aeabi_dcmpge
+__aeabi_dcmpgt
+__aeabi_dcmple
+__aeabi_dcmplt
+__aeabi_dcmpun
+__aeabi_ddiv
+__aeabi_dmul
+__aeabi_drsub
+__aeabi_dsub
+__aeabi_f2d
+__aeabi_f2iz
+__aeabi_fadd
+__aeabi_fcmpun
+__aeabi_fdiv
+__aeabi_fmul
+__aeabi_frsub
+__aeabi_fsub
+__aeabi_i2d
+__aeabi_i2f
+__aeabi_idiv
+__aeabi_idiv0
+__aeabi_idivmod
+__aeabi_l2d
+__aeabi_l2f
+__aeabi_ldiv0
+__aeabi_ldivmod
+__aeabi_lmul
+__aeabi_memclr
+__aeabi_memclr4
+__aeabi_memclr8
+__aeabi_memcpy
+__aeabi_memcpy4
+__aeabi_memcpy8
+__aeabi_memmove
+__aeabi_memmove4
+__aeabi_memmove8
+__aeabi_memset
+__aeabi_memset4
+__aeabi_memset8
+__aeabi_ui2d
+__aeabi_ui2f
+__aeabi_uidiv
+__aeabi_uidivmod
+__aeabi_ul2d
+__aeabi_ul2f
+__aeabi_uldivmod
+__aeabi_unwind_cpp_pr0
+__aeabi_unwind_cpp_pr1
+__aeabi_unwind_cpp_pr2
+__arc4_getbyte
+__assert
+__assert2
+__atexit
+__atexit_invalid
+__atexit_register_cleanup
+__atomic_cmpxchg
+__atomic_dec
+__atomic_inc
+__atomic_swap
+__b64_ntop
+__b64_pton
+__bionic_brk
+__bionic_libgcc_compat_hooks
+__brk
+__bss_end__
+__bss_start
+__bss_start__
+__clone
+__cmpdf2
+__cxa_atexit
+__cxa_begin_cleanup
+__cxa_call_unexpected
+__cxa_finalize
+__cxa_type_match
+__data_start
+__div0
+__divdf3
+__divdi3
+__divsf3
+__divsi3
+__dn_comp
+__dn_count_labels
+__dn_skipname
+__dorand48
+__dso_handle
+__dtoa
+__end__
+__eqdf2
+__errno
+__evAddTime
+__evCmpTime
+__evConsIovec
+__evConsTime
+__evNowTime
+__evOptMonoTime
+__evSubTime
+__evTimeSpec
+__evTimeVal
+__evUTCTime
+__exidx_end
+__exidx_start
+__extendsfdf2
+__fcntl
+__fcntl64
+__findenv
+__fixdfsi
+__fixsfsi
+__floatdidf
+__floatdisf
+__floatsidf
+__floatsisf
+__floatundidf
+__floatundisf
+__floatunsidf
+__floatunsisf
+__fork
+__fp_nquery
+__fp_query
+__fremovelock
+__futex_wait
+__futex_wake
+__gedf2
+__get_h_errno
+__get_pc
+__get_res_cache
+__get_sp
+__get_stack_base
+__get_thread
+__getcwd
+__getpriority
+__gnu_Unwind_Backtrace
+__gnu_Unwind_Find_exidx
+__gnu_Unwind_ForcedUnwind
+__gnu_Unwind_RaiseException
+__gnu_Unwind_Restore_VFP
+__gnu_Unwind_Restore_VFP_D
+__gnu_Unwind_Restore_VFP_D_16_to_31
+__gnu_Unwind_Restore_WMMXC
+__gnu_Unwind_Restore_WMMXD
+__gnu_Unwind_Resume
+__gnu_Unwind_Resume_or_Rethrow
+__gnu_Unwind_Save_VFP
+__gnu_Unwind_Save_VFP_D
+__gnu_Unwind_Save_VFP_D_16_to_31
+__gnu_Unwind_Save_WMMXC
+__gnu_Unwind_Save_WMMXD
+__gnu_ldivmod_helper
+__gnu_uldivmod_helper
+__gnu_unwind_execute
+__gnu_unwind_frame
+__gtdf2
+__hostalias
+__init_tls
+__ioctl
+__isthreaded
+__ledf2
+__libc_android_abort
+__libc_android_log_assert
+__libc_android_log_print
+__libc_android_log_vprint
+__libc_init
+__libc_init_common
+__libc_prenit
+__llseek
+__loc_aton
+__loc_ntoa
+__ltdf2
+__memcmp16
+__mmap2
+__muldf3
+__muldi3
+__mulsf3
+__nedf2
+__ns_format_ttl
+__ns_get16
+__ns_get32
+__ns_initparse
+__ns_makecanon
+__ns_msg_getflag
+__ns_name_compress
+__ns_name_ntol
+__ns_name_ntop
+__ns_name_pack
+__ns_name_pton
+__ns_name_rollback
+__ns_name_skip
+__ns_name_uncompress
+__ns_name_unpack
+__ns_parserr
+__ns_put16
+__ns_put32
+__ns_samename
+__ns_skiprr
+__ns_sprintrr
+__ns_sprintrrf
+__open
+__openat
+__p_cdname
+__p_cdnname
+__p_cert_syms
+__p_class
+__p_class_syms
+__p_default_section_syms
+__p_fqname
+__p_fqnname
+__p_key_syms
+__p_option
+__p_query
+__p_rcode
+__p_rcode_syms
+__p_secstodate
+__p_section
+__p_sockun
+__p_time
+__p_type
+__p_type_syms
+__p_update_section_syms
+__page_shift
+__page_size
+__pread64
+__progname
+__pthread_cleanup_pop
+__pthread_cleanup_push
+__pthread_clone
+__pthread_cond_timedwait
+__pthread_cond_timedwait_relative
+__ptrace
+__putlong
+__putshort
+__pwrite64
+__rand48_add
+__rand48_mult
+__rand48_seed
+__reboot
+__res_close
+__res_dnok
+__res_get_nibblesuffix
+__res_get_nibblesuffix2
+__res_get_state
+__res_get_static
+__res_getservers
+__res_hnok
+__res_hostalias
+__res_isourserver
+__res_mailok
+__res_nameinquery
+__res_nametoclass
+__res_nametotype
+__res_nclose
+__res_ndestroy
+__res_ninit
+__res_nmkquery
+__res_nopt
+__res_nquery
+__res_nquerydomain
+__res_nsearch
+__res_nsend
+__res_opt
+__res_ourserver_p
+__res_ownok
+__res_pquery
+__res_put_state
+__res_queriesmatch
+__res_querydomain
+__res_randomid
+__res_send
+__res_send_setqhook
+__res_send_setrhook
+__res_setservers
+__res_vinit
+__restore_core_regs
+__rt_sigaction
+__rt_sigprocmask
+__rt_sigtimedwait
+__sF
+__sFext
+__sclose
+__sdidinit
+__set_errno
+__set_syscall_errno
+__set_tls
+__sflags
+__sflush
+__sfp
+__sfvwrite
+__sglue
+__sigsuspend
+__sinit
+__slbexpand
+__smakebuf
+__sread
+__srefill
+__srget
+__sseek
+__stack_chk_fail
+__stack_chk_guard
+__statfs64
+__subdf3
+__subsf3
+__swbuf
+__swhatbuf
+__swrite
+__swsetup
+__sym_ntop
+__sym_ntos
+__sym_ston
+__syslog
+__system_properties_init
+__system_property_area__
+__system_property_find
+__system_property_find_nth
+__system_property_get
+__system_property_read
+__system_property_wait
+__thread_entry
+__timer_create
+__timer_delete
+__timer_getoverrun
+__timer_gettime
+__timer_settime
+__timer_table_start_stop
+__truncdfsf2
+__udivdi3
+__udivsi3
+__unorddf2
+__unordsf2
+__wait4
+_bss_end__
+_cleanup
+_ctype_
+_dns_gethtbyaddr
+_dns_gethtbyname
+_dorand48
+_edata
+_end
+_endhtent
+_exit
+_exit_thread
+_exit_with_stack_teardown
+_fwalk
+_gethtbyaddr
+_gethtbyname
+_gethtbyname2
+_gethtent
+_getlong
+_getshort
+_init_thread
+_longjmp
+_mktemp
+_nres
+_ns_flagdata
+_rand48_add
+_rand48_mult
+_rand48_seed
+_res_opcodes
+_resolv_cache_add
+_resolv_cache_create
+_resolv_cache_lookup
+_resolv_cache_reset
+_sethtent
+_setjmp
+_stack
+_thread_atexit_lock
+_thread_atexit_unlock
+_thread_created_hook
+_tolower_tab_
+_toupper_tab_
+abort
+accept
+access
+acct
+alarm
+alphasort
+arc4random
+arc4random_addrandom
+arc4random_buf
+arc4random_stir
+arc4random_uniform
+asctime
+asctime64
+asctime64_r
+asctime_r
+asprintf
+atexit
+atoi
+atol
+atoll
+basename
+basename_r
+bcopy
+bind
+bindresvport
+brk
+bsd_signal
+bsearch
+btowc
+bzero
+cacheflush
+calloc
+capget
+capset
+chdir
+chmod
+chown
+chroot
+clearerr
+clock
+clock_getres
+clock_gettime
+clock_nanosleep
+clock_settime
+close
+closedir
+closelog
+closelog_r
+connect
+copy_TM_to_tm
+copy_tm_to_TM
+creat
+ctime
+ctime64
+ctime64_r
+ctime_r
+daemon
+delete_module
+difftime
+dirfd
+dirname
+dirname_r
+div
+dlindependent_calloc
+dlindependent_comalloc
+dlmallinfo
+dlmalloc_footprint
+dlmalloc_max_footprint
+dlmalloc_stats
+dlmalloc_trim
+dlmalloc_usable_size
+dlmalloc_walk_free_pages
+dlmalloc_walk_heap
+dlmallopt
+dlpvalloc
+dlvalloc
+dn_expand
+dns_change_prop
+dns_last_change_counter
+drand48
+dup
+dup2
+endpwent
+endservent
+endutent
+environ
+epoll_create
+epoll_ctl
+epoll_wait
+erand48
+execl
+execle
+execlp
+execv
+execve
+execvp
+exit
+fake_gmtime_r
+fake_localtime_r
+fchdir
+fchmod
+fchmodat
+fchown
+fchownat
+fclose
+fcntl
+fdopen
+fdopendir
+feof
+ferror
+fflush
+ffs
+fgetc
+fgetln
+fgetpos
+fgets
+fgetwc
+fgetws
+fileno
+flock
+flockfile
+fnmatch
+fopen
+fork
+fpathconf
+fprintf
+fpurge
+fputc
+fputs
+fputwc
+fputws
+fread
+free
+free_malloc_leak_info
+freeaddrinfo
+freedtoa
+freopen
+fscanf
+fseek
+fseeko
+fsetpos
+fstat
+fstatat
+fstatfs
+fsync
+ftell
+ftello
+ftime
+ftok
+ftruncate
+ftrylockfile
+funlockfile
+funopen
+futex
+fwide
+fwprintf
+fwrite
+fwscanf
+gMallocLeakZygoteChild
+gai_strerror
+get_malloc_leak_info
+getaddrinfo
+getc
+getc_unlocked
+getchar
+getchar_unlocked
+getcwd
+getdents
+getdtablesize
+getegid
+getenv
+geteuid
+getgid
+getgrgid
+getgrnam
+getgrouplist
+getgroups
+gethostbyaddr
+gethostbyname
+gethostbyname2
+gethostbyname_r
+gethostent
+gethostname
+getitimer
+getlogin
+getmntent
+getnameinfo
+getnetbyaddr
+getnetbyname
+getopt
+getopt_long
+getopt_long_only
+getpeername
+getpgid
+getpgrp
+getpid
+getppid
+getpriority
+getprotobyname
+getprotobynumber
+getpt
+getpwnam
+getpwuid
+getresgid
+getresuid
+getrlimit
+getrusage
+gets
+getservbyname
+getservbyport
+getservent
+getservent_r
+getsockname
+getsockopt
+gettid
+gettimeofday
+getuid
+getutent
+getwc
+getwchar
+gmtime
+gmtime64
+gmtime64_r
+gmtime_r
+h_errlist
+h_nerr
+herror
+hstrerror
+if_indextoname
+if_nametoindex
+index
+inet_addr
+inet_aton
+inet_nsap_addr
+inet_nsap_ntoa
+inet_ntoa
+inet_ntop
+inet_pton
+init_module
+initgroups
+inotify_add_watch
+inotify_init
+inotify_rm_watch
+ioctl
+isalnum
+isalpha
+isascii
+isatty
+isblank
+iscntrl
+isdigit
+isgraph
+islower
+isprint
+ispunct
+issetugid
+isspace
+isupper
+iswalnum
+iswalpha
+iswcntrl
+iswctype
+iswdigit
+iswgraph
+iswlower
+iswprint
+iswpunct
+iswspace
+iswupper
+iswxdigit
+isxdigit
+jrand48
+kill
+klogctl
+lchown
+ldexp
+ldiv
+link
+listen
+lldiv
+load_domain_search_list
+localtime
+localtime64
+localtime64_r
+localtime_r
+longjmp
+longjmperror
+lrand48
+lseek
+lseek64
+lstat
+madvise
+mallinfo
+malloc
+malloc_debug_init
+mbrlen
+mbrtowc
+mbsinit
+mbsrtowcs
+memalign
+memccpy
+memchr
+memcmp
+memcpy
+memmem
+memmove
+memrchr
+memset
+memswap
+mincore
+mkdir
+mkdirat
+mkdtemp
+mknod
+mkstemp
+mkstemps
+mktemp
+mktime
+mktime64
+mlock
+mmap
+mount
+mprotect
+mrand48
+mremap
+msync
+munlock
+munmap
+nanosleep
+nice
+nrand48
+nsdispatch
+open
+openat
+opendir
+openlog
+openlog_r
+optarg
+opterr
+optind
+optopt
+optreset
+pathconf
+pause
+pclose
+perror
+pipe
+poll
+popen
+prctl
+pread
+printf
+pselect
+pthread_attr_destroy
+pthread_attr_getdetachstate
+pthread_attr_getguardsize
+pthread_attr_getschedparam
+pthread_attr_getschedpolicy
+pthread_attr_getscope
+pthread_attr_getstack
+pthread_attr_getstackaddr
+pthread_attr_getstacksize
+pthread_attr_init
+pthread_attr_setdetachstate
+pthread_attr_setguardsize
+pthread_attr_setschedparam
+pthread_attr_setschedpolicy
+pthread_attr_setscope
+pthread_attr_setstack
+pthread_attr_setstackaddr
+pthread_attr_setstacksize
+pthread_cond_broadcast
+pthread_cond_destroy
+pthread_cond_init
+pthread_cond_signal
+pthread_cond_timedwait
+pthread_cond_timedwait_monotonic
+pthread_cond_timedwait_monotonic_np
+pthread_cond_timedwait_relative_np
+pthread_cond_timeout_np
+pthread_cond_wait
+pthread_create
+pthread_detach
+pthread_equal
+pthread_exit
+pthread_getattr_np
+pthread_getcpuclockid
+pthread_getschedparam
+pthread_getspecific
+pthread_join
+pthread_key_create
+pthread_key_delete
+pthread_kill
+pthread_mutex_destroy
+pthread_mutex_init
+pthread_mutex_lock
+pthread_mutex_lock_timeout_np
+pthread_mutex_trylock
+pthread_mutex_unlock
+pthread_mutexattr_destroy
+pthread_mutexattr_getpshared
+pthread_mutexattr_gettype
+pthread_mutexattr_init
+pthread_mutexattr_setpshared
+pthread_mutexattr_settype
+pthread_once
+pthread_self
+pthread_setschedparam
+pthread_setspecific
+pthread_sigmask
+ptrace
+ptsname
+ptsname_r
+putc
+putc_unlocked
+putchar
+putchar_unlocked
+putenv
+puts
+pututline
+putw
+putwc
+putwchar
+pwrite
+qsort
+raise
+read
+readdir
+readdir_r
+readlink
+readv
+realloc
+realpath
+reboot
+recv
+recvfrom
+recvmsg
+remove
+rename
+renameat
+res_get_dns_changed
+res_init
+res_mkquery
+res_need_init
+res_query
+res_search
+restore_core_regs
+rewind
+rewinddir
+rmdir
+sbrk
+scandir
+scanf
+sched_get_priority_max
+sched_get_priority_min
+sched_getparam
+sched_getscheduler
+sched_rr_get_interval
+sched_setparam
+sched_setscheduler
+sched_yield
+seed48
+select
+sem_close
+sem_destroy
+sem_getvalue
+sem_init
+sem_open
+sem_post
+sem_timedwait
+sem_trywait
+sem_unlink
+sem_wait
+send
+sendfile
+sendmsg
+sendto
+setbuf
+setbuffer
+setegid
+setenv
+seteuid
+setgid
+setgroups
+setitimer
+setjmp
+setlinebuf
+setlocale
+setlogmask
+setlogmask_r
+setpgid
+setpgrp
+setpriority
+setregid
+setresgid
+setresuid
+setreuid
+setrlimit
+setservent
+setsid
+setsockopt
+settimeofday
+setuid
+setutent
+setvbuf
+shutdown
+sigaction
+sigblock
+siginterrupt
+siglongjmp
+sigpending
+sigprocmask
+sigsetjmp
+sigsetmask
+sigsuspend
+sigwait
+sleep
+snprintf
+socket
+socketpair
+sprintf
+srand48
+sscanf
+stat
+statfs
+strcasecmp
+strcasestr
+strcat
+strchr
+strcmp
+strcoll
+strcpy
+strcspn
+strdup
+strerror
+strerror_r
+strftime
+strftime_tz
+strlcat
+strlcpy
+strlen
+strncasecmp
+strncat
+strncmp
+strncpy
+strndup
+strnlen
+strntoimax
+strntoumax
+strpbrk
+strptime
+strrchr
+strsep
+strsignal
+strspn
+strstr
+strtod
+strtoimax
+strtok
+strtok_r
+strtol
+strtoll
+strtotimeval
+strtoul
+strtoull
+strtoumax
+strxfrm
+swprintf
+swscanf
+symlink
+sync
+sys_siglist
+syscall
+sysconf
+syslog
+syslog_r
+system
+sysv_signal
+tcgetpgrp
+tcsetpgrp
+tempnam
+the_key
+the_once
+time
+timegm64
+timelocal64
+timer_create
+timer_delete
+timer_getoverrun
+timer_gettime
+timer_settime
+times
+tkill
+tmpfile
+tmpnam
+toascii
+tolower
+toupper
+towlower
+towupper
+truncate
+ttyname
+tzname
+tzset
+umask
+umount
+umount2
+uname
+ungetc
+ungetwc
+unlink
+unlinkat
+unlockpt
+unsetenv
+usleep
+utime
+utimes
+utmpname
+valid_tm_mon
+valid_tm_wday
+valloc
+vasprintf
+vfork
+vfprintf
+vfscanf
+vfwprintf
+vprintf
+vscanf
+vsnprintf
+vsprintf
+vsscanf
+vswprintf
+vsyslog
+vsyslog_r
+vwprintf
+wait
+wait3
+waitid
+waitpid
+wcrtomb
+wcscat
+wcschr
+wcscmp
+wcscoll
+wcscpy
+wcscspn
+wcsftime
+wcslen
+wcsncat
+wcsncmp
+wcsncpy
+wcspbrk
+wcsrchr
+wcsrtombs
+wcsspn
+wcsstr
+wcstod
+wcstok
+wcstol
+wcstoul
+wcswcs
+wcswidth
+wcsxfrm
+wctob
+wctype
+wcwidth
+wmemchr
+wmemcmp
+wmemcpy
+wmemmove
+wmemset
+wprintf
+write
+writev
+wscanf
diff --git a/ndk/platforms/android-8/arch-arm/symbols/libc.so.txt b/ndk/platforms/android-8/arch-arm/symbols/libc.so.txt
new file mode 100644
index 0000000..b268233
--- /dev/null
+++ b/ndk/platforms/android-8/arch-arm/symbols/libc.so.txt
@@ -0,0 +1,1140 @@
+
+.data.rel.ro
+.text
+MD5_Final
+MD5_Init
+MD5_Update
+SHA1Final
+SHA1Init
+SHA1Transform
+SHA1Update
+_C_ctype_
+_C_tolower_
+_C_toupper_
+_Unwind_Backtrace
+_Unwind_Complete
+_Unwind_DeleteException
+_Unwind_ForcedUnwind
+_Unwind_GetCFA
+_Unwind_GetDataRelBase
+_Unwind_GetLanguageSpecificData
+_Unwind_GetRegionStart
+_Unwind_GetTextRelBase
+_Unwind_RaiseException
+_Unwind_Resume
+_Unwind_Resume_or_Rethrow
+_Unwind_VRS_Get
+_Unwind_VRS_Pop
+_Unwind_VRS_Set
+___Unwind_Backtrace
+___Unwind_ForcedUnwind
+___Unwind_RaiseException
+___Unwind_Resume
+___Unwind_Resume_or_Rethrow
+__adddf3
+__addsf3
+__aeabi_atexit
+__aeabi_cdcmpeq
+__aeabi_cdcmple
+__aeabi_cdrcmple
+__aeabi_d2f
+__aeabi_d2iz
+__aeabi_dadd
+__aeabi_dcmpeq
+__aeabi_dcmpge
+__aeabi_dcmpgt
+__aeabi_dcmple
+__aeabi_dcmplt
+__aeabi_dcmpun
+__aeabi_ddiv
+__aeabi_dmul
+__aeabi_drsub
+__aeabi_dsub
+__aeabi_f2d
+__aeabi_f2iz
+__aeabi_fadd
+__aeabi_fcmpun
+__aeabi_fdiv
+__aeabi_fmul
+__aeabi_frsub
+__aeabi_fsub
+__aeabi_i2d
+__aeabi_i2f
+__aeabi_idiv
+__aeabi_idiv0
+__aeabi_idivmod
+__aeabi_l2d
+__aeabi_l2f
+__aeabi_ldiv0
+__aeabi_ldivmod
+__aeabi_lmul
+__aeabi_memclr
+__aeabi_memclr4
+__aeabi_memclr8
+__aeabi_memcpy
+__aeabi_memcpy4
+__aeabi_memcpy8
+__aeabi_memmove
+__aeabi_memmove4
+__aeabi_memmove8
+__aeabi_memset
+__aeabi_memset4
+__aeabi_memset8
+__aeabi_ui2d
+__aeabi_ui2f
+__aeabi_uidiv
+__aeabi_uidivmod
+__aeabi_ul2d
+__aeabi_ul2f
+__aeabi_uldivmod
+__aeabi_unwind_cpp_pr0
+__aeabi_unwind_cpp_pr1
+__aeabi_unwind_cpp_pr2
+__arc4_getbyte
+__assert
+__assert2
+__atexit
+__atexit_invalid
+__atexit_register_cleanup
+__atomic_cmpxchg
+__atomic_dec
+__atomic_inc
+__atomic_swap
+__b64_ntop
+__b64_pton
+__bionic_brk
+__bionic_clone
+__bionic_clone_entry
+__bionic_libgcc_compat_hooks
+__brk
+__bss_end__
+__bss_start
+__bss_start__
+__cmpdf2
+__cxa_atexit
+__cxa_begin_cleanup
+__cxa_call_unexpected
+__cxa_finalize
+__cxa_type_match
+__data_start
+__div0
+__divdf3
+__divdi3
+__divsf3
+__divsi3
+__dn_comp
+__dn_count_labels
+__dn_skipname
+__dorand48
+__dso_handle
+__dtoa
+__end__
+__eqdf2
+__errno
+__evAddTime
+__evCmpTime
+__evConsIovec
+__evConsTime
+__evNowTime
+__evOptMonoTime
+__evSubTime
+__evTimeSpec
+__evTimeVal
+__evUTCTime
+__exidx_end
+__exidx_start
+__extendsfdf2
+__fcntl
+__fcntl64
+__findenv
+__fixdfsi
+__fixsfsi
+__floatdidf
+__floatdisf
+__floatsidf
+__floatsisf
+__floatundidf
+__floatundisf
+__floatunsidf
+__floatunsisf
+__fork
+__fp_nquery
+__fp_query
+__fremovelock
+__futex_syscall3
+__futex_syscall4
+__futex_wait
+__futex_wake
+__gedf2
+__get_h_errno
+__get_pc
+__get_res_cache
+__get_sp
+__get_stack_base
+__get_thread
+__getcwd
+__getpriority
+__gnu_Unwind_Backtrace
+__gnu_Unwind_Find_exidx
+__gnu_Unwind_ForcedUnwind
+__gnu_Unwind_RaiseException
+__gnu_Unwind_Restore_VFP
+__gnu_Unwind_Restore_VFP_D
+__gnu_Unwind_Restore_VFP_D_16_to_31
+__gnu_Unwind_Restore_WMMXC
+__gnu_Unwind_Restore_WMMXD
+__gnu_Unwind_Resume
+__gnu_Unwind_Resume_or_Rethrow
+__gnu_Unwind_Save_VFP
+__gnu_Unwind_Save_VFP_D
+__gnu_Unwind_Save_VFP_D_16_to_31
+__gnu_Unwind_Save_WMMXC
+__gnu_Unwind_Save_WMMXD
+__gnu_ldivmod_helper
+__gnu_uldivmod_helper
+__gnu_unwind_execute
+__gnu_unwind_frame
+__gtdf2
+__hostalias
+__init_tls
+__ioctl
+__isthreaded
+__ledf2
+__libc_android_abort
+__libc_android_log_assert
+__libc_android_log_print
+__libc_android_log_vprint
+__libc_init
+__libc_init_common
+__libc_malloc_default_dispatch
+__libc_malloc_dispatch
+__libc_prenit
+__llseek
+__loc_aton
+__loc_ntoa
+__ltdf2
+__memcmp16
+__mmap2
+__muldf3
+__muldi3
+__mulsf3
+__nedf2
+__ns_format_ttl
+__ns_get16
+__ns_get32
+__ns_initparse
+__ns_makecanon
+__ns_msg_getflag
+__ns_name_compress
+__ns_name_ntol
+__ns_name_ntop
+__ns_name_pack
+__ns_name_pton
+__ns_name_rollback
+__ns_name_skip
+__ns_name_uncompress
+__ns_name_unpack
+__ns_parserr
+__ns_put16
+__ns_put32
+__ns_samename
+__ns_skiprr
+__ns_sprintrr
+__ns_sprintrrf
+__open
+__openat
+__p_cdname
+__p_cdnname
+__p_cert_syms
+__p_class
+__p_class_syms
+__p_default_section_syms
+__p_fqname
+__p_fqnname
+__p_key_syms
+__p_option
+__p_query
+__p_rcode
+__p_rcode_syms
+__p_secstodate
+__p_section
+__p_sockun
+__p_time
+__p_type
+__p_type_syms
+__p_update_section_syms
+__page_shift
+__page_size
+__pread64
+__progname
+__pthread_cleanup_pop
+__pthread_cleanup_push
+__pthread_clone
+__pthread_cond_timedwait
+__pthread_cond_timedwait_relative
+__ptrace
+__putlong
+__putshort
+__pwrite64
+__rand48_add
+__rand48_mult
+__rand48_seed
+__reboot
+__res_close
+__res_dnok
+__res_get_nibblesuffix
+__res_get_nibblesuffix2
+__res_get_state
+__res_get_static
+__res_getservers
+__res_hnok
+__res_hostalias
+__res_isourserver
+__res_mailok
+__res_nameinquery
+__res_nametoclass
+__res_nametotype
+__res_nclose
+__res_ndestroy
+__res_ninit
+__res_nmkquery
+__res_nopt
+__res_nquery
+__res_nquerydomain
+__res_nsearch
+__res_nsend
+__res_opt
+__res_ourserver_p
+__res_ownok
+__res_pquery
+__res_put_state
+__res_queriesmatch
+__res_querydomain
+__res_randomid
+__res_send
+__res_send_setqhook
+__res_send_setrhook
+__res_setservers
+__res_vinit
+__restore_core_regs
+__rt_sigaction
+__rt_sigprocmask
+__rt_sigtimedwait
+__sF
+__sFext
+__sclose
+__sdidinit
+__set_errno
+__set_syscall_errno
+__set_tls
+__setresuid
+__setreuid
+__setuid
+__sflags
+__sflush
+__sfp
+__sfvwrite
+__sglue
+__sigsuspend
+__sinit
+__slbexpand
+__smakebuf
+__sread
+__srefill
+__srget
+__sseek
+__stack_chk_fail
+__stack_chk_guard
+__statfs64
+__subdf3
+__subsf3
+__swbuf
+__swhatbuf
+__swrite
+__swsetup
+__sym_ntop
+__sym_ntos
+__sym_ston
+__sys_clone
+__syslog
+__system_properties_init
+__system_property_area__
+__system_property_find
+__system_property_find_nth
+__system_property_get
+__system_property_read
+__system_property_wait
+__thread_entry
+__timer_create
+__timer_delete
+__timer_getoverrun
+__timer_gettime
+__timer_settime
+__timer_table_start_stop
+__truncdfsf2
+__udivdi3
+__udivsi3
+__unorddf2
+__unordsf2
+__wait4
+_bss_end__
+_cleanup
+_ctype_
+_dns_gethtbyaddr
+_dns_gethtbyname
+_dorand48
+_edata
+_end
+_endhtent
+_exit
+_exit_thread
+_exit_with_stack_teardown
+_fwalk
+_gethtbyaddr
+_gethtbyname
+_gethtbyname2
+_gethtent
+_getlong
+_getshort
+_init_thread
+_longjmp
+_mktemp
+_nres
+_ns_flagdata
+_rand48_add
+_rand48_mult
+_rand48_seed
+_res_opcodes
+_resolv_cache_add
+_resolv_cache_create
+_resolv_cache_lookup
+_resolv_cache_reset
+_sethtent
+_setjmp
+_stack
+_thread_atexit_lock
+_thread_atexit_unlock
+_thread_created_hook
+_tolower_tab_
+_toupper_tab_
+abort
+accept
+access
+acct
+alarm
+alphasort
+arc4random
+arc4random_addrandom
+arc4random_buf
+arc4random_stir
+arc4random_uniform
+asctime
+asctime64
+asctime64_r
+asctime_r
+asprintf
+atexit
+atoi
+atol
+atoll
+basename
+basename_r
+bcopy
+bind
+bindresvport
+brk
+bsd_signal
+bsearch
+btowc
+bzero
+cacheflush
+calloc
+capget
+capset
+chdir
+chmod
+chown
+chroot
+clearenv
+clearerr
+clock
+clock_getres
+clock_gettime
+clock_nanosleep
+clock_settime
+clone
+close
+closedir
+closelog
+closelog_r
+connect
+copy_TM_to_tm
+copy_tm_to_TM
+cpuacct_add
+creat
+ctime
+ctime64
+ctime64_r
+ctime_r
+daemon
+daylight
+delete_module
+difftime
+dirfd
+dirname
+dirname_r
+div
+dlcalloc
+dlfree
+dlindependent_calloc
+dlindependent_comalloc
+dlmallinfo
+dlmalloc
+dlmalloc_footprint
+dlmalloc_max_footprint
+dlmalloc_stats
+dlmalloc_trim
+dlmalloc_usable_size
+dlmalloc_walk_free_pages
+dlmalloc_walk_heap
+dlmallopt
+dlmemalign
+dlpvalloc
+dlrealloc
+dlvalloc
+dn_expand
+dns_change_prop
+dns_last_change_counter
+drand48
+dup
+dup2
+endpwent
+endservent
+endusershell
+endutent
+environ
+epoll_create
+epoll_ctl
+epoll_wait
+erand48
+err
+errx
+execl
+execle
+execlp
+execv
+execve
+execvp
+exit
+fake_gmtime_r
+fake_localtime_r
+fchdir
+fchmod
+fchmodat
+fchown
+fchownat
+fclose
+fcntl
+fdopen
+fdopendir
+fdprintf
+feof
+ferror
+fflush
+ffs
+fgetc
+fgetln
+fgetpos
+fgets
+fgetwc
+fgetws
+fileno
+flock
+flockfile
+fnmatch
+fopen
+fork
+fpathconf
+fprintf
+fpurge
+fputc
+fputs
+fputwc
+fputws
+fread
+free
+free_malloc_leak_info
+freeaddrinfo
+freedtoa
+freopen
+fscanf
+fseek
+fseeko
+fsetpos
+fstat
+fstatat
+fstatfs
+fsync
+ftell
+ftello
+ftime
+ftok
+ftruncate
+ftrylockfile
+fts_children
+fts_close
+fts_open
+fts_read
+fts_set
+funlockfile
+funopen
+futex
+fwide
+fwprintf
+fwrite
+fwscanf
+gAllocationsMutex
+gHashTable
+gMallocLeakZygoteChild
+gai_strerror
+get_malloc_leak_info
+getaddrinfo
+getc
+getc_unlocked
+getchar
+getchar_unlocked
+getcwd
+getdents
+getdtablesize
+getegid
+getenv
+geteuid
+getgid
+getgrgid
+getgrnam
+getgrouplist
+getgroups
+gethostbyaddr
+gethostbyname
+gethostbyname2
+gethostbyname_r
+gethostent
+gethostname
+getitimer
+getlogin
+getmntent
+getnameinfo
+getnetbyaddr
+getnetbyname
+getopt
+getopt_long
+getopt_long_only
+getpeername
+getpgid
+getpgrp
+getpid
+getppid
+getpriority
+getprotobyname
+getprotobynumber
+getpt
+getpwnam
+getpwuid
+getresgid
+getresuid
+getrlimit
+getrusage
+gets
+getservbyname
+getservbyport
+getservent
+getservent_r
+getsockname
+getsockopt
+gettid
+gettimeofday
+getuid
+getusershell
+getutent
+getwc
+getwchar
+gmtime
+gmtime64
+gmtime64_r
+gmtime_r
+h_errlist
+h_nerr
+herror
+hstrerror
+if_indextoname
+if_nametoindex
+index
+inet_addr
+inet_aton
+inet_nsap_addr
+inet_nsap_ntoa
+inet_ntoa
+inet_ntop
+inet_pton
+init_module
+initgroups
+inotify_add_watch
+inotify_init
+inotify_rm_watch
+ioctl
+ioprio_get
+ioprio_set
+isalnum
+isalpha
+isascii
+isatty
+isblank
+iscntrl
+isdigit
+isgraph
+islower
+isprint
+ispunct
+issetugid
+isspace
+isupper
+iswalnum
+iswalpha
+iswcntrl
+iswctype
+iswdigit
+iswgraph
+iswlower
+iswprint
+iswpunct
+iswspace
+iswupper
+iswxdigit
+isxdigit
+jrand48
+kill
+killpg
+klogctl
+lchown
+ldexp
+ldiv
+link
+listen
+lldiv
+load_domain_search_list
+localtime
+localtime64
+localtime64_r
+localtime_r
+longjmp
+longjmperror
+lrand48
+lseek
+lseek64
+lstat
+madvise
+mallinfo
+malloc
+malloc_debug_init
+mbrlen
+mbrtowc
+mbsinit
+mbsrtowcs
+mbstowcs
+memalign
+memccpy
+memchr
+memcmp
+memcpy
+memmem
+memmove
+memrchr
+memset
+memswap
+mincore
+mkdir
+mkdirat
+mkdtemp
+mknod
+mkstemp
+mkstemps
+mktemp
+mktime
+mktime64
+mlock
+mmap
+mount
+mprotect
+mrand48
+mremap
+msync
+munlock
+munmap
+nanosleep
+nice
+nrand48
+nsdispatch
+open
+openat
+opendir
+openlog
+openlog_r
+optarg
+opterr
+optind
+optopt
+optreset
+pathconf
+pause
+pclose
+perror
+pipe
+poll
+popen
+prctl
+pread
+printf
+pselect
+pthread_attr_destroy
+pthread_attr_getdetachstate
+pthread_attr_getguardsize
+pthread_attr_getschedparam
+pthread_attr_getschedpolicy
+pthread_attr_getscope
+pthread_attr_getstack
+pthread_attr_getstackaddr
+pthread_attr_getstacksize
+pthread_attr_init
+pthread_attr_setdetachstate
+pthread_attr_setguardsize
+pthread_attr_setschedparam
+pthread_attr_setschedpolicy
+pthread_attr_setscope
+pthread_attr_setstack
+pthread_attr_setstackaddr
+pthread_attr_setstacksize
+pthread_cond_broadcast
+pthread_cond_destroy
+pthread_cond_init
+pthread_cond_signal
+pthread_cond_timedwait
+pthread_cond_timedwait_monotonic
+pthread_cond_timedwait_monotonic_np
+pthread_cond_timedwait_relative_np
+pthread_cond_timeout_np
+pthread_cond_wait
+pthread_condattr_destroy
+pthread_condattr_getpshared
+pthread_condattr_init
+pthread_condattr_setpshared
+pthread_create
+pthread_detach
+pthread_equal
+pthread_exit
+pthread_getattr_np
+pthread_getcpuclockid
+pthread_getschedparam
+pthread_getspecific
+pthread_join
+pthread_key_create
+pthread_key_delete
+pthread_kill
+pthread_mutex_destroy
+pthread_mutex_init
+pthread_mutex_lock
+pthread_mutex_lock_timeout_np
+pthread_mutex_trylock
+pthread_mutex_unlock
+pthread_mutexattr_destroy
+pthread_mutexattr_getpshared
+pthread_mutexattr_gettype
+pthread_mutexattr_init
+pthread_mutexattr_setpshared
+pthread_mutexattr_settype
+pthread_once
+pthread_self
+pthread_setschedparam
+pthread_setspecific
+pthread_sigmask
+ptrace
+ptsname
+ptsname_r
+putc
+putc_unlocked
+putchar
+putchar_unlocked
+putenv
+puts
+pututline
+putw
+putwc
+putwchar
+pwrite
+qsort
+raise
+read
+readdir
+readdir_r
+readlink
+readv
+realloc
+realpath
+reboot
+recv
+recvfrom
+recvmsg
+regcomp
+regerror
+regexec
+regfree
+remove
+rename
+renameat
+res_get_dns_changed
+res_init
+res_mkquery
+res_need_init
+res_query
+res_search
+restore_core_regs
+rewind
+rewinddir
+rmdir
+sbrk
+scandir
+scanf
+sched_get_priority_max
+sched_get_priority_min
+sched_getparam
+sched_getscheduler
+sched_rr_get_interval
+sched_setparam
+sched_setscheduler
+sched_yield
+seed48
+select
+sem_close
+sem_destroy
+sem_getvalue
+sem_init
+sem_open
+sem_post
+sem_timedwait
+sem_trywait
+sem_unlink
+sem_wait
+send
+sendfile
+sendmsg
+sendto
+setbuf
+setbuffer
+setegid
+setenv
+seteuid
+setgid
+setgroups
+setitimer
+setjmp
+setlinebuf
+setlocale
+setlogmask
+setlogmask_r
+setpgid
+setpgrp
+setpriority
+setregid
+setresgid
+setresuid
+setreuid
+setrlimit
+setservent
+setsid
+setsockopt
+settimeofday
+setuid
+setusershell
+setutent
+setvbuf
+shutdown
+sigaction
+sigaltstack
+sigblock
+siginterrupt
+siglongjmp
+sigpending
+sigprocmask
+sigsetjmp
+sigsetmask
+sigsuspend
+sigwait
+sleep
+snprintf
+socket
+socketpair
+sprintf
+srand48
+sscanf
+stat
+statfs
+strcasecmp
+strcasestr
+strcat
+strchr
+strcmp
+strcoll
+strcpy
+strcspn
+strdup
+strerror
+strerror_r
+strftime
+strftime_tz
+strlcat
+strlcpy
+strlen
+strncasecmp
+strncat
+strncmp
+strncpy
+strndup
+strnlen
+strntoimax
+strntoumax
+strpbrk
+strptime
+strrchr
+strsep
+strsignal
+strspn
+strstr
+strtod
+strtoimax
+strtok
+strtok_r
+strtol
+strtoll
+strtotimeval
+strtoul
+strtoull
+strtoumax
+strxfrm
+swprintf
+swscanf
+symlink
+sync
+sys_siglist
+sys_signame
+syscall
+sysconf
+syslog
+syslog_r
+system
+sysv_signal
+tcgetpgrp
+tcsetpgrp
+tempnam
+the_key
+the_once
+time
+timegm64
+timelocal64
+timer_create
+timer_delete
+timer_getoverrun
+timer_gettime
+timer_settime
+times
+timezone
+tkill
+tmpfile
+tmpnam
+toascii
+tolower
+toupper
+towlower
+towupper
+truncate
+ttyname
+ttyname_r
+tzname
+tzset
+umask
+umount
+umount2
+uname
+ungetc
+ungetwc
+unlink
+unlinkat
+unlockpt
+unsetenv
+usleep
+utime
+utimes
+utmpname
+valid_tm_mon
+valid_tm_wday
+valloc
+vasprintf
+verr
+verrx
+vfdprintf
+vfork
+vfprintf
+vfscanf
+vfwprintf
+vprintf
+vscanf
+vsnprintf
+vsprintf
+vsscanf
+vswprintf
+vsyslog
+vsyslog_r
+vwarn
+vwarnx
+vwprintf
+wait
+wait3
+waitid
+waitpid
+warn
+warnx
+wcrtomb
+wcscat
+wcschr
+wcscmp
+wcscoll
+wcscpy
+wcscspn
+wcsftime
+wcslen
+wcsncat
+wcsncmp
+wcsncpy
+wcspbrk
+wcsrchr
+wcsrtombs
+wcsspn
+wcsstr
+wcstod
+wcstok
+wcstol
+wcstombs
+wcstoul
+wcswcs
+wcswidth
+wcsxfrm
+wctob
+wctype
+wcwidth
+wmemchr
+wmemcmp
+wmemcpy
+wmemmove
+wmemset
+wprintf
+write
+writev
+wscanf
diff --git a/ndk/platforms/android-8/include/sched.h b/ndk/platforms/android-8/include/sched.h
index 3211ecf..2dba5b1 100644
--- a/ndk/platforms/android-8/include/sched.h
+++ b/ndk/platforms/android-8/include/sched.h
@@ -69,7 +69,9 @@
#define CLONE_CHILD_SETTID 0x01000000
#define CLONE_STOPPED 0x02000000
+#ifdef _GNU_SOURCE
extern int clone(int (*fn)(void*), void *child_stack, int flags, void *arg);
+#endif
__END_DECLS
diff --git a/ndk/platforms/android-8/include/signal.h b/ndk/platforms/android-8/include/signal.h
index 7bc3145..4401164 100644
--- a/ndk/platforms/android-8/include/signal.h
+++ b/ndk/platforms/android-8/include/signal.h
@@ -120,6 +120,7 @@
extern int raise(int);
extern int kill(pid_t, int);
extern int killpg(int pgrp, int sig);
+extern int sigaltstack(const stack_t *ss, stack_t *oss);
__END_DECLS
diff --git a/ndk/platforms/android-8/include/stdio.h b/ndk/platforms/android-8/include/stdio.h
index f0e103e..ac475db 100644
--- a/ndk/platforms/android-8/include/stdio.h
+++ b/ndk/platforms/android-8/include/stdio.h
@@ -300,8 +300,10 @@
#define L_cuserid 9 /* size for cuserid(); UT_NAMESIZE + 1 */
__BEGIN_DECLS
+#if 0 /* MISSING FROM BIONIC */
char *ctermid(char *);
char *cuserid(char *);
+#endif /* MISSING */
FILE *fdopen(int, const char *);
int fileno(FILE *);
diff --git a/ndk/platforms/android-8/include/stdlib.h b/ndk/platforms/android-8/include/stdlib.h
new file mode 100644
index 0000000..ddaf32c
--- /dev/null
+++ b/ndk/platforms/android-8/include/stdlib.h
@@ -0,0 +1,185 @@
+/*
+ * 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 _STDLIB_H_
+#define _STDLIB_H_
+
+#include <sys/cdefs.h>
+
+/* wchar_t is required in stdlib.h according to POSIX.
+ * note that defining __need_wchar_t prevents stddef.h
+ * to define all other symbols it does normally */
+#define __need_wchar_t
+#include <stddef.h>
+
+#include <stddef.h>
+#include <string.h>
+#include <alloca.h>
+#include <strings.h>
+#include <memory.h>
+
+__BEGIN_DECLS
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+extern __noreturn void exit(int);
+extern __noreturn void abort(void);
+extern int atexit(void (*)(void));
+
+extern char *getenv(const char *);
+extern int putenv(const char *);
+extern int setenv(const char *, const char *, int);
+extern int unsetenv(const char *);
+extern int clearenv(void);
+
+extern char *mktemp (char *);
+extern int mkstemp (char *);
+
+extern long strtol(const char *, char **, int);
+extern long long strtoll(const char *, char **, int);
+extern unsigned long strtoul(const char *, char **, int);
+extern unsigned long long strtoull(const char *, char **, int);
+extern double strtod(const char *nptr, char **endptr);
+
+static __inline__ float strtof(const char *nptr, char **endptr)
+{
+ return (float)strtod(nptr, endptr);
+}
+
+extern int atoi(const char *);
+extern long atol(const char *);
+extern long long atoll(const char *);
+
+static __inline__ double atof(const char *nptr)
+{
+ return (strtod(nptr, NULL));
+}
+
+static __inline__ int abs(int __n) {
+ return (__n < 0) ? -__n : __n;
+}
+
+static __inline__ long labs(long __n) {
+ return (__n < 0L) ? -__n : __n;
+}
+
+static __inline__ long long llabs(long long __n) {
+ return (__n < 0LL) ? -__n : __n;
+}
+
+extern char * realpath(const char *path, char *resolved);
+extern int system(const char * string);
+
+extern void * bsearch(const void *key, const void *base0,
+ size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *));
+
+extern void qsort(void *, size_t, size_t, int (*)(const void *, const void *));
+
+extern long jrand48(unsigned short *);
+extern long mrand48(void);
+extern long nrand48(unsigned short *);
+extern long lrand48(void);
+extern unsigned short *seed48(unsigned short*);
+extern double erand48(unsigned short xsubi[3]);
+extern double drand48(void);
+extern void srand48(long);
+extern unsigned int arc4random(void);
+extern void arc4random_stir(void);
+extern void arc4random_addrandom(unsigned char *, int);
+
+#define RAND_MAX 0x7fffffff
+static __inline__ int rand(void) {
+ return (int)lrand48();
+}
+static __inline__ void srand(unsigned int __s) {
+ srand48(__s);
+}
+static __inline__ long random(void)
+{
+ return lrand48();
+}
+static __inline__ void srandom(unsigned int __s)
+{
+ srand48(__s);
+}
+
+/* Basic PTY functions. These only work if devpts is mounted! */
+
+extern int unlockpt(int);
+extern char* ptsname(int);
+extern char* ptsname_r(int, char*, size_t);
+extern int getpt(void);
+
+static __inline__ int grantpt(int __fd)
+{
+ (void)__fd;
+ return 0; /* devpts does this all for us! */
+}
+
+typedef struct {
+ int quot;
+ int rem;
+} div_t;
+
+extern div_t div(int, int);
+
+typedef struct {
+ long int quot;
+ long int rem;
+} ldiv_t;
+
+extern ldiv_t ldiv(long, long);
+
+typedef struct {
+ long long int quot;
+ long long int rem;
+} lldiv_t;
+
+extern lldiv_t lldiv(long long, long long);
+
+#if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */
+/* make STLPort happy */
+extern int mblen(const char *, size_t);
+extern size_t mbstowcs(wchar_t *, const char *, size_t);
+extern int mbtowc(wchar_t *, const char *, size_t);
+
+/* Likewise, make libstdc++-v3 happy. */
+extern int wctomb(char *, wchar_t);
+extern size_t wcstombs(char *, const wchar_t *, size_t);
+#endif /* MISSING */
+
+#define MB_CUR_MAX 1
+
+#if 0 /* MISSING FROM BIONIC */
+extern int on_exit(void (*)(int, void *), void *);
+#endif /* MISSING */
+
+__END_DECLS
+
+#endif /* _STDLIB_H_ */
diff --git a/ndk/platforms/android-8/include/time.h b/ndk/platforms/android-8/include/time.h
new file mode 100644
index 0000000..6163c6d
--- /dev/null
+++ b/ndk/platforms/android-8/include/time.h
@@ -0,0 +1,115 @@
+/*
+ * 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 _TIME_H_
+#define _TIME_H_
+
+#include <sys/cdefs.h>
+#include <sys/time.h>
+
+#define __ARCH_SI_UID_T __kernel_uid32_t
+#include <asm/siginfo.h>
+#undef __ARCH_SI_UID_T
+
+__BEGIN_DECLS
+
+extern time_t time(time_t *);
+extern int nanosleep(const struct timespec *, struct timespec *);
+
+extern char *strtotimeval(const char *str, struct timeval *tv);
+
+struct tm {
+ int tm_sec; /* seconds */
+ int tm_min; /* minutes */
+ int tm_hour; /* hours */
+ int tm_mday; /* day of the month */
+ int tm_mon; /* month */
+ int tm_year; /* year */
+ int tm_wday; /* day of the week */
+ int tm_yday; /* day in the year */
+ int tm_isdst; /* daylight saving time */
+
+ long int tm_gmtoff; /* Seconds east of UTC. */
+ const char *tm_zone; /* Timezone abbreviation. */
+
+};
+
+/* defining TM_ZONE indicates that we have a "timezone abbreviation" field in
+ * struct tm, the value should be the field name
+ */
+#define TM_ZONE tm_zone
+
+extern char* asctime(const struct tm* a);
+extern char* asctime_r(const struct tm* a, char* buf);
+
+/* Return the difference between TIME1 and TIME0. */
+extern double difftime (time_t __time1, time_t __time0);
+extern time_t mktime (struct tm *a);
+
+extern struct tm* localtime(const time_t *t);
+extern struct tm* localtime_r(const time_t *timep, struct tm *result);
+
+extern struct tm* gmtime(const time_t *timep);
+extern struct tm* gmtime_r(const time_t *timep, struct tm *result);
+
+extern char* strptime(const char *buf, const char *fmt, struct tm *tm);
+extern size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
+
+extern char *ctime(const time_t *timep);
+extern char *ctime_r(const time_t *timep, char *buf);
+
+extern void tzset(void);
+
+/* global includes */
+extern char* tzname[];
+extern int daylight;
+extern long int timezone;
+
+#define CLOCKS_PER_SEC 1000000
+
+extern clock_t clock(void);
+
+/* BIONIC: extra linux clock goodies */
+extern int clock_getres(int, struct timespec *);
+extern int clock_gettime(int, struct timespec *);
+
+#define CLOCK_REALTIME 0
+#define CLOCK_MONOTONIC 1
+#define CLOCK_PROCESS_CPUTIME_ID 2
+#define CLOCK_THREAD_CPUTIME_ID 3
+#define CLOCK_REALTIME_HR 4
+#define CLOCK_MONOTONIC_HR 5
+
+extern int timer_create(int, struct sigevent*, timer_t*);
+extern int timer_delete(timer_t);
+extern int timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue);
+extern int timer_gettime(timer_t timerid, struct itimerspec *value);
+extern int timer_getoverrun(timer_t timerid);
+
+__END_DECLS
+
+#endif /* _TIME_H_ */
diff --git a/ndk/platforms/android-8/include/unistd.h b/ndk/platforms/android-8/include/unistd.h
index 7554198..d64c971 100644
--- a/ndk/platforms/android-8/include/unistd.h
+++ b/ndk/platforms/android-8/include/unistd.h
@@ -61,16 +61,13 @@
extern pid_t getpgrp(void);
extern int setpgrp(void);
extern pid_t setsid(void);
-extern pid_t getsid(pid_t);
extern int execv(const char *, char * const *);
extern int execvp(const char *, char * const *);
extern int execve(const char *, char * const *, char * const *);
-extern int execvpe(const char *, char * const *, char * const *);
extern int execl(const char *, const char *, ...);
extern int execlp(const char *, const char *, ...);
extern int execle(const char *, const char *, ...);
-extern int execlpe(const char *, const char *, ...);
extern int capget(cap_user_header_t hdrp, cap_user_data_t datap);
extern int capset(cap_user_header_t hdrp, const cap_user_data_t datap);
extern int prctl(int option, unsigned long arg2, unsigned long arg3,
@@ -94,11 +91,8 @@
extern int setresgid(gid_t, gid_t, gid_t);
extern int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
extern int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
-extern int getfsuid(uid_t);
-extern int setfsuid(uid_t);
extern int issetugid(void);
extern char* getlogin(void);
-extern int getlogin_r(char* name, size_t namesize);
extern char* getusershell(void);
extern void setusershell(void);
extern void endusershell(void);
@@ -144,7 +138,6 @@
extern int ioctl(int, int, ...);
extern int flock(int, int);
extern int fsync(int);
-extern int fdatasync(int);
extern int ftruncate(int, off_t);
extern int pause(void);
@@ -153,9 +146,6 @@
extern int usleep(unsigned long);
extern int gethostname(char *, size_t);
-extern int sethostname(const char *, size_t);
-extern int getdomainname(char *, size_t);
-extern int setdomainname(const char *, size_t);
extern int getdtablesize(void);
@@ -192,6 +182,19 @@
extern pid_t tcgetpgrp(int fd);
extern int tcsetpgrp(int fd, pid_t _pid);
+#if 0 /* MISSING FROM BIONIC */
+extern pid_t getsid(pid_t);
+extern int execvpe(const char *, char * const *, char * const *);
+extern int execlpe(const char *, const char *, ...);
+extern int getfsuid(uid_t);
+extern int setfsuid(uid_t);
+extern int fdatasync(int);
+extern int getlogin_r(char* name, size_t namesize);
+extern int sethostname(const char *, size_t);
+extern int getdomainname(char *, size_t);
+extern int setdomainname(const char *, size_t);
+#endif /* MISSING */
+
/* Used to retry syscalls that can return EINTR. */
#define TEMP_FAILURE_RETRY(exp) ({ \
typeof (exp) _rc; \