Fix x86_64 build, clean up intermediate libraries.

The x86_64 build was failing because clone.S had a call to __thread_entry which
was being added to a different intermediate .a on the way to making libc.so,
and the linker couldn't guarantee statically that such a relocation would be
possible.

  ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against '__thread_entry' which may overflow at runtime; recompile with -fPIC

This patch addresses that by ensuring that the caller and callee end up in the
same intermediate .a. While I'm here, I've tried to clean up some of the mess
that led to this situation too. In particular, this removes libc/private/ from
the default include path (except for the DNS code), and splits out the DNS
code into its own library (since it's a weird special case of upstream NetBSD
code that's diverged so heavily it's unlikely ever to get back in sync).

There's more cleanup of the DNS situation possible, but this is definitely a
step in the right direction, and it's more than enough to get x86_64 building
cleanly.

Change-Id: I00425a7245b7a2573df16cc38798187d0729e7c4
diff --git a/libc/Android.mk b/libc/Android.mk
index 72a655c..20f190a 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -151,34 +151,38 @@
 	bionic/usleep.c \
 	bionic/utmp.c \
 	bionic/wcscoll.c \
-	netbsd/gethnamaddr.c \
-	netbsd/inet/nsap_addr.c \
-	netbsd/resolv/__dn_comp.c \
-	netbsd/resolv/__res_close.c \
-	netbsd/resolv/__res_send.c \
-	netbsd/resolv/herror.c \
-	netbsd/resolv/res_comp.c \
-	netbsd/resolv/res_data.c \
-	netbsd/resolv/res_debug.c \
-	netbsd/resolv/res_init.c \
-	netbsd/resolv/res_mkquery.c \
-	netbsd/resolv/res_query.c \
-	netbsd/resolv/res_send.c \
-	netbsd/resolv/res_state.c \
-	netbsd/resolv/res_cache.c \
-	netbsd/net/nsdispatch.c \
-	netbsd/net/getaddrinfo.c \
-	netbsd/net/getnameinfo.c \
-	netbsd/net/getservbyname.c \
-	netbsd/net/getservent.c \
-	netbsd/net/base64.c \
-	netbsd/net/getservbyport.c \
-	netbsd/nameser/ns_name.c \
-	netbsd/nameser/ns_parse.c \
-	netbsd/nameser/ns_ttl.c \
-	netbsd/nameser/ns_netint.c \
-	netbsd/nameser/ns_print.c \
-	netbsd/nameser/ns_samedomain.c \
+
+
+libc_dns_src_files += \
+    netbsd/gethnamaddr.c \
+    netbsd/inet/nsap_addr.c \
+    netbsd/nameser/ns_name.c \
+    netbsd/nameser/ns_netint.c \
+    netbsd/nameser/ns_parse.c \
+    netbsd/nameser/ns_print.c \
+    netbsd/nameser/ns_samedomain.c \
+    netbsd/nameser/ns_ttl.c \
+    netbsd/net/base64.c \
+    netbsd/net/getaddrinfo.c \
+    netbsd/net/getnameinfo.c \
+    netbsd/net/getservbyname.c \
+    netbsd/net/getservbyport.c \
+    netbsd/net/getservent.c \
+    netbsd/net/nsdispatch.c \
+    netbsd/resolv/__dn_comp.c \
+    netbsd/resolv/herror.c \
+    netbsd/resolv/res_cache.c \
+    netbsd/resolv/__res_close.c \
+    netbsd/resolv/res_comp.c \
+    netbsd/resolv/res_data.c \
+    netbsd/resolv/res_debug.c \
+    netbsd/resolv/res_init.c \
+    netbsd/resolv/res_mkquery.c \
+    netbsd/resolv/res_query.c \
+    netbsd/resolv/__res_send.c \
+    netbsd/resolv/res_send.c \
+    netbsd/resolv/res_state.c \
+
 
 # These are shared by all the 32-bit targets, but not the 64-bit ones.
 ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm mips x86))
@@ -254,6 +258,7 @@
     bionic/stubs.cpp \
     bionic/sysconf.cpp \
     bionic/tdestroy.cpp \
+    bionic/__thread_entry.cpp \
     bionic/tmpfile.cpp \
     bionic/wait.cpp \
     bionic/wchar.cpp \
@@ -504,10 +509,10 @@
 	upstream-freebsd/lib/libc/string/wmemcmp.c \
 
 libc_common_src_files += \
-	bionic/pthread-atfork.c \
-	bionic/pthread-rwlocks.c \
-	bionic/pthread-timers.c \
-	bionic/ptrace.c
+    bionic/pthread-atfork.c \
+    bionic/pthread-rwlocks.c \
+    bionic/pthread-timers.c \
+    bionic/ptrace.c \
 
 libc_static_common_src_files += \
     bionic/pthread.c \
@@ -549,8 +554,8 @@
     $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk
 include $(LOCAL_PATH)/arch-$(TARGET_ARCH)/$(TARGET_ARCH).mk
 
-libc_common_src_files += $(_LIBC_ARCH_COMMON_SRC_FILES)
-libc_common_src_files += $(_LIBC_ARCH_CPU_VARIANT_SRC_FILES)
+libc_bionic_src_files += $(_LIBC_ARCH_COMMON_SRC_FILES)
+libc_bionic_src_files += $(_LIBC_ARCH_CPU_VARIANT_SRC_FILES)
 libc_arch_static_src_files := $(_LIBC_ARCH_STATIC_SRC_FILES)
 libc_arch_dynamic_src_files := $(_LIBC_ARCH_DYNAMIC_SRC_FILES)
 libc_common_additional_dependencies += $(_LIBC_ARCH_ADDITIONAL_DEPENDENCIES)
@@ -560,9 +565,6 @@
 libc_common_cflags := \
     -DANDROID_CHANGES \
     -D_LIBC=1 \
-    -DINET6 \
-    -I$(LOCAL_PATH)/private \
-    -DPOSIX_MISTAKE \
     -Wall -Wextra \
 
 # Try to catch typical 32-bit assumptions that break with 64-bit pointers.
@@ -616,7 +618,8 @@
 # crtbrand.c needs <stdint.h> and a #define for the platform SDK version.
 libc_crt_target_cflags += \
     -I$(LOCAL_PATH)/include  \
-    -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
+    -I$(LOCAL_PATH)/arch-$(TARGET_ARCH)/include \
+    -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) \
 
 # Define some common conlyflags
 libc_common_conlyflags := \
@@ -634,12 +637,6 @@
 		$(LOCAL_PATH)/stdio   \
 		external/safe-iop/include
 
-# Needed to access private/__dso_handle.h from
-# crtbegin_xxx.S and crtend_xxx.S
-libc_crt_target_cflags += \
-    -I$(LOCAL_PATH)/private \
-    -I$(LOCAL_PATH)/arch-$(TARGET_ARCH)/include
-
 # Define the libc run-time (crt) support object files that must be built,
 # which are needed to build all other objects (shared/static libs and
 # executables)
@@ -809,6 +806,29 @@
 
 
 # ========================================================
+# libc_dns.a - modified NetBSD DNS code
+# ========================================================
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(libc_dns_src_files)
+LOCAL_CFLAGS := \
+    $(libc_common_cflags) \
+    -DINET6 \
+    -I$(LOCAL_PATH)/private \
+    -I$(LOCAL_PATH)/upstream-netbsd/libc/include # for NetBSD private headers
+
+LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
+LOCAL_CPPFLAGS := $(libc_common_cppflags)
+LOCAL_C_INCLUDES := $(libc_common_c_includes)
+LOCAL_MODULE := libc_dns
+LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
+LOCAL_SYSTEM_SHARED_LIBRARIES :=
+
+include $(BUILD_STATIC_LIBRARY)
+
+
+# ========================================================
 # libc_freebsd.a - upstream FreeBSD C library code
 # ========================================================
 #
@@ -845,6 +865,7 @@
 LOCAL_SRC_FILES := $(libc_upstream_netbsd_src_files)
 LOCAL_CFLAGS := \
     $(libc_common_cflags) \
+    -DPOSIX_MISTAKE \
     -I$(LOCAL_PATH)/upstream-netbsd \
     -I$(LOCAL_PATH)/upstream-netbsd/libc/include \
     -include upstream-netbsd/netbsd-compat.h
@@ -883,8 +904,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := $(libc_common_src_files)
-LOCAL_CFLAGS := $(libc_common_cflags) \
-    -I$(LOCAL_PATH)/upstream-netbsd/libc/include # for netbsd private headers
+LOCAL_CFLAGS := $(libc_common_cflags)
 LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
 LOCAL_CPPFLAGS := $(libc_common_cppflags)
 LOCAL_C_INCLUDES := $(libc_common_c_includes)
@@ -893,9 +913,11 @@
 LOCAL_WHOLE_STATIC_LIBRARIES := \
     libbionic_ssp \
     libc_bionic \
+    libc_dns \
     libc_freebsd \
     libc_netbsd \
-    libc_tzcode
+    libc_tzcode \
+
 LOCAL_SYSTEM_SHARED_LIBRARIES :=
 
 # TODO: split out the asflags.
diff --git a/libc/arch-arm/bionic/atexit_legacy.c b/libc/arch-arm/bionic/atexit_legacy.c
index f35c68d..2162c37 100644
--- a/libc/arch-arm/bionic/atexit_legacy.c
+++ b/libc/arch-arm/bionic/atexit_legacy.c
@@ -27,9 +27,10 @@
  */
 
 #include <sys/types.h>
-#include <private/libc_logging.h>
 #include <stdio.h>
 
+#include "private/libc_logging.h"
+
 /*
  * This source file should only be included by libc.so, its purpose is
  * to support legacy ARM binaries by exporting a publicly visible
diff --git a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
index efa9595..51f858e 100644
--- a/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
+++ b/libc/arch-arm/cortex-a15/bionic/__strcat_chk.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
     .syntax unified
 
diff --git a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
index cd91dfc..782792f 100644
--- a/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/cortex-a15/bionic/__strcpy_chk.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
     .syntax unified
 
diff --git a/libc/arch-arm/cortex-a15/bionic/memcpy.S b/libc/arch-arm/cortex-a15/bionic/memcpy.S
index a1ef6f5..dae39c3 100644
--- a/libc/arch-arm/cortex-a15/bionic/memcpy.S
+++ b/libc/arch-arm/cortex-a15/bionic/memcpy.S
@@ -56,7 +56,7 @@
 // Prototype: void *memcpy (void *dst, const void *src, size_t count).
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
         .text
         .syntax unified
diff --git a/libc/arch-arm/cortex-a15/bionic/memset.S b/libc/arch-arm/cortex-a15/bionic/memset.S
index 72e83cc..8775ee8 100644
--- a/libc/arch-arm/cortex-a15/bionic/memset.S
+++ b/libc/arch-arm/cortex-a15/bionic/memset.S
@@ -28,7 +28,7 @@
 
 #include <machine/cpu-features.h>
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
         /*
          * Optimized memset() for ARM.
diff --git a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
index daea34c..d6ae0f3 100644
--- a/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
+++ b/libc/arch-arm/cortex-a9/bionic/__strcat_chk.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
     .syntax unified
     .fpu    neon
diff --git a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
index d4e0c0a..55926c1 100644
--- a/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/cortex-a9/bionic/__strcpy_chk.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
     .syntax unified
     .fpu    neon
diff --git a/libc/arch-arm/cortex-a9/bionic/memcpy.S b/libc/arch-arm/cortex-a9/bionic/memcpy.S
index 9faea96..8904534 100644
--- a/libc/arch-arm/cortex-a9/bionic/memcpy.S
+++ b/libc/arch-arm/cortex-a9/bionic/memcpy.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
 /*
  * This code assumes it is running on a processor that supports all arm v7
diff --git a/libc/arch-arm/cortex-a9/bionic/memset.S b/libc/arch-arm/cortex-a9/bionic/memset.S
index 9609db9..6eb2b4a 100644
--- a/libc/arch-arm/cortex-a9/bionic/memset.S
+++ b/libc/arch-arm/cortex-a9/bionic/memset.S
@@ -28,7 +28,7 @@
 
 #include <machine/cpu-features.h>
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
 /*
  * This code assumes it is running on a processor that supports all arm v7
diff --git a/libc/arch-arm/generic/bionic/memcpy.S b/libc/arch-arm/generic/bionic/memcpy.S
index c5168d6..5d55aae 100644
--- a/libc/arch-arm/generic/bionic/memcpy.S
+++ b/libc/arch-arm/generic/bionic/memcpy.S
@@ -28,7 +28,7 @@
 
 #include <machine/cpu-features.h>
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
         /*
          * Optimized memcpy() for ARM.
diff --git a/libc/arch-arm/generic/bionic/memset.S b/libc/arch-arm/generic/bionic/memset.S
index 47dcedd..435d83c 100644
--- a/libc/arch-arm/generic/bionic/memset.S
+++ b/libc/arch-arm/generic/bionic/memset.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
         /*
          * Optimized memset() for ARM.
diff --git a/libc/arch-arm/krait/bionic/__strcat_chk.S b/libc/arch-arm/krait/bionic/__strcat_chk.S
index 00fd01e..7111540 100644
--- a/libc/arch-arm/krait/bionic/__strcat_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcat_chk.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
     .syntax unified
 
diff --git a/libc/arch-arm/krait/bionic/__strcpy_chk.S b/libc/arch-arm/krait/bionic/__strcpy_chk.S
index 3c802b5..f02a32d 100644
--- a/libc/arch-arm/krait/bionic/__strcpy_chk.S
+++ b/libc/arch-arm/krait/bionic/__strcpy_chk.S
@@ -27,7 +27,7 @@
  */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
     .syntax unified
 
diff --git a/libc/arch-arm/krait/bionic/memcpy.S b/libc/arch-arm/krait/bionic/memcpy.S
index d3278d2..44cc144 100644
--- a/libc/arch-arm/krait/bionic/memcpy.S
+++ b/libc/arch-arm/krait/bionic/memcpy.S
@@ -29,7 +29,7 @@
 /* Assumes neon instructions and a cache line size of 32 bytes. */
 
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
 /*
  * This code assumes it is running on a processor that supports all arm v7
diff --git a/libc/arch-arm/krait/bionic/memset.S b/libc/arch-arm/krait/bionic/memset.S
index 6595e1f..b5a9d78 100644
--- a/libc/arch-arm/krait/bionic/memset.S
+++ b/libc/arch-arm/krait/bionic/memset.S
@@ -28,7 +28,7 @@
 
 #include <machine/cpu-features.h>
 #include <machine/asm.h>
-#include "libc_events.h"
+#include "private/libc_events.h"
 
 /*
  * This code assumes it is running on a processor that supports all arm v7
diff --git a/libc/private/__dso_handle.h b/libc/arch-common/bionic/__dso_handle.h
similarity index 100%
rename from libc/private/__dso_handle.h
rename to libc/arch-common/bionic/__dso_handle.h
diff --git a/libc/private/__dso_handle_so.h b/libc/arch-common/bionic/__dso_handle_so.h
similarity index 100%
rename from libc/private/__dso_handle_so.h
rename to libc/arch-common/bionic/__dso_handle_so.h
diff --git a/libc/arch-common/bionic/crtbegin_so.c b/libc/arch-common/bionic/crtbegin_so.c
index bd70edf..641e45a 100644
--- a/libc/arch-common/bionic/crtbegin_so.c
+++ b/libc/arch-common/bionic/crtbegin_so.c
@@ -59,4 +59,3 @@
 #ifdef __i386__
 # include "../../arch-x86/bionic/__stack_chk_fail_local.h"
 #endif
-
diff --git a/libc/arch-mips/bionic/cacheflush.c b/libc/arch-mips/bionic/cacheflush.c
index 97e67d4..2b03eee 100644
--- a/libc/arch-mips/bionic/cacheflush.c
+++ b/libc/arch-mips/bionic/cacheflush.c
@@ -29,7 +29,7 @@
 #include <sys/cachectl.h>
 
 #ifdef DEBUG
-#include <private/libc_logging.h>
+#include "private/libc_logging.h"
 #define  XLOG(...) __libc_format_log(ANDROID_LOG_DEBUG,"libc-cacheflush",__VA_ARGS__)
 #endif
 
diff --git a/libc/arch-mips/bionic/crtbegin.c b/libc/arch-mips/bionic/crtbegin.c
index d3a3401..28e8817 100644
--- a/libc/arch-mips/bionic/crtbegin.c
+++ b/libc/arch-mips/bionic/crtbegin.c
@@ -90,5 +90,5 @@
 "       .set pop                    \n"
 );
 
-#include "__dso_handle.h"
+#include "../../arch-common/bionic/__dso_handle.h"
 #include "atexit.h"
diff --git a/libc/arch-mips/bionic/crtbegin_so.c b/libc/arch-mips/bionic/crtbegin_so.c
index 925dc8c..d664ce6 100644
--- a/libc/arch-mips/bionic/crtbegin_so.c
+++ b/libc/arch-mips/bionic/crtbegin_so.c
@@ -34,5 +34,5 @@
   __cxa_finalize(&__dso_handle);
 }
 
-#include "__dso_handle_so.h"
+#include "../../arch-common/bionic/__dso_handle_so.h"
 #include "atexit.h"
diff --git a/libc/bionic/__FD_chk.cpp b/libc/bionic/__FD_chk.cpp
index 23d3084..5c2338d 100644
--- a/libc/bionic/__FD_chk.cpp
+++ b/libc/bionic/__FD_chk.cpp
@@ -28,7 +28,7 @@
 
 #undef _FORTIFY_SOURCE
 #include <sys/select.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 extern "C" int __FD_ISSET_chk(int fd, fd_set* set, size_t set_size) {
   if (__predict_false(fd < 0)) {
diff --git a/libc/bionic/__errno.cpp b/libc/bionic/__errno.cpp
index 9caa618..c9c1605 100644
--- a/libc/bionic/__errno.cpp
+++ b/libc/bionic/__errno.cpp
@@ -27,9 +27,10 @@
  */
 
 #include <errno.h>
-#include <bionic_tls.h>
 #include <stdint.h>
 
+#include "private/bionic_tls.h"
+
 volatile int*  __errno() {
   return reinterpret_cast<int*>(&(__get_tls()[TLS_SLOT_ERRNO]));
 }
diff --git a/libc/bionic/__fgets_chk.cpp b/libc/bionic/__fgets_chk.cpp
index 7f6b067..fc903e4 100644
--- a/libc/bionic/__fgets_chk.cpp
+++ b/libc/bionic/__fgets_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * __fgets_chk. Called in place of fgets() when we know the
diff --git a/libc/bionic/__memcpy_chk.cpp b/libc/bionic/__memcpy_chk.cpp
index 2839795..9416e49 100644
--- a/libc/bionic/__memcpy_chk.cpp
+++ b/libc/bionic/__memcpy_chk.cpp
@@ -29,7 +29,7 @@
 #undef _FORTIFY_SOURCE
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __memcpy_chk.
diff --git a/libc/bionic/__memmove_chk.cpp b/libc/bionic/__memmove_chk.cpp
index b653968..b52f7c8 100644
--- a/libc/bionic/__memmove_chk.cpp
+++ b/libc/bionic/__memmove_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____memmove_chk.
diff --git a/libc/bionic/__memset_chk.cpp b/libc/bionic/__memset_chk.cpp
index 49a1548..72551f0 100644
--- a/libc/bionic/__memset_chk.cpp
+++ b/libc/bionic/__memset_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____memset_chk.
diff --git a/libc/bionic/__recvfrom_chk.cpp b/libc/bionic/__recvfrom_chk.cpp
index 0c042cc..00de1d9 100644
--- a/libc/bionic/__recvfrom_chk.cpp
+++ b/libc/bionic/__recvfrom_chk.cpp
@@ -30,7 +30,7 @@
 
 #include <stddef.h>
 #include <sys/socket.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 extern "C"
 ssize_t __recvfrom_chk(int socket, void* buf, size_t len, size_t buflen, unsigned int flags,
diff --git a/libc/bionic/__stack_chk_fail.cpp b/libc/bionic/__stack_chk_fail.cpp
index 8b9ed5e..6e052e3 100644
--- a/libc/bionic/__stack_chk_fail.cpp
+++ b/libc/bionic/__stack_chk_fail.cpp
@@ -28,8 +28,8 @@
 
 #include <stdlib.h>
 
-#include "bionic_ssp.h"
-#include "libc_logging.h"
+#include "private/bionic_ssp.h"
+#include "private/libc_logging.h"
 
 void __stack_chk_fail() {
   __libc_fatal("stack corruption detected");
diff --git a/libc/bionic/__strcat_chk.cpp b/libc/bionic/__strcat_chk.cpp
index 3dda43a..f15cb5c 100644
--- a/libc/bionic/__strcat_chk.cpp
+++ b/libc/bionic/__strcat_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____strcat_chk.
diff --git a/libc/bionic/__strchr_chk.cpp b/libc/bionic/__strchr_chk.cpp
index 3982d60..51d35d0 100644
--- a/libc/bionic/__strchr_chk.cpp
+++ b/libc/bionic/__strchr_chk.cpp
@@ -28,7 +28,7 @@
  */
 
 #include <string.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 extern "C" char* __strchr_chk(const char* p, int ch, size_t s_len) {
   for (;; ++p, s_len--) {
diff --git a/libc/bionic/__strcpy_chk.cpp b/libc/bionic/__strcpy_chk.cpp
index 41990f9..9b39627 100644
--- a/libc/bionic/__strcpy_chk.cpp
+++ b/libc/bionic/__strcpy_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____strcpy_chk.
diff --git a/libc/bionic/__strlcat_chk.cpp b/libc/bionic/__strlcat_chk.cpp
index 32573c2..783dd84 100644
--- a/libc/bionic/__strlcat_chk.cpp
+++ b/libc/bionic/__strlcat_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * __strlcat_chk. Called in place of strlcat() when we know the
diff --git a/libc/bionic/__strlcpy_chk.cpp b/libc/bionic/__strlcpy_chk.cpp
index 1e482e1..359e918 100644
--- a/libc/bionic/__strlcpy_chk.cpp
+++ b/libc/bionic/__strlcpy_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * __strlcpy_chk. Called in place of strlcpy() when we know the
diff --git a/libc/bionic/__strlen_chk.cpp b/libc/bionic/__strlen_chk.cpp
index 494f7bf..d4c5e43 100644
--- a/libc/bionic/__strlen_chk.cpp
+++ b/libc/bionic/__strlen_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __strlen_chk.
diff --git a/libc/bionic/__strncat_chk.cpp b/libc/bionic/__strncat_chk.cpp
index 296217e..cdb3c80 100644
--- a/libc/bionic/__strncat_chk.cpp
+++ b/libc/bionic/__strncat_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____strncat_chk.
diff --git a/libc/bionic/__strncpy_chk.cpp b/libc/bionic/__strncpy_chk.cpp
index 5e72c2c..d0e9013 100644
--- a/libc/bionic/__strncpy_chk.cpp
+++ b/libc/bionic/__strncpy_chk.cpp
@@ -28,7 +28,7 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____strncpy_chk.
diff --git a/libc/bionic/__strrchr_chk.cpp b/libc/bionic/__strrchr_chk.cpp
index e6daf8f..fe56c9a 100644
--- a/libc/bionic/__strrchr_chk.cpp
+++ b/libc/bionic/__strrchr_chk.cpp
@@ -29,7 +29,7 @@
  */
 
 #include <string.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 extern "C" char* __strrchr_chk(const char *p, int ch, size_t s_len)
 {
diff --git a/libc/bionic/__thread_entry.cpp b/libc/bionic/__thread_entry.cpp
new file mode 100644
index 0000000..8300a64
--- /dev/null
+++ b/libc/bionic/__thread_entry.cpp
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+
+#include <pthread.h>
+
+#include "pthread_internal.h"
+
+#include "private/bionic_tls.h"
+
+// This trampoline is called from the assembly _pthread_clone function.
+// Our 'tls' and __pthread_clone's 'child_stack' are one and the same, just growing in
+// opposite directions.
+extern "C" void __thread_entry(void* (*func)(void*), void* arg, void** tls) {
+  // Wait for our creating thread to release us. This lets it have time to
+  // notify gdb about this thread before we start doing anything.
+  // This also provides the memory barrier needed to ensure that all memory
+  // accesses previously made by the creating thread are visible to us.
+  pthread_mutex_t* start_mutex = (pthread_mutex_t*) &tls[TLS_SLOT_SELF];
+  pthread_mutex_lock(start_mutex);
+  pthread_mutex_destroy(start_mutex);
+
+  pthread_internal_t* thread = (pthread_internal_t*) tls[TLS_SLOT_THREAD_ID];
+  thread->tls = tls;
+  __init_tls(thread);
+
+  if ((thread->internal_flags & PTHREAD_INTERNAL_FLAG_THREAD_INIT_FAILED) != 0) {
+    pthread_exit(NULL);
+  }
+
+  void* result = func(arg);
+  pthread_exit(result);
+}
diff --git a/libc/bionic/__umask_chk.cpp b/libc/bionic/__umask_chk.cpp
index 8fe95a2..7d2a99a 100644
--- a/libc/bionic/__umask_chk.cpp
+++ b/libc/bionic/__umask_chk.cpp
@@ -30,9 +30,10 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
-#include "libc_logging.h"
 #include <stdlib.h>
 
+#include "private/libc_logging.h"
+
 /*
  * Runtime implementation of __umask_chk.
  *
diff --git a/libc/bionic/__vsnprintf_chk.cpp b/libc/bionic/__vsnprintf_chk.cpp
index 257cf5e..a03d12f 100644
--- a/libc/bionic/__vsnprintf_chk.cpp
+++ b/libc/bionic/__vsnprintf_chk.cpp
@@ -29,7 +29,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____vsnprintf_chk.
diff --git a/libc/bionic/__vsprintf_chk.cpp b/libc/bionic/__vsprintf_chk.cpp
index 290de9b..3810694 100644
--- a/libc/bionic/__vsprintf_chk.cpp
+++ b/libc/bionic/__vsprintf_chk.cpp
@@ -29,7 +29,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * Runtime implementation of __builtin____vsprintf_chk.
diff --git a/libc/bionic/arc4random.c b/libc/bionic/arc4random.c
index d70580a..eac4b0c 100644
--- a/libc/bionic/arc4random.c
+++ b/libc/bionic/arc4random.c
@@ -41,7 +41,7 @@
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/time.h>
-#include "thread_private.h"
+#include "private/thread_private.h"
 
 /* BIONIC-BEGIN */
 /* this lock should protect the global variables in this file */
diff --git a/libc/bionic/assert.cpp b/libc/bionic/assert.cpp
index 84024c7..ba67143 100644
--- a/libc/bionic/assert.cpp
+++ b/libc/bionic/assert.cpp
@@ -30,7 +30,7 @@
 
 #include <assert.h>
 
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 void __assert(const char* file, int line, const char* failed_expression) {
   __libc_fatal("%s:%d: assertion \"%s\" failed", file, line, failed_expression);
diff --git a/libc/private/cpuacct.h b/libc/bionic/cpuacct.h
similarity index 100%
rename from libc/private/cpuacct.h
rename to libc/bionic/cpuacct.h
diff --git a/libc/bionic/debug_stacktrace.cpp b/libc/bionic/debug_stacktrace.cpp
index 26d5c6a..5ddc00c 100644
--- a/libc/bionic/debug_stacktrace.cpp
+++ b/libc/bionic/debug_stacktrace.cpp
@@ -35,7 +35,7 @@
 #include <sys/types.h>
 
 #include "debug_mapinfo.h"
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /* depends how the system includes define this */
 #ifdef HAVE_UNWIND_CONTEXT_STRUCT
diff --git a/libc/bionic/fork.c b/libc/bionic/fork.c
index d83c535..d30b41b 100644
--- a/libc/bionic/fork.c
+++ b/libc/bionic/fork.c
@@ -27,9 +27,10 @@
  */
 #include <unistd.h>
 #include "pthread_internal.h"
-#include "bionic_pthread.h"
 #include "cpuacct.h"
 
+#include "private/bionic_pthread.h"
+
 extern int  __fork(void);
 
 int  fork(void)
diff --git a/libc/bionic/libc_init_common.cpp b/libc/bionic/libc_init_common.cpp
index 714d0bc..479cadf 100644
--- a/libc/bionic/libc_init_common.cpp
+++ b/libc/bionic/libc_init_common.cpp
@@ -28,8 +28,6 @@
 
 #include "libc_init_common.h"
 
-#include <asm/page.h>
-#include <bionic_tls.h>
 #include <elf.h>
 #include <errno.h>
 #include <stddef.h>
@@ -44,6 +42,7 @@
 #include "atexit.h"
 #include "private/bionic_auxv.h"
 #include "private/bionic_ssp.h"
+#include "private/bionic_tls.h"
 #include "private/KernelArgumentBlock.h"
 #include "pthread_internal.h"
 
@@ -57,7 +56,7 @@
 // Declared in <unistd.h>.
 char** environ;
 
-// Declared in <private/bionic_ssp.h>.
+// Declared in "private/bionic_ssp.h".
 uintptr_t __stack_chk_guard = 0;
 
 static size_t get_main_thread_stack_size() {
diff --git a/libc/bionic/libc_init_dynamic.cpp b/libc/bionic/libc_init_dynamic.cpp
index 4e1374e..61fb887 100644
--- a/libc/bionic/libc_init_dynamic.cpp
+++ b/libc/bionic/libc_init_dynamic.cpp
@@ -49,9 +49,10 @@
 #include <stdint.h>
 #include <elf.h>
 #include "atexit.h"
-#include "KernelArgumentBlock.h"
 #include "libc_init_common.h"
-#include <bionic_tls.h>
+
+#include "private/bionic_tls.h"
+#include "private/KernelArgumentBlock.h"
 
 extern "C" {
   extern void pthread_debug_init(void);
diff --git a/libc/bionic/libc_init_static.cpp b/libc/bionic/libc_init_static.cpp
index a60e414..1825167 100644
--- a/libc/bionic/libc_init_static.cpp
+++ b/libc/bionic/libc_init_static.cpp
@@ -47,11 +47,12 @@
 #include <sys/mman.h>
 
 #include "atexit.h"
-#include "bionic_tls.h"
-#include "KernelArgumentBlock.h"
 #include "libc_init_common.h"
 #include "pthread_internal.h"
 
+#include "private/bionic_tls.h"
+#include "private/KernelArgumentBlock.h"
+
 // Returns the address of the page containing address 'x'.
 #define PAGE_START(x)  ((x) & PAGE_MASK)
 
diff --git a/libc/bionic/libc_logging.cpp b/libc/bionic/libc_logging.cpp
index 635f8d1..c7eca8a 100644
--- a/libc/bionic/libc_logging.cpp
+++ b/libc/bionic/libc_logging.cpp
@@ -26,8 +26,8 @@
  * SUCH DAMAGE.
  */
 
-#include <../private/libc_logging.h> // Relative path so we can #include this .cpp file for testing.
-#include <../private/ScopedPthreadMutexLocker.h>
+#include "../private/libc_logging.h" // Relative path so we can #include this .cpp file for testing.
+#include "../private/ScopedPthreadMutexLocker.h"
 
 #include <assert.h>
 #include <errno.h>
diff --git a/libc/bionic/libgen.cpp b/libc/bionic/libgen.cpp
index f7181e7..d8df494 100644
--- a/libc/bionic/libgen.cpp
+++ b/libc/bionic/libgen.cpp
@@ -34,7 +34,7 @@
 #include <sys/cdefs.h>
 #include <sys/param.h>
 
-#include "ThreadLocalBuffer.h"
+#include "private/ThreadLocalBuffer.h"
 
 GLOBAL_INIT_THREAD_LOCAL_BUFFER(basename);
 GLOBAL_INIT_THREAD_LOCAL_BUFFER(dirname);
diff --git a/libc/bionic/malloc_debug_check.cpp b/libc/bionic/malloc_debug_check.cpp
index a5d49cb..7dd8e3c 100644
--- a/libc/bionic/malloc_debug_check.cpp
+++ b/libc/bionic/malloc_debug_check.cpp
@@ -48,9 +48,9 @@
 #include "debug_mapinfo.h"
 #include "debug_stacktrace.h"
 #include "dlmalloc.h"
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 #include "malloc_debug_common.h"
-#include "ScopedPthreadMutexLocker.h"
+#include "private/ScopedPthreadMutexLocker.h"
 
 /* libc.debug.malloc.backlog */
 extern unsigned int gMallocDebugBacklog;
diff --git a/libc/bionic/malloc_debug_common.cpp b/libc/bionic/malloc_debug_common.cpp
index e33405e..85f7791 100644
--- a/libc/bionic/malloc_debug_common.cpp
+++ b/libc/bionic/malloc_debug_common.cpp
@@ -47,7 +47,7 @@
 #include <unistd.h>
 
 #include "dlmalloc.h"
-#include "ScopedPthreadMutexLocker.h"
+#include "private/ScopedPthreadMutexLocker.h"
 
 /*
  * In a VM process, this is set to 1 after fork()ing out of zygote.
@@ -250,7 +250,7 @@
 #include <sys/system_properties.h>
 #include <dlfcn.h>
 #include <stdio.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /* Table for dispatching malloc calls, depending on environment. */
 static MallocDebug gMallocUse __attribute__((aligned(32))) = {
diff --git a/libc/bionic/malloc_debug_common.h b/libc/bionic/malloc_debug_common.h
index a3f9909..28be042 100644
--- a/libc/bionic/malloc_debug_common.h
+++ b/libc/bionic/malloc_debug_common.h
@@ -35,7 +35,7 @@
 
 #include <stdlib.h>
 
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 #define HASHTABLE_SIZE      1543
 #define BACKTRACE_SIZE      32
diff --git a/libc/bionic/malloc_debug_leak.cpp b/libc/bionic/malloc_debug_leak.cpp
index 45b45c2..3397def 100644
--- a/libc/bionic/malloc_debug_leak.cpp
+++ b/libc/bionic/malloc_debug_leak.cpp
@@ -47,9 +47,10 @@
 
 #include "debug_stacktrace.h"
 #include "dlmalloc.h"
-#include "libc_logging.h"
 #include "malloc_debug_common.h"
-#include "ScopedPthreadMutexLocker.h"
+
+#include "private/libc_logging.h"
+#include "private/ScopedPthreadMutexLocker.h"
 
 // This file should be included into the build only when
 // MALLOC_LEAK_CHECK, or MALLOC_QEMU_INSTRUMENT, or both
diff --git a/libc/bionic/malloc_debug_qemu.cpp b/libc/bionic/malloc_debug_qemu.cpp
index 4d00066..5a91daa 100644
--- a/libc/bionic/malloc_debug_qemu.cpp
+++ b/libc/bionic/malloc_debug_qemu.cpp
@@ -51,7 +51,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include "dlmalloc.h"
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 #include "malloc_debug_common.h"
 
 /* This file should be included into the build only when
diff --git a/libc/bionic/open.c b/libc/bionic/open.c
index 424573f..cde3029 100644
--- a/libc/bionic/open.c
+++ b/libc/bionic/open.c
@@ -29,7 +29,7 @@
 #include <fcntl.h>
 #include <stdarg.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 extern int  __open(const char*, int, int);
 
diff --git a/libc/bionic/openat.c b/libc/bionic/openat.c
index 2d09d17..b8c887e 100644
--- a/libc/bionic/openat.c
+++ b/libc/bionic/openat.c
@@ -29,7 +29,7 @@
 #include <fcntl.h>
 #include <stdarg.h>
 #include <stdlib.h>
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 extern int  __openat(int, const char*, int, int);
 
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index ab806c0..32812b4 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -34,12 +34,13 @@
 #include <sys/mman.h>
 #include <unistd.h>
 
-#include "bionic_atomic_inline.h"
-#include "bionic_futex.h"
-#include "bionic_pthread.h"
-#include "bionic_tls.h"
 #include "pthread_internal.h"
-#include "thread_private.h"
+
+#include "private/bionic_atomic_inline.h"
+#include "private/bionic_futex.h"
+#include "private/bionic_pthread.h"
+#include "private/bionic_tls.h"
+#include "private/thread_private.h"
 
 extern void pthread_debug_mutex_lock_check(pthread_mutex_t *mutex);
 extern void pthread_debug_mutex_unlock_check(pthread_mutex_t *mutex);
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index 9e06afc..8338ad5 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -52,8 +52,6 @@
 
 extern "C" int __set_tls(void* ptr);
 
-static const int kPthreadInitFailed = 1;
-
 static pthread_mutex_t gPthreadStackCreationLock = PTHREAD_MUTEX_INITIALIZER;
 
 static pthread_mutex_t gDebuggerNotificationLock = PTHREAD_MUTEX_INITIALIZER;
@@ -84,30 +82,6 @@
   }
 }
 
-// This trampoline is called from the assembly _pthread_clone function.
-// Our 'tls' and __pthread_clone's 'child_stack' are one and the same, just growing in
-// opposite directions.
-extern "C" void __thread_entry(void* (*func)(void*), void* arg, void** tls) {
-  // Wait for our creating thread to release us. This lets it have time to
-  // notify gdb about this thread before we start doing anything.
-  // This also provides the memory barrier needed to ensure that all memory
-  // accesses previously made by the creating thread are visible to us.
-  pthread_mutex_t* start_mutex = (pthread_mutex_t*) &tls[TLS_SLOT_SELF];
-  pthread_mutex_lock(start_mutex);
-  pthread_mutex_destroy(start_mutex);
-
-  pthread_internal_t* thread = (pthread_internal_t*) tls[TLS_SLOT_THREAD_ID];
-  thread->tls = tls;
-  __init_tls(thread);
-
-  if ((thread->internal_flags & kPthreadInitFailed) != 0) {
-    pthread_exit(NULL);
-  }
-
-  void* result = func(arg);
-  pthread_exit(result);
-}
-
 __LIBC_ABI_PRIVATE__
 int _init_thread(pthread_internal_t* thread, bool add_to_thread_list) {
   int error = 0;
@@ -240,7 +214,7 @@
   if (init_errno != 0) {
     // Mark the thread detached and let its __thread_entry run to
     // completion. (It'll just exit immediately, cleaning up its resources.)
-    thread->internal_flags |= kPthreadInitFailed;
+    thread->internal_flags |= PTHREAD_INTERNAL_FLAG_THREAD_INIT_FAILED;
     thread->attr.flags |= PTHREAD_ATTR_FLAG_DETACHED;
     return init_errno;
   }
diff --git a/libc/bionic/pthread_debug.cpp b/libc/bionic/pthread_debug.cpp
index 94c23de..79a193d 100644
--- a/libc/bionic/pthread_debug.cpp
+++ b/libc/bionic/pthread_debug.cpp
@@ -31,7 +31,6 @@
 #include <sys/system_properties.h>
 #include <sys/mman.h>
 
-//#include <dlfcn.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,10 +39,10 @@
 #include <unwind.h>
 #include <unistd.h>
 
-#include "bionic_tls.h"
+#include "private/bionic_tls.h"
 #include "debug_mapinfo.h"
 #include "debug_stacktrace.h"
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 /*
  * ===========================================================================
diff --git a/libc/bionic/pthread_getschedparam.cpp b/libc/bionic/pthread_getschedparam.cpp
index 03fa5f2..2cdc11a 100644
--- a/libc/bionic/pthread_getschedparam.cpp
+++ b/libc/bionic/pthread_getschedparam.cpp
@@ -28,7 +28,7 @@
 
 #include <errno.h>
 
-#include "ErrnoRestorer.h"
+#include "private/ErrnoRestorer.h"
 #include "pthread_accessor.h"
 
 int pthread_getschedparam(pthread_t t, int* policy, sched_param* param) {
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index 6fe2a98..6b009d4 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -77,6 +77,8 @@
 /* Has the thread already exited but not been joined? */
 #define PTHREAD_ATTR_FLAG_ZOMBIE        0x00000008
 
+#define PTHREAD_INTERNAL_FLAG_THREAD_INIT_FAILED 1
+
 /*
  * Traditionally we give threads a 1MiB stack. When we started
  * allocating per-thread alternate signal stacks to ease debugging of
diff --git a/libc/bionic/pthread_internals.cpp b/libc/bionic/pthread_internals.cpp
index 59c6e48..01ecd5f 100644
--- a/libc/bionic/pthread_internals.cpp
+++ b/libc/bionic/pthread_internals.cpp
@@ -28,8 +28,8 @@
 
 #include "pthread_internal.h"
 
-#include "bionic_tls.h"
-#include "ScopedPthreadMutexLocker.h"
+#include "private/bionic_tls.h"
+#include "private/ScopedPthreadMutexLocker.h"
 
 __LIBC_HIDDEN__ pthread_internal_t* gThreadList = NULL;
 __LIBC_HIDDEN__ pthread_mutex_t gThreadListLock = PTHREAD_MUTEX_INITIALIZER;
diff --git a/libc/bionic/pthread_key.cpp b/libc/bionic/pthread_key.cpp
index 706758b..440a715 100644
--- a/libc/bionic/pthread_key.cpp
+++ b/libc/bionic/pthread_key.cpp
@@ -28,7 +28,7 @@
 
 #include <pthread.h>
 
-#include "bionic_tls.h"
+#include "private/bionic_tls.h"
 #include "pthread_internal.h"
 
 /* A technical note regarding our thread-local-storage (TLS) implementation:
diff --git a/libc/bionic/pthread_kill.cpp b/libc/bionic/pthread_kill.cpp
index 54f71ee..163317e 100644
--- a/libc/bionic/pthread_kill.cpp
+++ b/libc/bionic/pthread_kill.cpp
@@ -29,7 +29,7 @@
 #include <errno.h>
 #include <unistd.h>
 
-#include "ErrnoRestorer.h"
+#include "private/ErrnoRestorer.h"
 #include "pthread_accessor.h"
 
 extern "C" int tgkill(int tgid, int tid, int sig);
diff --git a/libc/bionic/pthread_setschedparam.cpp b/libc/bionic/pthread_setschedparam.cpp
index c383cca..55ec791 100644
--- a/libc/bionic/pthread_setschedparam.cpp
+++ b/libc/bionic/pthread_setschedparam.cpp
@@ -28,7 +28,7 @@
 
 #include <errno.h>
 
-#include "ErrnoRestorer.h"
+#include "private/ErrnoRestorer.h"
 #include "pthread_accessor.h"
 
 int pthread_setschedparam(pthread_t t, int policy, struct sched_param const* param) {
diff --git a/libc/bionic/semaphore.c b/libc/bionic/semaphore.c
index 9bc8412..28fcb1b 100644
--- a/libc/bionic/semaphore.c
+++ b/libc/bionic/semaphore.c
@@ -30,10 +30,11 @@
 #include <sys/time.h>
 #include <sys/atomics.h>
 #include <time.h>
-#include <bionic_atomic_inline.h>
-#include <bionic_futex.h>
 #include <limits.h>
 
+#include "private/bionic_atomic_inline.h"
+#include "private/bionic_futex.h"
+
 /* In this implementation, a semaphore contains a
  * 31-bit signed value and a 1-bit 'shared' flag
  * (for process-sharing purpose).
diff --git a/libc/bionic/strerror.cpp b/libc/bionic/strerror.cpp
index a50c99f..d1518ff 100644
--- a/libc/bionic/strerror.cpp
+++ b/libc/bionic/strerror.cpp
@@ -27,7 +27,7 @@
  */
 
 #include <string.h>
-#include "ThreadLocalBuffer.h"
+#include "private/ThreadLocalBuffer.h"
 
 extern "C" const char* __strerror_lookup(int);
 
diff --git a/libc/bionic/strsignal.cpp b/libc/bionic/strsignal.cpp
index c549e74..9f0193a 100644
--- a/libc/bionic/strsignal.cpp
+++ b/libc/bionic/strsignal.cpp
@@ -27,7 +27,7 @@
  */
 
 #include <string.h>
-#include "ThreadLocalBuffer.h"
+#include "private/ThreadLocalBuffer.h"
 
 extern "C" const char* __strsignal_lookup(int);
 extern "C" const char* __strsignal(int, char*, size_t);
diff --git a/libc/bionic/sysconf.cpp b/libc/bionic/sysconf.cpp
index e945fbf..db808c2 100644
--- a/libc/bionic/sysconf.cpp
+++ b/libc/bionic/sysconf.cpp
@@ -26,8 +26,6 @@
  * SUCH DAMAGE.
  */
 
-#include <asm/page.h>
-#include <bionic_tls.h>
 #include <ctype.h>
 #include <dirent.h>
 #include <errno.h>
@@ -40,6 +38,7 @@
 #include <time.h>
 #include <unistd.h>
 
+#include "private/bionic_tls.h"
 #include "private/ScopedReaddir.h"
 
 /* seems to be the default on Linux, per the GLibc sources and my own digging */
diff --git a/libc/bionic/system_properties.c b/libc/bionic/system_properties.c
index fd56431..9fdb6f5 100644
--- a/libc/bionic/system_properties.c
+++ b/libc/bionic/system_properties.c
@@ -50,7 +50,8 @@
 #include <sys/_system_properties.h>
 
 #include <sys/atomics.h>
-#include <bionic_atomic_inline.h>
+
+#include "private/bionic_atomic_inline.h"
 
 #define ALIGN(x, a) (((x) + (a - 1)) & ~(a - 1))
 
diff --git a/libc/netbsd/resolv/res_cache.c b/libc/netbsd/resolv/res_cache.c
index 7e367ad..1836c80 100644
--- a/libc/netbsd/resolv/res_cache.c
+++ b/libc/netbsd/resolv/res_cache.c
@@ -171,7 +171,7 @@
 
 #undef XLOG
 #if DEBUG
-#  include "libc_logging.h"
+#  include "private/libc_logging.h"
 #  define XLOG(...)  __libc_format_log(ANDROID_LOG_DEBUG,"libc",__VA_ARGS__)
 
 #include <stdio.h>
diff --git a/libc/netbsd/resolv/res_send.c b/libc/netbsd/resolv/res_send.c
index 0bb5b6b..e78a11e 100644
--- a/libc/netbsd/resolv/res_send.c
+++ b/libc/netbsd/resolv/res_send.c
@@ -119,7 +119,7 @@
 #  include <resolv_cache.h>
 #endif
 
-#include "libc_logging.h"
+#include "private/libc_logging.h"
 
 #ifndef DE_CONST
 #define DE_CONST(c,v)   v = ((c) ? \
diff --git a/libc/netbsd/resolv/res_state.c b/libc/netbsd/resolv/res_state.c
index de82e1a..f5d01a1 100644
--- a/libc/netbsd/resolv/res_state.c
+++ b/libc/netbsd/resolv/res_state.c
@@ -42,7 +42,7 @@
 #define DEBUG 0
 
 #if DEBUG
-#  include "libc_logging.h"
+#  include "private/libc_logging.h"
 #  include <unistd.h>  /* for gettid() */
 #  define D(...) __libc_format_log(ANDROID_LOG_DEBUG,"libc", __VA_ARGS__)
 #else
diff --git a/libc/private/arpa_nameser.h b/libc/private/arpa_nameser.h
index 81195b5..421c3ee 100644
--- a/libc/private/arpa_nameser.h
+++ b/libc/private/arpa_nameser.h
@@ -567,7 +567,7 @@
 #endif
 
 #if 0
-#  include "libc_logging.h"
+#  include "private/libc_logging.h"
 #  define XLOG(...)  __libc_format_log(ANDROID_LOG_DEBUG,"libc",__VA_ARGS__)
 #else
 #define  XLOG(...)   do {} while (0)
diff --git a/libc/private/syscommon.h b/libc/private/syscommon.h
deleted file mode 100644
index 4290252..0000000
--- a/libc/private/syscommon.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * syscommon.h
- *
- * Common header file for system call stubs
- */
-
-#define __IN_SYS_COMMON
-#include <errno.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/syscall.h>
-
-#include <poll.h>
-#include <sched.h>
-#include <sys/dirent.h>
-#include <sys/klog.h>
-#include <sys/mman.h>
-#include <sys/resource.h>
-#include <sys/select.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/times.h>
-#include <sys/uio.h>
-#include <sys/utime.h>
-#include <sys/utsname.h>
-#include <sys/vfs.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#ifdef __i386__
-# include <sys/vm86.h>
-#endif
diff --git a/libc/stdio/findfp.c b/libc/stdio/findfp.c
index 863235b..943c90a 100644
--- a/libc/stdio/findfp.c
+++ b/libc/stdio/findfp.c
@@ -39,7 +39,7 @@
 #include <string.h>
 #include "local.h"
 #include "glue.h"
-#include "thread_private.h"
+#include "private/thread_private.h"
 
 int	__sdidinit;
 
diff --git a/libc/stdlib/atexit.c b/libc/stdlib/atexit.c
index 8f5bd2d..4e14434 100644
--- a/libc/stdlib/atexit.c
+++ b/libc/stdlib/atexit.c
@@ -35,7 +35,7 @@
 #include <string.h>
 #include <unistd.h>
 #include "atexit.h"
-#include "thread_private.h"
+#include "private/thread_private.h"
 
 int __atexit_invalid = 1;
 struct atexit *__atexit;
diff --git a/libc/private/ctype_private.h b/libc/stdlib/ctype_private.h
similarity index 100%
rename from libc/private/ctype_private.h
rename to libc/stdlib/ctype_private.h
diff --git a/libc/stdlib/exit.c b/libc/stdlib/exit.c
index 83fe3d2..923e42e 100644
--- a/libc/stdlib/exit.c
+++ b/libc/stdlib/exit.c
@@ -33,7 +33,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include "atexit.h"
-#include "thread_private.h"
+#include "private/thread_private.h"
 
 /*
  * This variable is zero until a process has created a thread.
diff --git a/libc/tzcode/strftime.c b/libc/tzcode/strftime.c
index 1b223e5..1164a13 100644
--- a/libc/tzcode/strftime.c
+++ b/libc/tzcode/strftime.c
@@ -38,7 +38,7 @@
 #include "locale.h"
 #include <ctype.h>
 #include <time64.h>
-#include <bionic_time.h>  /* for strftime_tz */
+#include "private/bionic_time.h"  /* for strftime_tz */
 
 /* struct lc_time_T is now defined as strftime_locale
  * in <time.h>
diff --git a/libc/upstream-netbsd/port_before.h b/libc/upstream-netbsd/port_before.h
index 9f77f79..5e06e52 100644
--- a/libc/upstream-netbsd/port_before.h
+++ b/libc/upstream-netbsd/port_before.h
@@ -19,7 +19,7 @@
 
 #include "namespace.h"
 #include <sys/cdefs.h>
-#include <arpa_nameser.h>
+#include "private/arpa_nameser.h"
 
 #define ISC_FORMAT_PRINTF(a,b) __printflike(a,b)
 #define ISC_SOCKLEN_T socklen_t
diff --git a/libc/private/rand48.h b/libc/upstream-netbsd/rand48.h
similarity index 100%
rename from libc/private/rand48.h
rename to libc/upstream-netbsd/rand48.h
diff --git a/libstdc++/src/one_time_construction.cpp b/libstdc++/src/one_time_construction.cpp
index 8ba18df..5574311 100644
--- a/libstdc++/src/one_time_construction.cpp
+++ b/libstdc++/src/one_time_construction.cpp
@@ -5,8 +5,9 @@
 #include <stddef.h>
 #include <sys/atomics.h>
 #include <endian.h>
-#include <private/bionic_futex.h>
-#include <private/bionic_atomic_inline.h>
+
+#include "private/bionic_atomic_inline.h"
+#include "private/bionic_futex.h"
 
 // This file contains C++ ABI support functions for one time
 // constructors as defined in the "Run-time ABI for the ARM Architecture"
diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp
index 3553af7..d234787 100644
--- a/linker/dlfcn.cpp
+++ b/linker/dlfcn.cpp
@@ -22,9 +22,9 @@
 #include <stdlib.h>
 
 #include <bionic/pthread_internal.h>
-#include <private/bionic_tls.h>
-#include <private/ScopedPthreadMutexLocker.h>
-#include <private/ThreadLocalBuffer.h>
+#include "private/bionic_tls.h"
+#include "private/ScopedPthreadMutexLocker.h"
+#include "private/ThreadLocalBuffer.h"
 
 /* This file hijacks the symbols stubbed out in libdl.so. */
 
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 8f613b1..cabbb99 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -40,9 +40,9 @@
 #include <unistd.h>
 
 // Private C library headers.
-#include <private/bionic_tls.h>
-#include <private/KernelArgumentBlock.h>
-#include <private/ScopedPthreadMutexLocker.h>
+#include "private/bionic_tls.h"
+#include "private/KernelArgumentBlock.h"
+#include "private/ScopedPthreadMutexLocker.h"
 
 #include "linker.h"
 #include "linker_debug.h"
diff --git a/linker/linker_environ.cpp b/linker/linker_environ.cpp
index edc659a..846624b 100644
--- a/linker/linker_environ.cpp
+++ b/linker/linker_environ.cpp
@@ -33,7 +33,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
-#include <private/KernelArgumentBlock.h>
+#include "private/KernelArgumentBlock.h"
 
 static char** _envp;
 static bool _AT_SECURE_value = true;