Merge "Do not run heapprofd_initialize twice concurrently."
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index f7c8fd7..98bede5 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -2,4 +2,3 @@
 notice = tools/update_notice.sh
 seccomp = tools/update_seccomp.sh
 syscalls = tools/update_syscalls.sh
-version_scripts = tools/update_version_scripts.sh
diff --git a/benchmarks/pthread_benchmark.cpp b/benchmarks/pthread_benchmark.cpp
index 09654c8..9a68a12 100644
--- a/benchmarks/pthread_benchmark.cpp
+++ b/benchmarks/pthread_benchmark.cpp
@@ -100,7 +100,7 @@
 struct PIMutex {
   pthread_mutex_t mutex;
 
-  PIMutex(int type) {
+  explicit PIMutex(int type) {
     pthread_mutexattr_t attr;
     pthread_mutexattr_init(&attr);
     pthread_mutexattr_settype(&attr, type);
diff --git a/libc/Android.bp b/libc/Android.bp
index 0098d07..964b64a 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -760,6 +760,7 @@
                 "arch-arm/generic/bionic/strcpy.S",
                 "arch-arm/generic/bionic/strlen.c",
 
+                "arch-arm/bionic/__aeabi_read_tp.S",
                 "arch-arm/bionic/atomics_arm.c",
                 "arch-arm/bionic/__bionic_clone.S",
                 "arch-arm/bionic/_exit_with_stack_teardown.S",
@@ -1198,6 +1199,7 @@
 cc_library_static {
     defaults: ["libc_defaults"],
     srcs: [
+        "bionic/bionic_elf_tls.cpp",
         "bionic/pthread_atfork.cpp",
         "bionic/pthread_attr.cpp",
         "bionic/pthread_barrier.cpp",
@@ -1429,7 +1431,12 @@
             srcs: ["arch-x86/dynamic_function_dispatch.cpp"],
         },
         arm: {
-            srcs: ["arch-arm/dynamic_function_dispatch.cpp"],
+            srcs: [
+                "arch-arm/dynamic_function_dispatch.cpp",
+
+                // Workaround for b/120254692.
+                "arch-arm/dynamic_function_wrapper.S",
+            ],
         },
     },
 
@@ -1571,12 +1578,11 @@
 
     arch: {
         arm: {
-            //TODO: This is to work around b/24465209. Remove after root cause is fixed
+            // TODO: This is to work around b/24465209. Remove after root cause is fixed.
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
 
-            // Don't re-export new/delete and friends, even if the compiler really wants to.
-            version_script: "libc.arm.map",
+            version_script: ":libc.arm.map",
 
             shared: {
                 srcs: [":libc_sources_shared_arm"],
@@ -1588,35 +1594,64 @@
             },
         },
         arm64: {
-            // Don't re-export new/delete and friends, even if the compiler really wants to.
-            version_script: "libc.arm64.map",
-        },
-        mips: {
-            // Don't re-export new/delete and friends, even if the compiler really wants to.
-            version_script: "libc.mips.map",
-        },
-        mips64: {
-            // Don't re-export new/delete and friends, even if the compiler really wants to.
-            version_script: "libc.mips64.map",
+            version_script: ":libc.arm64.map",
         },
         x86: {
-            //TODO: This is to work around b/24465209. Remove after root cause is fixed
+            // TODO: This is to work around b/24465209. Remove after root cause is fixed.
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
 
-            // Don't re-export new/delete and friends, even if the compiler really wants to.
-            version_script: "libc.x86.map",
+            version_script: ":libc.x86.map",
         },
         x86_64: {
-            // Don't re-export new/delete and friends, even if the compiler really wants to.
-            version_script: "libc.x86_64.map",
+            version_script: ":libc.x86_64.map",
         },
     },
+
+    stubs: {
+        symbol_file: "libc.map.txt",
+        versions: ["10000"],
+    },
+
+    symbol_ordering_file: "symbol_ordering",
+}
+
+genrule {
+    name: "libc.arm.map",
+    out: ["libc.arm.map"],
+    srcs: ["libc.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm $(in) $(out)",
+}
+
+genrule {
+    name: "libc.arm64.map",
+    out: ["libc.arm64.map"],
+    srcs: ["libc.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm64 $(in) $(out)",
+}
+
+genrule {
+    name: "libc.x86.map",
+    out: ["libc.x86.map"],
+    srcs: ["libc.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86 $(in) $(out)",
+}
+
+genrule {
+    name: "libc.x86_64.map",
+    out: ["libc.x86_64.map"],
+    srcs: ["libc.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86_64 $(in) $(out)",
 }
 
 // ========================================================
-// libstdc++.so + libstdc++.a
+// libstdc++.so and libstdc++.a.
 // ========================================================
+
 cc_library {
     defaults: ["libc_defaults"],
     include_dirs: ["bionic/libstdc++/include"],
@@ -1639,30 +1674,61 @@
     //TODO (dimitry): This is to work around b/24465209. Remove after root cause is fixed
     arch: {
         arm: {
+            // TODO: This is to work around b/24465209. Remove after root cause is fixed.
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
-            version_script: "libstdc++.arm.map",
+            version_script: ":libstdc++.arm.map",
         },
         arm64: {
-            version_script: "libstdc++.arm64.map",
-        },
-        mips: {
-            version_script: "libstdc++.mips.map",
-        },
-        mips64: {
-            version_script: "libstdc++.mips64.map",
+            version_script: ":libstdc++.arm64.map",
         },
         x86: {
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
-            version_script: "libstdc++.x86.map",
+            version_script: ":libstdc++.x86.map",
         },
         x86_64: {
-            version_script: "libstdc++.x86_64.map",
+            version_script: ":libstdc++.x86_64.map",
         },
     },
 }
 
+genrule {
+    name: "libstdc++.arm.map",
+    out: ["libstdc++.arm.map"],
+    srcs: ["libstdc++.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm $(in) $(out)",
+}
+
+genrule {
+    name: "libstdc++.arm64.map",
+    out: ["libstdc++.arm64.map"],
+    srcs: ["libstdc++.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm64 $(in) $(out)",
+}
+
+genrule {
+    name: "libstdc++.x86.map",
+    out: ["libstdc++.x86.map"],
+    srcs: ["libstdc++.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86 $(in) $(out)",
+}
+
+genrule {
+    name: "libstdc++.x86_64.map",
+    out: ["libstdc++.x86_64.map"],
+    srcs: ["libstdc++.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86_64 $(in) $(out)",
+}
+
+// ========================================================
+// crt object files.
+// ========================================================
+
 cc_defaults {
     name: "crt_defaults",
     defaults: ["linux_bionic_supported"],
@@ -1697,7 +1763,6 @@
     stl: "none",
 }
 
-// crt obj files
 cc_object {
     name: "crtbrand",
     // crtbrand.c needs <stdint.h> and a #define for the platform SDK version.
@@ -1829,6 +1894,10 @@
     defaults: ["crt_defaults"],
 }
 
+// ========================================================
+// NDK headers.
+// ========================================================
+
 versioned_ndk_headers {
     name: "common_libc",
     from: "include",
diff --git a/libc/NOTICE b/libc/NOTICE
index 40a5704..120c4fd 100644
--- a/libc/NOTICE
+++ b/libc/NOTICE
@@ -1068,6 +1068,34 @@
 
 -------------------------------------------------------------------
 
+Copyright (C) 2019 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.
+
+-------------------------------------------------------------------
+
 Copyright (c) 1980, 1983, 1988, 1993
    The Regents of the University of California.  All rights reserved.
 
diff --git a/libc/arch-arm/bionic/__aeabi_read_tp.S b/libc/arch-arm/bionic/__aeabi_read_tp.S
new file mode 100644
index 0000000..f6f9757
--- /dev/null
+++ b/libc/arch-arm/bionic/__aeabi_read_tp.S
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2018 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 <private/bionic_asm.h>
+
+// For arm32 and -mtp=soft, the compiler uses this function to read the thread
+// pointer for ELF TLS accesses. With -mtp=cp15, the compiler inlines the call
+// instead. GCC defaults to -mtp=auto, which inlines this function with
+// -march=armv7-a. Clang does not yet implement -mtp=auto, and instead defaults
+// to -mtp=soft.
+//  - https://bugs.llvm.org/show_bug.cgi?id=38394.
+//  - https://reviews.llvm.org/D34878?id=114573.
+//
+// This function must preserve every register except r0, ip, lr, and cpsr.
+//
+// See "Run-time ABI for the ARM Architecture"
+// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0043d/IHI0043D_rtabi.pdf
+//
+ENTRY(__aeabi_read_tp)
+  // __get_tls()
+  mrc p15, 0, r0, c13, c0, 3
+  bx lr
+END(__aeabi_read_tp)
diff --git a/libc/arch-arm/dynamic_function_dispatch.cpp b/libc/arch-arm/dynamic_function_dispatch.cpp
index 640f330..09fd8f3 100644
--- a/libc/arch-arm/dynamic_function_dispatch.cpp
+++ b/libc/arch-arm/dynamic_function_dispatch.cpp
@@ -89,11 +89,15 @@
     return r0;
 }
 
-#define DEFINE_IFUNC(name) \
-    name##_func name __attribute__((ifunc(#name "_resolver"))); \
+#define DEFINE_IFUNC_WITH_SUFFIX(name, suffix) \
+    name##_func name##suffix __attribute__((ifunc(#name "_resolver"))); \
     __attribute__((visibility("hidden"))) \
     name##_func* name##_resolver()
 
+#define DEFINE_IFUNC(name) DEFINE_IFUNC_WITH_SUFFIX(name, )
+
+#define DEFINE_INTERNAL_IFUNC(name) DEFINE_IFUNC_WITH_SUFFIX(name, _internal)
+
 #define DECLARE_FUNC(type, name) \
     __attribute__((visibility("hidden"))) \
     type name
@@ -287,7 +291,7 @@
 }
 
 typedef int strcmp_func(const char* __lhs, const char* __rhs);
-DEFINE_IFUNC(strcmp) {
+DEFINE_INTERNAL_IFUNC(strcmp) {
     switch(get_cpu_variant()) {
         case kCortexA9:
             RETURN_FUNC(strcmp_func, strcmp_a9);
@@ -301,7 +305,7 @@
 }
 
 typedef size_t strlen_func(const char* __s);
-DEFINE_IFUNC(strlen) {
+DEFINE_INTERNAL_IFUNC(strlen) {
     switch(get_cpu_variant()) {
         case kCortexA9:
             RETURN_FUNC(strlen_func, strlen_a9);
diff --git a/libc/arch-arm/dynamic_function_wrapper.S b/libc/arch-arm/dynamic_function_wrapper.S
new file mode 100644
index 0000000..1d2842b
--- /dev/null
+++ b/libc/arch-arm/dynamic_function_wrapper.S
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2018 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 <private/bionic_asm.h>
+
+#define FUNCTION_DELEGATE(name, impl) \
+ENTRY(name); \
+    b impl; \
+END(name)
+
+FUNCTION_DELEGATE(strcmp, strcmp_internal)
+FUNCTION_DELEGATE(strlen, strlen_internal)
diff --git a/libc/arch-arm/generic/bionic/memcmp.S b/libc/arch-arm/generic/bionic/memcmp.S
index e648720..9fd72e9 100644
--- a/libc/arch-arm/generic/bionic/memcmp.S
+++ b/libc/arch-arm/generic/bionic/memcmp.S
@@ -62,7 +62,7 @@
  * Neon optimization
  * Comparing 32 bytes at a time
  */
-#if defined(__ARM_NEON__) && defined(NEON_UNALIGNED_ACCESS)
+#if defined(__ARM_NEON__)
         subs        r2, r2, #32
         blo         3f
 
diff --git a/libc/bionic/__libc_init_main_thread.cpp b/libc/bionic/__libc_init_main_thread.cpp
index 5abdc07..2b90c90 100644
--- a/libc/bionic/__libc_init_main_thread.cpp
+++ b/libc/bionic/__libc_init_main_thread.cpp
@@ -28,9 +28,12 @@
 
 #include "libc_init_common.h"
 
+#include <async_safe/log.h>
+
 #include "private/KernelArgumentBlock.h"
 #include "private/bionic_arc4random.h"
 #include "private/bionic_defs.h"
+#include "private/bionic_elf_tls.h"
 #include "private/bionic_globals.h"
 #include "private/bionic_ssp.h"
 #include "pthread_internal.h"
@@ -43,11 +46,6 @@
 
 static pthread_internal_t main_thread;
 
-__attribute__((no_sanitize("hwaddress")))
-pthread_internal_t* __get_main_thread() {
-  return &main_thread;
-}
-
 // Setup for the main thread. For dynamic executables, this is called by the
 // linker _before_ libc is mapped in memory. This means that all writes to
 // globals from this function will apply to linker-private copies and will not
@@ -69,35 +67,28 @@
 // linker, the linker binary hasn't been relocated yet, so certain kinds of code
 // are hazardous, such as accessing non-hidden global variables.
 __BIONIC_WEAK_FOR_NATIVE_BRIDGE
-void __libc_init_main_thread_early(KernelArgumentBlock& args) {
+extern "C" void __libc_init_main_thread_early(const KernelArgumentBlock& args,
+                                              bionic_tcb* temp_tcb) {
   __libc_shared_globals()->auxv = args.auxv;
 #if defined(__i386__)
-  __libc_init_sysinfo();
+  __libc_init_sysinfo(); // uses AT_SYSINFO auxv entry
 #endif
-  __set_tls(main_thread.tls);
-  __init_tls(&main_thread);
+  __init_tcb(temp_tcb, &main_thread);
+  __set_tls(&temp_tcb->tls_slot(0));
   main_thread.tid = __getpid();
   main_thread.set_cached_pid(main_thread.tid);
 }
 
 // Finish initializing the main thread.
 __BIONIC_WEAK_FOR_NATIVE_BRIDGE
-void __libc_init_main_thread_late() {
-  main_thread.bionic_tls = __allocate_bionic_tls();
-  if (main_thread.bionic_tls == nullptr) {
-    // Avoid strerror because it might need bionic_tls.
-    async_safe_fatal("failed to allocate bionic_tls: error %d", errno);
-  }
+extern "C" void __libc_init_main_thread_late() {
+  __init_bionic_tls_ptrs(__get_bionic_tcb(), __allocate_temp_bionic_tls());
 
   // Tell the kernel to clear our tid field when we exit, so we're like any other pthread.
+  // For threads created by pthread_create, this setup happens during the clone syscall (i.e.
+  // CLONE_CHILD_CLEARTID).
   __set_tid_address(&main_thread.tid);
 
-  // We don't want to free the main thread's stack even when the main thread exits
-  // because things like environment variables with global scope live on it.
-  // We also can't free the pthread_internal_t itself, since it is a static variable.
-  // The main thread has no mmap allocated space for stack or pthread_internal_t.
-  main_thread.mmap_size = 0;
-
   pthread_attr_init(&main_thread.attr);
   // We don't want to explicitly set the main thread's scheduler attributes (http://b/68328561).
   pthread_attr_setinheritsched(&main_thread.attr, PTHREAD_INHERIT_SCHED);
@@ -110,9 +101,40 @@
   // before we initialize the TLS. Dynamic executables will initialize their copy of the global
   // stack protector from the one in the main thread's TLS.
   __libc_safe_arc4random_buf(&__stack_chk_guard, sizeof(__stack_chk_guard));
-  __init_tls_stack_guard(&main_thread);
+  __init_tcb_stack_guard(__get_bionic_tcb());
 
   __init_thread(&main_thread);
 
   __init_additional_stacks(&main_thread);
 }
+
+// Once all ELF modules are loaded, allocate the final copy of the main thread's
+// static TLS memory.
+__BIONIC_WEAK_FOR_NATIVE_BRIDGE
+extern "C" void __libc_init_main_thread_final() {
+  bionic_tcb* temp_tcb = __get_bionic_tcb();
+  bionic_tls* temp_tls = &__get_bionic_tls();
+
+  // Allocate the main thread's static TLS. (This mapping doesn't include a
+  // stack.)
+  ThreadMapping mapping = __allocate_thread_mapping(0, PTHREAD_GUARD_SIZE);
+  if (mapping.mmap_base == nullptr) {
+    async_safe_fatal("failed to mmap main thread static TLS: %s", strerror(errno));
+  }
+
+  const StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+  auto new_tcb = reinterpret_cast<bionic_tcb*>(mapping.static_tls + layout.offset_bionic_tcb());
+  auto new_tls = reinterpret_cast<bionic_tls*>(mapping.static_tls + layout.offset_bionic_tls());
+
+  new_tcb->copy_from_bootstrap(temp_tcb);
+  new_tls->copy_from_bootstrap(temp_tls);
+  __init_tcb(new_tcb, &main_thread);
+  __init_bionic_tls_ptrs(new_tcb, new_tls);
+
+  main_thread.mmap_base = mapping.mmap_base;
+  main_thread.mmap_size = mapping.mmap_size;
+
+  __set_tls(&new_tcb->tls_slot(0));
+
+  __free_temp_bionic_tls(temp_tls);
+}
diff --git a/libc/bionic/bionic_elf_tls.cpp b/libc/bionic/bionic_elf_tls.cpp
new file mode 100644
index 0000000..55c2c31
--- /dev/null
+++ b/libc/bionic/bionic_elf_tls.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2019 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 "private/bionic_elf_tls.h"
+
+#include <sys/param.h>
+
+#include "private/bionic_macros.h"
+#include "private/bionic_tls.h"
+
+void StaticTlsLayout::reserve_tcb() {
+  offset_bionic_tcb_ = reserve_type<bionic_tcb>();
+}
+
+void StaticTlsLayout::reserve_bionic_tls() {
+  offset_bionic_tls_ = reserve_type<bionic_tls>();
+}
+
+void StaticTlsLayout::finish_layout() {
+  // Round the offset up to the alignment.
+  offset_ = round_up_with_overflow_check(offset_, alignment_);
+}
+
+// The size is not required to be a multiple of the alignment. The alignment
+// must be a positive power-of-two.
+size_t StaticTlsLayout::reserve(size_t size, size_t alignment) {
+  offset_ = round_up_with_overflow_check(offset_, alignment);
+  const size_t result = offset_;
+  if (__builtin_add_overflow(offset_, size, &offset_)) overflowed_ = true;
+  alignment_ = MAX(alignment_, alignment);
+  return result;
+}
+
+size_t StaticTlsLayout::round_up_with_overflow_check(size_t value, size_t alignment) {
+  const size_t old_value = value;
+  value = __BIONIC_ALIGN(value, alignment);
+  if (value < old_value) overflowed_ = true;
+  return value;
+}
diff --git a/libc/bionic/icu.cpp b/libc/bionic/icu.cpp
index c09c9ea..41a0729 100644
--- a/libc/bionic/icu.cpp
+++ b/libc/bionic/icu.cpp
@@ -58,7 +58,12 @@
 
 static bool __find_icu() {
   dirent** namelist = nullptr;
-  int n = scandir("/system/usr/icu", &namelist, &__icu_dat_file_filter, alphasort);
+  int n = scandir("/apex/com.android.runtime/etc/icu", &namelist, &__icu_dat_file_filter,
+                  alphasort);
+  if (n < 0) {
+    async_safe_write_log(ANDROID_LOG_ERROR, "bionic-icu", "couldn't find ICU folder");
+    return false;
+  }
   int max_version = -1;
   while (n--) {
     // We prefer the latest version available.
diff --git a/libc/bionic/libc_init_static.cpp b/libc/bionic/libc_init_static.cpp
index 289b4a3..68650ed 100644
--- a/libc/bionic/libc_init_static.cpp
+++ b/libc/bionic/libc_init_static.cpp
@@ -39,6 +39,7 @@
 #include "libc_init_common.h"
 #include "pthread_internal.h"
 
+#include "private/bionic_elf_tls.h"
 #include "private/bionic_globals.h"
 #include "private/bionic_macros.h"
 #include "private/bionic_page.h"
@@ -82,6 +83,13 @@
   }
 }
 
+static void layout_static_tls() {
+  StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+  layout.reserve_bionic_tls();
+  layout.reserve_tcb();
+  layout.finish_layout();
+}
+
 // The program startup function __libc_init() defined here is
 // used for static executables only (i.e. those that don't depend
 // on shared libraries). It is called from arch-$ARCH/bionic/crtbegin_static.S
@@ -92,16 +100,19 @@
 __noreturn static void __real_libc_init(void *raw_args,
                                         void (*onexit)(void) __unused,
                                         int (*slingshot)(int, char**, char**),
-                                        structors_array_t const * const structors) {
+                                        structors_array_t const * const structors,
+                                        bionic_tcb* temp_tcb) {
   BIONIC_STOP_UNWIND;
 
   // Initialize TLS early so system calls and errno work.
   KernelArgumentBlock args(raw_args);
-  __libc_init_main_thread_early(args);
+  __libc_init_main_thread_early(args, temp_tcb);
   __libc_init_main_thread_late();
   __libc_init_globals();
   __libc_shared_globals()->init_progname = args.argv[0];
   __libc_init_AT_SECURE(args.envp);
+  layout_static_tls();
+  __libc_init_main_thread_final();
   __libc_init_common();
 
   apply_gnu_relro();
@@ -129,16 +140,16 @@
                             void (*onexit)(void) __unused,
                             int (*slingshot)(int, char**, char**),
                             structors_array_t const * const structors) {
+  bionic_tcb temp_tcb = {};
 #if __has_feature(hwaddress_sanitizer)
   // Install main thread TLS early. It will be initialized later in __libc_init_main_thread. For now
-  // all we need is access to TLS_SLOT_TSAN.
-  pthread_internal_t* main_thread = __get_main_thread();
-  __set_tls(main_thread->tls);
-  // Initialize HWASan. This sets up TLS_SLOT_TSAN, among other things.
+  // all we need is access to TLS_SLOT_SANITIZER.
+  __set_tls(&temp_tcb.tls_slot(0));
+  // Initialize HWASan. This sets up TLS_SLOT_SANITIZER, among other things.
   __hwasan_init();
   // We are ready to run HWASan-instrumented code, proceed with libc initialization...
 #endif
-  __real_libc_init(raw_args, onexit, slingshot, structors);
+  __real_libc_init(raw_args, onexit, slingshot, structors, &temp_tcb);
 }
 
 static int g_target_sdk_version{__ANDROID_API__};
@@ -152,8 +163,6 @@
 }
 
 __LIBC_HIDDEN__ libc_shared_globals* __libc_shared_globals() {
-  static libc_shared_globals globals = {
-    .abort_msg_lock = PTHREAD_MUTEX_INITIALIZER,
-  };
+  static libc_shared_globals globals;
   return &globals;
 }
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index 8e8d180..8676a45 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -41,6 +41,7 @@
 
 #include "private/bionic_constants.h"
 #include "private/bionic_defs.h"
+#include "private/bionic_globals.h"
 #include "private/bionic_macros.h"
 #include "private/bionic_ssp.h"
 #include "private/bionic_tls.h"
@@ -54,42 +55,43 @@
 
 // This code is used both by each new pthread and the code that initializes the main thread.
 __attribute__((no_stack_protector))
-void __init_tls(pthread_internal_t* thread) {
-  // Slot 0 must point to itself. The x86 Linux kernel reads the TLS from %fs:0.
-  thread->tls[TLS_SLOT_SELF] = thread->tls;
-  thread->tls[TLS_SLOT_THREAD_ID] = thread;
+void __init_tcb(bionic_tcb* tcb, pthread_internal_t* thread) {
+#ifdef TLS_SLOT_SELF
+  // On x86, slot 0 must point to itself so code can read the thread pointer by
+  // loading %fs:0 or %gs:0.
+  tcb->tls_slot(TLS_SLOT_SELF) = &tcb->tls_slot(TLS_SLOT_SELF);
+#endif
+  tcb->tls_slot(TLS_SLOT_THREAD_ID) = thread;
 }
 
 __attribute__((no_stack_protector))
-void __init_tls_stack_guard(pthread_internal_t* thread) {
+void __init_tcb_stack_guard(bionic_tcb* tcb) {
   // GCC looks in the TLS for the stack guard on x86, so copy it there from our global.
-  thread->tls[TLS_SLOT_STACK_GUARD] = reinterpret_cast<void*>(__stack_chk_guard);
+  tcb->tls_slot(TLS_SLOT_STACK_GUARD) = reinterpret_cast<void*>(__stack_chk_guard);
 }
 
-bionic_tls* __allocate_bionic_tls() {
-  // Add a guard before and after.
-  size_t allocation_size = BIONIC_TLS_SIZE + (2 * PTHREAD_GUARD_SIZE);
-  void* allocation = mmap(nullptr, allocation_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+void __init_bionic_tls_ptrs(bionic_tcb* tcb, bionic_tls* tls) {
+  tcb->thread()->bionic_tls = tls;
+  tcb->tls_slot(TLS_SLOT_BIONIC_TLS) = tls;
+}
+
+// Allocate a temporary bionic_tls that the dynamic linker's main thread can
+// use while it's loading the initial set of ELF modules.
+bionic_tls* __allocate_temp_bionic_tls() {
+  size_t allocation_size = __BIONIC_ALIGN(sizeof(bionic_tls), PAGE_SIZE);
+  void* allocation = mmap(nullptr, allocation_size,
+                          PROT_READ | PROT_WRITE,
+                          MAP_PRIVATE | MAP_ANONYMOUS,
+                          -1, 0);
   if (allocation == MAP_FAILED) {
-    async_safe_format_log(ANDROID_LOG_WARN, "libc",
-                          "pthread_create failed: couldn't allocate TLS: %s", strerror(errno));
-    return nullptr;
+    // Avoid strerror because it might need bionic_tls.
+    async_safe_fatal("failed to allocate bionic_tls: error %d", errno);
   }
+  return static_cast<bionic_tls*>(allocation);
+}
 
-  prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, allocation, allocation_size, "bionic TLS guard");
-
-  // Carve out the writable TLS section.
-  bionic_tls* result = reinterpret_cast<bionic_tls*>(static_cast<char*>(allocation) +
-                                                     PTHREAD_GUARD_SIZE);
-  if (mprotect(result, BIONIC_TLS_SIZE, PROT_READ | PROT_WRITE) != 0) {
-    async_safe_format_log(ANDROID_LOG_WARN, "libc",
-                          "pthread_create failed: couldn't mprotect TLS: %s", strerror(errno));
-    munmap(allocation, allocation_size);
-    return nullptr;
-  }
-
-  prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, result, BIONIC_TLS_SIZE, "bionic TLS");
-  return result;
+void __free_temp_bionic_tls(bionic_tls* tls) {
+  munmap(tls, __BIONIC_ALIGN(sizeof(bionic_tls), PAGE_SIZE));
 }
 
 static void __init_alternate_signal_stack(pthread_internal_t* thread) {
@@ -111,7 +113,6 @@
     // We can only use const static allocated string for mapped region name, as Android kernel
     // uses the string pointer directly when dumping /proc/pid/maps.
     prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, ss.ss_sp, ss.ss_size, "thread signal stack");
-    prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, stack_base, PTHREAD_GUARD_SIZE, "thread signal stack guard");
   }
 }
 
@@ -192,84 +193,112 @@
   return 0;
 }
 
-static void* __create_thread_mapped_space(size_t mmap_size, size_t stack_guard_size) {
-  // Create a new private anonymous map.
-  int prot = PROT_READ | PROT_WRITE;
-  int flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE;
-  void* space = mmap(nullptr, mmap_size, prot, flags, -1, 0);
+
+// Allocate a thread's primary mapping. This mapping includes static TLS and
+// optionally a stack. Static TLS includes ELF TLS segments and the bionic_tls
+// struct.
+//
+// The stack_guard_size must be a multiple of the PAGE_SIZE.
+ThreadMapping __allocate_thread_mapping(size_t stack_size, size_t stack_guard_size) {
+  const StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+
+  // Allocate in order: stack guard, stack, static TLS, guard page.
+  size_t mmap_size;
+  if (__builtin_add_overflow(stack_size, stack_guard_size, &mmap_size)) return {};
+  if (__builtin_add_overflow(mmap_size, layout.size(), &mmap_size)) return {};
+  if (__builtin_add_overflow(mmap_size, PTHREAD_GUARD_SIZE, &mmap_size)) return {};
+
+  // Align the result to a page size.
+  const size_t unaligned_size = mmap_size;
+  mmap_size = __BIONIC_ALIGN(mmap_size, PAGE_SIZE);
+  if (mmap_size < unaligned_size) return {};
+
+  // Create a new private anonymous map. Make the entire mapping PROT_NONE, then carve out a
+  // read+write area in the middle.
+  const int flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE;
+  char* const space = static_cast<char*>(mmap(nullptr, mmap_size, PROT_NONE, flags, -1, 0));
   if (space == MAP_FAILED) {
     async_safe_format_log(ANDROID_LOG_WARN,
-                      "libc",
-                      "pthread_create failed: couldn't allocate %zu-bytes mapped space: %s",
-                      mmap_size, strerror(errno));
-    return nullptr;
+                          "libc",
+                          "pthread_create failed: couldn't allocate %zu-bytes mapped space: %s",
+                          mmap_size, strerror(errno));
+    return {};
   }
-
-  // Stack is at the lower end of mapped space, stack guard region is at the lower end of stack.
-  // Set the stack guard region to PROT_NONE, so we can detect thread stack overflow.
-  if (mprotect(space, stack_guard_size, PROT_NONE) == -1) {
+  const size_t writable_size = mmap_size - stack_guard_size - PTHREAD_GUARD_SIZE;
+  if (mprotect(space + stack_guard_size,
+               writable_size,
+               PROT_READ | PROT_WRITE) != 0) {
     async_safe_format_log(ANDROID_LOG_WARN, "libc",
-                          "pthread_create failed: couldn't mprotect PROT_NONE %zu-byte stack guard region: %s",
-                          stack_guard_size, strerror(errno));
+                          "pthread_create failed: couldn't mprotect R+W %zu-byte thread mapping region: %s",
+                          writable_size, strerror(errno));
     munmap(space, mmap_size);
-    return nullptr;
+    return {};
   }
-  prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, space, stack_guard_size, "thread stack guard");
 
-  return space;
+  ThreadMapping result = {};
+  result.mmap_base = space;
+  result.mmap_size = mmap_size;
+  result.static_tls = space + mmap_size - PTHREAD_GUARD_SIZE - layout.size();
+  result.stack_base = space;
+  result.stack_top = result.static_tls;
+  return result;
 }
 
-static int __allocate_thread(pthread_attr_t* attr, pthread_internal_t** threadp, void** child_stack) {
-  size_t mmap_size;
-  uint8_t* stack_top;
+static int __allocate_thread(pthread_attr_t* attr, bionic_tcb** tcbp, void** child_stack) {
+  ThreadMapping mapping;
+  char* stack_top;
+  bool stack_clean = false;
 
   if (attr->stack_base == nullptr) {
     // The caller didn't provide a stack, so allocate one.
-    // Make sure the stack size and guard size are multiples of PAGE_SIZE.
-    if (__builtin_add_overflow(attr->stack_size, attr->guard_size, &mmap_size)) return EAGAIN;
-    if (__builtin_add_overflow(mmap_size, sizeof(pthread_internal_t), &mmap_size)) return EAGAIN;
-    mmap_size = __BIONIC_ALIGN(mmap_size, PAGE_SIZE);
+
+    // Make sure the guard size is a multiple of PAGE_SIZE.
+    const size_t unaligned_guard_size = attr->guard_size;
     attr->guard_size = __BIONIC_ALIGN(attr->guard_size, PAGE_SIZE);
-    attr->stack_base = __create_thread_mapped_space(mmap_size, attr->guard_size);
-    if (attr->stack_base == nullptr) {
-      return EAGAIN;
-    }
-    stack_top = reinterpret_cast<uint8_t*>(attr->stack_base) + mmap_size;
+    if (attr->guard_size < unaligned_guard_size) return EAGAIN;
+
+    mapping = __allocate_thread_mapping(attr->stack_size, attr->guard_size);
+    if (mapping.mmap_base == nullptr) return EAGAIN;
+
+    stack_top = mapping.stack_top;
+    attr->stack_base = mapping.stack_base;
+    stack_clean = true;
   } else {
-    // Remember the mmap size is zero and we don't need to free it.
-    mmap_size = 0;
-    stack_top = reinterpret_cast<uint8_t*>(attr->stack_base) + attr->stack_size;
+    mapping = __allocate_thread_mapping(0, PTHREAD_GUARD_SIZE);
+    if (mapping.mmap_base == nullptr) return EAGAIN;
+
+    stack_top = static_cast<char*>(attr->stack_base) + attr->stack_size;
   }
 
-  // Mapped space(or user allocated stack) is used for:
-  //   pthread_internal_t
-  //   thread stack (including guard)
+  // Carve out space from the stack for the thread's pthread_internal_t. This
+  // memory isn't counted in pthread_attr_getstacksize.
 
   // To safely access the pthread_internal_t and thread stack, we need to find a 16-byte aligned boundary.
-  stack_top = reinterpret_cast<uint8_t*>(
-                (reinterpret_cast<uintptr_t>(stack_top) - sizeof(pthread_internal_t)) & ~0xf);
+  stack_top = align_down(stack_top - sizeof(pthread_internal_t), 16);
 
   pthread_internal_t* thread = reinterpret_cast<pthread_internal_t*>(stack_top);
-  if (mmap_size == 0) {
+  if (!stack_clean) {
     // If thread was not allocated by mmap(), it may not have been cleared to zero.
     // So assume the worst and zero it.
     memset(thread, 0, sizeof(pthread_internal_t));
   }
-  attr->stack_size = stack_top - reinterpret_cast<uint8_t*>(attr->stack_base);
 
-  thread->mmap_size = mmap_size;
+  // Locate static TLS structures within the mapped region.
+  const StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+  auto tcb = reinterpret_cast<bionic_tcb*>(mapping.static_tls + layout.offset_bionic_tcb());
+  auto tls = reinterpret_cast<bionic_tls*>(mapping.static_tls + layout.offset_bionic_tls());
+
+  // (Re)initialize TLS pointers.
+  __init_tcb(tcb, thread);
+  __init_tcb_stack_guard(tcb);
+  __init_bionic_tls_ptrs(tcb, tls);
+
+  attr->stack_size = stack_top - static_cast<char*>(attr->stack_base);
   thread->attr = *attr;
+  thread->mmap_base = mapping.mmap_base;
+  thread->mmap_size = mapping.mmap_size;
 
-  thread->bionic_tls = __allocate_bionic_tls();
-  if (thread->bionic_tls == nullptr) {
-    if (thread->mmap_size != 0) munmap(thread->attr.stack_base, thread->mmap_size);
-    return EAGAIN;
-  }
-
-  __init_tls(thread);
-  __init_tls_stack_guard(thread);
-
-  *threadp = thread;
+  *tcbp = tcb;
   *child_stack = stack_top;
   return 0;
 }
@@ -315,13 +344,15 @@
     attr = nullptr; // Prevent misuse below.
   }
 
-  pthread_internal_t* thread = nullptr;
+  bionic_tcb* tcb = nullptr;
   void* child_stack = nullptr;
-  int result = __allocate_thread(&thread_attr, &thread, &child_stack);
+  int result = __allocate_thread(&thread_attr, &tcb, &child_stack);
   if (result != 0) {
     return result;
   }
 
+  pthread_internal_t* thread = tcb->thread();
+
   // Create a lock for the thread to wait on once it starts so we can keep
   // it from doing anything until after we notify the debugger about it
   //
@@ -338,7 +369,7 @@
 
   int flags = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM |
       CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID;
-  void* tls = reinterpret_cast<void*>(thread->tls);
+  void* tls = &tcb->tls_slot(0);
 #if defined(__i386__)
   // On x86 (but not x86-64), CLONE_SETTLS takes a pointer to a struct user_desc rather than
   // a pointer to the TLS itself.
@@ -354,7 +385,7 @@
     // reminder that you can't rewrite this function to use a ScopedPthreadMutexLocker.
     thread->startup_handshake_lock.unlock();
     if (thread->mmap_size != 0) {
-      munmap(thread->attr.stack_base, thread->mmap_size);
+      munmap(thread->mmap_base, thread->mmap_size);
     }
     async_safe_format_log(ANDROID_LOG_WARN, "libc", "pthread_create failed: clone failed: %s",
                           strerror(clone_errno));
diff --git a/libc/bionic/pthread_exit.cpp b/libc/bionic/pthread_exit.cpp
index 2d4d6cf..84ea2e6 100644
--- a/libc/bionic/pthread_exit.cpp
+++ b/libc/bionic/pthread_exit.cpp
@@ -65,12 +65,6 @@
   }
 }
 
-static void __pthread_unmap_tls(pthread_internal_t* thread) {
-  // Unmap the bionic TLS, including guard pages.
-  void* allocation = reinterpret_cast<char*>(thread->bionic_tls) - PTHREAD_GUARD_SIZE;
-  munmap(allocation, BIONIC_TLS_SIZE + 2 * PTHREAD_GUARD_SIZE);
-}
-
 __BIONIC_WEAK_FOR_NATIVE_BRIDGE
 void pthread_exit(void* return_value) {
   // Call dtors for thread_local objects first.
@@ -131,15 +125,13 @@
       // We don't want to take a signal after we've unmapped the stack.
       // That's one last thing we can do before dropping to assembler.
       ScopedSignalBlocker ssb;
-      __pthread_unmap_tls(thread);
       __hwasan_thread_exit();
-      _exit_with_stack_teardown(thread->attr.stack_base, thread->mmap_size);
+      _exit_with_stack_teardown(thread->mmap_base, thread->mmap_size);
     }
   }
 
   // No need to free mapped space. Either there was no space mapped, or it is left for
   // the pthread_join caller to clean up.
-  __pthread_unmap_tls(thread);
   __hwasan_thread_exit();
   __exit(0);
 }
diff --git a/libc/bionic/pthread_internal.cpp b/libc/bionic/pthread_internal.cpp
index 2b7a99a..870a526 100644
--- a/libc/bionic/pthread_internal.cpp
+++ b/libc/bionic/pthread_internal.cpp
@@ -43,7 +43,7 @@
 
 template <bool write> class ScopedRWLock {
  public:
-  ScopedRWLock(pthread_rwlock_t* rwlock) : rwlock_(rwlock) {
+  explicit ScopedRWLock(pthread_rwlock_t* rwlock) : rwlock_(rwlock) {
     (write ? pthread_rwlock_wrlock : pthread_rwlock_rdlock)(rwlock_);
   }
 
@@ -88,7 +88,7 @@
 static void __pthread_internal_free(pthread_internal_t* thread) {
   if (thread->mmap_size != 0) {
     // Free mapped space, including thread stack and pthread_internal_t.
-    munmap(thread->attr.stack_base, thread->mmap_size);
+    munmap(thread->mmap_base, thread->mmap_size);
   }
 }
 
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index 4c13dcb..27ab3df 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -52,12 +52,6 @@
 #define PTHREAD_ATTR_FLAG_INHERIT 0x00000004
 #define PTHREAD_ATTR_FLAG_EXPLICIT 0x00000008
 
-class pthread_key_data_t {
- public:
-  uintptr_t seq; // Use uintptr_t just for alignment, as we use pointer below.
-  void* data;
-};
-
 enum ThreadJoinState {
   THREAD_NOT_JOINED,
   THREAD_EXITED_NOT_JOINED,
@@ -131,6 +125,7 @@
 
   Lock startup_handshake_lock;
 
+  void* mmap_base;
   size_t mmap_size;
 
   thread_local_dtor* thread_local_dtors;
@@ -146,42 +141,44 @@
   bionic_tls* bionic_tls;
 
   int errno_value;
-
-  // The thread pointer (__get_tls()) points at this field. This field must come last so that
-  // an executable's TLS segment can be allocated at a fixed offset after the thread pointer.
-  void* tls[BIONIC_TLS_SLOTS];
-
-  // The golang runtime currently expects this field to come after the slots.
-  pthread_key_data_t key_data[BIONIC_PTHREAD_KEY_COUNT];
 };
 
-__LIBC_HIDDEN__ void __init_tls(pthread_internal_t* thread);
-__LIBC_HIDDEN__ void __init_tls_stack_guard(pthread_internal_t* thread);
-__LIBC_HIDDEN__ bionic_tls* __allocate_bionic_tls();
+struct ThreadMapping {
+  char* mmap_base;
+  size_t mmap_size;
+
+  char* static_tls;
+  char* stack_base;
+  char* stack_top;
+};
+
+__LIBC_HIDDEN__ void __init_tcb(bionic_tcb* tcb, pthread_internal_t* thread);
+__LIBC_HIDDEN__ void __init_tcb_stack_guard(bionic_tcb* tcb);
+__LIBC_HIDDEN__ void __init_bionic_tls_ptrs(bionic_tcb* tcb, bionic_tls* tls);
+__LIBC_HIDDEN__ bionic_tls* __allocate_temp_bionic_tls();
+__LIBC_HIDDEN__ void __free_temp_bionic_tls(bionic_tls* tls);
 __LIBC_HIDDEN__ void __init_additional_stacks(pthread_internal_t*);
 __LIBC_HIDDEN__ int __init_thread(pthread_internal_t* thread);
+__LIBC_HIDDEN__ ThreadMapping __allocate_thread_mapping(size_t stack_size, size_t stack_guard_size);
 
 __LIBC_HIDDEN__ pthread_t           __pthread_internal_add(pthread_internal_t* thread);
 __LIBC_HIDDEN__ pthread_internal_t* __pthread_internal_find(pthread_t pthread_id);
 __LIBC_HIDDEN__ void                __pthread_internal_remove(pthread_internal_t* thread);
 __LIBC_HIDDEN__ void                __pthread_internal_remove_and_free(pthread_internal_t* thread);
 
+static inline __always_inline bionic_tcb* __get_bionic_tcb() {
+  return reinterpret_cast<bionic_tcb*>(&__get_tls()[MIN_TLS_SLOT]);
+}
+
 // Make __get_thread() inlined for performance reason. See http://b/19825434.
 static inline __always_inline pthread_internal_t* __get_thread() {
-  void** tls = __get_tls();
-  if (__predict_true(tls)) {
-    return reinterpret_cast<pthread_internal_t*>(tls[TLS_SLOT_THREAD_ID]);
-  }
-
-  // This happens when called during libc initialization before TLS has been initialized.
-  return nullptr;
+  return static_cast<pthread_internal_t*>(__get_tls()[TLS_SLOT_THREAD_ID]);
 }
 
 static inline __always_inline bionic_tls& __get_bionic_tls() {
-  return *__get_thread()->bionic_tls;
+  return *static_cast<bionic_tls*>(__get_tls()[TLS_SLOT_BIONIC_TLS]);
 }
 
-extern __LIBC_HIDDEN__ pthread_internal_t* __get_main_thread();
 extern "C" __LIBC_HIDDEN__ int __set_tls(void* ptr);
 
 __LIBC_HIDDEN__ void pthread_key_clean_all(void);
diff --git a/libc/bionic/pthread_key.cpp b/libc/bionic/pthread_key.cpp
index f3878a6..53f0f11 100644
--- a/libc/bionic/pthread_key.cpp
+++ b/libc/bionic/pthread_key.cpp
@@ -69,12 +69,16 @@
   return (key < (KEY_VALID_FLAG | BIONIC_PTHREAD_KEY_COUNT));
 }
 
+static inline pthread_key_data_t* get_thread_key_data() {
+  return __get_bionic_tls().key_data;
+}
+
 // Called from pthread_exit() to remove all pthread keys. This must call the destructor of
 // all keys that have a non-NULL data value and a non-NULL destructor.
 __LIBC_HIDDEN__ void pthread_key_clean_all() {
   // Because destructors can do funky things like deleting/creating other keys,
   // we need to implement this in a loop.
-  pthread_key_data_t* key_data = __get_thread()->key_data;
+  pthread_key_data_t* key_data = get_thread_key_data();
   for (size_t rounds = PTHREAD_DESTRUCTOR_ITERATIONS; rounds > 0; --rounds) {
     size_t called_destructor_count = 0;
     for (size_t i = 0; i < BIONIC_PTHREAD_KEY_COUNT; ++i) {
@@ -158,7 +162,7 @@
   }
   key &= ~KEY_VALID_FLAG;
   uintptr_t seq = atomic_load_explicit(&key_map[key].seq, memory_order_relaxed);
-  pthread_key_data_t* data = &(__get_thread()->key_data[key]);
+  pthread_key_data_t* data = &get_thread_key_data()[key];
   // It is user's responsibility to synchornize between the creation and use of pthread keys,
   // so we use memory_order_relaxed when checking the sequence number.
   if (__predict_true(SeqOfKeyInUse(seq) && data->seq == seq)) {
@@ -178,7 +182,7 @@
   key &= ~KEY_VALID_FLAG;
   uintptr_t seq = atomic_load_explicit(&key_map[key].seq, memory_order_relaxed);
   if (__predict_true(SeqOfKeyInUse(seq))) {
-    pthread_key_data_t* data = &(__get_thread()->key_data[key]);
+    pthread_key_data_t* data = &get_thread_key_data()[key];
     data->seq = seq;
     data->data = const_cast<void*>(ptr);
     return 0;
diff --git a/libc/kernel/tools/cpp.py b/libc/kernel/tools/cpp.py
index 336a9c8..1ada59e 100755
--- a/libc/kernel/tools/cpp.py
+++ b/libc/kernel/tools/cpp.py
@@ -1037,11 +1037,14 @@
             if t.id == '{':
                 buf += ' {'
                 result.append(strip_space(buf))
-                indent += 2
+                # Do not indent if this is extern "C" {
+                if i < 2 or tokens[i-2].id != 'extern' or tokens[i-1].id != '"C"':
+                    indent += 2
                 buf = ''
                 newline = True
             elif t.id == '}':
-                indent -= 2
+                if indent >= 2:
+                    indent -= 2
                 if not newline:
                     result.append(strip_space(buf))
                 # Look ahead to determine if it's the end of line.
@@ -1221,133 +1224,140 @@
         function declarations are removed. We only accept typedefs and
         enum/structs/union declarations.
 
+        In addition, remove any macros expanding in the headers. Usually,
+        these macros are static inline functions, which is why they are
+        removed.
+
         However, we keep the definitions corresponding to the set of known
         static inline functions in the set 'keep', which is useful
         for optimized byteorder swap functions and stuff like that.
         """
 
-        # NOTE: It's also removing function-like macros, such as __SYSCALL(...)
-        # in uapi/asm-generic/unistd.h, or KEY_FIELD(...) in linux/bcache.h.
-        # It could be problematic when we have function-like macros but without
-        # '}' following them. It will skip all the tokens/blocks until seeing a
-        # '}' as the function end. Fortunately we don't have such cases in the
-        # current kernel headers.
+        # state = NORMAL => normal (i.e. LN + spaces)
+        # state = OTHER_DECL => typedef/struct encountered, ends with ";"
+        # state = VAR_DECL => var declaration encountered, ends with ";"
+        # state = FUNC_DECL => func declaration encountered, ends with "}"
+        NORMAL = 0
+        OTHER_DECL = 1
+        VAR_DECL = 2
+        FUNC_DECL = 3
 
-        # state = 0 => normal (i.e. LN + spaces)
-        # state = 1 => typedef/struct encountered, ends with ";"
-        # state = 2 => var declaration encountered, ends with ";"
-        # state = 3 => func declaration encountered, ends with "}"
-
-        state = 0
+        state = NORMAL
         depth = 0
-        blocks2 = []
-        skipTokens = False
-        for b in self.blocks:
-            if b.isDirective():
-                blocks2.append(b)
-            else:
-                n = len(b.tokens)
-                i = 0
-                if skipTokens:
-                    first = n
-                else:
-                    first = 0
-                while i < n:
-                    tok = b.tokens[i]
-                    tokid = tok.id
-                    # If we are not looking for the start of a new
-                    # type/var/func, then skip over tokens until
-                    # we find our terminator, managing the depth of
-                    # accolades as we go.
-                    if state > 0:
-                        terminator = False
-                        if tokid == '{':
-                            depth += 1
-                        elif tokid == '}':
-                            if depth > 0:
-                                depth -= 1
-                            if (depth == 0) and (state == 3):
-                                terminator = True
-                        elif tokid == ';' and depth == 0:
-                            terminator = True
-
-                        if terminator:
-                            # we found the terminator
-                            state = 0
-                            if skipTokens:
-                                skipTokens = False
-                                first = i + 1
-
-                        i += 1
-                        continue
-
-                    # Is it a new type definition, then start recording it
-                    if tok.id in ['struct', 'typedef', 'enum', 'union',
-                                  '__extension__']:
-                        state = 1
-                        i += 1
-                        continue
-
-                    # Is it a variable or function definition. If so, first
-                    # try to determine which type it is, and also extract
-                    # its name.
-                    #
-                    # We're going to parse the next tokens of the same block
-                    # until we find a semicolon or a left parenthesis.
-                    #
-                    # The semicolon corresponds to a variable definition,
-                    # the left-parenthesis to a function definition.
-                    #
-                    # We also assume that the var/func name is the last
-                    # identifier before the terminator.
-                    #
-                    j = i + 1
-                    ident = ""
-                    while j < n:
-                        tokid = b.tokens[j].id
-                        if tokid == '(':  # a function declaration
-                            state = 3
-                            break
-                        elif tokid == ';':  # a variable declaration
-                            state = 2
-                            break
-                        if b.tokens[j].kind == TokenKind.IDENTIFIER:
-                            ident = b.tokens[j].id
-                        j += 1
-
-                    if j >= n:
-                        # This can only happen when the declaration
-                        # does not end on the current block (e.g. with
-                        # a directive mixed inside it.
-                        #
-                        # We will treat it as malformed because
-                        # it's very hard to recover from this case
-                        # without making our parser much more
-                        # complex.
-                        #
-                        logging.debug("### skip unterminated static '%s'",
-                                      ident)
-                        break
-
-                    if ident in keep:
-                        logging.debug("### keep var/func '%s': %s", ident,
-                                      repr(b.tokens[i:j]))
+        blocksToKeep = []
+        blocksInProgress = []
+        blocksOfDirectives = []
+        ident = ""
+        state_token = ""
+        macros = set()
+        for block in self.blocks:
+            if block.isDirective():
+                # Record all macros.
+                if block.directive == 'define':
+                    macro_name = block.define_id
+                    paren_index = macro_name.find('(')
+                    if paren_index == -1:
+                        macros.add(macro_name)
                     else:
-                        # We're going to skip the tokens for this declaration
-                        logging.debug("### skip var/func '%s': %s", ident,
-                                      repr(b.tokens[i:j]))
-                        if i > first:
-                            blocks2.append(Block(b.tokens[first:i]))
-                        skipTokens = True
-                        first = n
+                        macros.add(macro_name[0:paren_index])
+                blocksInProgress.append(block)
+                # If this is in a function/variable declaration, we might need
+                # to emit the directives alone, so save them separately.
+                blocksOfDirectives.append(block)
+                continue
 
-                    i += 1
+            numTokens = len(block.tokens)
+            lastTerminatorIndex = 0
+            i = 0
+            while i < numTokens:
+                token_id = block.tokens[i].id
+                terminator = False
+                if token_id == '{':
+                    depth += 1
+                    if (i >= 2 and block.tokens[i-2].id == 'extern' and
+                        block.tokens[i-1].id == '"C"'):
+                        # For an extern "C" { pretend as though this is depth 0.
+                        depth -= 1
+                elif token_id == '}':
+                    if depth > 0:
+                        depth -= 1
+                    if depth == 0:
+                        if state == OTHER_DECL:
+                            # Loop through until we hit the ';'
+                            i += 1
+                            while i < numTokens:
+                                if block.tokens[i].id == ';':
+                                    token_id = ';'
+                                    break
+                                i += 1
+                            # If we didn't hit the ';', just consider this the
+                            # terminator any way.
+                        terminator = True
+                elif depth == 0:
+                    if token_id == ';':
+                        if state == NORMAL:
+                            blocksToKeep.extend(blocksInProgress)
+                            blocksInProgress = []
+                            blocksOfDirectives = []
+                            state = FUNC_DECL
+                        terminator = True
+                    elif (state == NORMAL and token_id == '(' and i >= 1 and
+                          block.tokens[i-1].kind == TokenKind.IDENTIFIER and
+                          block.tokens[i-1].id in macros):
+                        # This is a plain macro being expanded in the header
+                        # which needs to be removed.
+                        blocksToKeep.extend(blocksInProgress)
+                        if lastTerminatorIndex < i - 1:
+                            blocksToKeep.append(Block(block.tokens[lastTerminatorIndex:i-1]))
+                        blocksInProgress = []
+                        blocksOfDirectives = []
 
-                if i > first:
-                    #print "### final '%s'" % repr(b.tokens[first:i])
-                    blocks2.append(Block(b.tokens[first:i]))
+                        # Skip until we see the terminating ')'
+                        i += 1
+                        paren_depth = 1
+                        while i < numTokens:
+                            if block.tokens[i].id == ')':
+                                paren_depth -= 1
+                                if paren_depth == 0:
+                                    break
+                            elif block.tokens[i].id == '(':
+                                paren_depth += 1
+                            i += 1
+                        lastTerminatorIndex = i + 1
+                    elif (state != FUNC_DECL and token_id == '(' and
+                          state_token != 'typedef'):
+                        blocksToKeep.extend(blocksInProgress)
+                        blocksInProgress = []
+                        blocksOfDirectives = []
+                        state = VAR_DECL
+                    elif state == NORMAL and token_id in ['struct', 'typedef',
+                                                          'enum', 'union',
+                                                          '__extension__']:
+                        state = OTHER_DECL
+                        state_token = token_id
+                    elif block.tokens[i].kind == TokenKind.IDENTIFIER:
+                        if state != VAR_DECL or ident == "":
+                            ident = token_id
 
-        self.blocks = blocks2
+                if terminator:
+                    if state != VAR_DECL and state != FUNC_DECL or ident in keep:
+                        blocksInProgress.append(Block(block.tokens[lastTerminatorIndex:i+1]))
+                        blocksToKeep.extend(blocksInProgress)
+                    else:
+                        # Only keep the directives found.
+                        blocksToKeep.extend(blocksOfDirectives)
+                    lastTerminatorIndex = i + 1
+                    blocksInProgress = []
+                    blocksOfDirectives = []
+                    state = NORMAL
+                    ident = ""
+                    state_token = ""
+                i += 1
+            if lastTerminatorIndex < numTokens:
+                blocksInProgress.append(Block(block.tokens[lastTerminatorIndex:numTokens]))
+        if len(blocksInProgress) > 0:
+            blocksToKeep.extend(blocksInProgress)
+        self.blocks = blocksToKeep
 
     def replaceTokens(self, replacements):
         """Replace tokens according to the given dict."""
@@ -1938,6 +1948,299 @@
         expected = ""
         self.assertEqual(self.parse(text), expected)
 
+class FullPathTest(unittest.TestCase):
+    """Test of the full path parsing."""
+
+    def parse(self, text, keep=None):
+        if not keep:
+            keep = set()
+        out = utils.StringOutput()
+        blocks = BlockParser().parse(CppStringTokenizer(text))
+        blocks.removeVarsAndFuncs(keep)
+        blocks.replaceTokens(kernel_token_replacements)
+        blocks.optimizeAll(None)
+        blocks.write(out)
+        return out.get()
+
+    def test_function_removed(self):
+        text = """\
+static inline __u64 function()
+{
+}
+"""
+        expected = ""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_function_removed_with_struct(self):
+        text = """\
+static inline struct something* function()
+{
+}
+"""
+        expected = ""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_function_kept(self):
+        text = """\
+static inline __u64 function()
+{
+}
+"""
+        expected = """\
+static inline __u64 function() {
+}
+"""
+        self.assertEqual(self.parse(text, set(["function"])), expected)
+
+    def test_var_removed(self):
+        text = "__u64 variable;"
+        expected = ""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_var_kept(self):
+        text = "__u64 variable;"
+        expected = "__u64 variable;\n"
+        self.assertEqual(self.parse(text, set(["variable"])), expected)
+
+    def test_keep_function_typedef(self):
+        text = "typedef void somefunction_t(void);"
+        expected = "typedef void somefunction_t(void);\n"
+        self.assertEqual(self.parse(text), expected)
+
+    def test_struct_keep_attribute(self):
+        text = """\
+struct something_s {
+  __u32 s1;
+  __u32 s2;
+} __attribute__((packed));
+"""
+        expected = """\
+struct something_s {
+  __u32 s1;
+  __u32 s2;
+} __attribute__((packed));
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_function_keep_attribute_structs(self):
+        text = """\
+static __inline__ struct some_struct1 * function(struct some_struct2 * e) {
+}
+"""
+        expected = """\
+static __inline__ struct some_struct1 * function(struct some_struct2 * e) {
+}
+"""
+        self.assertEqual(self.parse(text, set(["function"])), expected)
+
+    def test_struct_after_struct(self):
+        text = """\
+struct first {
+};
+
+struct second {
+  unsigned short s1;
+#define SOMETHING 8
+  unsigned short s2;
+};
+"""
+        expected = """\
+struct first {
+};
+struct second {
+  unsigned short s1;
+#define SOMETHING 8
+  unsigned short s2;
+};
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_other_not_removed(self):
+        text = """\
+typedef union {
+  __u64 tu1;
+  __u64 tu2;
+} typedef_name;
+
+union {
+  __u64 u1;
+  __u64 u2;
+};
+
+struct {
+  __u64 s1;
+  __u64 s2;
+};
+
+enum {
+  ENUM1 = 0,
+  ENUM2,
+};
+
+__extension__ typedef __signed__ long long __s64;
+"""
+        expected = """\
+typedef union {
+  __u64 tu1;
+  __u64 tu2;
+} typedef_name;
+union {
+  __u64 u1;
+  __u64 u2;
+};
+struct {
+  __u64 s1;
+  __u64 s2;
+};
+enum {
+  ENUM1 = 0,
+  ENUM2,
+};
+__extension__ typedef __signed__ long long __s64;
+"""
+
+        self.assertEqual(self.parse(text), expected)
+
+    def test_semicolon_after_function(self):
+        text = """\
+static inline __u64 function()
+{
+};
+
+struct should_see {
+        __u32                           field;
+};
+"""
+        expected = """\
+struct should_see {
+  __u32 field;
+};
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_define_in_middle_keep(self):
+        text = """\
+enum {
+  ENUM0 = 0x10,
+  ENUM1 = 0x20,
+#define SOMETHING SOMETHING_ELSE
+  ENUM2 = 0x40,
+};
+"""
+        expected = """\
+enum {
+  ENUM0 = 0x10,
+  ENUM1 = 0x20,
+#define SOMETHING SOMETHING_ELSE
+  ENUM2 = 0x40,
+};
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_define_in_middle_remove(self):
+        text = """\
+static inline function() {
+#define SOMETHING1 SOMETHING_ELSE1
+  i = 0;
+  {
+    i = 1;
+  }
+#define SOMETHING2 SOMETHING_ELSE2
+}
+"""
+        expected = """\
+#define SOMETHING1 SOMETHING_ELSE1
+#define SOMETHING2 SOMETHING_ELSE2
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_define_in_middle_force_keep(self):
+        text = """\
+static inline function() {
+#define SOMETHING1 SOMETHING_ELSE1
+  i = 0;
+  {
+    i = 1;
+  }
+#define SOMETHING2 SOMETHING_ELSE2
+}
+"""
+        expected = """\
+static inline function() {
+#define SOMETHING1 SOMETHING_ELSE1
+  i = 0;
+ {
+    i = 1;
+  }
+#define SOMETHING2 SOMETHING_ELSE2
+}
+"""
+        self.assertEqual(self.parse(text, set(["function"])), expected)
+
+    def test_define_before_remove(self):
+        text = """\
+#define SHOULD_BE_KEPT NOTHING1
+#define ANOTHER_TO_KEEP NOTHING2
+static inline function() {
+#define SOMETHING1 SOMETHING_ELSE1
+  i = 0;
+  {
+    i = 1;
+  }
+#define SOMETHING2 SOMETHING_ELSE2
+}
+"""
+        expected = """\
+#define SHOULD_BE_KEPT NOTHING1
+#define ANOTHER_TO_KEEP NOTHING2
+#define SOMETHING1 SOMETHING_ELSE1
+#define SOMETHING2 SOMETHING_ELSE2
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_extern_C(self):
+        text = """\
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+struct something {
+};
+
+#if defined(__cplusplus)
+}
+#endif
+"""
+        expected = """\
+#ifdef __cplusplus
+extern "C" {
+#endif
+struct something {
+};
+#ifdef __cplusplus
+}
+#endif
+"""
+        self.assertEqual(self.parse(text), expected)
+
+    def test_macro_definition_removed(self):
+        text = """\
+#define MACRO_FUNCTION_NO_PARAMS static inline some_func() {}
+MACRO_FUNCTION_NO_PARAMS()
+
+#define MACRO_FUNCTION_PARAMS(a) static inline some_func() { a; }
+MACRO_FUNCTION_PARAMS(a = 1)
+
+something that should still be kept
+MACRO_FUNCTION_PARAMS(b)
+"""
+        expected = """\
+#define MACRO_FUNCTION_NO_PARAMS static inline some_func() { }
+#define MACRO_FUNCTION_PARAMS(a) static inline some_func() { a; }
+something that should still be kept
+"""
+        self.assertEqual(self.parse(text), expected)
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/libc/kernel/uapi/asm-arm64/asm/hwcap.h b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
index a7cd560..8f50b1d 100644
--- a/libc/kernel/uapi/asm-arm64/asm/hwcap.h
+++ b/libc/kernel/uapi/asm-arm64/asm/hwcap.h
@@ -46,4 +46,5 @@
 #define HWCAP_USCAT (1 << 25)
 #define HWCAP_ILRCPC (1 << 26)
 #define HWCAP_FLAGM (1 << 27)
+#define HWCAP_SSBS (1 << 28)
 #endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/ptrace.h b/libc/kernel/uapi/asm-arm64/asm/ptrace.h
index 4e6c755..e1cfb48 100644
--- a/libc/kernel/uapi/asm-arm64/asm/ptrace.h
+++ b/libc/kernel/uapi/asm-arm64/asm/ptrace.h
@@ -34,6 +34,7 @@
 #define PSR_I_BIT 0x00000080
 #define PSR_A_BIT 0x00000100
 #define PSR_D_BIT 0x00000200
+#define PSR_SSBS_BIT 0x00001000
 #define PSR_PAN_BIT 0x00400000
 #define PSR_UAO_BIT 0x00800000
 #define PSR_V_BIT 0x10000000
diff --git a/libc/kernel/uapi/asm-arm64/asm/siginfo.h b/libc/kernel/uapi/asm-arm64/asm/siginfo.h
index 111a215..a31ebb2 100644
--- a/libc/kernel/uapi/asm-arm64/asm/siginfo.h
+++ b/libc/kernel/uapi/asm-arm64/asm/siginfo.h
@@ -16,8 +16,4 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#ifndef __ASM_SIGINFO_H
-#define __ASM_SIGINFO_H
-#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
 #include <asm-generic/siginfo.h>
-#endif
diff --git a/libc/kernel/uapi/asm-arm64/asm/unistd.h b/libc/kernel/uapi/asm-arm64/asm/unistd.h
index cc151fd..0648b02 100644
--- a/libc/kernel/uapi/asm-arm64/asm/unistd.h
+++ b/libc/kernel/uapi/asm-arm64/asm/unistd.h
@@ -17,4 +17,5 @@
  ****************************************************************************
  ****************************************************************************/
 #define __ARCH_WANT_RENAMEAT
+#define __ARCH_WANT_NEW_STAT
 #include <asm-generic/unistd.h>
diff --git a/libc/kernel/uapi/asm-generic/ioctls.h b/libc/kernel/uapi/asm-generic/ioctls.h
index 41dbce2..f8a4357 100644
--- a/libc/kernel/uapi/asm-generic/ioctls.h
+++ b/libc/kernel/uapi/asm-generic/ioctls.h
@@ -81,6 +81,8 @@
 #define TIOCGPTLCK _IOR('T', 0x39, int)
 #define TIOCGEXCL _IOR('T', 0x40, int)
 #define TIOCGPTPEER _IO('T', 0x41)
+#define TIOCGISO7816 _IOR('T', 0x42, struct serial_iso7816)
+#define TIOCSISO7816 _IOWR('T', 0x43, struct serial_iso7816)
 #define FIONCLEX 0x5450
 #define FIOCLEX 0x5451
 #define FIOASYNC 0x5452
diff --git a/libc/kernel/uapi/asm-generic/siginfo.h b/libc/kernel/uapi/asm-generic/siginfo.h
index 166193b..829ffad 100644
--- a/libc/kernel/uapi/asm-generic/siginfo.h
+++ b/libc/kernel/uapi/asm-generic/siginfo.h
@@ -24,13 +24,7 @@
   int sival_int;
   void __user * sival_ptr;
 } sigval_t;
-#ifndef __ARCH_SI_PREAMBLE_SIZE
-#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
-#endif
 #define SI_MAX_SIZE 128
-#ifndef SI_PAD_SIZE
-#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
-#endif
 #ifndef __ARCH_SI_BAND_T
 #define __ARCH_SI_BAND_T long
 #endif
@@ -40,73 +34,75 @@
 #ifndef __ARCH_SI_ATTRIBUTES
 #define __ARCH_SI_ATTRIBUTES
 #endif
-typedef struct siginfo {
-  int si_signo;
-#ifndef __ARCH_HAS_SWAPPED_SIGINFO
-  int si_errno;
-  int si_code;
-#else
-  int si_code;
-  int si_errno;
-#endif
-  union {
-    int _pad[SI_PAD_SIZE];
-    struct {
-      __kernel_pid_t _pid;
-      __kernel_uid32_t _uid;
-    } _kill;
-    struct {
-      __kernel_timer_t _tid;
-      int _overrun;
-      sigval_t _sigval;
-      int _sys_private;
-    } _timer;
-    struct {
-      __kernel_pid_t _pid;
-      __kernel_uid32_t _uid;
-      sigval_t _sigval;
-    } _rt;
-    struct {
-      __kernel_pid_t _pid;
-      __kernel_uid32_t _uid;
-      int _status;
-      __ARCH_SI_CLOCK_T _utime;
-      __ARCH_SI_CLOCK_T _stime;
-    } _sigchld;
-    struct {
-      void __user * _addr;
+union __sifields {
+  struct {
+    __kernel_pid_t _pid;
+    __kernel_uid32_t _uid;
+  } _kill;
+  struct {
+    __kernel_timer_t _tid;
+    int _overrun;
+    sigval_t _sigval;
+    int _sys_private;
+  } _timer;
+  struct {
+    __kernel_pid_t _pid;
+    __kernel_uid32_t _uid;
+    sigval_t _sigval;
+  } _rt;
+  struct {
+    __kernel_pid_t _pid;
+    __kernel_uid32_t _uid;
+    int _status;
+    __ARCH_SI_CLOCK_T _utime;
+    __ARCH_SI_CLOCK_T _stime;
+  } _sigchld;
+  struct {
+    void __user * _addr;
 #ifdef __ARCH_SI_TRAPNO
-      int _trapno;
+    int _trapno;
 #endif
 #ifdef __ia64__
-      int _imm;
-      unsigned int _flags;
-      unsigned long _isr;
+    int _imm;
+    unsigned int _flags;
+    unsigned long _isr;
 #endif
 #define __ADDR_BND_PKEY_PAD (__alignof__(void *) < sizeof(short) ? sizeof(short) : __alignof__(void *))
-      union {
-        short _addr_lsb;
-        struct {
-          char _dummy_bnd[__ADDR_BND_PKEY_PAD];
-          void __user * _lower;
-          void __user * _upper;
-        } _addr_bnd;
-        struct {
-          char _dummy_pkey[__ADDR_BND_PKEY_PAD];
-          __u32 _pkey;
-        } _addr_pkey;
-      };
-    } _sigfault;
-    struct {
-      __ARCH_SI_BAND_T _band;
-      int _fd;
-    } _sigpoll;
-    struct {
-      void __user * _call_addr;
-      int _syscall;
-      unsigned int _arch;
-    } _sigsys;
-  } _sifields;
+    union {
+      short _addr_lsb;
+      struct {
+        char _dummy_bnd[__ADDR_BND_PKEY_PAD];
+        void __user * _lower;
+        void __user * _upper;
+      } _addr_bnd;
+      struct {
+        char _dummy_pkey[__ADDR_BND_PKEY_PAD];
+        __u32 _pkey;
+      } _addr_pkey;
+    };
+  } _sigfault;
+  struct {
+    __ARCH_SI_BAND_T _band;
+    int _fd;
+  } _sigpoll;
+  struct {
+    void __user * _call_addr;
+    int _syscall;
+    unsigned int _arch;
+  } _sigsys;
+};
+#ifndef __ARCH_HAS_SWAPPED_SIGINFO
+#define __SIGINFO struct { int si_signo; int si_errno; int si_code; union __sifields _sifields; \
+}
+#else
+#define __SIGINFO struct { int si_signo; int si_code; int si_errno; union __sifields _sifields; \
+}
+#endif
+typedef struct siginfo {
+  union {
+    __SIGINFO;
+    int _si_pad[SI_MAX_SIZE / sizeof(int)];
+  };
 } __ARCH_SI_ATTRIBUTES siginfo_t;
 #define si_pid _sifields._kill._pid
 #define si_uid _sifields._kill._uid
@@ -212,6 +208,8 @@
 #define NSIGPOLL 6
 #define SYS_SECCOMP 1
 #define NSIGSYS 1
+#define EMT_TAGOVF 1
+#define NSIGEMT 1
 #define SIGEV_SIGNAL 0
 #define SIGEV_NONE 1
 #define SIGEV_THREAD 2
diff --git a/libc/kernel/uapi/asm-generic/unistd.h b/libc/kernel/uapi/asm-generic/unistd.h
index 52f0b57..fddf1d0 100644
--- a/libc/kernel/uapi/asm-generic/unistd.h
+++ b/libc/kernel/uapi/asm-generic/unistd.h
@@ -113,8 +113,10 @@
 #define __NR_splice 76
 #define __NR_tee 77
 #define __NR_readlinkat 78
+#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64)
 #define __NR3264_fstatat 79
 #define __NR3264_fstat 80
+#endif
 #define __NR_sync 81
 #define __NR_fsync 82
 #define __NR_fdatasync 83
@@ -329,8 +331,10 @@
 #define __NR_ftruncate __NR3264_ftruncate
 #define __NR_lseek __NR3264_lseek
 #define __NR_sendfile __NR3264_sendfile
+#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64)
 #define __NR_newfstatat __NR3264_fstatat
 #define __NR_fstat __NR3264_fstat
+#endif
 #define __NR_mmap __NR3264_mmap
 #define __NR_fadvise64 __NR3264_fadvise64
 #ifdef __NR3264_stat
@@ -345,8 +349,10 @@
 #define __NR_ftruncate64 __NR3264_ftruncate
 #define __NR_llseek __NR3264_lseek
 #define __NR_sendfile64 __NR3264_sendfile
+#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64)
 #define __NR_fstatat64 __NR3264_fstatat
 #define __NR_fstat64 __NR3264_fstat
+#endif
 #define __NR_mmap2 __NR3264_mmap
 #define __NR_fadvise64_64 __NR3264_fadvise64
 #ifdef __NR3264_stat
diff --git a/libc/kernel/uapi/asm-mips/asm/ioctls.h b/libc/kernel/uapi/asm-mips/asm/ioctls.h
index a4a40b0..694546f 100644
--- a/libc/kernel/uapi/asm-mips/asm/ioctls.h
+++ b/libc/kernel/uapi/asm-mips/asm/ioctls.h
@@ -85,6 +85,8 @@
 #define TIOCGPTLCK _IOR('T', 0x39, int)
 #define TIOCGEXCL _IOR('T', 0x40, int)
 #define TIOCGPTPEER _IO('T', 0x41)
+#define TIOCGISO7816 _IOR('T', 0x42, struct serial_iso7816)
+#define TIOCSISO7816 _IOWR('T', 0x43, struct serial_iso7816)
 #define TIOCSCTTY 0x5480
 #define TIOCGSOFTCAR 0x5481
 #define TIOCSSOFTCAR 0x5482
diff --git a/libc/kernel/uapi/asm-mips/asm/siginfo.h b/libc/kernel/uapi/asm-mips/asm/siginfo.h
index c37107b..c9efb21 100644
--- a/libc/kernel/uapi/asm-mips/asm/siginfo.h
+++ b/libc/kernel/uapi/asm-mips/asm/siginfo.h
@@ -20,13 +20,6 @@
 #define _UAPI_ASM_SIGINFO_H
 #define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2 * sizeof(int))
 #undef __ARCH_SI_TRAPNO
-#if _MIPS_SZLONG == 32
-#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
-#elif _MIPS_SZLONG==64
-#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
-#else
-#error _MIPS_SZLONG neither 32 nor 64
-#endif
 #define __ARCH_HAS_SWAPPED_SIGINFO
 #include <asm-generic/siginfo.h>
 #undef SI_ASYNCIO
diff --git a/libc/kernel/uapi/asm-x86/asm/bootparam.h b/libc/kernel/uapi/asm-x86/asm/bootparam.h
index b010277..dc90f57 100644
--- a/libc/kernel/uapi/asm-x86/asm/bootparam.h
+++ b/libc/kernel/uapi/asm-x86/asm/bootparam.h
@@ -135,7 +135,8 @@
   __u8 _pad2[4];
   __u64 tboot_addr;
   struct ist_info ist_info;
-  __u8 _pad3[16];
+  __u64 acpi_rsdp_addr;
+  __u8 _pad3[8];
   __u8 hd0_info[16];
   __u8 hd1_info[16];
   struct sys_desc_table sys_desc_table;
diff --git a/libc/kernel/uapi/asm-x86/asm/kvm.h b/libc/kernel/uapi/asm-x86/asm/kvm.h
index 1d7f767..4386f76 100644
--- a/libc/kernel/uapi/asm-x86/asm/kvm.h
+++ b/libc/kernel/uapi/asm-x86/asm/kvm.h
@@ -248,6 +248,7 @@
 #define KVM_VCPUEVENT_VALID_SIPI_VECTOR 0x00000002
 #define KVM_VCPUEVENT_VALID_SHADOW 0x00000004
 #define KVM_VCPUEVENT_VALID_SMM 0x00000008
+#define KVM_VCPUEVENT_VALID_PAYLOAD 0x00000010
 #define KVM_X86_SHADOW_INT_MOV_SS 0x01
 #define KVM_X86_SHADOW_INT_STI 0x02
 struct kvm_vcpu_events {
@@ -255,7 +256,7 @@
     __u8 injected;
     __u8 nr;
     __u8 has_error_code;
-    __u8 pad;
+    __u8 pending;
     __u32 error_code;
   } exception;
   struct {
@@ -278,7 +279,9 @@
     __u8 smm_inside_nmi;
     __u8 latched_init;
   } smi;
-  __u32 reserved[9];
+  __u8 reserved[27];
+  __u8 exception_has_payload;
+  __u64 exception_payload;
 };
 struct kvm_debugregs {
   __u64 db[4];
@@ -316,6 +319,7 @@
 #define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2)
 #define KVM_STATE_NESTED_GUEST_MODE 0x00000001
 #define KVM_STATE_NESTED_RUN_PENDING 0x00000002
+#define KVM_STATE_NESTED_EVMCS 0x00000004
 #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001
 #define KVM_STATE_NESTED_SMM_VMXON 0x00000002
 struct kvm_vmx_nested_state {
diff --git a/libc/kernel/uapi/asm-x86/asm/siginfo.h b/libc/kernel/uapi/asm-x86/asm/siginfo.h
index 1da8066..0de5283 100644
--- a/libc/kernel/uapi/asm-x86/asm/siginfo.h
+++ b/libc/kernel/uapi/asm-x86/asm/siginfo.h
@@ -23,8 +23,6 @@
 typedef long long __kernel_si_clock_t __attribute__((aligned(4)));
 #define __ARCH_SI_CLOCK_T __kernel_si_clock_t
 #define __ARCH_SI_ATTRIBUTES __attribute__((aligned(8)))
-#else
-#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
 #endif
 #endif
 #include <asm-generic/siginfo.h>
diff --git a/libc/kernel/uapi/drm/amdgpu_drm.h b/libc/kernel/uapi/drm/amdgpu_drm.h
index bdf59d6..8d65fd4 100644
--- a/libc/kernel/uapi/drm/amdgpu_drm.h
+++ b/libc/kernel/uapi/drm/amdgpu_drm.h
@@ -20,6 +20,7 @@
 #define __AMDGPU_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_AMDGPU_GEM_CREATE 0x00
 #define DRM_AMDGPU_GEM_MMAP 0x01
@@ -405,6 +406,7 @@
 #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f
 #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10
 #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11
+#define AMDGPU_INFO_FW_DMCU 0x12
 #define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f
 #define AMDGPU_INFO_VRAM_USAGE 0x10
 #define AMDGPU_INFO_GTT_USAGE 0x11
@@ -593,5 +595,6 @@
 #define AMDGPU_FAMILY_AI 141
 #define AMDGPU_FAMILY_RV 142
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/armada_drm.h b/libc/kernel/uapi/drm/armada_drm.h
index ea1f37d..aabd23b 100644
--- a/libc/kernel/uapi/drm/armada_drm.h
+++ b/libc/kernel/uapi/drm/armada_drm.h
@@ -20,6 +20,7 @@
 #define DRM_ARMADA_IOCTL_H
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_ARMADA_GEM_CREATE 0x00
 #define DRM_ARMADA_GEM_MMAP 0x02
@@ -46,5 +47,6 @@
 };
 #define DRM_IOCTL_ARMADA_GEM_PWRITE ARMADA_IOCTL(IOW, GEM_PWRITE, gem_pwrite)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/drm.h b/libc/kernel/uapi/drm/drm.h
index 21f23f4..ef64ed7 100644
--- a/libc/kernel/uapi/drm/drm.h
+++ b/libc/kernel/uapi/drm/drm.h
@@ -37,6 +37,7 @@
 typedef unsigned long drm_handle_t;
 #endif
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_NAME "drm"
 #define DRM_MIN_ORDER 5
@@ -429,9 +430,11 @@
   __u64 user_data;
 };
 #ifdef __cplusplus
+}
 #endif
 #include "drm_mode.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_IOCTL_BASE 'd'
 #define DRM_IO(nr) _IO(DRM_IOCTL_BASE, nr)
@@ -603,5 +606,6 @@
 typedef struct drm_scatter_gather drm_scatter_gather_t;
 typedef struct drm_set_version drm_set_version_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/drm_fourcc.h b/libc/kernel/uapi/drm/drm_fourcc.h
index 9634e99..df89cd1 100644
--- a/libc/kernel/uapi/drm/drm_fourcc.h
+++ b/libc/kernel/uapi/drm/drm_fourcc.h
@@ -20,9 +20,11 @@
 #define DRM_FOURCC_H
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define fourcc_code(a,b,c,d) ((__u32) (a) | ((__u32) (b) << 8) | ((__u32) (c) << 16) | ((__u32) (d) << 24))
 #define DRM_FORMAT_BIG_ENDIAN (1 << 31)
+#define DRM_FORMAT_INVALID 0
 #define DRM_FORMAT_C8 fourcc_code('C', '8', ' ', ' ')
 #define DRM_FORMAT_R8 fourcc_code('R', '8', ' ', ' ')
 #define DRM_FORMAT_R16 fourcc_code('R', '1', '6', ' ')
@@ -117,6 +119,7 @@
 #define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4)
 #define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5)
 #define DRM_FORMAT_MOD_SAMSUNG_64_32_TILE fourcc_mod_code(SAMSUNG, 1)
+#define DRM_FORMAT_MOD_SAMSUNG_16_16_TILE fourcc_mod_code(SAMSUNG, 2)
 #define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1)
 #define DRM_FORMAT_MOD_VIVANTE_TILED fourcc_mod_code(VIVANTE, 1)
 #define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2)
@@ -156,5 +159,6 @@
 #define AFBC_FORMAT_MOD_TILED (1ULL << 8)
 #define AFBC_FORMAT_MOD_SC (1ULL << 9)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/drm_mode.h b/libc/kernel/uapi/drm/drm_mode.h
index 06c26e4..dff9f34 100644
--- a/libc/kernel/uapi/drm/drm_mode.h
+++ b/libc/kernel/uapi/drm/drm_mode.h
@@ -20,6 +20,7 @@
 #define _DRM_MODE_H
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_DISPLAY_INFO_LEN 32
 #define DRM_CONNECTOR_NAME_LEN 32
@@ -463,5 +464,6 @@
   __u32 lessee_id;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/drm_sarea.h b/libc/kernel/uapi/drm/drm_sarea.h
index 03317b9..a0c7f3a 100644
--- a/libc/kernel/uapi/drm/drm_sarea.h
+++ b/libc/kernel/uapi/drm/drm_sarea.h
@@ -20,6 +20,7 @@
 #define _DRM_SAREA_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifdef __alpha__
 #define SAREA_MAX 0x2000U
@@ -54,5 +55,6 @@
 typedef struct drm_sarea_frame drm_sarea_frame_t;
 typedef struct drm_sarea drm_sarea_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/etnaviv_drm.h b/libc/kernel/uapi/drm/etnaviv_drm.h
index bb502d9..4c09e6c 100644
--- a/libc/kernel/uapi/drm/etnaviv_drm.h
+++ b/libc/kernel/uapi/drm/etnaviv_drm.h
@@ -20,6 +20,7 @@
 #define __ETNAVIV_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 struct drm_etnaviv_timespec {
   __s64 tv_sec;
@@ -193,5 +194,6 @@
 #define DRM_IOCTL_ETNAVIV_PM_QUERY_DOM DRM_IOWR(DRM_COMMAND_BASE + DRM_ETNAVIV_PM_QUERY_DOM, struct drm_etnaviv_pm_domain)
 #define DRM_IOCTL_ETNAVIV_PM_QUERY_SIG DRM_IOWR(DRM_COMMAND_BASE + DRM_ETNAVIV_PM_QUERY_SIG, struct drm_etnaviv_pm_signal)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/exynos_drm.h b/libc/kernel/uapi/drm/exynos_drm.h
index 8b27cbb..4918035 100644
--- a/libc/kernel/uapi/drm/exynos_drm.h
+++ b/libc/kernel/uapi/drm/exynos_drm.h
@@ -20,6 +20,7 @@
 #define _UAPI_EXYNOS_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 struct drm_exynos_gem_create {
   __u64 size;
@@ -225,5 +226,6 @@
   __u64 reserved;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/i810_drm.h b/libc/kernel/uapi/drm/i810_drm.h
index 1fd3c46..e33387d 100644
--- a/libc/kernel/uapi/drm/i810_drm.h
+++ b/libc/kernel/uapi/drm/i810_drm.h
@@ -20,6 +20,7 @@
 #define _I810_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifndef _I810_DEFINES_
 #define _I810_DEFINES_
@@ -214,5 +215,6 @@
   unsigned int last_render;
 } drm_i810_mc_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/i915_drm.h b/libc/kernel/uapi/drm/i915_drm.h
index 4c1d87f..89fa529 100644
--- a/libc/kernel/uapi/drm/i915_drm.h
+++ b/libc/kernel/uapi/drm/i915_drm.h
@@ -20,6 +20,7 @@
 #define _UAPI_I915_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define I915_L3_PARITY_UEVENT "L3_PARITY_ERROR"
 #define I915_ERROR_UEVENT "ERROR"
@@ -334,6 +335,7 @@
 #define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49
 #define I915_PARAM_HAS_CONTEXT_ISOLATION 50
 #define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51
+#define I915_PARAM_MMAP_GTT_COHERENT 52
 typedef struct drm_i915_getparam {
   __s32 param;
   int __user * value;
@@ -775,5 +777,6 @@
   __u8 data[];
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/mga_drm.h b/libc/kernel/uapi/drm/mga_drm.h
index 4d5ad0c..4959502 100644
--- a/libc/kernel/uapi/drm/mga_drm.h
+++ b/libc/kernel/uapi/drm/mga_drm.h
@@ -20,6 +20,7 @@
 #define __MGA_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifndef __MGA_SAREA_DEFINES__
 #define __MGA_SAREA_DEFINES__
@@ -240,5 +241,6 @@
   void __user * value;
 } drm_mga_getparam_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/msm_drm.h b/libc/kernel/uapi/drm/msm_drm.h
index 1d53c5d..df8119f 100644
--- a/libc/kernel/uapi/drm/msm_drm.h
+++ b/libc/kernel/uapi/drm/msm_drm.h
@@ -20,6 +20,7 @@
 #define __MSM_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define MSM_PIPE_NONE 0x00
 #define MSM_PIPE_2D0 0x01
@@ -158,5 +159,6 @@
 #define DRM_IOCTL_MSM_SUBMITQUEUE_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_NEW, struct drm_msm_submitqueue)
 #define DRM_IOCTL_MSM_SUBMITQUEUE_CLOSE DRM_IOW(DRM_COMMAND_BASE + DRM_MSM_SUBMITQUEUE_CLOSE, __u32)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/nouveau_drm.h b/libc/kernel/uapi/drm/nouveau_drm.h
index f9c3447..54c3b97 100644
--- a/libc/kernel/uapi/drm/nouveau_drm.h
+++ b/libc/kernel/uapi/drm/nouveau_drm.h
@@ -21,6 +21,7 @@
 #define DRM_NOUVEAU_EVENT_NVIF 0x80000000
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define NOUVEAU_GEM_DOMAIN_CPU (1 << 0)
 #define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1)
@@ -122,5 +123,6 @@
 #define DRM_IOCTL_NOUVEAU_GEM_CPU_FINI DRM_IOW(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_FINI, struct drm_nouveau_gem_cpu_fini)
 #define DRM_IOCTL_NOUVEAU_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_INFO, struct drm_nouveau_gem_info)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/omap_drm.h b/libc/kernel/uapi/drm/omap_drm.h
index 54b539a..3c2fc08 100644
--- a/libc/kernel/uapi/drm/omap_drm.h
+++ b/libc/kernel/uapi/drm/omap_drm.h
@@ -20,6 +20,7 @@
 #define __OMAP_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define OMAP_PARAM_CHIPSET_ID 1
 struct drm_omap_param {
@@ -84,5 +85,6 @@
 #define DRM_IOCTL_OMAP_GEM_CPU_FINI DRM_IOW(DRM_COMMAND_BASE + DRM_OMAP_GEM_CPU_FINI, struct drm_omap_gem_cpu_fini)
 #define DRM_IOCTL_OMAP_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_OMAP_GEM_INFO, struct drm_omap_gem_info)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/qxl_drm.h b/libc/kernel/uapi/drm/qxl_drm.h
index 5942635..e9521c4 100644
--- a/libc/kernel/uapi/drm/qxl_drm.h
+++ b/libc/kernel/uapi/drm/qxl_drm.h
@@ -20,6 +20,7 @@
 #define QXL_DRM_H
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define QXL_GEM_DOMAIN_CPU 0
 #define QXL_GEM_DOMAIN_VRAM 1
@@ -97,5 +98,6 @@
 #define DRM_IOCTL_QXL_CLIENTCAP DRM_IOW(DRM_COMMAND_BASE + DRM_QXL_CLIENTCAP, struct drm_qxl_clientcap)
 #define DRM_IOCTL_QXL_ALLOC_SURF DRM_IOWR(DRM_COMMAND_BASE + DRM_QXL_ALLOC_SURF, struct drm_qxl_alloc_surf)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/r128_drm.h b/libc/kernel/uapi/drm/r128_drm.h
index 85dea7e..618b6dc 100644
--- a/libc/kernel/uapi/drm/r128_drm.h
+++ b/libc/kernel/uapi/drm/r128_drm.h
@@ -20,6 +20,7 @@
 #define __R128_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifndef __R128_SAREA_DEFINES__
 #define __R128_SAREA_DEFINES__
@@ -229,5 +230,6 @@
   void __user * value;
 } drm_r128_getparam_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/radeon_drm.h b/libc/kernel/uapi/drm/radeon_drm.h
index fe8fe67..9dc69ad 100644
--- a/libc/kernel/uapi/drm/radeon_drm.h
+++ b/libc/kernel/uapi/drm/radeon_drm.h
@@ -20,6 +20,7 @@
 #define __RADEON_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifndef __RADEON_SAREA_DEFINES__
 #define __RADEON_SAREA_DEFINES__
@@ -801,5 +802,6 @@
 #define SI_TILE_MODE_DEPTH_STENCIL_2D_8AA 2
 #define CIK_TILE_MODE_DEPTH_STENCIL_1D 5
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/savage_drm.h b/libc/kernel/uapi/drm/savage_drm.h
index 8c5a172..ae87d21 100644
--- a/libc/kernel/uapi/drm/savage_drm.h
+++ b/libc/kernel/uapi/drm/savage_drm.h
@@ -20,6 +20,7 @@
 #define __SAVAGE_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifndef __SAVAGE_SAREA_DEFINES__
 #define __SAVAGE_SAREA_DEFINES__
@@ -151,5 +152,6 @@
   } clear1;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/sis_drm.h b/libc/kernel/uapi/drm/sis_drm.h
index ba88ea9..1606a85 100644
--- a/libc/kernel/uapi/drm/sis_drm.h
+++ b/libc/kernel/uapi/drm/sis_drm.h
@@ -20,6 +20,7 @@
 #define __SIS_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define NOT_USED_0_3
 #define DRM_SIS_FB_ALLOC 0x04
@@ -48,5 +49,6 @@
   unsigned long offset, size;
 } drm_sis_fb_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/tegra_drm.h b/libc/kernel/uapi/drm/tegra_drm.h
index ee111dc..5244a27 100644
--- a/libc/kernel/uapi/drm/tegra_drm.h
+++ b/libc/kernel/uapi/drm/tegra_drm.h
@@ -20,6 +20,7 @@
 #define _UAPI_TEGRA_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_TEGRA_GEM_CREATE_TILED (1 << 0)
 #define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1)
@@ -163,5 +164,6 @@
 #define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags)
 #define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/v3d_drm.h b/libc/kernel/uapi/drm/v3d_drm.h
index c3e58cb..8865911 100644
--- a/libc/kernel/uapi/drm/v3d_drm.h
+++ b/libc/kernel/uapi/drm/v3d_drm.h
@@ -20,6 +20,7 @@
 #define _V3D_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_V3D_SUBMIT_CL 0x00
 #define DRM_V3D_WAIT_BO 0x01
@@ -83,5 +84,6 @@
   __u32 offset;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/vc4_drm.h b/libc/kernel/uapi/drm/vc4_drm.h
index 29eb872..fde443f 100644
--- a/libc/kernel/uapi/drm/vc4_drm.h
+++ b/libc/kernel/uapi/drm/vc4_drm.h
@@ -20,6 +20,7 @@
 #define _UAPI_VC4_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_VC4_SUBMIT_CL 0x00
 #define DRM_VC4_WAIT_SEQNO 0x01
@@ -233,5 +234,6 @@
   __u64 values_ptr;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/vgem_drm.h b/libc/kernel/uapi/drm/vgem_drm.h
index 7b0ebc9..b33452b 100644
--- a/libc/kernel/uapi/drm/vgem_drm.h
+++ b/libc/kernel/uapi/drm/vgem_drm.h
@@ -20,6 +20,7 @@
 #define _UAPI_VGEM_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_VGEM_FENCE_ATTACH 0x1
 #define DRM_VGEM_FENCE_SIGNAL 0x2
@@ -37,5 +38,6 @@
   __u32 flags;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/via_drm.h b/libc/kernel/uapi/drm/via_drm.h
index fd4948d..9ef645a 100644
--- a/libc/kernel/uapi/drm/via_drm.h
+++ b/libc/kernel/uapi/drm/via_drm.h
@@ -20,6 +20,7 @@
 #define _VIA_DRM_H_
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #ifndef _VIA_DEFINES_
 #define _VIA_DEFINES_
@@ -196,5 +197,6 @@
   drm_via_blitsync_t sync;
 } drm_via_dmablit_t;
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/virtgpu_drm.h b/libc/kernel/uapi/drm/virtgpu_drm.h
index 6b7fb0b..84986e4 100644
--- a/libc/kernel/uapi/drm/virtgpu_drm.h
+++ b/libc/kernel/uapi/drm/virtgpu_drm.h
@@ -20,6 +20,7 @@
 #define VIRTGPU_DRM_H
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_VIRTGPU_MAP 0x01
 #define DRM_VIRTGPU_EXECBUFFER 0x02
@@ -113,5 +114,6 @@
 #define DRM_IOCTL_VIRTGPU_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, struct drm_virtgpu_3d_wait)
 #define DRM_IOCTL_VIRTGPU_GET_CAPS DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, struct drm_virtgpu_get_caps)
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/vmwgfx_drm.h b/libc/kernel/uapi/drm/vmwgfx_drm.h
index 7df722a..bb1f36d 100644
--- a/libc/kernel/uapi/drm/vmwgfx_drm.h
+++ b/libc/kernel/uapi/drm/vmwgfx_drm.h
@@ -20,6 +20,7 @@
 #define __VMWGFX_DRM_H__
 #include "drm.h"
 #ifdef __cplusplus
+extern "C" {
 #endif
 #define DRM_VMW_MAX_SURFACE_FACES 6
 #define DRM_VMW_MAX_MIP_LEVELS 24
@@ -350,5 +351,6 @@
   struct drm_vmw_surface_arg req;
 };
 #ifdef __cplusplus
+}
 #endif
 #endif
diff --git a/libc/kernel/uapi/linux/android/binder.h b/libc/kernel/uapi/linux/android/binder.h
index 538a441..2d00a79 100644
--- a/libc/kernel/uapi/linux/android/binder.h
+++ b/libc/kernel/uapi/linux/android/binder.h
@@ -103,6 +103,14 @@
   __u32 has_strong_ref;
   __u32 has_weak_ref;
 };
+struct binder_node_info_for_ref {
+  __u32 handle;
+  __u32 strong_count;
+  __u32 weak_count;
+  __u32 reserved1;
+  __u32 reserved2;
+  __u32 reserved3;
+};
 #define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read)
 #define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, __s64)
 #define BINDER_SET_MAX_THREADS _IOW('b', 5, __u32)
@@ -111,6 +119,7 @@
 #define BINDER_THREAD_EXIT _IOW('b', 8, __s32)
 #define BINDER_VERSION _IOWR('b', 9, struct binder_version)
 #define BINDER_GET_NODE_DEBUG_INFO _IOWR('b', 11, struct binder_node_debug_info)
+#define BINDER_GET_NODE_INFO_FOR_REF _IOWR('b', 12, struct binder_node_info_for_ref)
 enum transaction_flags {
   TF_ONE_WAY = 0x01,
   TF_ROOT_OBJECT = 0x04,
diff --git a/libc/kernel/uapi/linux/blkzoned.h b/libc/kernel/uapi/linux/blkzoned.h
index eaff1d8..62f826f 100644
--- a/libc/kernel/uapi/linux/blkzoned.h
+++ b/libc/kernel/uapi/linux/blkzoned.h
@@ -57,4 +57,6 @@
 };
 #define BLKREPORTZONE _IOWR(0x12, 130, struct blk_zone_report)
 #define BLKRESETZONE _IOW(0x12, 131, struct blk_zone_range)
+#define BLKGETZONESZ _IOR(0x12, 132, __u32)
+#define BLKGETNRZONES _IOR(0x12, 133, __u32)
 #endif
diff --git a/libc/kernel/uapi/linux/bpf.h b/libc/kernel/uapi/linux/bpf.h
index a187913..d70a409 100644
--- a/libc/kernel/uapi/linux/bpf.h
+++ b/libc/kernel/uapi/linux/bpf.h
@@ -91,6 +91,7 @@
   BPF_BTF_LOAD,
   BPF_BTF_GET_FD_BY_ID,
   BPF_TASK_FD_QUERY,
+  BPF_MAP_LOOKUP_AND_DELETE_ELEM,
 };
 enum bpf_map_type {
   BPF_MAP_TYPE_UNSPEC,
@@ -114,6 +115,9 @@
   BPF_MAP_TYPE_SOCKHASH,
   BPF_MAP_TYPE_CGROUP_STORAGE,
   BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
+  BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE,
+  BPF_MAP_TYPE_QUEUE,
+  BPF_MAP_TYPE_STACK,
 };
 enum bpf_prog_type {
   BPF_PROG_TYPE_UNSPEC,
@@ -138,6 +142,7 @@
   BPF_PROG_TYPE_LWT_SEG6LOCAL,
   BPF_PROG_TYPE_LIRC_MODE2,
   BPF_PROG_TYPE_SK_REUSEPORT,
+  BPF_PROG_TYPE_FLOW_DISSECTOR,
 };
 enum bpf_attach_type {
   BPF_CGROUP_INET_INGRESS,
@@ -157,6 +162,7 @@
   BPF_CGROUP_UDP4_SENDMSG,
   BPF_CGROUP_UDP6_SENDMSG,
   BPF_LIRC_MODE2,
+  BPF_FLOW_DISSECTOR,
   __MAX_BPF_ATTACH_TYPE
 };
 #define MAX_BPF_ATTACH_TYPE __MAX_BPF_ATTACH_TYPE
@@ -295,7 +301,7 @@
     __u64 probe_addr;
   } task_fd_query;
 } __attribute__((aligned(8)));
-#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind), FN(xdp_adjust_tail), FN(skb_get_xfrm_state), FN(get_stack), FN(skb_load_bytes_relative), FN(fib_lookup), FN(sock_hash_update), FN(msg_redirect_hash), FN(sk_redirect_hash), FN(lwt_push_encap), FN(lwt_seg6_store_bytes), FN(lwt_seg6_adjust_srh), FN(lwt_seg6_action), FN(rc_repeat), FN(rc_keydown), FN(skb_cgroup_id), FN(get_current_cgroup_id), FN(get_local_storage), FN(sk_select_reuseport), FN(skb_ancestor_cgroup_id),
+#define __BPF_FUNC_MAPPER(FN) FN(unspec), FN(map_lookup_elem), FN(map_update_elem), FN(map_delete_elem), FN(probe_read), FN(ktime_get_ns), FN(trace_printk), FN(get_prandom_u32), FN(get_smp_processor_id), FN(skb_store_bytes), FN(l3_csum_replace), FN(l4_csum_replace), FN(tail_call), FN(clone_redirect), FN(get_current_pid_tgid), FN(get_current_uid_gid), FN(get_current_comm), FN(get_cgroup_classid), FN(skb_vlan_push), FN(skb_vlan_pop), FN(skb_get_tunnel_key), FN(skb_set_tunnel_key), FN(perf_event_read), FN(redirect), FN(get_route_realm), FN(perf_event_output), FN(skb_load_bytes), FN(get_stackid), FN(csum_diff), FN(skb_get_tunnel_opt), FN(skb_set_tunnel_opt), FN(skb_change_proto), FN(skb_change_type), FN(skb_under_cgroup), FN(get_hash_recalc), FN(get_current_task), FN(probe_write_user), FN(current_task_under_cgroup), FN(skb_change_tail), FN(skb_pull_data), FN(csum_update), FN(set_hash_invalid), FN(get_numa_node_id), FN(skb_change_head), FN(xdp_adjust_head), FN(probe_read_str), FN(get_socket_cookie), FN(get_socket_uid), FN(set_hash), FN(setsockopt), FN(skb_adjust_room), FN(redirect_map), FN(sk_redirect_map), FN(sock_map_update), FN(xdp_adjust_meta), FN(perf_event_read_value), FN(perf_prog_read_value), FN(getsockopt), FN(override_return), FN(sock_ops_cb_flags_set), FN(msg_redirect_map), FN(msg_apply_bytes), FN(msg_cork_bytes), FN(msg_pull_data), FN(bind), FN(xdp_adjust_tail), FN(skb_get_xfrm_state), FN(get_stack), FN(skb_load_bytes_relative), FN(fib_lookup), FN(sock_hash_update), FN(msg_redirect_hash), FN(sk_redirect_hash), FN(lwt_push_encap), FN(lwt_seg6_store_bytes), FN(lwt_seg6_adjust_srh), FN(lwt_seg6_action), FN(rc_repeat), FN(rc_keydown), FN(skb_cgroup_id), FN(get_current_cgroup_id), FN(get_local_storage), FN(sk_select_reuseport), FN(skb_ancestor_cgroup_id), FN(sk_lookup_tcp), FN(sk_lookup_udp), FN(sk_release), FN(map_push_elem), FN(map_pop_elem), FN(map_peek_elem), FN(msg_push_data),
 #define __BPF_ENUM_FN(x) BPF_FUNC_ ##x
 enum bpf_func_id {
   __BPF_FUNC_MAPPER(__BPF_ENUM_FN) __BPF_FUNC_MAX_ID,
@@ -320,6 +326,7 @@
 #define BPF_F_INDEX_MASK 0xffffffffULL
 #define BPF_F_CURRENT_CPU BPF_F_INDEX_MASK
 #define BPF_F_CTXLEN_MASK (0xfffffULL << 32)
+#define BPF_F_CURRENT_NETNS (- 1L)
 enum bpf_adj_room_mode {
   BPF_ADJ_ROOM_NET,
 };
@@ -331,6 +338,8 @@
   BPF_LWT_ENCAP_SEG6,
   BPF_LWT_ENCAP_SEG6_INLINE
 };
+#define __bpf_md_ptr(type,name) union { type name; __u64 : 64; \
+} __attribute__((aligned(8)))
 struct __sk_buff {
   __u32 len;
   __u32 pkt_type;
@@ -358,6 +367,7 @@
   __u32 remote_port;
   __u32 local_port;
   __u32 data_meta;
+  __bpf_md_ptr(struct bpf_flow_keys *, flow_keys);
 };
 struct bpf_tunnel_key {
   __u32 tunnel_id;
@@ -396,6 +406,22 @@
   __u32 src_ip6[4];
   __u32 src_port;
 };
+struct bpf_sock_tuple {
+  union {
+    struct {
+      __be32 saddr;
+      __be32 daddr;
+      __be16 sport;
+      __be16 dport;
+    } ipv4;
+    struct {
+      __be32 saddr[4];
+      __be32 daddr[4];
+      __be16 sport;
+      __be16 dport;
+    } ipv6;
+  };
+};
 #define XDP_PACKET_HEADROOM 256
 enum xdp_action {
   XDP_ABORTED = 0,
@@ -416,8 +442,8 @@
   SK_PASS,
 };
 struct sk_msg_md {
-  void * data;
-  void * data_end;
+  __bpf_md_ptr(void *, data);
+  __bpf_md_ptr(void *, data_end);
   __u32 family;
   __u32 remote_ip4;
   __u32 local_ip4;
@@ -427,8 +453,8 @@
   __u32 local_port;
 };
 struct sk_reuseport_md {
-  void * data;
-  void * data_end;
+  __bpf_md_ptr(void *, data);
+  __bpf_md_ptr(void *, data_end);
   __u32 len;
   __u32 eth_protocol;
   __u32 ip_protocol;
@@ -630,4 +656,26 @@
   BPF_FD_TYPE_UPROBE,
   BPF_FD_TYPE_URETPROBE,
 };
+struct bpf_flow_keys {
+  __u16 nhoff;
+  __u16 thoff;
+  __u16 addr_proto;
+  __u8 is_frag;
+  __u8 is_first_frag;
+  __u8 is_encap;
+  __u8 ip_proto;
+  __be16 n_proto;
+  __be16 sport;
+  __be16 dport;
+  union {
+    struct {
+      __be32 ipv4_src;
+      __be32 ipv4_dst;
+    };
+    struct {
+      __u32 ipv6_src[4];
+      __u32 ipv6_dst[4];
+    };
+  };
+};
 #endif
diff --git a/libc/kernel/uapi/linux/cec.h b/libc/kernel/uapi/linux/cec.h
index fd0f824..05af529 100644
--- a/libc/kernel/uapi/linux/cec.h
+++ b/libc/kernel/uapi/linux/cec.h
@@ -44,9 +44,12 @@
 #define CEC_TX_STATUS_LOW_DRIVE (1 << 3)
 #define CEC_TX_STATUS_ERROR (1 << 4)
 #define CEC_TX_STATUS_MAX_RETRIES (1 << 5)
+#define CEC_TX_STATUS_ABORTED (1 << 6)
+#define CEC_TX_STATUS_TIMEOUT (1 << 7)
 #define CEC_RX_STATUS_OK (1 << 0)
 #define CEC_RX_STATUS_TIMEOUT (1 << 1)
 #define CEC_RX_STATUS_FEATURE_ABORT (1 << 2)
+#define CEC_RX_STATUS_ABORTED (1 << 3)
 #define CEC_LOG_ADDR_INVALID 0xff
 #define CEC_PHYS_ADDR_INVALID 0xffff
 #define CEC_MAX_LOG_ADDRS 4
diff --git a/libc/kernel/uapi/linux/cryptouser.h b/libc/kernel/uapi/linux/cryptouser.h
index 15c46d8..816fb05 100644
--- a/libc/kernel/uapi/linux/cryptouser.h
+++ b/libc/kernel/uapi/linux/cryptouser.h
@@ -24,6 +24,7 @@
   CRYPTO_MSG_UPDATEALG,
   CRYPTO_MSG_GETALG,
   CRYPTO_MSG_DELRNG,
+  CRYPTO_MSG_GETSTAT,
   __CRYPTO_MSG_MAX
 };
 #define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
@@ -42,6 +43,16 @@
   CRYPTOCFGA_REPORT_AKCIPHER,
   CRYPTOCFGA_REPORT_KPP,
   CRYPTOCFGA_REPORT_ACOMP,
+  CRYPTOCFGA_STAT_LARVAL,
+  CRYPTOCFGA_STAT_HASH,
+  CRYPTOCFGA_STAT_BLKCIPHER,
+  CRYPTOCFGA_STAT_AEAD,
+  CRYPTOCFGA_STAT_COMPRESS,
+  CRYPTOCFGA_STAT_RNG,
+  CRYPTOCFGA_STAT_CIPHER,
+  CRYPTOCFGA_STAT_AKCIPHER,
+  CRYPTOCFGA_STAT_KPP,
+  CRYPTOCFGA_STAT_ACOMP,
   __CRYPTOCFGA_MAX
 #define CRYPTOCFGA_MAX (__CRYPTOCFGA_MAX - 1)
 };
@@ -54,6 +65,46 @@
   __u32 cru_refcnt;
   __u32 cru_flags;
 };
+struct crypto_stat {
+  char type[CRYPTO_MAX_NAME];
+  union {
+    __u32 stat_encrypt_cnt;
+    __u32 stat_compress_cnt;
+    __u32 stat_generate_cnt;
+    __u32 stat_hash_cnt;
+    __u32 stat_setsecret_cnt;
+  };
+  union {
+    __u64 stat_encrypt_tlen;
+    __u64 stat_compress_tlen;
+    __u64 stat_generate_tlen;
+    __u64 stat_hash_tlen;
+  };
+  union {
+    __u32 stat_akcipher_err_cnt;
+    __u32 stat_cipher_err_cnt;
+    __u32 stat_compress_err_cnt;
+    __u32 stat_aead_err_cnt;
+    __u32 stat_hash_err_cnt;
+    __u32 stat_rng_err_cnt;
+    __u32 stat_kpp_err_cnt;
+  };
+  union {
+    __u32 stat_decrypt_cnt;
+    __u32 stat_decompress_cnt;
+    __u32 stat_seed_cnt;
+    __u32 stat_generate_public_key_cnt;
+  };
+  union {
+    __u64 stat_decrypt_tlen;
+    __u64 stat_decompress_tlen;
+  };
+  union {
+    __u32 stat_verify_cnt;
+    __u32 stat_compute_shared_secret_cnt;
+  };
+  __u32 stat_sign_cnt;
+};
 struct crypto_report_larval {
   char type[CRYPTO_MAX_NAME];
 };
diff --git a/libc/kernel/uapi/linux/dns_resolver.h b/libc/kernel/uapi/linux/dns_resolver.h
new file mode 100644
index 0000000..21cb5c0
--- /dev/null
+++ b/libc/kernel/uapi/linux/dns_resolver.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_DNS_RESOLVER_H
+#define _UAPI_LINUX_DNS_RESOLVER_H
+#include <linux/types.h>
+enum dns_payload_content_type {
+  DNS_PAYLOAD_IS_SERVER_LIST = 0,
+};
+enum dns_payload_address_type {
+  DNS_ADDRESS_IS_IPV4 = 0,
+  DNS_ADDRESS_IS_IPV6 = 1,
+};
+enum dns_payload_protocol_type {
+  DNS_SERVER_PROTOCOL_UNSPECIFIED = 0,
+  DNS_SERVER_PROTOCOL_UDP = 1,
+  DNS_SERVER_PROTOCOL_TCP = 2,
+};
+enum dns_record_source {
+  DNS_RECORD_UNAVAILABLE = 0,
+  DNS_RECORD_FROM_CONFIG = 1,
+  DNS_RECORD_FROM_DNS_A = 2,
+  DNS_RECORD_FROM_DNS_AFSDB = 3,
+  DNS_RECORD_FROM_DNS_SRV = 4,
+  DNS_RECORD_FROM_NSS = 5,
+  NR__dns_record_source
+};
+enum dns_lookup_status {
+  DNS_LOOKUP_NOT_DONE = 0,
+  DNS_LOOKUP_GOOD = 1,
+  DNS_LOOKUP_GOOD_WITH_BAD = 2,
+  DNS_LOOKUP_BAD = 3,
+  DNS_LOOKUP_GOT_NOT_FOUND = 4,
+  DNS_LOOKUP_GOT_LOCAL_FAILURE = 5,
+  DNS_LOOKUP_GOT_TEMP_FAILURE = 6,
+  DNS_LOOKUP_GOT_NS_FAILURE = 7,
+  NR__dns_lookup_status
+};
+struct dns_payload_header {
+  __u8 zero;
+  __u8 content;
+  __u8 version;
+} __packed;
+struct dns_server_list_v1_header {
+  struct dns_payload_header hdr;
+  __u8 source;
+  __u8 status;
+  __u8 nr_servers;
+} __packed;
+struct dns_server_list_v1_server {
+  __u16 name_len;
+  __u16 priority;
+  __u16 weight;
+  __u16 port;
+  __u8 source;
+  __u8 status;
+  __u8 protocol;
+  __u8 nr_addrs;
+} __packed;
+struct dns_server_list_v1_address {
+  __u8 address_type;
+} __packed;
+#endif
diff --git a/libc/kernel/uapi/linux/elf-em.h b/libc/kernel/uapi/linux/elf-em.h
index b7c89da..5b54e18 100644
--- a/libc/kernel/uapi/linux/elf-em.h
+++ b/libc/kernel/uapi/linux/elf-em.h
@@ -52,6 +52,7 @@
 #define EM_TILEPRO 188
 #define EM_MICROBLAZE 189
 #define EM_TILEGX 191
+#define EM_RISCV 243
 #define EM_BPF 247
 #define EM_FRV 0x5441
 #define EM_ALPHA 0x9026
diff --git a/libc/kernel/uapi/linux/fanotify.h b/libc/kernel/uapi/linux/fanotify.h
index 73d92ca..00a1871 100644
--- a/libc/kernel/uapi/linux/fanotify.h
+++ b/libc/kernel/uapi/linux/fanotify.h
@@ -39,15 +39,18 @@
 #define FAN_UNLIMITED_QUEUE 0x00000010
 #define FAN_UNLIMITED_MARKS 0x00000020
 #define FAN_ENABLE_AUDIT 0x00000040
+#define FAN_REPORT_TID 0x00000100
 #define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK | FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS)
 #define FAN_MARK_ADD 0x00000001
 #define FAN_MARK_REMOVE 0x00000002
 #define FAN_MARK_DONT_FOLLOW 0x00000004
 #define FAN_MARK_ONLYDIR 0x00000008
-#define FAN_MARK_MOUNT 0x00000010
 #define FAN_MARK_IGNORED_MASK 0x00000020
 #define FAN_MARK_IGNORED_SURV_MODIFY 0x00000040
 #define FAN_MARK_FLUSH 0x00000080
+#define FAN_MARK_INODE 0x00000000
+#define FAN_MARK_MOUNT 0x00000010
+#define FAN_MARK_FILESYSTEM 0x00000100
 #define FAN_ALL_MARK_FLAGS (FAN_MARK_ADD | FAN_MARK_REMOVE | FAN_MARK_DONT_FOLLOW | FAN_MARK_ONLYDIR | FAN_MARK_MOUNT | FAN_MARK_IGNORED_MASK | FAN_MARK_IGNORED_SURV_MODIFY | FAN_MARK_FLUSH)
 #define FAN_ALL_EVENTS (FAN_ACCESS | FAN_MODIFY | FAN_CLOSE | FAN_OPEN)
 #define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM | FAN_ACCESS_PERM)
diff --git a/libc/kernel/uapi/linux/fuse.h b/libc/kernel/uapi/linux/fuse.h
index a727580..3c3a124 100644
--- a/libc/kernel/uapi/linux/fuse.h
+++ b/libc/kernel/uapi/linux/fuse.h
@@ -20,7 +20,7 @@
 #define _LINUX_FUSE_H
 #include <stdint.h>
 #define FUSE_KERNEL_VERSION 7
-#define FUSE_KERNEL_MINOR_VERSION 27
+#define FUSE_KERNEL_MINOR_VERSION 28
 #define FUSE_ROOT_ID 1
 struct fuse_attr {
   uint64_t ino;
@@ -72,6 +72,7 @@
 #define FOPEN_DIRECT_IO (1 << 0)
 #define FOPEN_KEEP_CACHE (1 << 1)
 #define FOPEN_NONSEEKABLE (1 << 2)
+#define FOPEN_CACHE_DIR (1 << 3)
 #define FUSE_ASYNC_READ (1 << 0)
 #define FUSE_POSIX_LOCKS (1 << 1)
 #define FUSE_FILE_OPS (1 << 2)
@@ -94,6 +95,8 @@
 #define FUSE_HANDLE_KILLPRIV (1 << 19)
 #define FUSE_POSIX_ACL (1 << 20)
 #define FUSE_ABORT_ERROR (1 << 21)
+#define FUSE_MAX_PAGES (1 << 22)
+#define FUSE_CACHE_SYMLINKS (1 << 23)
 #define CUSE_UNRESTRICTED_IOCTL (1 << 0)
 #define FUSE_RELEASE_FLUSH (1 << 0)
 #define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1)
@@ -154,6 +157,7 @@
   FUSE_READDIRPLUS = 44,
   FUSE_RENAME2 = 45,
   FUSE_LSEEK = 46,
+  FUSE_COPY_FILE_RANGE = 47,
   CUSE_INIT = 4096,
 };
 enum fuse_notify_code {
@@ -341,7 +345,9 @@
   uint16_t congestion_threshold;
   uint32_t max_write;
   uint32_t time_gran;
-  uint32_t unused[9];
+  uint16_t max_pages;
+  uint16_t padding;
+  uint32_t unused[8];
 };
 #define CUSE_INIT_INFO_MAX 4096
 struct cuse_init_in {
@@ -488,4 +494,13 @@
 struct fuse_lseek_out {
   uint64_t offset;
 };
+struct fuse_copy_file_range_in {
+  uint64_t fh_in;
+  uint64_t off_in;
+  uint64_t nodeid_out;
+  uint64_t fh_out;
+  uint64_t off_out;
+  uint64_t len;
+  uint64_t flags;
+};
 #endif
diff --git a/libc/kernel/uapi/linux/gen_stats.h b/libc/kernel/uapi/linux/gen_stats.h
index 127ae88..0b6c228 100644
--- a/libc/kernel/uapi/linux/gen_stats.h
+++ b/libc/kernel/uapi/linux/gen_stats.h
@@ -27,6 +27,7 @@
   TCA_STATS_APP,
   TCA_STATS_RATE_EST64,
   TCA_STATS_PAD,
+  TCA_STATS_BASIC_HW,
   __TCA_STATS_MAX,
 };
 #define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
diff --git a/libc/kernel/uapi/linux/if_addr.h b/libc/kernel/uapi/linux/if_addr.h
index 0a4b0ae..6a6b640 100644
--- a/libc/kernel/uapi/linux/if_addr.h
+++ b/libc/kernel/uapi/linux/if_addr.h
@@ -38,6 +38,7 @@
   IFA_MULTICAST,
   IFA_FLAGS,
   IFA_RT_PRIORITY,
+  IFA_TARGET_NETNSID,
   __IFA_MAX,
 };
 #define IFA_MAX (__IFA_MAX - 1)
diff --git a/libc/kernel/uapi/linux/if_arp.h b/libc/kernel/uapi/linux/if_arp.h
index 0b1959d..eda888f 100644
--- a/libc/kernel/uapi/linux/if_arp.h
+++ b/libc/kernel/uapi/linux/if_arp.h
@@ -98,7 +98,7 @@
   struct sockaddr arp_ha;
   int arp_flags;
   struct sockaddr arp_netmask;
-  char arp_dev[16];
+  char arp_dev[IFNAMSIZ];
 };
 struct arpreq_old {
   struct sockaddr arp_pa;
diff --git a/libc/kernel/uapi/linux/if_fddi.h b/libc/kernel/uapi/linux/if_fddi.h
index 4efd7f8..4b5074b 100644
--- a/libc/kernel/uapi/linux/if_fddi.h
+++ b/libc/kernel/uapi/linux/if_fddi.h
@@ -29,6 +29,18 @@
 #define FDDI_K_LLC_ZLEN 13
 #define FDDI_K_LLC_LEN 4491
 #define FDDI_K_OUI_LEN 3
+#define FDDI_FC_K_CLASS_MASK 0x80
+#define FDDI_FC_K_CLASS_SYNC 0x80
+#define FDDI_FC_K_CLASS_ASYNC 0x00
+#define FDDI_FC_K_ALEN_MASK 0x40
+#define FDDI_FC_K_ALEN_48 0x40
+#define FDDI_FC_K_ALEN_16 0x00
+#define FDDI_FC_K_FORMAT_MASK 0x30
+#define FDDI_FC_K_FORMAT_FUTURE 0x30
+#define FDDI_FC_K_FORMAT_IMPLEMENTOR 0x20
+#define FDDI_FC_K_FORMAT_LLC 0x10
+#define FDDI_FC_K_FORMAT_MANAGEMENT 0x00
+#define FDDI_FC_K_CONTROL_MASK 0x0f
 #define FDDI_FC_K_VOID 0x00
 #define FDDI_FC_K_NON_RESTRICTED_TOKEN 0x80
 #define FDDI_FC_K_RESTRICTED_TOKEN 0xC0
diff --git a/libc/kernel/uapi/linux/if_link.h b/libc/kernel/uapi/linux/if_link.h
index 4bbf21d..2c80d3d 100644
--- a/libc/kernel/uapi/linux/if_link.h
+++ b/libc/kernel/uapi/linux/if_link.h
@@ -138,6 +138,7 @@
   IFLA_EVENT,
   IFLA_NEW_NETNSID,
   IFLA_IF_NETNSID,
+  IFLA_TARGET_NETNSID = IFLA_IF_NETNSID,
   IFLA_CARRIER_UP_COUNT,
   IFLA_CARRIER_DOWN_COUNT,
   IFLA_NEW_IFINDEX,
@@ -219,6 +220,7 @@
   IFLA_BR_MCAST_STATS_ENABLED,
   IFLA_BR_MCAST_IGMP_VERSION,
   IFLA_BR_MCAST_MLD_VERSION,
+  IFLA_BR_VLAN_STATS_PER_PORT,
   __IFLA_BR_MAX,
 };
 #define IFLA_BR_MAX (__IFLA_BR_MAX - 1)
@@ -444,6 +446,7 @@
   IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
   IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
   IFLA_GENEVE_LABEL,
+  IFLA_GENEVE_TTL_INHERIT,
   __IFLA_GENEVE_MAX
 };
 #define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1)
diff --git a/libc/kernel/uapi/linux/if_packet.h b/libc/kernel/uapi/linux/if_packet.h
index 61d0a3a..300aa7b 100644
--- a/libc/kernel/uapi/linux/if_packet.h
+++ b/libc/kernel/uapi/linux/if_packet.h
@@ -63,6 +63,7 @@
 #define PACKET_QDISC_BYPASS 20
 #define PACKET_ROLLOVER_STATS 21
 #define PACKET_FANOUT_DATA 22
+#define PACKET_IGNORE_OUTGOING 23
 #define PACKET_FANOUT_HASH 0
 #define PACKET_FANOUT_LB 1
 #define PACKET_FANOUT_CPU 2
diff --git a/libc/kernel/uapi/linux/if_tunnel.h b/libc/kernel/uapi/linux/if_tunnel.h
index d41dc49..8e1847f 100644
--- a/libc/kernel/uapi/linux/if_tunnel.h
+++ b/libc/kernel/uapi/linux/if_tunnel.h
@@ -154,4 +154,20 @@
   __IFLA_VTI_MAX,
 };
 #define IFLA_VTI_MAX (__IFLA_VTI_MAX - 1)
+#define TUNNEL_CSUM __cpu_to_be16(0x01)
+#define TUNNEL_ROUTING __cpu_to_be16(0x02)
+#define TUNNEL_KEY __cpu_to_be16(0x04)
+#define TUNNEL_SEQ __cpu_to_be16(0x08)
+#define TUNNEL_STRICT __cpu_to_be16(0x10)
+#define TUNNEL_REC __cpu_to_be16(0x20)
+#define TUNNEL_VERSION __cpu_to_be16(0x40)
+#define TUNNEL_NO_KEY __cpu_to_be16(0x80)
+#define TUNNEL_DONT_FRAGMENT __cpu_to_be16(0x0100)
+#define TUNNEL_OAM __cpu_to_be16(0x0200)
+#define TUNNEL_CRIT_OPT __cpu_to_be16(0x0400)
+#define TUNNEL_GENEVE_OPT __cpu_to_be16(0x0800)
+#define TUNNEL_VXLAN_OPT __cpu_to_be16(0x1000)
+#define TUNNEL_NOCACHE __cpu_to_be16(0x2000)
+#define TUNNEL_ERSPAN_OPT __cpu_to_be16(0x4000)
+#define TUNNEL_OPTIONS_PRESENT (TUNNEL_GENEVE_OPT | TUNNEL_VXLAN_OPT | TUNNEL_ERSPAN_OPT)
 #endif
diff --git a/libc/kernel/uapi/linux/in.h b/libc/kernel/uapi/linux/in.h
index 788a6d9..78bd72a 100644
--- a/libc/kernel/uapi/linux/in.h
+++ b/libc/kernel/uapi/linux/in.h
@@ -200,9 +200,12 @@
 #define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET)
 #define IN_CLASSD(a) ((((long int) (a)) & 0xf0000000) == 0xe0000000)
 #define IN_MULTICAST(a) IN_CLASSD(a)
-#define IN_MULTICAST_NET 0xF0000000
-#define IN_EXPERIMENTAL(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
-#define IN_BADCLASS(a) IN_EXPERIMENTAL((a))
+#define IN_MULTICAST_NET 0xe0000000
+#define IN_BADCLASS(a) (((long int) (a)) == (long int)0xffffffff)
+#define IN_EXPERIMENTAL(a) IN_BADCLASS((a))
+#define IN_CLASSE(a) ((((long int) (a)) & 0xf0000000) == 0xf0000000)
+#define IN_CLASSE_NET 0xffffffff
+#define IN_CLASSE_NSHIFT 0
 #define INADDR_ANY ((unsigned long int) 0x00000000)
 #define INADDR_BROADCAST ((unsigned long int) 0xffffffff)
 #define INADDR_NONE ((unsigned long int) 0xffffffff)
diff --git a/libc/kernel/uapi/linux/in6.h b/libc/kernel/uapi/linux/in6.h
index 9da111c..3627f52 100644
--- a/libc/kernel/uapi/linux/in6.h
+++ b/libc/kernel/uapi/linux/in6.h
@@ -132,6 +132,7 @@
 #define IPV6_V6ONLY 26
 #define IPV6_JOIN_ANYCAST 27
 #define IPV6_LEAVE_ANYCAST 28
+#define IPV6_MULTICAST_ALL 29
 #define IPV6_PMTUDISC_DONT 0
 #define IPV6_PMTUDISC_WANT 1
 #define IPV6_PMTUDISC_DO 2
diff --git a/libc/kernel/uapi/linux/input-event-codes.h b/libc/kernel/uapi/linux/input-event-codes.h
index d8ae4c8..11e6d5b 100644
--- a/libc/kernel/uapi/linux/input-event-codes.h
+++ b/libc/kernel/uapi/linux/input-event-codes.h
@@ -622,6 +622,7 @@
 #define REL_DIAL 0x07
 #define REL_WHEEL 0x08
 #define REL_MISC 0x09
+#define REL_RESERVED 0x0a
 #define REL_MAX 0x0f
 #define REL_CNT (REL_MAX + 1)
 #define ABS_X 0x00
@@ -650,6 +651,7 @@
 #define ABS_TOOL_WIDTH 0x1c
 #define ABS_VOLUME 0x20
 #define ABS_MISC 0x28
+#define ABS_RESERVED 0x2e
 #define ABS_MT_SLOT 0x2f
 #define ABS_MT_TOUCH_MAJOR 0x30
 #define ABS_MT_TOUCH_MINOR 0x31
diff --git a/libc/kernel/uapi/linux/keyctl.h b/libc/kernel/uapi/linux/keyctl.h
index 0cc7f55..53f0468 100644
--- a/libc/kernel/uapi/linux/keyctl.h
+++ b/libc/kernel/uapi/linux/keyctl.h
@@ -60,9 +60,19 @@
 #define KEYCTL_INVALIDATE 21
 #define KEYCTL_GET_PERSISTENT 22
 #define KEYCTL_DH_COMPUTE 23
+#define KEYCTL_PKEY_QUERY 24
+#define KEYCTL_PKEY_ENCRYPT 25
+#define KEYCTL_PKEY_DECRYPT 26
+#define KEYCTL_PKEY_SIGN 27
+#define KEYCTL_PKEY_VERIFY 28
 #define KEYCTL_RESTRICT_KEYRING 29
 struct keyctl_dh_params {
-  __s32 __linux_private;
+  union {
+#ifndef __cplusplus
+    __s32 __linux_private;
+#endif
+    __s32 priv;
+  };
   __s32 prime;
   __s32 base;
 };
@@ -72,4 +82,26 @@
   __u32 otherinfolen;
   __u32 __spare[8];
 };
+#define KEYCTL_SUPPORTS_ENCRYPT 0x01
+#define KEYCTL_SUPPORTS_DECRYPT 0x02
+#define KEYCTL_SUPPORTS_SIGN 0x04
+#define KEYCTL_SUPPORTS_VERIFY 0x08
+struct keyctl_pkey_query {
+  __u32 supported_ops;
+  __u32 key_size;
+  __u16 max_data_size;
+  __u16 max_sig_size;
+  __u16 max_enc_size;
+  __u16 max_dec_size;
+  __u32 __spare[10];
+};
+struct keyctl_pkey_params {
+  __s32 key_id;
+  __u32 in_len;
+  union {
+    __u32 out_len;
+    __u32 in2_len;
+  };
+  __u32 __spare[7];
+};
 #endif
diff --git a/libc/kernel/uapi/linux/kfd_ioctl.h b/libc/kernel/uapi/linux/kfd_ioctl.h
index 55aff04..525f672 100644
--- a/libc/kernel/uapi/linux/kfd_ioctl.h
+++ b/libc/kernel/uapi/linux/kfd_ioctl.h
@@ -64,6 +64,13 @@
   __u32 num_cu_mask;
   __u64 cu_mask_ptr;
 };
+struct kfd_ioctl_get_queue_wave_state_args {
+  __u64 ctl_stack_address;
+  __u32 ctl_stack_used_size;
+  __u32 save_area_used_size;
+  __u32 queue_id;
+  __u32 pad;
+};
 #define KFD_IOC_CACHE_POLICY_COHERENT 0
 #define KFD_IOC_CACHE_POLICY_NONCOHERENT 1
 struct kfd_ioctl_set_memory_policy_args {
@@ -175,10 +182,10 @@
   __u32 pad;
 };
 struct kfd_hsa_hw_exception_data {
-  uint32_t reset_type;
-  uint32_t reset_cause;
-  uint32_t memory_lost;
-  uint32_t gpu_id;
+  __u32 reset_type;
+  __u32 reset_cause;
+  __u32 memory_lost;
+  __u32 gpu_id;
 };
 struct kfd_event_data {
   union {
@@ -285,6 +292,7 @@
 #define AMDKFD_IOC_MAP_MEMORY_TO_GPU AMDKFD_IOWR(0x18, struct kfd_ioctl_map_memory_to_gpu_args)
 #define AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU AMDKFD_IOWR(0x19, struct kfd_ioctl_unmap_memory_from_gpu_args)
 #define AMDKFD_IOC_SET_CU_MASK AMDKFD_IOW(0x1A, struct kfd_ioctl_set_cu_mask_args)
+#define AMDKFD_IOC_GET_QUEUE_WAVE_STATE AMDKFD_IOWR(0x1B, struct kfd_ioctl_get_queue_wave_state_args)
 #define AMDKFD_COMMAND_START 0x01
-#define AMDKFD_COMMAND_END 0x1B
+#define AMDKFD_COMMAND_END 0x1C
 #endif
diff --git a/libc/kernel/uapi/linux/kvm.h b/libc/kernel/uapi/linux/kvm.h
index 14e882b..b70bcd9 100644
--- a/libc/kernel/uapi/linux/kvm.h
+++ b/libc/kernel/uapi/linux/kvm.h
@@ -316,12 +316,18 @@
 struct kvm_coalesced_mmio_zone {
   __u64 addr;
   __u32 size;
-  __u32 pad;
+  union {
+    __u32 pad;
+    __u32 pio;
+  };
 };
 struct kvm_coalesced_mmio {
   __u64 phys_addr;
   __u32 len;
-  __u32 pad;
+  union {
+    __u32 pad;
+    __u32 pio;
+  };
   __u8 data[8];
 };
 struct kvm_coalesced_mmio_ring {
@@ -539,6 +545,7 @@
 };
 #define KVM_PPC_PAGE_SIZES_REAL 0x00000001
 #define KVM_PPC_1T_SEGMENTS 0x00000002
+#define KVM_PPC_NO_HASH 0x00000004
 struct kvm_ppc_smmu_info {
   __u64 flags;
   __u32 slb_size;
@@ -558,6 +565,8 @@
 #define KVM_VM_MIPS_TE 0
 #define KVM_VM_MIPS_VZ 1
 #define KVM_S390_SIE_PAGE_OFFSET 1
+#define KVM_VM_TYPE_ARM_IPA_SIZE_MASK 0xffULL
+#define KVM_VM_TYPE_ARM_IPA_SIZE(x) ((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
 #define KVM_GET_API_VERSION _IO(KVMIO, 0x00)
 #define KVM_CREATE_VM _IO(KVMIO, 0x01)
 #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list)
@@ -744,6 +753,12 @@
 #define KVM_CAP_NESTED_STATE 157
 #define KVM_CAP_ARM_INJECT_SERROR_ESR 158
 #define KVM_CAP_MSR_PLATFORM_INFO 159
+#define KVM_CAP_PPC_NESTED_HV 160
+#define KVM_CAP_HYPERV_SEND_IPI 161
+#define KVM_CAP_COALESCED_PIO 162
+#define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163
+#define KVM_CAP_EXCEPTION_PAYLOAD 164
+#define KVM_CAP_ARM_VM_IPA_SIZE 165
 #ifdef KVM_CAP_IRQ_ROUTING
 struct kvm_irq_routing_irqchip {
   __u32 irqchip;
diff --git a/libc/kernel/uapi/linux/magic.h b/libc/kernel/uapi/linux/magic.h
index 68b4c65..bf57a58 100644
--- a/libc/kernel/uapi/linux/magic.h
+++ b/libc/kernel/uapi/linux/magic.h
@@ -45,6 +45,7 @@
 #define HPFS_SUPER_MAGIC 0xf995e849
 #define ISOFS_SUPER_MAGIC 0x9660
 #define JFFS2_SUPER_MAGIC 0x72b6
+#define XFS_SUPER_MAGIC 0x58465342
 #define PSTOREFS_MAGIC 0x6165676C
 #define EFIVARFS_MAGIC 0xde5e81e4
 #define HOSTFS_SUPER_MAGIC 0x00c0ffee
diff --git a/libc/kernel/uapi/linux/media.h b/libc/kernel/uapi/linux/media.h
index eefc07a..4ba0ef6 100644
--- a/libc/kernel/uapi/linux/media.h
+++ b/libc/kernel/uapi/linux/media.h
@@ -198,6 +198,9 @@
 #define MEDIA_IOC_ENUM_LINKS _IOWR('|', 0x02, struct media_links_enum)
 #define MEDIA_IOC_SETUP_LINK _IOWR('|', 0x03, struct media_link_desc)
 #define MEDIA_IOC_G_TOPOLOGY _IOWR('|', 0x04, struct media_v2_topology)
+#define MEDIA_IOC_REQUEST_ALLOC _IOR('|', 0x05, int)
+#define MEDIA_REQUEST_IOC_QUEUE _IO('|', 0x80)
+#define MEDIA_REQUEST_IOC_REINIT _IO('|', 0x81)
 #define MEDIA_ENT_TYPE_SHIFT 16
 #define MEDIA_ENT_TYPE_MASK 0x00ff0000
 #define MEDIA_ENT_SUBTYPE_MASK 0x0000ffff
diff --git a/libc/kernel/uapi/linux/ncsi.h b/libc/kernel/uapi/linux/ncsi.h
index 6b128e4..23cdf1b 100644
--- a/libc/kernel/uapi/linux/ncsi.h
+++ b/libc/kernel/uapi/linux/ncsi.h
@@ -23,6 +23,7 @@
   NCSI_CMD_PKG_INFO,
   NCSI_CMD_SET_INTERFACE,
   NCSI_CMD_CLEAR_INTERFACE,
+  NCSI_CMD_SEND_CMD,
   __NCSI_CMD_AFTER_LAST,
   NCSI_CMD_MAX = __NCSI_CMD_AFTER_LAST - 1
 };
@@ -32,6 +33,7 @@
   NCSI_ATTR_PACKAGE_LIST,
   NCSI_ATTR_PACKAGE_ID,
   NCSI_ATTR_CHANNEL_ID,
+  NCSI_ATTR_DATA,
   __NCSI_ATTR_AFTER_LAST,
   NCSI_ATTR_MAX = __NCSI_ATTR_AFTER_LAST - 1
 };
diff --git a/libc/kernel/uapi/linux/ndctl.h b/libc/kernel/uapi/linux/ndctl.h
index bee0b1c..742fbad 100644
--- a/libc/kernel/uapi/linux/ndctl.h
+++ b/libc/kernel/uapi/linux/ndctl.h
@@ -140,9 +140,6 @@
   ND_DRIVER_NAMESPACE_BLK = 1 << ND_DEVICE_NAMESPACE_BLK,
   ND_DRIVER_DAX_PMEM = 1 << ND_DEVICE_DAX_PMEM,
 };
-enum {
-  ND_MIN_NAMESPACE_SIZE = PAGE_SIZE,
-};
 enum ars_masks {
   ARS_STATUS_MASK = 0x0000FFFF,
   ARS_EXT_STATUS_SHIFT = 16,
diff --git a/libc/kernel/uapi/linux/neighbour.h b/libc/kernel/uapi/linux/neighbour.h
index cf32a12..6329211 100644
--- a/libc/kernel/uapi/linux/neighbour.h
+++ b/libc/kernel/uapi/linux/neighbour.h
@@ -51,6 +51,7 @@
 #define NTF_PROXY 0x08
 #define NTF_EXT_LEARNED 0x10
 #define NTF_OFFLOADED 0x20
+#define NTF_STICKY 0x40
 #define NTF_ROUTER 0x80
 #define NUD_INCOMPLETE 0x01
 #define NUD_REACHABLE 0x02
diff --git a/libc/kernel/uapi/linux/net_tstamp.h b/libc/kernel/uapi/linux/net_tstamp.h
index 2f022ea..375906a 100644
--- a/libc/kernel/uapi/linux/net_tstamp.h
+++ b/libc/kernel/uapi/linux/net_tstamp.h
@@ -80,7 +80,7 @@
   SOF_TXTIME_FLAGS_MASK = (SOF_TXTIME_FLAGS_LAST - 1) | SOF_TXTIME_FLAGS_LAST
 };
 struct sock_txtime {
-  clockid_t clockid;
+  __kernel_clockid_t clockid;
   __u32 flags;
 };
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter/nf_tables.h b/libc/kernel/uapi/linux/netfilter/nf_tables.h
index 63394e0..2bb7c86 100644
--- a/libc/kernel/uapi/linux/netfilter/nf_tables.h
+++ b/libc/kernel/uapi/linux/netfilter/nf_tables.h
@@ -419,6 +419,7 @@
   NFT_RT_NEXTHOP4,
   NFT_RT_NEXTHOP6,
   NFT_RT_TCPMSS,
+  NFT_RT_XFRM,
   __NFT_RT_MAX
 };
 #define NFT_RT_MAX (__NFT_RT_MAX - 1)
@@ -596,6 +597,13 @@
   __NFTA_QUOTA_MAX
 };
 #define NFTA_QUOTA_MAX (__NFTA_QUOTA_MAX - 1)
+enum nft_secmark_attributes {
+  NFTA_SECMARK_UNSPEC,
+  NFTA_SECMARK_CTX,
+  __NFTA_SECMARK_MAX,
+};
+#define NFTA_SECMARK_MAX (__NFTA_SECMARK_MAX - 1)
+#define NFT_SECMARK_CTX_MAXLEN 256
 enum nft_reject_types {
   NFT_REJECT_ICMP_UNREACH,
   NFT_REJECT_TCP_RST,
@@ -737,7 +745,8 @@
 #define NFT_OBJECT_CONNLIMIT 5
 #define NFT_OBJECT_TUNNEL 6
 #define NFT_OBJECT_CT_TIMEOUT 7
-#define __NFT_OBJECT_MAX 8
+#define NFT_OBJECT_SECMARK 8
+#define __NFT_OBJECT_MAX 9
 #define NFT_OBJECT_MAX (__NFT_OBJECT_MAX - 1)
 enum nft_object_attributes {
   NFTA_OBJ_UNSPEC,
@@ -773,6 +782,7 @@
 enum nft_osf_attributes {
   NFTA_OSF_UNSPEC,
   NFTA_OSF_DREG,
+  NFTA_OSF_TTL,
   __NFTA_OSF_MAX,
 };
 #define NFTA_OSF_MAX (__NFTA_OSF_MAX - 1)
@@ -782,6 +792,26 @@
   __NFTA_DEVICE_MAX
 };
 #define NFTA_DEVICE_MAX (__NFTA_DEVICE_MAX - 1)
+enum nft_xfrm_attributes {
+  NFTA_XFRM_UNSPEC,
+  NFTA_XFRM_DREG,
+  NFTA_XFRM_KEY,
+  NFTA_XFRM_DIR,
+  NFTA_XFRM_SPNUM,
+  __NFTA_XFRM_MAX
+};
+#define NFTA_XFRM_MAX (__NFTA_XFRM_MAX - 1)
+enum nft_xfrm_keys {
+  NFT_XFRM_KEY_UNSPEC,
+  NFT_XFRM_KEY_DADDR_IP4,
+  NFT_XFRM_KEY_DADDR_IP6,
+  NFT_XFRM_KEY_SADDR_IP4,
+  NFT_XFRM_KEY_SADDR_IP6,
+  NFT_XFRM_KEY_REQID,
+  NFT_XFRM_KEY_SPI,
+  __NFT_XFRM_KEY_MAX,
+};
+#define NFT_XFRM_KEY_MAX (__NFT_XFRM_KEY_MAX - 1)
 enum nft_trace_attributes {
   NFTA_TRACE_UNSPEC,
   NFTA_TRACE_TABLE,
diff --git a/libc/kernel/uapi/linux/netfilter/xt_cgroup.h b/libc/kernel/uapi/linux/netfilter/xt_cgroup.h
index ccc0349..6d939ea 100644
--- a/libc/kernel/uapi/linux/netfilter/xt_cgroup.h
+++ b/libc/kernel/uapi/linux/netfilter/xt_cgroup.h
@@ -33,4 +33,16 @@
   __u32 classid;
   void * priv __attribute__((aligned(8)));
 };
+#define XT_CGROUP_PATH_MAX 512
+struct xt_cgroup_info_v2 {
+  __u8 has_path;
+  __u8 has_classid;
+  __u8 invert_path;
+  __u8 invert_classid;
+  union {
+    char path[XT_CGROUP_PATH_MAX];
+    __u32 classid;
+  };
+  void * priv __attribute__((aligned(8)));
+};
 #endif
diff --git a/libc/kernel/uapi/linux/netfilter_bridge.h b/libc/kernel/uapi/linux/netfilter_bridge.h
index 6da98f5..e1434f4 100644
--- a/libc/kernel/uapi/linux/netfilter_bridge.h
+++ b/libc/kernel/uapi/linux/netfilter_bridge.h
@@ -23,6 +23,7 @@
 #include <linux/if_ether.h>
 #include <linux/if_vlan.h>
 #include <linux/if_pppox.h>
+#include <limits.h>
 #define NF_BR_PRE_ROUTING 0
 #define NF_BR_LOCAL_IN 1
 #define NF_BR_FORWARD 2
diff --git a/libc/kernel/uapi/linux/netlink.h b/libc/kernel/uapi/linux/netlink.h
index 4f35c02..4c0fd1f 100644
--- a/libc/kernel/uapi/linux/netlink.h
+++ b/libc/kernel/uapi/linux/netlink.h
@@ -112,6 +112,7 @@
 #define NETLINK_LIST_MEMBERSHIPS 9
 #define NETLINK_CAP_ACK 10
 #define NETLINK_EXT_ACK 11
+#define NETLINK_GET_STRICT_CHK 12
 struct nl_pktinfo {
   __u32 group;
 };
diff --git a/libc/kernel/uapi/linux/nilfs2_api.h b/libc/kernel/uapi/linux/nilfs2_api.h
index 2f2692e..d6a6b8f 100644
--- a/libc/kernel/uapi/linux/nilfs2_api.h
+++ b/libc/kernel/uapi/linux/nilfs2_api.h
@@ -39,6 +39,16 @@
 #define NILFS_CPINFO_FNS(flag,name) static inline int nilfs_cpinfo_ ##name(const struct nilfs_cpinfo * cpinfo) \
 { return ! ! (cpinfo->ci_flags & (1UL << NILFS_CPINFO_ ##flag)); \
 }
+struct nilfs_suinfo {
+  __u64 sui_lastmod;
+  __u32 sui_nblocks;
+  __u32 sui_flags;
+};
+enum {
+  NILFS_SUINFO_ACTIVE,
+  NILFS_SUINFO_DIRTY,
+  NILFS_SUINFO_ERROR,
+};
 #define NILFS_SUINFO_FNS(flag,name) static inline int nilfs_suinfo_ ##name(const struct nilfs_suinfo * si) \
 { return si->sui_flags & (1UL << NILFS_SUINFO_ ##flag); \
 }
@@ -61,6 +71,15 @@
 } static inline int nilfs_suinfo_update_ ##name(const struct nilfs_suinfo_update * sup) \
 { return ! ! (sup->sup_flags & (1UL << NILFS_SUINFO_UPDATE_ ##flag)); \
 }
+enum {
+  NILFS_CHECKPOINT,
+  NILFS_SNAPSHOT,
+};
+struct nilfs_cpmode {
+  __u64 cm_cno;
+  __u32 cm_mode;
+  __u32 cm_pad;
+};
 struct nilfs_argv {
   __u64 v_base;
   __u32 v_nmembs;
diff --git a/libc/kernel/uapi/linux/nilfs2_ondisk.h b/libc/kernel/uapi/linux/nilfs2_ondisk.h
index d70b75f..e9995a1 100644
--- a/libc/kernel/uapi/linux/nilfs2_ondisk.h
+++ b/libc/kernel/uapi/linux/nilfs2_ondisk.h
@@ -254,6 +254,11 @@
 } static inline int nilfs_checkpoint_ ##name(const struct nilfs_checkpoint * cp) \
 { return ! ! (le32_to_cpu(cp->cp_flags) & (1UL << NILFS_CHECKPOINT_ ##flag)); \
 }
+struct nilfs_cpfile_header {
+  __le64 ch_ncheckpoints;
+  __le64 ch_nsnapshots;
+  struct nilfs_snapshot_list ch_snapshot_list;
+};
 #define NILFS_CPFILE_FIRST_CHECKPOINT_OFFSET ((sizeof(struct nilfs_cpfile_header) + sizeof(struct nilfs_checkpoint) - 1) / sizeof(struct nilfs_checkpoint))
 struct nilfs_segment_usage {
   __le64 su_lastmod;
diff --git a/libc/kernel/uapi/linux/nl80211.h b/libc/kernel/uapi/linux/nl80211.h
index 1f2f77d..471e65f 100644
--- a/libc/kernel/uapi/linux/nl80211.h
+++ b/libc/kernel/uapi/linux/nl80211.h
@@ -163,6 +163,7 @@
   NL80211_CMD_EXTERNAL_AUTH,
   NL80211_CMD_STA_OPMODE_CHANGED,
   NL80211_CMD_CONTROL_PORT_FRAME,
+  NL80211_CMD_GET_FTM_RESPONDER_STATS,
   __NL80211_CMD_AFTER_LAST,
   NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
 };
@@ -449,6 +450,8 @@
   NL80211_ATTR_TXQ_MEMORY_LIMIT,
   NL80211_ATTR_TXQ_QUANTUM,
   NL80211_ATTR_HE_CAPABILITY,
+  NL80211_ATTR_FTM_RESPONDER,
+  NL80211_ATTR_FTM_RESPONDER_STATS,
   __NL80211_ATTR_AFTER_LAST,
   NUM_NL80211_ATTR = __NL80211_ATTR_AFTER_LAST,
   NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
@@ -615,10 +618,13 @@
   NL80211_STA_INFO_RX_DURATION,
   NL80211_STA_INFO_PAD,
   NL80211_STA_INFO_ACK_SIGNAL,
-  NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG,
+  NL80211_STA_INFO_ACK_SIGNAL_AVG,
+  NL80211_STA_INFO_RX_MPDUS,
+  NL80211_STA_INFO_FCS_ERROR_COUNT,
   __NL80211_STA_INFO_AFTER_LAST,
   NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1
 };
+#define NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG NL80211_STA_INFO_ACK_SIGNAL_AVG
 enum nl80211_tid_stats {
   __NL80211_TID_STATS_INVALID,
   NL80211_TID_STATS_RX_MSDU,
@@ -1283,10 +1289,13 @@
   NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN,
   NL80211_EXT_FEATURE_DFS_OFFLOAD,
   NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211,
-  NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT,
+  NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT,
+  NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT,
   NL80211_EXT_FEATURE_TXQS,
   NL80211_EXT_FEATURE_SCAN_RANDOM_SN,
   NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT,
+  NL80211_EXT_FEATURE_CAN_REPLACE_PTK0,
+  NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER,
   NUM_NL80211_EXT_FEATURES,
   MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
 };
@@ -1448,4 +1457,27 @@
   NL80211_EXTERNAL_AUTH_START,
   NL80211_EXTERNAL_AUTH_ABORT,
 };
+enum nl80211_ftm_responder_attributes {
+  __NL80211_FTM_RESP_ATTR_INVALID,
+  NL80211_FTM_RESP_ATTR_ENABLED,
+  NL80211_FTM_RESP_ATTR_LCI,
+  NL80211_FTM_RESP_ATTR_CIVICLOC,
+  __NL80211_FTM_RESP_ATTR_LAST,
+  NL80211_FTM_RESP_ATTR_MAX = __NL80211_FTM_RESP_ATTR_LAST - 1,
+};
+enum nl80211_ftm_responder_stats {
+  __NL80211_FTM_STATS_INVALID,
+  NL80211_FTM_STATS_SUCCESS_NUM,
+  NL80211_FTM_STATS_PARTIAL_NUM,
+  NL80211_FTM_STATS_FAILED_NUM,
+  NL80211_FTM_STATS_ASAP_NUM,
+  NL80211_FTM_STATS_NON_ASAP_NUM,
+  NL80211_FTM_STATS_TOTAL_DURATION_MSEC,
+  NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM,
+  NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM,
+  NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM,
+  NL80211_FTM_STATS_PAD,
+  __NL80211_FTM_STATS_AFTER_LAST,
+  NL80211_FTM_STATS_MAX = __NL80211_FTM_STATS_AFTER_LAST - 1
+};
 #endif
diff --git a/libc/kernel/uapi/linux/pci_regs.h b/libc/kernel/uapi/linux/pci_regs.h
index 7b234f5..8122fbb 100644
--- a/libc/kernel/uapi/linux/pci_regs.h
+++ b/libc/kernel/uapi/linux/pci_regs.h
@@ -36,6 +36,7 @@
 #define PCI_COMMAND_FAST_BACK 0x200
 #define PCI_COMMAND_INTX_DISABLE 0x400
 #define PCI_STATUS 0x06
+#define PCI_STATUS_IMM_READY 0x01
 #define PCI_STATUS_INTERRUPT 0x08
 #define PCI_STATUS_CAP_LIST 0x10
 #define PCI_STATUS_66MHZ 0x20
diff --git a/libc/kernel/uapi/linux/perf_event.h b/libc/kernel/uapi/linux/perf_event.h
index c106b5b..bf51785 100644
--- a/libc/kernel/uapi/linux/perf_event.h
+++ b/libc/kernel/uapi/linux/perf_event.h
@@ -286,6 +286,7 @@
 #define PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT (1 << 12)
 #define PERF_RECORD_MISC_MMAP_DATA (1 << 13)
 #define PERF_RECORD_MISC_COMM_EXEC (1 << 13)
+#define PERF_RECORD_MISC_FORK_EXEC (1 << 13)
 #define PERF_RECORD_MISC_SWITCH_OUT (1 << 13)
 #define PERF_RECORD_MISC_EXACT_IP (1 << 14)
 #define PERF_RECORD_MISC_SWITCH_OUT_PREEMPT (1 << 14)
diff --git a/libc/kernel/uapi/linux/pkt_cls.h b/libc/kernel/uapi/linux/pkt_cls.h
index 1ede892..ac80a0a 100644
--- a/libc/kernel/uapi/linux/pkt_cls.h
+++ b/libc/kernel/uapi/linux/pkt_cls.h
@@ -388,6 +388,7 @@
   TCA_FLOWER_KEY_ENC_IP_TTL_MASK,
   TCA_FLOWER_KEY_ENC_OPTS,
   TCA_FLOWER_KEY_ENC_OPTS_MASK,
+  TCA_FLOWER_IN_HW_COUNT,
   __TCA_FLOWER_MAX,
 };
 #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
diff --git a/libc/kernel/uapi/linux/pkt_sched.h b/libc/kernel/uapi/linux/pkt_sched.h
index 4efbc1c..e7d4942 100644
--- a/libc/kernel/uapi/linux/pkt_sched.h
+++ b/libc/kernel/uapi/linux/pkt_sched.h
@@ -283,8 +283,8 @@
   __u32 lends;
   __u32 borrows;
   __u32 giants;
-  __u32 tokens;
-  __u32 ctokens;
+  __s32 tokens;
+  __s32 ctokens;
 };
 struct tc_hfsc_qopt {
   __u16 defcls;
@@ -828,4 +828,35 @@
   CAKE_ATM_PTM,
   CAKE_ATM_MAX
 };
+enum {
+  TC_TAPRIO_CMD_SET_GATES = 0x00,
+  TC_TAPRIO_CMD_SET_AND_HOLD = 0x01,
+  TC_TAPRIO_CMD_SET_AND_RELEASE = 0x02,
+};
+enum {
+  TCA_TAPRIO_SCHED_ENTRY_UNSPEC,
+  TCA_TAPRIO_SCHED_ENTRY_INDEX,
+  TCA_TAPRIO_SCHED_ENTRY_CMD,
+  TCA_TAPRIO_SCHED_ENTRY_GATE_MASK,
+  TCA_TAPRIO_SCHED_ENTRY_INTERVAL,
+  __TCA_TAPRIO_SCHED_ENTRY_MAX,
+};
+#define TCA_TAPRIO_SCHED_ENTRY_MAX (__TCA_TAPRIO_SCHED_ENTRY_MAX - 1)
+enum {
+  TCA_TAPRIO_SCHED_UNSPEC,
+  TCA_TAPRIO_SCHED_ENTRY,
+  __TCA_TAPRIO_SCHED_MAX,
+};
+#define TCA_TAPRIO_SCHED_MAX (__TCA_TAPRIO_SCHED_MAX - 1)
+enum {
+  TCA_TAPRIO_ATTR_UNSPEC,
+  TCA_TAPRIO_ATTR_PRIOMAP,
+  TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST,
+  TCA_TAPRIO_ATTR_SCHED_BASE_TIME,
+  TCA_TAPRIO_ATTR_SCHED_SINGLE_ENTRY,
+  TCA_TAPRIO_ATTR_SCHED_CLOCKID,
+  TCA_TAPRIO_PAD,
+  __TCA_TAPRIO_ATTR_MAX,
+};
+#define TCA_TAPRIO_ATTR_MAX (__TCA_TAPRIO_ATTR_MAX - 1)
 #endif
diff --git a/libc/kernel/uapi/linux/prctl.h b/libc/kernel/uapi/linux/prctl.h
index ba50b14..44a088d 100644
--- a/libc/kernel/uapi/linux/prctl.h
+++ b/libc/kernel/uapi/linux/prctl.h
@@ -137,6 +137,7 @@
 #define PR_GET_SPECULATION_CTRL 52
 #define PR_SET_SPECULATION_CTRL 53
 #define PR_SPEC_STORE_BYPASS 0
+#define PR_SPEC_INDIRECT_BRANCH 1
 #define PR_SPEC_NOT_AFFECTED 0
 #define PR_SPEC_PRCTL (1UL << 0)
 #define PR_SPEC_ENABLE (1UL << 1)
diff --git a/libc/kernel/uapi/linux/sctp.h b/libc/kernel/uapi/linux/sctp.h
index 6ba738e..dc07d78 100644
--- a/libc/kernel/uapi/linux/sctp.h
+++ b/libc/kernel/uapi/linux/sctp.h
@@ -314,6 +314,8 @@
 };
 #define SCTP_ASSOC_CHANGE_DENIED 0x0004
 #define SCTP_ASSOC_CHANGE_FAILED 0x0008
+#define SCTP_STREAM_CHANGE_DENIED SCTP_ASSOC_CHANGE_DENIED
+#define SCTP_STREAM_CHANGE_FAILED SCTP_ASSOC_CHANGE_FAILED
 struct sctp_stream_change_event {
   __u16 strchange_type;
   __u16 strchange_flags;
@@ -655,6 +657,7 @@
 };
 enum sctp_sched_type {
   SCTP_SS_FCFS,
+  SCTP_SS_DEFAULT = SCTP_SS_FCFS,
   SCTP_SS_PRIO,
   SCTP_SS_RR,
   SCTP_SS_MAX = SCTP_SS_RR
diff --git a/libc/kernel/uapi/linux/serial.h b/libc/kernel/uapi/linux/serial.h
index 79f11e3..e4e903d 100644
--- a/libc/kernel/uapi/linux/serial.h
+++ b/libc/kernel/uapi/linux/serial.h
@@ -100,4 +100,15 @@
   __u32 delay_rts_after_send;
   __u32 padding[5];
 };
+struct serial_iso7816 {
+  __u32 flags;
+#define SER_ISO7816_ENABLED (1 << 0)
+#define SER_ISO7816_T_PARAM (0x0f << 4)
+#define SER_ISO7816_T(t) (((t) & 0x0f) << 4)
+  __u32 tg;
+  __u32 sc_fi;
+  __u32 sc_di;
+  __u32 clk;
+  __u32 reserved[5];
+};
 #endif
diff --git a/libc/kernel/uapi/linux/taskstats.h b/libc/kernel/uapi/linux/taskstats.h
index b7bc744..dc7791d 100644
--- a/libc/kernel/uapi/linux/taskstats.h
+++ b/libc/kernel/uapi/linux/taskstats.h
@@ -19,7 +19,7 @@
 #ifndef _LINUX_TASKSTATS_H
 #define _LINUX_TASKSTATS_H
 #include <linux/types.h>
-#define TASKSTATS_VERSION 8
+#define TASKSTATS_VERSION 9
 #define TS_COMM_LEN 32
 struct taskstats {
   __u16 version;
@@ -66,6 +66,8 @@
   __u64 cpu_scaled_run_real_total;
   __u64 freepages_count;
   __u64 freepages_delay_total;
+  __u64 thrashing_count;
+  __u64 thrashing_delay_total;
 };
 enum {
   TASKSTATS_CMD_UNSPEC = 0,
diff --git a/libc/kernel/uapi/linux/udmabuf.h b/libc/kernel/uapi/linux/udmabuf.h
new file mode 100644
index 0000000..70cf49f
--- /dev/null
+++ b/libc/kernel/uapi/linux/udmabuf.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_UDMABUF_H
+#define _UAPI_LINUX_UDMABUF_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+#define UDMABUF_FLAGS_CLOEXEC 0x01
+struct udmabuf_create {
+  __u32 memfd;
+  __u32 flags;
+  __u64 offset;
+  __u64 size;
+};
+struct udmabuf_create_item {
+  __u32 memfd;
+  __u32 __pad;
+  __u64 offset;
+  __u64 size;
+};
+struct udmabuf_create_list {
+  __u32 flags;
+  __u32 count;
+  struct udmabuf_create_item list[];
+};
+#define UDMABUF_CREATE _IOW('u', 0x42, struct udmabuf_create)
+#define UDMABUF_CREATE_LIST _IOW('u', 0x43, struct udmabuf_create_list)
+#endif
diff --git a/libc/kernel/uapi/linux/usb/tmc.h b/libc/kernel/uapi/linux/usb/tmc.h
index 6e276de..20c061b 100644
--- a/libc/kernel/uapi/linux/usb/tmc.h
+++ b/libc/kernel/uapi/linux/usb/tmc.h
@@ -37,10 +37,30 @@
 #define USBTMC488_REQUEST_REN_CONTROL 160
 #define USBTMC488_REQUEST_GOTO_LOCAL 161
 #define USBTMC488_REQUEST_LOCAL_LOCKOUT 162
+struct usbtmc_request {
+  __u8 bRequestType;
+  __u8 bRequest;
+  __u16 wValue;
+  __u16 wIndex;
+  __u16 wLength;
+} __attribute__((packed));
+struct usbtmc_ctrlrequest {
+  struct usbtmc_request req;
+  void __user * data;
+} __attribute__((packed));
 struct usbtmc_termchar {
   __u8 term_char;
   __u8 term_char_enabled;
 } __attribute__((packed));
+#define USBTMC_FLAG_ASYNC 0x0001
+#define USBTMC_FLAG_APPEND 0x0002
+#define USBTMC_FLAG_IGNORE_TRAILER 0x0004
+struct usbtmc_message {
+  __u32 transfer_size;
+  __u32 transferred;
+  __u32 flags;
+  void __user * message;
+} __attribute__((packed));
 #define USBTMC_IOC_NR 91
 #define USBTMC_IOCTL_INDICATOR_PULSE _IO(USBTMC_IOC_NR, 1)
 #define USBTMC_IOCTL_CLEAR _IO(USBTMC_IOC_NR, 2)
@@ -48,16 +68,26 @@
 #define USBTMC_IOCTL_ABORT_BULK_IN _IO(USBTMC_IOC_NR, 4)
 #define USBTMC_IOCTL_CLEAR_OUT_HALT _IO(USBTMC_IOC_NR, 6)
 #define USBTMC_IOCTL_CLEAR_IN_HALT _IO(USBTMC_IOC_NR, 7)
+#define USBTMC_IOCTL_CTRL_REQUEST _IOWR(USBTMC_IOC_NR, 8, struct usbtmc_ctrlrequest)
 #define USBTMC_IOCTL_GET_TIMEOUT _IOR(USBTMC_IOC_NR, 9, __u32)
 #define USBTMC_IOCTL_SET_TIMEOUT _IOW(USBTMC_IOC_NR, 10, __u32)
 #define USBTMC_IOCTL_EOM_ENABLE _IOW(USBTMC_IOC_NR, 11, __u8)
 #define USBTMC_IOCTL_CONFIG_TERMCHAR _IOW(USBTMC_IOC_NR, 12, struct usbtmc_termchar)
+#define USBTMC_IOCTL_WRITE _IOWR(USBTMC_IOC_NR, 13, struct usbtmc_message)
+#define USBTMC_IOCTL_READ _IOWR(USBTMC_IOC_NR, 14, struct usbtmc_message)
+#define USBTMC_IOCTL_WRITE_RESULT _IOWR(USBTMC_IOC_NR, 15, __u32)
+#define USBTMC_IOCTL_API_VERSION _IOR(USBTMC_IOC_NR, 16, __u32)
 #define USBTMC488_IOCTL_GET_CAPS _IOR(USBTMC_IOC_NR, 17, unsigned char)
 #define USBTMC488_IOCTL_READ_STB _IOR(USBTMC_IOC_NR, 18, unsigned char)
 #define USBTMC488_IOCTL_REN_CONTROL _IOW(USBTMC_IOC_NR, 19, unsigned char)
 #define USBTMC488_IOCTL_GOTO_LOCAL _IO(USBTMC_IOC_NR, 20)
 #define USBTMC488_IOCTL_LOCAL_LOCKOUT _IO(USBTMC_IOC_NR, 21)
 #define USBTMC488_IOCTL_TRIGGER _IO(USBTMC_IOC_NR, 22)
+#define USBTMC488_IOCTL_WAIT_SRQ _IOW(USBTMC_IOC_NR, 23, __u32)
+#define USBTMC_IOCTL_MSG_IN_ATTR _IOR(USBTMC_IOC_NR, 24, __u8)
+#define USBTMC_IOCTL_AUTO_ABORT _IOW(USBTMC_IOC_NR, 25, __u8)
+#define USBTMC_IOCTL_CANCEL_IO _IO(USBTMC_IOC_NR, 35)
+#define USBTMC_IOCTL_CLEANUP_IO _IO(USBTMC_IOC_NR, 36)
 #define USBTMC488_CAPABILITY_TRIGGER 1
 #define USBTMC488_CAPABILITY_SIMPLE 2
 #define USBTMC488_CAPABILITY_REN_CONTROL 2
diff --git a/libc/kernel/uapi/linux/usb/video.h b/libc/kernel/uapi/linux/usb/video.h
index fb34483..cd2ede9 100644
--- a/libc/kernel/uapi/linux/usb/video.h
+++ b/libc/kernel/uapi/linux/usb/video.h
@@ -148,22 +148,22 @@
   __u8 bLength;
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
-  __u16 bcdUVC;
-  __u16 wTotalLength;
-  __u32 dwClockFrequency;
+  __le16 bcdUVC;
+  __le16 wTotalLength;
+  __le32 dwClockFrequency;
   __u8 bInCollection;
   __u8 baInterfaceNr[];
 } __attribute__((__packed__));
 #define UVC_DT_HEADER_SIZE(n) (12 + (n))
 #define UVC_HEADER_DESCRIPTOR(n) uvc_header_descriptor_ ##n
-#define DECLARE_UVC_HEADER_DESCRIPTOR(n) struct UVC_HEADER_DESCRIPTOR(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u16 bcdUVC; __u16 wTotalLength; __u32 dwClockFrequency; __u8 bInCollection; __u8 baInterfaceNr[n]; \
+#define DECLARE_UVC_HEADER_DESCRIPTOR(n) struct UVC_HEADER_DESCRIPTOR(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __le16 bcdUVC; __le16 wTotalLength; __le32 dwClockFrequency; __u8 bInCollection; __u8 baInterfaceNr[n]; \
 } __attribute__((packed))
 struct uvc_input_terminal_descriptor {
   __u8 bLength;
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
   __u8 bTerminalID;
-  __u16 wTerminalType;
+  __le16 wTerminalType;
   __u8 bAssocTerminal;
   __u8 iTerminal;
 } __attribute__((__packed__));
@@ -173,7 +173,7 @@
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
   __u8 bTerminalID;
-  __u16 wTerminalType;
+  __le16 wTerminalType;
   __u8 bAssocTerminal;
   __u8 bSourceID;
   __u8 iTerminal;
@@ -184,12 +184,12 @@
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
   __u8 bTerminalID;
-  __u16 wTerminalType;
+  __le16 wTerminalType;
   __u8 bAssocTerminal;
   __u8 iTerminal;
-  __u16 wObjectiveFocalLengthMin;
-  __u16 wObjectiveFocalLengthMax;
-  __u16 wOcularFocalLength;
+  __le16 wObjectiveFocalLengthMin;
+  __le16 wObjectiveFocalLengthMax;
+  __le16 wOcularFocalLength;
   __u8 bControlSize;
   __u8 bmControls[3];
 } __attribute__((__packed__));
@@ -213,7 +213,7 @@
   __u8 bDescriptorSubType;
   __u8 bUnitID;
   __u8 bSourceID;
-  __u16 wMaxMultiplier;
+  __le16 wMaxMultiplier;
   __u8 bControlSize;
   __u8 bmControls[2];
   __u8 iProcessing;
@@ -240,7 +240,7 @@
   __u8 bLength;
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
-  __u16 wMaxTransferSize;
+  __le16 wMaxTransferSize;
 } __attribute__((__packed__));
 #define UVC_DT_CONTROL_ENDPOINT_SIZE 5
 struct uvc_input_header_descriptor {
@@ -248,7 +248,7 @@
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
   __u8 bNumFormats;
-  __u16 wTotalLength;
+  __le16 wTotalLength;
   __u8 bEndpointAddress;
   __u8 bmInfo;
   __u8 bTerminalLink;
@@ -260,14 +260,14 @@
 } __attribute__((__packed__));
 #define UVC_DT_INPUT_HEADER_SIZE(n,p) (13 + (n * p))
 #define UVC_INPUT_HEADER_DESCRIPTOR(n,p) uvc_input_header_descriptor_ ##n_ ##p
-#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n,p) struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bNumFormats; __u16 wTotalLength; __u8 bEndpointAddress; __u8 bmInfo; __u8 bTerminalLink; __u8 bStillCaptureMethod; __u8 bTriggerSupport; __u8 bTriggerUsage; __u8 bControlSize; __u8 bmaControls[p][n]; \
+#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n,p) struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bNumFormats; __le16 wTotalLength; __u8 bEndpointAddress; __u8 bmInfo; __u8 bTerminalLink; __u8 bStillCaptureMethod; __u8 bTriggerSupport; __u8 bTriggerUsage; __u8 bControlSize; __u8 bmaControls[p][n]; \
 } __attribute__((packed))
 struct uvc_output_header_descriptor {
   __u8 bLength;
   __u8 bDescriptorType;
   __u8 bDescriptorSubType;
   __u8 bNumFormats;
-  __u16 wTotalLength;
+  __le16 wTotalLength;
   __u8 bEndpointAddress;
   __u8 bTerminalLink;
   __u8 bControlSize;
@@ -275,7 +275,7 @@
 } __attribute__((__packed__));
 #define UVC_DT_OUTPUT_HEADER_SIZE(n,p) (9 + (n * p))
 #define UVC_OUTPUT_HEADER_DESCRIPTOR(n,p) uvc_output_header_descriptor_ ##n_ ##p
-#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n,p) struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bNumFormats; __u16 wTotalLength; __u8 bEndpointAddress; __u8 bTerminalLink; __u8 bControlSize; __u8 bmaControls[p][n]; \
+#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n,p) struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bNumFormats; __le16 wTotalLength; __u8 bEndpointAddress; __u8 bTerminalLink; __u8 bControlSize; __u8 bmaControls[p][n]; \
 } __attribute__((packed))
 struct uvc_color_matching_descriptor {
   __u8 bLength;
@@ -325,18 +325,18 @@
   __u8 bDescriptorSubType;
   __u8 bFrameIndex;
   __u8 bmCapabilities;
-  __u16 wWidth;
-  __u16 wHeight;
-  __u32 dwMinBitRate;
-  __u32 dwMaxBitRate;
-  __u32 dwMaxVideoFrameBufferSize;
-  __u32 dwDefaultFrameInterval;
+  __le16 wWidth;
+  __le16 wHeight;
+  __le32 dwMinBitRate;
+  __le32 dwMaxBitRate;
+  __le32 dwMaxVideoFrameBufferSize;
+  __le32 dwDefaultFrameInterval;
   __u8 bFrameIntervalType;
-  __u32 dwFrameInterval[];
+  __le32 dwFrameInterval[];
 } __attribute__((__packed__));
 #define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n) (26 + 4 * (n))
 #define UVC_FRAME_UNCOMPRESSED(n) uvc_frame_uncompressed_ ##n
-#define DECLARE_UVC_FRAME_UNCOMPRESSED(n) struct UVC_FRAME_UNCOMPRESSED(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bFrameIndex; __u8 bmCapabilities; __u16 wWidth; __u16 wHeight; __u32 dwMinBitRate; __u32 dwMaxBitRate; __u32 dwMaxVideoFrameBufferSize; __u32 dwDefaultFrameInterval; __u8 bFrameIntervalType; __u32 dwFrameInterval[n]; \
+#define DECLARE_UVC_FRAME_UNCOMPRESSED(n) struct UVC_FRAME_UNCOMPRESSED(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bFrameIndex; __u8 bmCapabilities; __le16 wWidth; __le16 wHeight; __le32 dwMinBitRate; __le32 dwMaxBitRate; __le32 dwMaxVideoFrameBufferSize; __le32 dwDefaultFrameInterval; __u8 bFrameIntervalType; __le32 dwFrameInterval[n]; \
 } __attribute__((packed))
 struct uvc_format_mjpeg {
   __u8 bLength;
@@ -358,17 +358,17 @@
   __u8 bDescriptorSubType;
   __u8 bFrameIndex;
   __u8 bmCapabilities;
-  __u16 wWidth;
-  __u16 wHeight;
-  __u32 dwMinBitRate;
-  __u32 dwMaxBitRate;
-  __u32 dwMaxVideoFrameBufferSize;
-  __u32 dwDefaultFrameInterval;
+  __le16 wWidth;
+  __le16 wHeight;
+  __le32 dwMinBitRate;
+  __le32 dwMaxBitRate;
+  __le32 dwMaxVideoFrameBufferSize;
+  __le32 dwDefaultFrameInterval;
   __u8 bFrameIntervalType;
-  __u32 dwFrameInterval[];
+  __le32 dwFrameInterval[];
 } __attribute__((__packed__));
 #define UVC_DT_FRAME_MJPEG_SIZE(n) (26 + 4 * (n))
 #define UVC_FRAME_MJPEG(n) uvc_frame_mjpeg_ ##n
-#define DECLARE_UVC_FRAME_MJPEG(n) struct UVC_FRAME_MJPEG(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bFrameIndex; __u8 bmCapabilities; __u16 wWidth; __u16 wHeight; __u32 dwMinBitRate; __u32 dwMaxBitRate; __u32 dwMaxVideoFrameBufferSize; __u32 dwDefaultFrameInterval; __u8 bFrameIntervalType; __u32 dwFrameInterval[n]; \
+#define DECLARE_UVC_FRAME_MJPEG(n) struct UVC_FRAME_MJPEG(n) { __u8 bLength; __u8 bDescriptorType; __u8 bDescriptorSubType; __u8 bFrameIndex; __u8 bmCapabilities; __le16 wWidth; __le16 wHeight; __le32 dwMinBitRate; __le32 dwMaxBitRate; __le32 dwMaxVideoFrameBufferSize; __le32 dwDefaultFrameInterval; __u8 bFrameIntervalType; __le32 dwFrameInterval[n]; \
 } __attribute__((packed))
 #endif
diff --git a/libc/kernel/uapi/linux/v4l2-controls.h b/libc/kernel/uapi/linux/v4l2-controls.h
index 45590a2..3c2d2b2 100644
--- a/libc/kernel/uapi/linux/v4l2-controls.h
+++ b/libc/kernel/uapi/linux/v4l2-controls.h
@@ -18,6 +18,7 @@
  ****************************************************************************/
 #ifndef __LINUX_V4L2_CONTROLS_H
 #define __LINUX_V4L2_CONTROLS_H
+#include <linux/types.h>
 #define V4L2_CTRL_CLASS_USER 0x00980000
 #define V4L2_CTRL_CLASS_MPEG 0x00990000
 #define V4L2_CTRL_CLASS_CAMERA 0x009a0000
diff --git a/libc/kernel/uapi/linux/version.h b/libc/kernel/uapi/linux/version.h
index a234744..6b1ef1b 100644
--- a/libc/kernel/uapi/linux/version.h
+++ b/libc/kernel/uapi/linux/version.h
@@ -16,5 +16,5 @@
  ***
  ****************************************************************************
  ****************************************************************************/
-#define LINUX_VERSION_CODE 267008
+#define LINUX_VERSION_CODE 267265
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff --git a/libc/kernel/uapi/linux/vfio.h b/libc/kernel/uapi/linux/vfio.h
index 8b397f4..d282a52 100644
--- a/libc/kernel/uapi/linux/vfio.h
+++ b/libc/kernel/uapi/linux/vfio.h
@@ -57,6 +57,7 @@
 #define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)
 #define VFIO_DEVICE_FLAGS_AMBA (1 << 3)
 #define VFIO_DEVICE_FLAGS_CCW (1 << 4)
+#define VFIO_DEVICE_FLAGS_AP (1 << 5)
   __u32 num_regions;
   __u32 num_irqs;
 };
@@ -65,6 +66,7 @@
 #define VFIO_DEVICE_API_PLATFORM_STRING "vfio-platform"
 #define VFIO_DEVICE_API_AMBA_STRING "vfio-amba"
 #define VFIO_DEVICE_API_CCW_STRING "vfio-ccw"
+#define VFIO_DEVICE_API_AP_STRING "vfio-ap"
 struct vfio_region_info {
   __u32 argsz;
   __u32 flags;
@@ -100,6 +102,18 @@
 #define VFIO_REGION_SUBTYPE_INTEL_IGD_OPREGION (1)
 #define VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG (2)
 #define VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG (3)
+#define VFIO_REGION_TYPE_GFX (1)
+#define VFIO_REGION_SUBTYPE_GFX_EDID (1)
+struct vfio_region_gfx_edid {
+  __u32 edid_offset;
+  __u32 edid_max_size;
+  __u32 edid_size;
+  __u32 max_xres;
+  __u32 max_yres;
+  __u32 link_state;
+#define VFIO_DEVICE_GFX_LINK_STATE_UP 1
+#define VFIO_DEVICE_GFX_LINK_STATE_DOWN 2
+};
 #define VFIO_REGION_INFO_CAP_MSIX_MAPPABLE 3
 struct vfio_irq_info {
   __u32 argsz;
diff --git a/libc/kernel/uapi/linux/videodev2.h b/libc/kernel/uapi/linux/videodev2.h
index 51faa1e..ef89b08 100644
--- a/libc/kernel/uapi/linux/videodev2.h
+++ b/libc/kernel/uapi/linux/videodev2.h
@@ -86,7 +86,7 @@
   V4L2_COLORSPACE_470_SYSTEM_BG = 6,
   V4L2_COLORSPACE_JPEG = 7,
   V4L2_COLORSPACE_SRGB = 8,
-  V4L2_COLORSPACE_ADOBERGB = 9,
+  V4L2_COLORSPACE_OPRGB = 9,
   V4L2_COLORSPACE_BT2020 = 10,
   V4L2_COLORSPACE_RAW = 11,
   V4L2_COLORSPACE_DCI_P3 = 12,
@@ -96,13 +96,13 @@
   V4L2_XFER_FUNC_DEFAULT = 0,
   V4L2_XFER_FUNC_709 = 1,
   V4L2_XFER_FUNC_SRGB = 2,
-  V4L2_XFER_FUNC_ADOBERGB = 3,
+  V4L2_XFER_FUNC_OPRGB = 3,
   V4L2_XFER_FUNC_SMPTE240M = 4,
   V4L2_XFER_FUNC_NONE = 5,
   V4L2_XFER_FUNC_DCI_P3 = 6,
   V4L2_XFER_FUNC_SMPTE2084 = 7,
 };
-#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) ((colsp) == V4L2_COLORSPACE_ADOBERGB ? V4L2_XFER_FUNC_ADOBERGB : ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
+#define V4L2_MAP_XFER_FUNC_DEFAULT(colsp) ((colsp) == V4L2_COLORSPACE_OPRGB ? V4L2_XFER_FUNC_OPRGB : ((colsp) == V4L2_COLORSPACE_SMPTE240M ? V4L2_XFER_FUNC_SMPTE240M : ((colsp) == V4L2_COLORSPACE_DCI_P3 ? V4L2_XFER_FUNC_DCI_P3 : ((colsp) == V4L2_COLORSPACE_RAW ? V4L2_XFER_FUNC_NONE : ((colsp) == V4L2_COLORSPACE_SRGB || (colsp) == V4L2_COLORSPACE_JPEG ? V4L2_XFER_FUNC_SRGB : V4L2_XFER_FUNC_709)))))
 enum v4l2_ycbcr_encoding {
   V4L2_YCBCR_ENC_DEFAULT = 0,
   V4L2_YCBCR_ENC_601 = 1,
@@ -125,6 +125,8 @@
   V4L2_QUANTIZATION_LIM_RANGE = 2,
 };
 #define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv,colsp,ycbcr_enc) (((is_rgb_or_hsv) && (colsp) == V4L2_COLORSPACE_BT2020) ? V4L2_QUANTIZATION_LIM_RANGE : (((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
+#define V4L2_COLORSPACE_ADOBERGB V4L2_COLORSPACE_OPRGB
+#define V4L2_XFER_FUNC_ADOBERGB V4L2_XFER_FUNC_OPRGB
 enum v4l2_priority {
   V4L2_PRIORITY_UNSET = 0,
   V4L2_PRIORITY_BACKGROUND = 1,
@@ -313,6 +315,7 @@
 #define V4L2_PIX_FMT_H263 v4l2_fourcc('H', '2', '6', '3')
 #define V4L2_PIX_FMT_MPEG1 v4l2_fourcc('M', 'P', 'G', '1')
 #define V4L2_PIX_FMT_MPEG2 v4l2_fourcc('M', 'P', 'G', '2')
+#define V4L2_PIX_FMT_MPEG2_SLICE v4l2_fourcc('M', 'G', '2', 'S')
 #define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4')
 #define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D')
 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G')
@@ -352,6 +355,7 @@
 #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
 #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1')
 #define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I')
+#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2')
 #define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b')
 #define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g')
 #define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G')
@@ -371,6 +375,7 @@
 #define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H')
 #define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T')
 #define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H')
+#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X')
 #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
 #define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
 struct v4l2_fmtdesc {
@@ -469,8 +474,13 @@
   __u32 count;
   __u32 type;
   __u32 memory;
-  __u32 reserved[2];
+  __u32 capabilities;
+  __u32 reserved[1];
 };
+#define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
+#define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
+#define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
+#define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
 struct v4l2_plane {
   __u32 bytesused;
   __u32 length;
@@ -500,7 +510,10 @@
   } m;
   __u32 length;
   __u32 reserved2;
-  __u32 reserved;
+  union {
+    __s32 request_fd;
+    __u32 reserved;
+  };
 };
 #define V4L2_BUF_FLAG_MAPPED 0x00000001
 #define V4L2_BUF_FLAG_QUEUED 0x00000002
@@ -509,6 +522,7 @@
 #define V4L2_BUF_FLAG_PFRAME 0x00000010
 #define V4L2_BUF_FLAG_BFRAME 0x00000020
 #define V4L2_BUF_FLAG_ERROR 0x00000040
+#define V4L2_BUF_FLAG_IN_REQUEST 0x00000080
 #define V4L2_BUF_FLAG_TIMECODE 0x00000100
 #define V4L2_BUF_FLAG_PREPARED 0x00000400
 #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x00000800
@@ -521,6 +535,7 @@
 #define V4L2_BUF_FLAG_TSTAMP_SRC_EOF 0x00000000
 #define V4L2_BUF_FLAG_TSTAMP_SRC_SOE 0x00010000
 #define V4L2_BUF_FLAG_LAST 0x00100000
+#define V4L2_BUF_FLAG_REQUEST_FD 0x00800000
 struct v4l2_exportbuffer {
   __u32 type;
   __u32 index;
@@ -702,6 +717,7 @@
 #define V4L2_DV_FL_HAS_PICTURE_ASPECT (1 << 6)
 #define V4L2_DV_FL_HAS_CEA861_VIC (1 << 7)
 #define V4L2_DV_FL_HAS_HDMI_VIC (1 << 8)
+#define V4L2_DV_FL_CAN_DETECT_REDUCED_FPS (1 << 9)
 #define V4L2_DV_BT_BLANKING_WIDTH(bt) ((bt)->hfrontporch + (bt)->hsync + (bt)->hbackporch)
 #define V4L2_DV_BT_FRAME_WIDTH(bt) ((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
 #define V4L2_DV_BT_BLANKING_HEIGHT(bt) ((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + (bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
@@ -819,7 +835,8 @@
   };
   __u32 count;
   __u32 error_idx;
-  __u32 reserved[2];
+  __s32 request_fd;
+  __u32 reserved[1];
   struct v4l2_ext_control * controls;
 };
 #define V4L2_CTRL_ID_MASK (0x0fffffff)
@@ -829,6 +846,7 @@
 #define V4L2_CTRL_MAX_DIMS (4)
 #define V4L2_CTRL_WHICH_CUR_VAL 0
 #define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
+#define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
 enum v4l2_ctrl_type {
   V4L2_CTRL_TYPE_INTEGER = 1,
   V4L2_CTRL_TYPE_BOOLEAN = 2,
@@ -1274,7 +1292,8 @@
   __u32 count;
   __u32 memory;
   struct v4l2_format format;
-  __u32 reserved[8];
+  __u32 capabilities;
+  __u32 reserved[7];
 };
 #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability)
 #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc)
diff --git a/libc/kernel/uapi/linux/virtio_balloon.h b/libc/kernel/uapi/linux/virtio_balloon.h
index 5969fa0..806e757 100644
--- a/libc/kernel/uapi/linux/virtio_balloon.h
+++ b/libc/kernel/uapi/linux/virtio_balloon.h
@@ -25,10 +25,16 @@
 #define VIRTIO_BALLOON_F_MUST_TELL_HOST 0
 #define VIRTIO_BALLOON_F_STATS_VQ 1
 #define VIRTIO_BALLOON_F_DEFLATE_ON_OOM 2
+#define VIRTIO_BALLOON_F_FREE_PAGE_HINT 3
+#define VIRTIO_BALLOON_F_PAGE_POISON 4
 #define VIRTIO_BALLOON_PFN_SHIFT 12
+#define VIRTIO_BALLOON_CMD_ID_STOP 0
+#define VIRTIO_BALLOON_CMD_ID_DONE 1
 struct virtio_balloon_config {
   __u32 num_pages;
   __u32 actual;
+  __u32 free_page_report_cmd_id;
+  __u32 poison_val;
 };
 #define VIRTIO_BALLOON_S_SWAP_IN 0
 #define VIRTIO_BALLOON_S_SWAP_OUT 1
diff --git a/libc/kernel/uapi/rdma/ib_user_verbs.h b/libc/kernel/uapi/rdma/ib_user_verbs.h
index 3baf4ed..6ca4413 100644
--- a/libc/kernel/uapi/rdma/ib_user_verbs.h
+++ b/libc/kernel/uapi/rdma/ib_user_verbs.h
@@ -619,6 +619,22 @@
   __u32 length;
   __u32 lkey;
 };
+enum ib_uverbs_wr_opcode {
+  IB_UVERBS_WR_RDMA_WRITE = 0,
+  IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
+  IB_UVERBS_WR_SEND = 2,
+  IB_UVERBS_WR_SEND_WITH_IMM = 3,
+  IB_UVERBS_WR_RDMA_READ = 4,
+  IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
+  IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
+  IB_UVERBS_WR_LOCAL_INV = 7,
+  IB_UVERBS_WR_BIND_MW = 8,
+  IB_UVERBS_WR_SEND_WITH_INV = 9,
+  IB_UVERBS_WR_TSO = 10,
+  IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
+  IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
+  IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
+};
 struct ib_uverbs_send_wr {
   __aligned_u64 wr_id;
   __u32 num_sge;
diff --git a/libc/kernel/uapi/rdma/mlx5-abi.h b/libc/kernel/uapi/rdma/mlx5-abi.h
index 50ecd2f..77e14f6 100644
--- a/libc/kernel/uapi/rdma/mlx5-abi.h
+++ b/libc/kernel/uapi/rdma/mlx5-abi.h
@@ -28,6 +28,9 @@
   MLX5_QP_FLAG_BFREG_INDEX = 1 << 3,
   MLX5_QP_FLAG_TYPE_DCT = 1 << 4,
   MLX5_QP_FLAG_TYPE_DCI = 1 << 5,
+  MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC = 1 << 6,
+  MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC = 1 << 7,
+  MLX5_QP_FLAG_ALLOW_SCATTER_CQE = 1 << 8,
 };
 enum {
   MLX5_SRQ_FLAG_SIGNATURE = 1 << 0,
@@ -252,9 +255,21 @@
   __u32 comp_mask;
   __u32 flags;
 };
+enum mlx5_ib_create_qp_resp_mask {
+  MLX5_IB_CREATE_QP_RESP_MASK_TIRN = 1UL << 0,
+  MLX5_IB_CREATE_QP_RESP_MASK_TISN = 1UL << 1,
+  MLX5_IB_CREATE_QP_RESP_MASK_RQN = 1UL << 2,
+  MLX5_IB_CREATE_QP_RESP_MASK_SQN = 1UL << 3,
+};
 struct mlx5_ib_create_qp_resp {
   __u32 bfreg_index;
   __u32 reserved;
+  __u32 comp_mask;
+  __u32 tirn;
+  __u32 tisn;
+  __u32 rqn;
+  __u32 sqn;
+  __u32 reserved1;
 };
 struct mlx5_ib_alloc_mw {
   __u32 comp_mask;
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
index 11ff576..902816b 100644
--- a/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_cmds.h
@@ -93,6 +93,7 @@
   MLX5_IB_ATTR_FLOW_MATCHER_MATCH_MASK,
   MLX5_IB_ATTR_FLOW_MATCHER_FLOW_TYPE,
   MLX5_IB_ATTR_FLOW_MATCHER_MATCH_CRITERIA,
+  MLX5_IB_ATTR_FLOW_MATCHER_FLOW_FLAGS,
 };
 enum mlx5_ib_flow_matcher_destroy_attrs {
   MLX5_IB_ATTR_FLOW_MATCHER_DESTROY_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
@@ -117,6 +118,8 @@
   MLX5_IB_ATTR_CREATE_FLOW_DEST_QP,
   MLX5_IB_ATTR_CREATE_FLOW_DEST_DEVX,
   MLX5_IB_ATTR_CREATE_FLOW_MATCHER,
+  MLX5_IB_ATTR_CREATE_FLOW_ARR_FLOW_ACTIONS,
+  MLX5_IB_ATTR_CREATE_FLOW_TAG,
 };
 enum mlx5_ib_destoy_flow_attrs {
   MLX5_IB_ATTR_DESTROY_FLOW_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
@@ -125,4 +128,19 @@
   MLX5_IB_METHOD_CREATE_FLOW = (1U << UVERBS_ID_NS_SHIFT),
   MLX5_IB_METHOD_DESTROY_FLOW,
 };
+enum mlx5_ib_flow_action_methods {
+  MLX5_IB_METHOD_FLOW_ACTION_CREATE_MODIFY_HEADER = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_METHOD_FLOW_ACTION_CREATE_PACKET_REFORMAT,
+};
+enum mlx5_ib_create_flow_action_create_modify_header_attrs {
+  MLX5_IB_ATTR_CREATE_MODIFY_HEADER_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_CREATE_MODIFY_HEADER_ACTIONS_PRM,
+  MLX5_IB_ATTR_CREATE_MODIFY_HEADER_FT_TYPE,
+};
+enum mlx5_ib_create_flow_action_create_packet_reformat_attrs {
+  MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
+  MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_TYPE,
+  MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_FT_TYPE,
+  MLX5_IB_ATTR_CREATE_PACKET_REFORMAT_DATA_BUF,
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h b/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
index c9a83cf..dc246e5 100644
--- a/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
+++ b/libc/kernel/uapi/rdma/mlx5_user_ioctl_verbs.h
@@ -22,4 +22,14 @@
 enum mlx5_ib_uapi_flow_action_flags {
   MLX5_IB_UAPI_FLOW_ACTION_FLAGS_REQUIRE_METADATA = 1 << 0,
 };
+enum mlx5_ib_uapi_flow_table_type {
+  MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_RX = 0x0,
+  MLX5_IB_UAPI_FLOW_TABLE_TYPE_NIC_TX = 0x1,
+};
+enum mlx5_ib_uapi_flow_action_packet_reformat_type {
+  MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TUNNEL_TO_L2 = 0x0,
+  MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L2_TUNNEL = 0x1,
+  MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L3_TUNNEL_TO_L2 = 0x2,
+  MLX5_IB_UAPI_FLOW_ACTION_PACKET_REFORMAT_TYPE_L2_TO_L3_TUNNEL = 0x3,
+};
 #endif
diff --git a/libc/kernel/uapi/rdma/rdma_netlink.h b/libc/kernel/uapi/rdma/rdma_netlink.h
index 48cbc3d..69805f1 100644
--- a/libc/kernel/uapi/rdma/rdma_netlink.h
+++ b/libc/kernel/uapi/rdma/rdma_netlink.h
@@ -173,6 +173,7 @@
 enum rdma_nldev_command {
   RDMA_NLDEV_CMD_UNSPEC,
   RDMA_NLDEV_CMD_GET,
+  RDMA_NLDEV_CMD_SET,
   RDMA_NLDEV_CMD_PORT_GET = 5,
   RDMA_NLDEV_CMD_RES_GET = 9,
   RDMA_NLDEV_CMD_RES_QP_GET,
diff --git a/libc/kernel/uapi/scsi/scsi_bsg_ufs.h b/libc/kernel/uapi/scsi/scsi_bsg_ufs.h
new file mode 100644
index 0000000..177cae9
--- /dev/null
+++ b/libc/kernel/uapi/scsi/scsi_bsg_ufs.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef SCSI_BSG_UFS_H
+#define SCSI_BSG_UFS_H
+#include <linux/types.h>
+#define UFS_CDB_SIZE 16
+#define UPIU_TRANSACTION_UIC_CMD 0x1F
+#define UIC_CMD_SIZE (sizeof(__u32) * 4)
+struct utp_upiu_header {
+  __be32 dword_0;
+  __be32 dword_1;
+  __be32 dword_2;
+};
+struct utp_upiu_query {
+  __u8 opcode;
+  __u8 idn;
+  __u8 index;
+  __u8 selector;
+  __be16 reserved_osf;
+  __be16 length;
+  __be32 value;
+  __be32 reserved[2];
+};
+struct utp_upiu_cmd {
+  __be32 exp_data_transfer_len;
+  __u8 cdb[UFS_CDB_SIZE];
+};
+struct utp_upiu_req {
+  struct utp_upiu_header header;
+  union {
+    struct utp_upiu_cmd sc;
+    struct utp_upiu_query qr;
+    struct utp_upiu_query tr;
+    struct utp_upiu_query uc;
+  };
+};
+struct ufs_bsg_request {
+  __u32 msgcode;
+  struct utp_upiu_req upiu_req;
+};
+struct ufs_bsg_reply {
+  __u32 result;
+  __u32 reply_payload_rcv_len;
+  struct utp_upiu_req upiu_rsp;
+};
+#endif
diff --git a/libc/libc.arm.map b/libc/libc.arm.map
deleted file mode 100644
index bd39d42..0000000
--- a/libc/libc.arm.map
+++ /dev/null
@@ -1,1679 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __assert;
-    __assert2;
-    __atomic_cmpxchg; # arm
-    __atomic_dec; # arm
-    __atomic_inc; # arm
-    __atomic_swap; # arm
-    __b64_ntop;
-    __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __connect; # arm x86 mips introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
-    __cxa_atexit;
-    __cxa_finalize;
-    __cxa_thread_atexit_impl; # introduced=23
-    __dn_comp;
-    __dn_count_labels;
-    __dn_skipname;
-    __epoll_pwait; # arm x86 mips introduced=21
-    __errno;
-    __exit; # arm x86 mips introduced=21
-    __fbufsize; # introduced=23
-    __fcntl64; # arm x86 mips
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __flbf; # introduced=23
-    __fp_nquery;
-    __fp_query;
-    __fpclassify; # introduced=21
-    __fpclassifyd;
-    __fpclassifyf;
-    __fpclassifyl;
-    __fpending; # introduced=23
-    __fpurge; # introduced=23
-    __freadable; # introduced=23
-    __fsetlocking; # introduced=23
-    __fstatfs64; # arm x86 mips
-    __fwritable; # introduced=23
-    __get_h_errno;
-    __getcpu; # arm x86 mips introduced-arm=12 introduced-mips=16 introduced-x86=12
-    __getcwd; # arm x86 mips
-    __getpid; # arm x86 mips introduced=21
-    __getpriority; # arm x86 mips
-    __gnu_basename; # introduced=23
-    __gnu_strerror_r; # introduced=23
-    __hostalias;
-    __ioctl; # arm x86 mips
-    __isfinite;
-    __isfinitef;
-    __isfinitel;
-    __isinf;
-    __isinff;
-    __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
-    __isnanl;
-    __isnormal;
-    __isnormalf;
-    __isnormall;
-    __isthreaded; # arm x86 mips var
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
-    __libc_init;
-    __llseek; # arm x86 mips
-    __loc_aton;
-    __loc_ntoa;
-    __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __mmap2; # arm x86 mips
-    __ns_format_ttl; # arm x86 mips
-    __ns_get16; # arm x86 mips
-    __ns_get32; # arm x86 mips
-    __ns_initparse; # arm x86 mips
-    __ns_makecanon; # arm x86 mips
-    __ns_msg_getflag; # arm x86 mips
-    __ns_name_compress; # arm x86 mips
-    __ns_name_ntol; # arm x86 mips
-    __ns_name_ntop; # arm x86 mips
-    __ns_name_pack; # arm x86 mips
-    __ns_name_pton; # arm x86 mips
-    __ns_name_rollback; # arm x86 mips
-    __ns_name_skip; # arm x86 mips
-    __ns_name_uncompress; # arm x86 mips
-    __ns_name_unpack; # arm x86 mips
-    __ns_parserr; # arm x86 mips
-    __ns_put16; # arm x86 mips
-    __ns_put32; # arm x86 mips
-    __ns_samename; # arm x86 mips
-    __ns_skiprr; # arm x86 mips
-    __ns_sprintrr; # arm x86 mips
-    __ns_sprintrrf; # arm x86 mips
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __openat; # arm x86 mips
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __p_cdname;
-    __p_cdnname;
-    __p_class;
-    __p_class_syms; # var
-    __p_fqname;
-    __p_fqnname;
-    __p_option;
-    __p_query;
-    __p_rcode;
-    __p_secstodate;
-    __p_time;
-    __p_type;
-    __p_type_syms; # var
-    __poll_chk; # introduced=23
-    __ppoll; # arm x86 mips introduced=21
-    __ppoll_chk; # introduced=23
-    __ppoll64_chk; # introduced=28
-    __pread64_chk; # introduced=23
-    __pread_chk; # introduced=23
-    __progname; # var
-    __pselect6; # arm x86 mips introduced=21
-    __pthread_cleanup_pop;
-    __pthread_cleanup_push;
-    __ptrace; # arm x86 mips
-    __putlong;
-    __putshort;
-    __read_chk; # introduced=21
-    __readlink_chk; # introduced=23
-    __readlinkat_chk; # introduced=23
-    __reboot; # arm x86 mips
-    __recvfrom_chk; # introduced=21
-    __register_atfork; # introduced=23
-    __res_close;
-    __res_dnok;
-    __res_hnok;
-    __res_hostalias;
-    __res_isourserver;
-    __res_mailok;
-    __res_nameinquery;
-    __res_nclose;
-    __res_ninit;
-    __res_nmkquery;
-    __res_nquery;
-    __res_nquerydomain;
-    __res_nsearch;
-    __res_nsend;
-    __res_ownok;
-    __res_queriesmatch;
-    __res_querydomain;
-    __res_send;
-    __res_send_setqhook;
-    __res_send_setrhook;
-    __rt_sigaction; # arm x86 mips
-    __rt_sigpending; # arm x86 mips introduced=21
-    __rt_sigprocmask; # arm x86 mips
-    __rt_sigsuspend; # arm x86 mips introduced=21
-    __rt_sigtimedwait; # arm x86 mips
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_getaffinity; # arm x86 mips introduced=12
-    __set_tid_address; # arm x86 mips introduced=21
-    __set_tls; # arm mips
-    __sF; # var
-    __sigaction; # arm x86 mips introduced=21
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __socket; # arm x86 mips introduced=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __stack_chk_fail;
-    __stack_chk_guard; # var
-    __statfs64; # arm x86 mips
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __sym_ntop;
-    __sym_ntos;
-    __sym_ston;
-    __system_property_area_serial; # introduced=23
-    __system_property_find;
-    __system_property_find_nth;
-    __system_property_foreach; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_get;
-    __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __timer_create; # arm x86 mips
-    __timer_delete; # arm x86 mips
-    __timer_getoverrun; # arm x86 mips
-    __timer_gettime; # arm x86 mips
-    __timer_settime; # arm x86 mips
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __waitid; # arm x86 mips
-    _ctype_; # var
-    _Exit; # introduced=21
-    _exit;
-    _flushlbf; # introduced=23
-    _getlong;
-    _getshort;
-    _longjmp;
-    _resolv_delete_cache_for_net; # introduced=21
-    _resolv_flush_cache_for_net; # introduced=21
-    _resolv_set_nameservers_for_net; # introduced=21
-    _setjmp;
-    _tolower; # introduced=21
-    _tolower_tab_; # arm x86 mips var
-    _toupper; # introduced=21
-    _toupper_tab_; # arm x86 mips var
-    abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    accept;
-    accept4; # introduced=21
-    access;
-    acct;
-    alarm;
-    alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
-    arc4random;
-    arc4random_buf;
-    arc4random_uniform;
-    asctime;
-    asctime64; # arm x86 mips
-    asctime64_r; # arm x86 mips
-    asctime_r;
-    asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
-    atoi;
-    atol;
-    atoll;
-    basename;
-    basename_r; # arm x86 mips
-    bind;
-    bindresvport;
-    brk;
-    bsearch;
-    btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
-    cacheflush; # arm mips
-    calloc;
-    capget;
-    capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
-    chdir;
-    chmod;
-    chown;
-    chroot;
-    clearenv;
-    clearerr;
-    clearerr_unlocked; # introduced=23
-    clock;
-    clock_getcpuclockid; # introduced=23
-    clock_getres;
-    clock_gettime;
-    clock_nanosleep;
-    clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    close;
-    closedir;
-    closelog;
-    connect;
-    creat;
-    creat64; # introduced=21
-    ctime;
-    ctime64; # arm x86 mips
-    ctime64_r; # arm x86 mips
-    ctime_r;
-    daemon;
-    daylight; # var
-    delete_module;
-    difftime;
-    dirfd;
-    dirname;
-    dirname_r; # arm x86 mips
-    div;
-    dn_expand;
-    dprintf; # introduced=21
-    drand48;
-    dup;
-    dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
-    endservent;
-    endutent;
-    environ; # var
-    epoll_create;
-    epoll_create1; # introduced=21
-    epoll_ctl;
-    epoll_pwait; # introduced=21
-    epoll_wait;
-    erand48;
-    err;
-    error; # introduced=23
-    error_at_line; # introduced=23
-    error_message_count; # var introduced=23
-    error_one_per_line; # var introduced=23
-    error_print_progname; # var introduced=23
-    errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    eventfd;
-    eventfd_read;
-    eventfd_write;
-    execl;
-    execle;
-    execlp;
-    execv;
-    execve;
-    execvp;
-    execvpe; # introduced=21
-    exit;
-    faccessat; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
-    fchdir;
-    fchmod;
-    fchmodat;
-    fchown;
-    fchownat;
-    fclose;
-    fcntl;
-    fdatasync;
-    fdopen;
-    fdopendir;
-    fdprintf; # arm x86 mips versioned=28
-    feof;
-    feof_unlocked; # introduced=23
-    ferror;
-    ferror_unlocked; # introduced=23
-    fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    fgetc;
-    fgetln;
-    fgetpos;
-    fgets;
-    fgetwc;
-    fgetws;
-    fgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fileno;
-    flistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    flock;
-    flockfile;
-    fmemopen; # introduced=23
-    fnmatch;
-    fopen;
-    fork;
-    forkpty; # introduced=23
-    fpathconf;
-    fprintf;
-    fpurge;
-    fputc;
-    fputs;
-    fputwc;
-    fputws;
-    fread;
-    free;
-    freeaddrinfo;
-    freelocale; # introduced=21
-    fremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    freopen;
-    fscanf;
-    fseek;
-    fseeko;
-    fsetpos;
-    fsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fstat;
-    fstat64; # introduced=21
-    fstatat;
-    fstatat64; # introduced=21
-    fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
-    fsync;
-    ftell;
-    ftello;
-    ftok;
-    ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ftrylockfile;
-    fts_children; # introduced=21
-    fts_close; # introduced=21
-    fts_open; # introduced=21
-    fts_read; # introduced=21
-    fts_set; # introduced=21
-    ftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
-    funlockfile;
-    funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fwide;
-    fwprintf;
-    fwrite;
-    fwscanf;
-    gai_strerror;
-    get_avphys_pages; # introduced=23
-    get_nprocs; # introduced=23
-    get_nprocs_conf; # introduced=23
-    get_phys_pages; # introduced=23
-    getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getc;
-    getc_unlocked;
-    getchar;
-    getchar_unlocked;
-    getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getegid;
-    getenv;
-    geteuid;
-    getgid;
-    getgrgid;
-    getgrnam;
-    getgrouplist;
-    getgroups;
-    gethostbyaddr;
-    gethostbyaddr_r; # introduced=23
-    gethostbyname;
-    gethostbyname2;
-    gethostbyname2_r; # introduced=23
-    gethostbyname_r;
-    gethostent;
-    gethostname;
-    getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getlogin;
-    getmntent;
-    getmntent_r; # introduced=21
-    getnameinfo;
-    getnetbyaddr;
-    getnetbyname;
-    getopt;
-    getopt_long;
-    getopt_long_only;
-    getpagesize; # introduced=21
-    getpeername;
-    getpgid;
-    getpgrp;
-    getpid;
-    getppid;
-    getpriority;
-    getprogname; # introduced=21
-    getprotobyname;
-    getprotobynumber;
-    getpt;
-    getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getresgid;
-    getresuid;
-    getrlimit;
-    getrlimit64; # introduced=21
-    getrusage;
-    gets;
-    getservbyname;
-    getservbyport;
-    getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    getsockname;
-    getsockopt;
-    gettid;
-    gettimeofday;
-    getuid;
-    getutent;
-    getwc;
-    getwchar;
-    getxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    gmtime;
-    gmtime64; # arm x86 mips
-    gmtime64_r; # arm x86 mips
-    gmtime_r;
-    grantpt; # introduced=21
-    herror;
-    hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
-    if_indextoname;
-    if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    inet_addr;
-    inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
-    inet_nsap_addr;
-    inet_nsap_ntoa;
-    inet_ntoa;
-    inet_ntop;
-    inet_pton;
-    init_module;
-    initgroups;
-    initstate; # introduced=21
-    inotify_add_watch;
-    inotify_init;
-    inotify_init1; # introduced=21
-    inotify_rm_watch;
-    insque; # introduced=21
-    ioctl;
-    isalnum;
-    isalnum_l; # introduced=21
-    isalpha;
-    isalpha_l; # introduced=21
-    isascii;
-    isatty;
-    isblank;
-    isblank_l; # introduced=21
-    iscntrl;
-    iscntrl_l; # introduced=21
-    isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
-    isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
-    islower;
-    islower_l; # introduced=21
-    isnan;
-    isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
-    isprint;
-    isprint_l; # introduced=21
-    ispunct;
-    ispunct_l; # introduced=21
-    isspace;
-    isspace_l; # introduced=21
-    isupper;
-    isupper_l; # introduced=21
-    iswalnum;
-    iswalnum_l; # introduced=21
-    iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
-    iswcntrl;
-    iswcntrl_l; # introduced=21
-    iswctype;
-    iswctype_l; # introduced=21
-    iswdigit;
-    iswdigit_l; # introduced=21
-    iswgraph;
-    iswgraph_l; # introduced=21
-    iswlower;
-    iswlower_l; # introduced=21
-    iswprint;
-    iswprint_l; # introduced=21
-    iswpunct;
-    iswpunct_l; # introduced=21
-    iswspace;
-    iswspace_l; # introduced=21
-    iswupper;
-    iswupper_l; # introduced=21
-    iswxdigit;
-    iswxdigit_l; # introduced=21
-    isxdigit;
-    isxdigit_l; # introduced=21
-    jrand48;
-    kill;
-    killpg;
-    klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lchown;
-    lcong48; # introduced=23
-    ldexp;
-    ldiv;
-    lfind; # introduced=21
-    lgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    link;
-    linkat; # introduced=21
-    listen;
-    listxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lldiv;
-    llistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    localeconv; # introduced=21
-    localtime;
-    localtime64; # arm x86 mips
-    localtime64_r; # arm x86 mips
-    localtime_r;
-    login_tty; # introduced=23
-    longjmp;
-    lrand48;
-    lremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lsearch; # introduced=21
-    lseek;
-    lseek64;
-    lsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lstat;
-    lstat64; # introduced=21
-    madvise;
-    mallinfo;
-    malloc;
-    malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
-    mbrtowc;
-    mbsinit;
-    mbsnrtowcs; # introduced=21
-    mbsrtowcs;
-    mbstowcs;
-    mbtowc; # introduced=21
-    memalign;
-    memccpy;
-    memchr;
-    memcmp;
-    memcpy;
-    memmem;
-    memmove;
-    mempcpy; # introduced=23
-    memrchr;
-    memset;
-    mincore;
-    mkdir;
-    mkdirat;
-    mkdtemp;
-    mkfifo; # introduced=21
-    mkfifoat; # introduced=23
-    mknod;
-    mknodat; # introduced=21
-    mkostemp; # introduced=23
-    mkostemp64; # introduced=23
-    mkostemps; # introduced=23
-    mkostemps64; # introduced=23
-    mkstemp;
-    mkstemp64; # introduced=21
-    mkstemps;
-    mkstemps64; # introduced=23
-    mktemp;
-    mktime;
-    mktime64; # arm x86 mips
-    mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mmap;
-    mmap64; # introduced=21
-    mount;
-    mprotect;
-    mrand48;
-    mremap;
-    msync;
-    munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    munmap;
-    nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
-    nice;
-    nrand48;
-    nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
-    open;
-    open64; # introduced=21
-    open_memstream; # introduced=23
-    open_wmemstream; # introduced=23
-    openat;
-    openat64; # introduced=21
-    opendir;
-    openlog;
-    openpty; # introduced=23
-    optarg; # var
-    opterr; # var
-    optind; # var
-    optopt; # var
-    optreset; # var
-    pathconf;
-    pause;
-    pclose;
-    perror;
-    personality; # introduced-arm=15 introduced-arm64=21 introduced-mips=15 introduced-mips64=21 introduced-x86=15 introduced-x86_64=21
-    pipe;
-    pipe2;
-    poll;
-    popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
-    posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
-    prctl;
-    pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    printf;
-    prlimit64; # introduced=21
-    process_vm_readv; # introduced=23
-    process_vm_writev; # introduced=23
-    pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    pthread_attr_destroy;
-    pthread_attr_getdetachstate;
-    pthread_attr_getguardsize;
-    pthread_attr_getschedparam;
-    pthread_attr_getschedpolicy;
-    pthread_attr_getscope;
-    pthread_attr_getstack;
-    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_setstacksize;
-    pthread_cond_broadcast;
-    pthread_cond_destroy;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_timedwait_monotonic; # arm x86 mips
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-mips=9 introduced-arm64=28 introduced-x64_64=28 introduced-mips64=28
-    pthread_cond_timedwait_relative_np; # arm x86 mips
-    pthread_cond_timeout_np; # arm x86 mips
-    pthread_cond_wait;
-    pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
-    pthread_condattr_getpshared;
-    pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
-    pthread_condattr_setpshared;
-    pthread_create;
-    pthread_detach;
-    pthread_equal;
-    pthread_exit;
-    pthread_getattr_np;
-    pthread_getcpuclockid;
-    pthread_getschedparam;
-    pthread_getspecific;
-    pthread_gettid_np; # introduced=21
-    pthread_join;
-    pthread_key_create;
-    pthread_key_delete;
-    pthread_kill;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
-    pthread_mutex_lock_timeout_np; # arm x86 mips
-    pthread_mutex_timedlock; # introduced=21
-    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_rwlock_destroy;
-    pthread_rwlock_init;
-    pthread_rwlock_rdlock;
-    pthread_rwlock_timedrdlock;
-    pthread_rwlock_timedwrlock;
-    pthread_rwlock_tryrdlock;
-    pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
-    pthread_rwlockattr_destroy;
-    pthread_rwlockattr_getkind_np; # introduced=23
-    pthread_rwlockattr_getpshared;
-    pthread_rwlockattr_init;
-    pthread_rwlockattr_setkind_np; # introduced=23
-    pthread_rwlockattr_setpshared;
-    pthread_self;
-    pthread_setname_np;
-    pthread_setschedparam;
-    pthread_setspecific;
-    pthread_sigmask;
-    ptrace;
-    ptsname;
-    ptsname_r;
-    putc;
-    putc_unlocked;
-    putchar;
-    putchar_unlocked;
-    putenv;
-    puts;
-    pututline;
-    putw; # arm x86 mips
-    putwc;
-    putwchar;
-    pvalloc; # arm x86 mips introduced=17
-    pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    qsort;
-    quick_exit; # introduced=21
-    raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
-    read;
-    readahead; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
-    readdir_r;
-    readlink;
-    readlinkat; # introduced=21
-    readv;
-    realloc;
-    realpath;
-    reboot;
-    recv;
-    recvfrom;
-    recvmmsg; # introduced=21
-    recvmsg;
-    regcomp;
-    regerror;
-    regexec;
-    regfree;
-    remove;
-    removexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    remque; # introduced=21
-    rename;
-    renameat;
-    res_init;
-    res_mkquery;
-    res_query;
-    res_search;
-    rewind;
-    rewinddir;
-    rmdir;
-    sbrk;
-    scandir;
-    scandir64; # introduced=21
-    scanf;
-    sched_get_priority_max;
-    sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getparam;
-    sched_getscheduler;
-    sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_setparam;
-    sched_setscheduler;
-    sched_yield;
-    seed48;
-    seekdir; # introduced=23
-    select;
-    sem_close;
-    sem_destroy;
-    sem_getvalue;
-    sem_init;
-    sem_open;
-    sem_post;
-    sem_timedwait;
-    sem_trywait;
-    sem_unlink;
-    sem_wait;
-    send;
-    sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
-    sendmsg;
-    sendto;
-    setbuf;
-    setbuffer;
-    setegid;
-    setenv;
-    seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
-    setgid;
-    setgroups;
-    sethostname; # introduced=23
-    setitimer;
-    setjmp;
-    setlinebuf;
-    setlocale;
-    setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
-    setpgid;
-    setpgrp;
-    setpriority;
-    setprogname; # introduced=21
-    setregid;
-    setresgid;
-    setresuid;
-    setreuid;
-    setrlimit;
-    setrlimit64; # introduced=21
-    setservent;
-    setsid;
-    setsockopt;
-    setstate; # introduced=21
-    settimeofday;
-    setuid;
-    setutent;
-    setvbuf;
-    setxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    shutdown;
-    sigaction;
-    sigaddset; # introduced=21
-    sigaltstack;
-    sigblock;
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
-    siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    sigpending;
-    sigprocmask;
-    sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sigsetmask;
-    sigsuspend;
-    sigtimedwait; # introduced=23
-    sigwait;
-    sigwaitinfo; # introduced=23
-    sleep;
-    snprintf;
-    socket;
-    socketpair;
-    splice; # introduced=21
-    sprintf;
-    srand; # introduced=21
-    srand48;
-    srandom; # introduced=21
-    sscanf;
-    stat;
-    stat64; # introduced=21
-    statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
-    stderr; # var introduced=23
-    stdin; # var introduced=23
-    stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
-    strcasecmp;
-    strcasecmp_l; # introduced=23
-    strcasestr;
-    strcat;
-    strchr;
-    strcmp;
-    strcoll;
-    strcoll_l; # introduced=21
-    strcpy;
-    strcspn;
-    strdup;
-    strerror;
-    strerror_l; # introduced=23
-    strerror_r;
-    strftime;
-    strftime_l; # introduced=21
-    strlcat;
-    strlcpy;
-    strlen;
-    strncasecmp;
-    strncasecmp_l; # introduced=23
-    strncat;
-    strncmp;
-    strncpy;
-    strndup;
-    strnlen;
-    strpbrk;
-    strptime;
-    strrchr;
-    strsep;
-    strsignal;
-    strspn;
-    strstr;
-    strtod;
-    strtof; # introduced=21
-    strtoimax;
-    strtok;
-    strtok_r;
-    strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
-    strtoll;
-    strtoll_l; # introduced=21
-    strtoq; # introduced=21
-    strtoul;
-    strtoull;
-    strtoull_l; # introduced=21
-    strtoumax;
-    strtouq; # introduced=21
-    strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swprintf;
-    swscanf;
-    symlink;
-    symlinkat; # introduced=21
-    sync;
-    sys_siglist; # var
-    sys_signame; # var
-    syscall;
-    sysconf;
-    sysinfo;
-    syslog;
-    system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
-    tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
-    tcsetpgrp;
-    tdelete; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tdestroy; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tee; # introduced=21
-    telldir; # introduced=23
-    tempnam;
-    tfind; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tgkill; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timegm64; # arm x86 mips
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timelocal64; # arm x86 mips
-    timer_create;
-    timer_delete;
-    timer_getoverrun;
-    timer_gettime;
-    timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    times;
-    timezone; # var
-    tmpfile;
-    tmpnam;
-    toascii;
-    tolower;
-    tolower_l; # introduced=21
-    toupper;
-    toupper_l; # introduced=21
-    towlower;
-    towlower_l; # introduced=21
-    towupper;
-    towupper_l; # introduced=21
-    truncate;
-    truncate64; # introduced=21
-    tsearch; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    ttyname;
-    ttyname_r;
-    twalk; # introduced=21
-    tzname; # var
-    tzset;
-    umask;
-    umount;
-    umount2;
-    uname;
-    ungetc;
-    ungetwc;
-    unlink;
-    unlinkat;
-    unlockpt;
-    unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
-    usleep;
-    utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    utimes;
-    utmpname;
-    valloc; # arm x86 mips
-    vasprintf;
-    vdprintf; # introduced=21
-    verr;
-    verrx;
-    vfdprintf; # arm x86 mips versioned=28
-    vfork;
-    vfprintf;
-    vfscanf;
-    vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
-    vprintf;
-    vscanf;
-    vsnprintf;
-    vsprintf;
-    vsscanf;
-    vswprintf;
-    vswscanf; # introduced=21
-    vsyslog;
-    vwarn;
-    vwarnx;
-    vwprintf;
-    vwscanf; # introduced=21
-    wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    waitid;
-    waitpid;
-    warn;
-    warnx;
-    wcpcpy;
-    wcpncpy;
-    wcrtomb;
-    wcscasecmp;
-    wcscasecmp_l; # introduced=23
-    wcscat;
-    wcschr;
-    wcscmp;
-    wcscoll;
-    wcscoll_l; # introduced=21
-    wcscpy;
-    wcscspn;
-    wcsdup;
-    wcsftime;
-    wcslcat;
-    wcslcpy;
-    wcslen;
-    wcsncasecmp;
-    wcsncasecmp_l; # introduced=23
-    wcsncat;
-    wcsncmp;
-    wcsncpy;
-    wcsnlen;
-    wcsnrtombs; # introduced=21
-    wcspbrk;
-    wcsrchr;
-    wcsrtombs;
-    wcsspn;
-    wcsstr;
-    wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
-    wcstok;
-    wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs;
-    wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
-    wcswidth;
-    wcsxfrm;
-    wcsxfrm_l; # introduced=21
-    wctob;
-    wctomb; # introduced=21
-    wctype;
-    wctype_l; # introduced=21
-    wcwidth;
-    wmemchr;
-    wmemcmp;
-    wmemcpy;
-    wmemmove;
-    wmempcpy; # introduced=23
-    wmemset;
-    wprintf;
-    write;
-    writev;
-    wscanf;
-  local:
-    *;
-};
-
-LIBC_N { # introduced-arm64=24 introduced-mips=24 introduced-mips64=24 introduced-x86=24 introduced-x86_64=24
-  global:
-    __aeabi_atexit; # arm versioned=24
-    __aeabi_memclr; # arm versioned=24
-    __aeabi_memclr4; # arm versioned=24
-    __aeabi_memclr8; # arm versioned=24
-    __aeabi_memcpy; # arm versioned=24
-    __aeabi_memcpy4; # arm versioned=24
-    __aeabi_memcpy8; # arm versioned=24
-    __aeabi_memmove; # arm versioned=24
-    __aeabi_memmove4; # arm versioned=24
-    __aeabi_memmove8; # arm versioned=24
-    __aeabi_memset; # arm versioned=24
-    __aeabi_memset4; # arm versioned=24
-    __aeabi_memset8; # arm versioned=24
-    __fread_chk; # introduced=24
-    __fwrite_chk; # introduced=24
-    __getcwd_chk; # introduced=24
-    __gnu_Unwind_Find_exidx; # arm versioned=24
-    __pwrite_chk; # introduced=24
-    __pwrite64_chk; # introduced=24
-    __write_chk; # introduced=24
-    adjtimex; # introduced=24
-    clock_adjtime; # introduced=24
-    fgetpos64; # introduced=24
-    fileno_unlocked; # introduced=24
-    fopen64; # introduced=24
-    freeifaddrs; # introduced=24
-    freopen64; # introduced=24
-    fseeko64; # introduced=24
-    fsetpos64; # introduced=24
-    ftello64; # introduced=24
-    funopen64; # introduced=24
-    getgrgid_r; # introduced=24
-    getgrnam_r; # introduced=24
-    getifaddrs; # introduced=24
-    if_freenameindex; # introduced=24
-    if_nameindex; # introduced=24
-    in6addr_any; # var introduced=24
-    in6addr_loopback; # var introduced=24
-    lockf; # introduced=24
-    lockf64; # introduced=24
-    preadv; # introduced=24
-    preadv64; # introduced=24
-    prlimit; # arm mips x86 introduced=24
-    pthread_barrierattr_destroy; # introduced=24
-    pthread_barrierattr_getpshared; # introduced=24
-    pthread_barrierattr_init; # introduced=24
-    pthread_barrierattr_setpshared; # introduced=24
-    pthread_barrier_destroy; # introduced=24
-    pthread_barrier_init; # introduced=24
-    pthread_barrier_wait; # introduced=24
-    pthread_spin_destroy; # introduced=24
-    pthread_spin_init; # introduced=24
-    pthread_spin_lock; # introduced=24
-    pthread_spin_trylock; # introduced=24
-    pthread_spin_unlock; # introduced=24
-    pwritev; # introduced=24
-    pwritev64; # introduced=24
-    scandirat; # introduced=24
-    scandirat64; # introduced=24
-    strchrnul; # introduced=24
-    tmpfile64; # introduced=24
-} LIBC;
-
-LIBC_O {
-  global:
-    __sendto_chk; # introduced=26
-    __system_property_read_callback; # introduced=26
-    __system_property_wait; # introduced=26
-    bsd_signal; # arm x86 mips versioned=26
-    catclose; # introduced=26
-    catgets; # introduced=26
-    catopen; # introduced=26
-    ctermid; # introduced=26
-    endgrent; # introduced=26
-    endpwent; # introduced=26
-    futimes; # introduced=26
-    futimesat; # introduced=26
-    getdomainname; # introduced=26
-    getgrent; # introduced=26
-    getpwent; # introduced=26
-    getsubopt; # introduced=26
-    hasmntopt; # introduced=26
-    lutimes; # introduced=26
-    mallopt; # introduced=26
-    mblen; # introduced=26
-    msgctl; # introduced=26
-    msgget; # introduced=26
-    msgrcv; # introduced=26
-    msgsnd; # introduced=26
-    nl_langinfo; # introduced=26
-    nl_langinfo_l; # introduced=26
-    pthread_getname_np; # introduced=26
-    quotactl; # introduced=26
-    semctl; # introduced=26
-    semget; # introduced=26
-    semop; # introduced=26
-    semtimedop; # introduced=26
-    setdomainname; # introduced=26
-    setgrent; # introduced=26
-    setpwent; # introduced=26
-    shmat; # introduced=26
-    shmctl; # introduced=26
-    shmdt; # introduced=26
-    shmget; # introduced=26
-    sighold; # introduced=26
-    sigignore; # introduced=26
-    sigpause; # introduced=26
-    sigrelse; # introduced=26
-    sigset; # introduced=26
-    strtod_l; # introduced=26
-    strtof_l; # introduced=26
-    strtol_l; # introduced=26
-    strtoul_l; # introduced=26
-    sync_file_range; # introduced=26
-    towctrans; # introduced=26
-    towctrans_l; # introduced=26
-    wctrans; # introduced=26
-    wctrans_l; # introduced=26
-} LIBC_N;
-
-LIBC_P { # introduced=P
-  global:
-    __freading;
-    __free_hook;
-    __fseterr;
-    __fwriting;
-    __malloc_hook;
-    __memalign_hook;
-    __realloc_hook;
-    aligned_alloc;
-    endhostent;
-    endnetent;
-    endprotoent;
-    epoll_pwait64;
-    fexecve;
-    fflush_unlocked;
-    fgetc_unlocked;
-    fgets_unlocked;
-    fputc_unlocked;
-    fputs_unlocked;
-    fread_unlocked;
-    fwrite_unlocked;
-    getentropy;
-    getnetent;
-    getprotoent;
-    getrandom;
-    getlogin_r;
-    glob;
-    globfree;
-    hcreate;
-    hcreate_r;
-    hdestroy;
-    hdestroy_r;
-    hsearch;
-    hsearch_r;
-    iconv;
-    iconv_close;
-    iconv_open;
-    posix_spawn;
-    posix_spawnattr_destroy;
-    posix_spawnattr_getflags;
-    posix_spawnattr_getpgroup;
-    posix_spawnattr_getschedparam;
-    posix_spawnattr_getschedpolicy;
-    posix_spawnattr_getsigdefault;
-    posix_spawnattr_getsigdefault64;
-    posix_spawnattr_getsigmask;
-    posix_spawnattr_getsigmask64;
-    posix_spawnattr_init;
-    posix_spawnattr_setflags;
-    posix_spawnattr_setpgroup;
-    posix_spawnattr_setschedparam;
-    posix_spawnattr_setschedpolicy;
-    posix_spawnattr_setsigdefault;
-    posix_spawnattr_setsigdefault64;
-    posix_spawnattr_setsigmask;
-    posix_spawnattr_setsigmask64;
-    posix_spawn_file_actions_addclose;
-    posix_spawn_file_actions_adddup2;
-    posix_spawn_file_actions_addopen;
-    posix_spawn_file_actions_destroy;
-    posix_spawn_file_actions_init;
-    posix_spawnp;
-    ppoll64;
-    pselect64;
-    pthread_attr_getinheritsched;
-    pthread_attr_setinheritsched;
-    pthread_mutex_timedlock_monotonic_np;
-    pthread_mutexattr_getprotocol;
-    pthread_mutexattr_setprotocol;
-    pthread_rwlock_timedrdlock_monotonic_np;
-    pthread_rwlock_timedwrlock_monotonic_np;
-    pthread_setschedprio;
-    pthread_sigmask64;
-    sem_timedwait_monotonic_np;
-    sethostent;
-    setnetent;
-    setprotoent;
-    sigaction64;
-    sigaddset64;
-    sigdelset64;
-    sigemptyset64;
-    sigfillset64;
-    sigismember64;
-    signalfd64;
-    sigpending64;
-    sigprocmask64;
-    sigsuspend64;
-    sigtimedwait64;
-    sigwait64;
-    sigwaitinfo64;
-    strptime_l;
-    swab;
-    syncfs;
-    wcsftime_l;
-    wcstod_l;
-    wcstof_l;
-    wcstol_l;
-    wcstoul_l;
-} LIBC_O;
-
-LIBC_Q { # introduced=Q
-  global:
-    __res_randomid;
-    android_fdsan_close_with_tag;
-    android_fdsan_create_owner_tag;
-    android_fdsan_exchange_owner_tag;
-    android_fdsan_get_owner_tag;
-    android_fdsan_get_tag_type;
-    android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
-    android_fdsan_set_error_level;
-    android_get_device_api_level;
-    getloadavg;
-    pthread_sigqueue;
-    reallocarray;
-    timespec_get;
-} LIBC_P;
-
-LIBC_PRIVATE {
-  global:
-    ___Unwind_Backtrace; # arm
-    ___Unwind_ForcedUnwind; # arm
-    ___Unwind_RaiseException; # arm
-    ___Unwind_Resume; # arm
-    ___Unwind_Resume_or_Rethrow; # arm
-    __accept4; # arm x86 mips
-    __adddf3; # arm
-    __addsf3; # arm
-    __aeabi_atexit; # arm
-    __aeabi_cdcmpeq; # arm
-    __aeabi_cdcmple; # arm
-    __aeabi_cdrcmple; # arm
-    __aeabi_d2f; # arm
-    __aeabi_d2iz; # arm
-    __aeabi_dadd; # arm
-    __aeabi_dcmpeq; # arm
-    __aeabi_dcmpge; # arm
-    __aeabi_dcmpgt; # arm
-    __aeabi_dcmple; # arm
-    __aeabi_dcmplt; # arm
-    __aeabi_dcmpun; # arm
-    __aeabi_ddiv; # arm
-    __aeabi_dmul; # arm
-    __aeabi_drsub; # arm
-    __aeabi_dsub; # arm
-    __aeabi_f2d; # arm
-    __aeabi_f2iz; # arm
-    __aeabi_f2uiz; # arm
-    __aeabi_fadd; # arm
-    __aeabi_fcmpun; # arm
-    __aeabi_fdiv; # arm
-    __aeabi_fmul; # arm
-    __aeabi_frsub; # arm
-    __aeabi_fsub; # arm
-    __aeabi_i2d; # arm
-    __aeabi_i2f; # arm
-    __aeabi_idiv; # arm
-    __aeabi_idiv0; # arm
-    __aeabi_idivmod; # arm
-    __aeabi_l2d; # arm
-    __aeabi_l2f; # arm
-    __aeabi_lasr; # arm
-    __aeabi_ldiv0; # arm
-    __aeabi_ldivmod; # arm
-    __aeabi_llsl; # arm
-    __aeabi_llsr; # arm
-    __aeabi_lmul; # arm
-    __aeabi_memclr; # arm
-    __aeabi_memclr4; # arm
-    __aeabi_memclr8; # arm
-    __aeabi_memcpy; # arm
-    __aeabi_memcpy4; # arm
-    __aeabi_memcpy8; # arm
-    __aeabi_memmove; # arm
-    __aeabi_memmove4; # arm
-    __aeabi_memmove8; # arm
-    __aeabi_memset; # arm
-    __aeabi_memset4; # arm
-    __aeabi_memset8; # arm
-    __aeabi_ui2d; # arm
-    __aeabi_ui2f; # arm
-    __aeabi_uidiv; # arm
-    __aeabi_uidivmod; # arm
-    __aeabi_ul2d; # arm
-    __aeabi_ul2f; # arm
-    __aeabi_uldivmod; # arm
-    __aeabi_unwind_cpp_pr0; # arm
-    __aeabi_unwind_cpp_pr1; # arm
-    __aeabi_unwind_cpp_pr2; # arm
-    __arm_fadvise64_64; # arm
-    __ashldi3; # arm
-    __ashrdi3; # arm
-    __bionic_brk; # arm x86 mips
-    __bionic_libgcc_compat_symbols; # arm x86
-    __cmpdf2; # arm
-    __divdf3; # arm
-    __divdi3; # arm x86 mips
-    __divsf3; # arm
-    __divsi3; # arm
-    __dso_handle; # arm
-    __eqdf2; # arm
-    __extendsfdf2; # arm
-    __fixdfsi; # arm
-    __fixsfsi; # arm
-    __fixunssfsi; # arm
-    __floatdidf; # arm
-    __floatdisf; # arm
-    __floatsidf; # arm
-    __floatsisf; # arm
-    __floatundidf; # arm
-    __floatundisf; # arm
-    __floatunsidf; # arm
-    __floatunsisf; # arm
-    __futex_wait; # arm x86 mips
-    __futex_wake; # arm x86 mips
-    __gedf2; # arm
-    __get_thread; # arm x86 mips
-    __get_tls; # arm x86 mips
-    __getdents64; # arm x86 mips
-    __gnu_ldivmod_helper; # arm
-    __gnu_uldivmod_helper; # arm
-    __gnu_Unwind_Backtrace; # arm
-    __gnu_unwind_execute; # arm
-    __gnu_Unwind_Find_exidx; # arm
-    __gnu_Unwind_ForcedUnwind; # arm
-    __gnu_unwind_frame; # arm
-    __gnu_Unwind_RaiseException; # arm
-    __gnu_Unwind_Restore_VFP; # arm
-    __gnu_Unwind_Restore_VFP_D; # arm
-    __gnu_Unwind_Restore_VFP_D_16_to_31; # arm
-    __gnu_Unwind_Restore_WMMXC; # arm
-    __gnu_Unwind_Restore_WMMXD; # arm
-    __gnu_Unwind_Resume; # arm
-    __gnu_Unwind_Resume_or_Rethrow; # arm
-    __gnu_Unwind_Save_VFP; # arm
-    __gnu_Unwind_Save_VFP_D; # arm
-    __gnu_Unwind_Save_VFP_D_16_to_31; # arm
-    __gnu_Unwind_Save_WMMXC; # arm
-    __gnu_Unwind_Save_WMMXD; # arm
-    __gtdf2; # arm
-    __ledf2; # arm
-    __lshrdi3; # arm
-    __ltdf2; # arm
-    __muldf3; # arm
-    __muldi3; # arm
-    __mulsf3; # arm
-    __nedf2; # arm
-    __open; # arm x86 mips
-    __page_shift; # arm x86 mips
-    __page_size; # arm x86 mips
-    __popcount_tab; # arm
-    __popcountsi2; # arm x86 mips
-    __pthread_gettid; # arm x86 mips
-    __restore_core_regs; # arm
-    __sclose; # arm x86 mips
-    __sdidinit; # arm x86 mips
-    __set_errno; # arm x86 mips
-    __sflags; # arm x86 mips
-    __sflush; # arm x86 mips
-    __sfp; # arm x86 mips
-    __sglue; # arm x86 mips
-    __sinit; # arm x86 mips
-    __smakebuf; # arm x86 mips
-    __sread; # arm x86 mips
-    __srefill; # arm x86 mips
-    __srget; # arm x86 mips
-    __sseek; # arm x86 mips
-    __subdf3; # arm
-    __subsf3; # arm
-    __swbuf; # arm x86 mips
-    __swrite; # arm x86 mips
-    __swsetup; # arm x86 mips
-    __truncdfsf2; # arm
-    __udivdi3; # arm x86 mips
-    __udivsi3; # arm
-    __unorddf2; # arm
-    __unordsf2; # arm
-    __wait4; # arm x86 mips
-    _fwalk; # arm x86 mips
-    _Unwind_Backtrace; # arm
-    _Unwind_Complete; # arm
-    _Unwind_DeleteException; # arm
-    _Unwind_ForcedUnwind; # arm
-    _Unwind_GetCFA; # arm
-    _Unwind_GetDataRelBase; # arm
-    _Unwind_GetLanguageSpecificData; # arm
-    _Unwind_GetRegionStart; # arm
-    _Unwind_GetTextRelBase; # arm
-    _Unwind_RaiseException; # arm
-    _Unwind_Resume; # arm
-    _Unwind_Resume_or_Rethrow; # arm
-    _Unwind_VRS_Get; # arm
-    _Unwind_VRS_Pop; # arm
-    _Unwind_VRS_Set; # arm
-    android_getaddrinfofornet;
-    android_getaddrinfofornetcontext;
-    android_gethostbyaddrfornet;
-    android_gethostbyaddrfornetcontext;
-    android_gethostbynamefornet;
-    android_gethostbynamefornetcontext;
-    arc4random_addrandom; # arm x86 mips
-    arc4random_stir; # arm x86 mips
-    atexit; # arm
-    bcopy; # arm x86 mips
-    bzero; # arm x86 mips
-    dlmalloc; # arm x86 mips
-    dlmalloc_inspect_all; # arm x86 mips
-    dlmalloc_trim; # arm x86 mips
-    dlmalloc_usable_size; # arm x86 mips
-    free_malloc_leak_info;
-    ftime; # arm x86 mips
-    get_malloc_leak_info;
-    getdents; # arm x86 mips
-    getdtablesize; # arm x86 mips
-    gMallocLeakZygoteChild;
-    index; # arm x86 mips
-    issetugid; # arm x86 mips
-    memswap; # arm x86 mips
-    pthread_attr_getstackaddr; # arm x86 mips
-    pthread_attr_setstackaddr; # arm x86 mips
-    restore_core_regs; # arm
-    SHA1Final; # arm x86 mips
-    SHA1Init; # arm x86 mips
-    SHA1Transform; # arm x86 mips
-    SHA1Update; # arm x86 mips
-    strntoimax; # arm x86 mips
-    strntoumax; # arm x86 mips
-    strtotimeval; # arm x86 mips
-    sysv_signal; # arm x86 mips
-    tkill; # arm x86 mips
-    wait3; # arm x86 mips
-    wcswcs; # arm x86 mips
-    write_malloc_leak_info;
-} LIBC_Q;
-
-LIBC_DEPRECATED {
-  global:
-    __system_property_wait_any;
-};
-
-LIBC_PLATFORM {
-  global:
-    __system_properties_init;
-    __system_property_area__; # var
-    __system_property_add;
-    __system_property_area_init;
-    __system_property_set_filename;
-    __system_property_update;
-    android_fdsan_get_fd_table;
-    android_net_res_stats_get_info_for_net;
-    android_net_res_stats_aggregate;
-    android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
-} LIBC_Q;
diff --git a/libc/libc.arm64.map b/libc/libc.arm64.map
deleted file mode 100644
index 81ff00d..0000000
--- a/libc/libc.arm64.map
+++ /dev/null
@@ -1,1397 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __assert;
-    __assert2;
-    __b64_ntop;
-    __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
-    __cxa_atexit;
-    __cxa_finalize;
-    __cxa_thread_atexit_impl; # introduced=23
-    __dn_comp;
-    __dn_count_labels;
-    __dn_skipname;
-    __errno;
-    __fbufsize; # introduced=23
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __flbf; # introduced=23
-    __fp_nquery;
-    __fp_query;
-    __fpclassify; # introduced=21
-    __fpclassifyd;
-    __fpclassifyf;
-    __fpclassifyl;
-    __fpending; # introduced=23
-    __fpurge; # introduced=23
-    __freadable; # introduced=23
-    __fsetlocking; # introduced=23
-    __fwritable; # introduced=23
-    __get_h_errno;
-    __gnu_basename; # introduced=23
-    __gnu_strerror_r; # introduced=23
-    __hostalias;
-    __isfinite;
-    __isfinitef;
-    __isfinitel;
-    __isinf;
-    __isinff;
-    __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
-    __isnanl;
-    __isnormal;
-    __isnormalf;
-    __isnormall;
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
-    __libc_init;
-    __loc_aton;
-    __loc_ntoa;
-    __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __p_cdname;
-    __p_cdnname;
-    __p_class;
-    __p_class_syms; # var
-    __p_fqname;
-    __p_fqnname;
-    __p_option;
-    __p_query;
-    __p_rcode;
-    __p_secstodate;
-    __p_time;
-    __p_type;
-    __p_type_syms; # var
-    __poll_chk; # introduced=23
-    __ppoll_chk; # introduced=23
-    __ppoll64_chk; # introduced=28
-    __pread64_chk; # introduced=23
-    __pread_chk; # introduced=23
-    __progname; # var
-    __pthread_cleanup_pop;
-    __pthread_cleanup_push;
-    __putlong;
-    __putshort;
-    __read_chk; # introduced=21
-    __readlink_chk; # introduced=23
-    __readlinkat_chk; # introduced=23
-    __recvfrom_chk; # introduced=21
-    __register_atfork; # introduced=23
-    __res_close;
-    __res_dnok;
-    __res_hnok;
-    __res_hostalias;
-    __res_isourserver;
-    __res_mailok;
-    __res_nameinquery;
-    __res_nclose;
-    __res_ninit;
-    __res_nmkquery;
-    __res_nquery;
-    __res_nquerydomain;
-    __res_nsearch;
-    __res_nsend;
-    __res_ownok;
-    __res_queriesmatch;
-    __res_querydomain;
-    __res_send;
-    __res_send_setqhook;
-    __res_send_setrhook;
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sF; # var
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __stack_chk_fail;
-    __stack_chk_guard; # var
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __sym_ntop;
-    __sym_ntos;
-    __sym_ston;
-    __system_property_area_serial; # introduced=23
-    __system_property_find;
-    __system_property_find_nth;
-    __system_property_foreach; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_get;
-    __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    _ctype_; # var
-    _Exit; # introduced=21
-    _exit;
-    _flushlbf; # introduced=23
-    _getlong;
-    _getshort;
-    _longjmp;
-    _resolv_delete_cache_for_net; # introduced=21
-    _resolv_flush_cache_for_net; # introduced=21
-    _resolv_set_nameservers_for_net; # introduced=21
-    _setjmp;
-    _tolower; # introduced=21
-    _toupper; # introduced=21
-    abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    accept;
-    accept4; # introduced=21
-    access;
-    acct;
-    alarm;
-    alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
-    arc4random;
-    arc4random_buf;
-    arc4random_uniform;
-    asctime;
-    asctime_r;
-    asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
-    atoi;
-    atol;
-    atoll;
-    basename;
-    bind;
-    bindresvport;
-    brk;
-    bsearch;
-    btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
-    calloc;
-    capget;
-    capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
-    chdir;
-    chmod;
-    chown;
-    chroot;
-    clearenv;
-    clearerr;
-    clearerr_unlocked; # introduced=23
-    clock;
-    clock_getcpuclockid; # introduced=23
-    clock_getres;
-    clock_gettime;
-    clock_nanosleep;
-    clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    close;
-    closedir;
-    closelog;
-    connect;
-    creat;
-    creat64; # introduced=21
-    ctime;
-    ctime_r;
-    daemon;
-    daylight; # var
-    delete_module;
-    difftime;
-    dirfd;
-    dirname;
-    div;
-    dn_expand;
-    dprintf; # introduced=21
-    drand48;
-    dup;
-    dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
-    endservent;
-    endutent;
-    environ; # var
-    epoll_create;
-    epoll_create1; # introduced=21
-    epoll_ctl;
-    epoll_pwait; # introduced=21
-    epoll_wait;
-    erand48;
-    err;
-    error; # introduced=23
-    error_at_line; # introduced=23
-    error_message_count; # var introduced=23
-    error_one_per_line; # var introduced=23
-    error_print_progname; # var introduced=23
-    errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    eventfd;
-    eventfd_read;
-    eventfd_write;
-    execl;
-    execle;
-    execlp;
-    execv;
-    execve;
-    execvp;
-    execvpe; # introduced=21
-    exit;
-    faccessat; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
-    fchdir;
-    fchmod;
-    fchmodat;
-    fchown;
-    fchownat;
-    fclose;
-    fcntl;
-    fdatasync;
-    fdopen;
-    fdopendir;
-    feof;
-    feof_unlocked; # introduced=23
-    ferror;
-    ferror_unlocked; # introduced=23
-    fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    fgetc;
-    fgetln;
-    fgetpos;
-    fgets;
-    fgetwc;
-    fgetws;
-    fgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fileno;
-    flistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    flock;
-    flockfile;
-    fmemopen; # introduced=23
-    fnmatch;
-    fopen;
-    fork;
-    forkpty; # introduced=23
-    fpathconf;
-    fprintf;
-    fpurge;
-    fputc;
-    fputs;
-    fputwc;
-    fputws;
-    fread;
-    free;
-    freeaddrinfo;
-    freelocale; # introduced=21
-    fremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    freopen;
-    fscanf;
-    fseek;
-    fseeko;
-    fsetpos;
-    fsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fstat;
-    fstat64; # introduced=21
-    fstatat;
-    fstatat64; # introduced=21
-    fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
-    fsync;
-    ftell;
-    ftello;
-    ftok;
-    ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ftrylockfile;
-    fts_children; # introduced=21
-    fts_close; # introduced=21
-    fts_open; # introduced=21
-    fts_read; # introduced=21
-    fts_set; # introduced=21
-    ftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
-    funlockfile;
-    funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fwide;
-    fwprintf;
-    fwrite;
-    fwscanf;
-    gai_strerror;
-    get_avphys_pages; # introduced=23
-    get_nprocs; # introduced=23
-    get_nprocs_conf; # introduced=23
-    get_phys_pages; # introduced=23
-    getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getc;
-    getc_unlocked;
-    getchar;
-    getchar_unlocked;
-    getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getegid;
-    getenv;
-    geteuid;
-    getgid;
-    getgrgid;
-    getgrnam;
-    getgrouplist;
-    getgroups;
-    gethostbyaddr;
-    gethostbyaddr_r; # introduced=23
-    gethostbyname;
-    gethostbyname2;
-    gethostbyname2_r; # introduced=23
-    gethostbyname_r;
-    gethostent;
-    gethostname;
-    getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getlogin;
-    getmntent;
-    getmntent_r; # introduced=21
-    getnameinfo;
-    getnetbyaddr;
-    getnetbyname;
-    getopt;
-    getopt_long;
-    getopt_long_only;
-    getpagesize; # introduced=21
-    getpeername;
-    getpgid;
-    getpgrp;
-    getpid;
-    getppid;
-    getpriority;
-    getprogname; # introduced=21
-    getprotobyname;
-    getprotobynumber;
-    getpt;
-    getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getresgid;
-    getresuid;
-    getrlimit;
-    getrlimit64; # introduced=21
-    getrusage;
-    gets;
-    getservbyname;
-    getservbyport;
-    getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    getsockname;
-    getsockopt;
-    gettid;
-    gettimeofday;
-    getuid;
-    getutent;
-    getwc;
-    getwchar;
-    getxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    gmtime;
-    gmtime_r;
-    grantpt; # introduced=21
-    herror;
-    hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
-    if_indextoname;
-    if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    inet_addr;
-    inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
-    inet_nsap_addr;
-    inet_nsap_ntoa;
-    inet_ntoa;
-    inet_ntop;
-    inet_pton;
-    init_module;
-    initgroups;
-    initstate; # introduced=21
-    inotify_add_watch;
-    inotify_init;
-    inotify_init1; # introduced=21
-    inotify_rm_watch;
-    insque; # introduced=21
-    ioctl;
-    isalnum;
-    isalnum_l; # introduced=21
-    isalpha;
-    isalpha_l; # introduced=21
-    isascii;
-    isatty;
-    isblank;
-    isblank_l; # introduced=21
-    iscntrl;
-    iscntrl_l; # introduced=21
-    isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
-    isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
-    islower;
-    islower_l; # introduced=21
-    isnan;
-    isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
-    isprint;
-    isprint_l; # introduced=21
-    ispunct;
-    ispunct_l; # introduced=21
-    isspace;
-    isspace_l; # introduced=21
-    isupper;
-    isupper_l; # introduced=21
-    iswalnum;
-    iswalnum_l; # introduced=21
-    iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
-    iswcntrl;
-    iswcntrl_l; # introduced=21
-    iswctype;
-    iswctype_l; # introduced=21
-    iswdigit;
-    iswdigit_l; # introduced=21
-    iswgraph;
-    iswgraph_l; # introduced=21
-    iswlower;
-    iswlower_l; # introduced=21
-    iswprint;
-    iswprint_l; # introduced=21
-    iswpunct;
-    iswpunct_l; # introduced=21
-    iswspace;
-    iswspace_l; # introduced=21
-    iswupper;
-    iswupper_l; # introduced=21
-    iswxdigit;
-    iswxdigit_l; # introduced=21
-    isxdigit;
-    isxdigit_l; # introduced=21
-    jrand48;
-    kill;
-    killpg;
-    klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lchown;
-    lcong48; # introduced=23
-    ldexp;
-    ldiv;
-    lfind; # introduced=21
-    lgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    link;
-    linkat; # introduced=21
-    listen;
-    listxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lldiv;
-    llistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    localeconv; # introduced=21
-    localtime;
-    localtime_r;
-    login_tty; # introduced=23
-    longjmp;
-    lrand48;
-    lremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lsearch; # introduced=21
-    lseek;
-    lseek64;
-    lsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lstat;
-    lstat64; # introduced=21
-    madvise;
-    mallinfo;
-    malloc;
-    malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
-    mbrtowc;
-    mbsinit;
-    mbsnrtowcs; # introduced=21
-    mbsrtowcs;
-    mbstowcs;
-    mbtowc; # introduced=21
-    memalign;
-    memccpy;
-    memchr;
-    memcmp;
-    memcpy;
-    memmem;
-    memmove;
-    mempcpy; # introduced=23
-    memrchr;
-    memset;
-    mincore;
-    mkdir;
-    mkdirat;
-    mkdtemp;
-    mkfifo; # introduced=21
-    mkfifoat; # introduced=23
-    mknod;
-    mknodat; # introduced=21
-    mkostemp; # introduced=23
-    mkostemp64; # introduced=23
-    mkostemps; # introduced=23
-    mkostemps64; # introduced=23
-    mkstemp;
-    mkstemp64; # introduced=21
-    mkstemps;
-    mkstemps64; # introduced=23
-    mktemp;
-    mktime;
-    mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mmap;
-    mmap64; # introduced=21
-    mount;
-    mprotect;
-    mrand48;
-    mremap;
-    msync;
-    munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    munmap;
-    nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
-    nice;
-    nrand48;
-    ns_format_ttl; # arm64 x86_64 mips64 introduced=22
-    ns_get16; # arm64 x86_64 mips64 introduced=22
-    ns_get32; # arm64 x86_64 mips64 introduced=22
-    ns_initparse; # arm64 x86_64 mips64 introduced=22
-    ns_makecanon; # arm64 x86_64 mips64 introduced=22
-    ns_msg_getflag; # arm64 x86_64 mips64 introduced=22
-    ns_name_compress; # arm64 x86_64 mips64 introduced=22
-    ns_name_ntol; # arm64 x86_64 mips64 introduced=22
-    ns_name_ntop; # arm64 x86_64 mips64 introduced=22
-    ns_name_pack; # arm64 x86_64 mips64 introduced=22
-    ns_name_pton; # arm64 x86_64 mips64 introduced=23
-    ns_name_rollback; # arm64 x86_64 mips64 introduced=22
-    ns_name_skip; # arm64 x86_64 mips64 introduced=22
-    ns_name_uncompress; # arm64 x86_64 mips64 introduced=22
-    ns_name_unpack; # arm64 x86_64 mips64 introduced=22
-    ns_parserr; # arm64 x86_64 mips64 introduced=22
-    ns_put16; # arm64 x86_64 mips64 introduced=22
-    ns_put32; # arm64 x86_64 mips64 introduced=22
-    ns_samename; # arm64 x86_64 mips64 introduced=22
-    ns_skiprr; # arm64 x86_64 mips64 introduced=22
-    ns_sprintrr; # arm64 x86_64 mips64 introduced=22
-    ns_sprintrrf; # arm64 x86_64 mips64 introduced=22
-    nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
-    open;
-    open64; # introduced=21
-    open_memstream; # introduced=23
-    open_wmemstream; # introduced=23
-    openat;
-    openat64; # introduced=21
-    opendir;
-    openlog;
-    openpty; # introduced=23
-    optarg; # var
-    opterr; # var
-    optind; # var
-    optopt; # var
-    optreset; # var
-    pathconf;
-    pause;
-    pclose;
-    perror;
-    personality; # introduced-arm=15 introduced-arm64=21 introduced-mips=15 introduced-mips64=21 introduced-x86=15 introduced-x86_64=21
-    pipe;
-    pipe2;
-    poll;
-    popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
-    posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
-    prctl;
-    pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    printf;
-    prlimit; # arm64 x86_64 mips64
-    prlimit64; # introduced=21
-    process_vm_readv; # introduced=23
-    process_vm_writev; # introduced=23
-    pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    pthread_attr_destroy;
-    pthread_attr_getdetachstate;
-    pthread_attr_getguardsize;
-    pthread_attr_getschedparam;
-    pthread_attr_getschedpolicy;
-    pthread_attr_getscope;
-    pthread_attr_getstack;
-    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_setstacksize;
-    pthread_cond_broadcast;
-    pthread_cond_destroy;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-mips=9 introduced-arm64=28 introduced-x64_64=28 introduced-mips64=28
-    pthread_cond_wait;
-    pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
-    pthread_condattr_getpshared;
-    pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
-    pthread_condattr_setpshared;
-    pthread_create;
-    pthread_detach;
-    pthread_equal;
-    pthread_exit;
-    pthread_getattr_np;
-    pthread_getcpuclockid;
-    pthread_getschedparam;
-    pthread_getspecific;
-    pthread_gettid_np; # introduced=21
-    pthread_join;
-    pthread_key_create;
-    pthread_key_delete;
-    pthread_kill;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
-    pthread_mutex_timedlock; # introduced=21
-    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_rwlock_destroy;
-    pthread_rwlock_init;
-    pthread_rwlock_rdlock;
-    pthread_rwlock_timedrdlock;
-    pthread_rwlock_timedwrlock;
-    pthread_rwlock_tryrdlock;
-    pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
-    pthread_rwlockattr_destroy;
-    pthread_rwlockattr_getkind_np; # introduced=23
-    pthread_rwlockattr_getpshared;
-    pthread_rwlockattr_init;
-    pthread_rwlockattr_setkind_np; # introduced=23
-    pthread_rwlockattr_setpshared;
-    pthread_self;
-    pthread_setname_np;
-    pthread_setschedparam;
-    pthread_setspecific;
-    pthread_sigmask;
-    ptrace;
-    ptsname;
-    ptsname_r;
-    putc;
-    putc_unlocked;
-    putchar;
-    putchar_unlocked;
-    putenv;
-    puts;
-    pututline;
-    putwc;
-    putwchar;
-    pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    qsort;
-    quick_exit; # introduced=21
-    raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
-    read;
-    readahead; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
-    readdir_r;
-    readlink;
-    readlinkat; # introduced=21
-    readv;
-    realloc;
-    realpath;
-    reboot;
-    recv;
-    recvfrom;
-    recvmmsg; # introduced=21
-    recvmsg;
-    regcomp;
-    regerror;
-    regexec;
-    regfree;
-    remove;
-    removexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    remque; # introduced=21
-    rename;
-    renameat;
-    res_init;
-    res_mkquery;
-    res_query;
-    res_search;
-    rewind;
-    rewinddir;
-    rmdir;
-    sbrk;
-    scandir;
-    scandir64; # introduced=21
-    scanf;
-    sched_get_priority_max;
-    sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getparam;
-    sched_getscheduler;
-    sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_setparam;
-    sched_setscheduler;
-    sched_yield;
-    seed48;
-    seekdir; # introduced=23
-    select;
-    sem_close;
-    sem_destroy;
-    sem_getvalue;
-    sem_init;
-    sem_open;
-    sem_post;
-    sem_timedwait;
-    sem_trywait;
-    sem_unlink;
-    sem_wait;
-    send;
-    sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
-    sendmsg;
-    sendto;
-    setbuf;
-    setbuffer;
-    setegid;
-    setenv;
-    seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
-    setgid;
-    setgroups;
-    sethostname; # introduced=23
-    setitimer;
-    setjmp;
-    setlinebuf;
-    setlocale;
-    setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
-    setpgid;
-    setpgrp;
-    setpriority;
-    setprogname; # introduced=21
-    setregid;
-    setresgid;
-    setresuid;
-    setreuid;
-    setrlimit;
-    setrlimit64; # introduced=21
-    setservent;
-    setsid;
-    setsockopt;
-    setstate; # introduced=21
-    settimeofday;
-    setuid;
-    setutent;
-    setvbuf;
-    setxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    shutdown;
-    sigaction;
-    sigaddset; # introduced=21
-    sigaltstack;
-    sigblock;
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
-    siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    sigpending;
-    sigprocmask;
-    sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sigsetmask;
-    sigsuspend;
-    sigtimedwait; # introduced=23
-    sigwait;
-    sigwaitinfo; # introduced=23
-    sleep;
-    snprintf;
-    socket;
-    socketpair;
-    splice; # introduced=21
-    sprintf;
-    srand; # introduced=21
-    srand48;
-    srandom; # introduced=21
-    sscanf;
-    stat;
-    stat64; # introduced=21
-    statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
-    stderr; # var introduced=23
-    stdin; # var introduced=23
-    stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
-    strcasecmp;
-    strcasecmp_l; # introduced=23
-    strcasestr;
-    strcat;
-    strchr;
-    strcmp;
-    strcoll;
-    strcoll_l; # introduced=21
-    strcpy;
-    strcspn;
-    strdup;
-    strerror;
-    strerror_l; # introduced=23
-    strerror_r;
-    strftime;
-    strftime_l; # introduced=21
-    strlcat;
-    strlcpy;
-    strlen;
-    strncasecmp;
-    strncasecmp_l; # introduced=23
-    strncat;
-    strncmp;
-    strncpy;
-    strndup;
-    strnlen;
-    strpbrk;
-    strptime;
-    strrchr;
-    strsep;
-    strsignal;
-    strspn;
-    strstr;
-    strtod;
-    strtof; # introduced=21
-    strtoimax;
-    strtok;
-    strtok_r;
-    strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
-    strtoll;
-    strtoll_l; # introduced=21
-    strtoq; # introduced=21
-    strtoul;
-    strtoull;
-    strtoull_l; # introduced=21
-    strtoumax;
-    strtouq; # introduced=21
-    strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swprintf;
-    swscanf;
-    symlink;
-    symlinkat; # introduced=21
-    sync;
-    sys_siglist; # var
-    sys_signame; # var
-    syscall;
-    sysconf;
-    sysinfo;
-    syslog;
-    system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
-    tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
-    tcsetpgrp;
-    tdelete; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tdestroy; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tee; # introduced=21
-    telldir; # introduced=23
-    tempnam;
-    tfind; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tgkill; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timer_create;
-    timer_delete;
-    timer_getoverrun;
-    timer_gettime;
-    timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    times;
-    timezone; # var
-    tmpfile;
-    tmpnam;
-    toascii;
-    tolower;
-    tolower_l; # introduced=21
-    toupper;
-    toupper_l; # introduced=21
-    towlower;
-    towlower_l; # introduced=21
-    towupper;
-    towupper_l; # introduced=21
-    truncate;
-    truncate64; # introduced=21
-    tsearch; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    ttyname;
-    ttyname_r;
-    twalk; # introduced=21
-    tzname; # var
-    tzset;
-    umask;
-    umount;
-    umount2;
-    uname;
-    ungetc;
-    ungetwc;
-    unlink;
-    unlinkat;
-    unlockpt;
-    unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
-    usleep;
-    utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    utimes;
-    utmpname;
-    vasprintf;
-    vdprintf; # introduced=21
-    verr;
-    verrx;
-    vfork;
-    vfprintf;
-    vfscanf;
-    vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
-    vprintf;
-    vscanf;
-    vsnprintf;
-    vsprintf;
-    vsscanf;
-    vswprintf;
-    vswscanf; # introduced=21
-    vsyslog;
-    vwarn;
-    vwarnx;
-    vwprintf;
-    vwscanf; # introduced=21
-    wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    waitid;
-    waitpid;
-    warn;
-    warnx;
-    wcpcpy;
-    wcpncpy;
-    wcrtomb;
-    wcscasecmp;
-    wcscasecmp_l; # introduced=23
-    wcscat;
-    wcschr;
-    wcscmp;
-    wcscoll;
-    wcscoll_l; # introduced=21
-    wcscpy;
-    wcscspn;
-    wcsdup;
-    wcsftime;
-    wcslcat;
-    wcslcpy;
-    wcslen;
-    wcsncasecmp;
-    wcsncasecmp_l; # introduced=23
-    wcsncat;
-    wcsncmp;
-    wcsncpy;
-    wcsnlen;
-    wcsnrtombs; # introduced=21
-    wcspbrk;
-    wcsrchr;
-    wcsrtombs;
-    wcsspn;
-    wcsstr;
-    wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
-    wcstok;
-    wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs;
-    wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
-    wcswidth;
-    wcsxfrm;
-    wcsxfrm_l; # introduced=21
-    wctob;
-    wctomb; # introduced=21
-    wctype;
-    wctype_l; # introduced=21
-    wcwidth;
-    wmemchr;
-    wmemcmp;
-    wmemcpy;
-    wmemmove;
-    wmempcpy; # introduced=23
-    wmemset;
-    wprintf;
-    write;
-    writev;
-    wscanf;
-  local:
-    *;
-};
-
-LIBC_N { # introduced-arm64=24 introduced-mips=24 introduced-mips64=24 introduced-x86=24 introduced-x86_64=24
-  global:
-    __fread_chk; # introduced=24
-    __fwrite_chk; # introduced=24
-    __getcwd_chk; # introduced=24
-    __pwrite_chk; # introduced=24
-    __pwrite64_chk; # introduced=24
-    __write_chk; # introduced=24
-    adjtimex; # introduced=24
-    clock_adjtime; # introduced=24
-    fgetpos64; # introduced=24
-    fileno_unlocked; # introduced=24
-    fopen64; # introduced=24
-    freeifaddrs; # introduced=24
-    freopen64; # introduced=24
-    fseeko64; # introduced=24
-    fsetpos64; # introduced=24
-    ftello64; # introduced=24
-    funopen64; # introduced=24
-    getgrgid_r; # introduced=24
-    getgrnam_r; # introduced=24
-    getifaddrs; # introduced=24
-    if_freenameindex; # introduced=24
-    if_nameindex; # introduced=24
-    in6addr_any; # var introduced=24
-    in6addr_loopback; # var introduced=24
-    lockf; # introduced=24
-    lockf64; # introduced=24
-    preadv; # introduced=24
-    preadv64; # introduced=24
-    pthread_barrierattr_destroy; # introduced=24
-    pthread_barrierattr_getpshared; # introduced=24
-    pthread_barrierattr_init; # introduced=24
-    pthread_barrierattr_setpshared; # introduced=24
-    pthread_barrier_destroy; # introduced=24
-    pthread_barrier_init; # introduced=24
-    pthread_barrier_wait; # introduced=24
-    pthread_spin_destroy; # introduced=24
-    pthread_spin_init; # introduced=24
-    pthread_spin_lock; # introduced=24
-    pthread_spin_trylock; # introduced=24
-    pthread_spin_unlock; # introduced=24
-    pwritev; # introduced=24
-    pwritev64; # introduced=24
-    scandirat; # introduced=24
-    scandirat64; # introduced=24
-    strchrnul; # introduced=24
-    tmpfile64; # introduced=24
-} LIBC;
-
-LIBC_O {
-  global:
-    __sendto_chk; # introduced=26
-    __system_property_read_callback; # introduced=26
-    __system_property_wait; # introduced=26
-    catclose; # introduced=26
-    catgets; # introduced=26
-    catopen; # introduced=26
-    ctermid; # introduced=26
-    endgrent; # introduced=26
-    endpwent; # introduced=26
-    futimes; # introduced=26
-    futimesat; # introduced=26
-    getdomainname; # introduced=26
-    getgrent; # introduced=26
-    getpwent; # introduced=26
-    getsubopt; # introduced=26
-    hasmntopt; # introduced=26
-    lutimes; # introduced=26
-    mallopt; # introduced=26
-    mblen; # introduced=26
-    msgctl; # introduced=26
-    msgget; # introduced=26
-    msgrcv; # introduced=26
-    msgsnd; # introduced=26
-    nl_langinfo; # introduced=26
-    nl_langinfo_l; # introduced=26
-    pthread_getname_np; # introduced=26
-    quotactl; # introduced=26
-    semctl; # introduced=26
-    semget; # introduced=26
-    semop; # introduced=26
-    semtimedop; # introduced=26
-    setdomainname; # introduced=26
-    setgrent; # introduced=26
-    setpwent; # introduced=26
-    shmat; # introduced=26
-    shmctl; # introduced=26
-    shmdt; # introduced=26
-    shmget; # introduced=26
-    sighold; # introduced=26
-    sigignore; # introduced=26
-    sigpause; # introduced=26
-    sigrelse; # introduced=26
-    sigset; # introduced=26
-    strtod_l; # introduced=26
-    strtof_l; # introduced=26
-    strtol_l; # introduced=26
-    strtoul_l; # introduced=26
-    sync_file_range; # introduced=26
-    towctrans; # introduced=26
-    towctrans_l; # introduced=26
-    wctrans; # introduced=26
-    wctrans_l; # introduced=26
-} LIBC_N;
-
-LIBC_P { # introduced=P
-  global:
-    __freading;
-    __free_hook;
-    __fseterr;
-    __fwriting;
-    __malloc_hook;
-    __memalign_hook;
-    __realloc_hook;
-    aligned_alloc;
-    endhostent;
-    endnetent;
-    endprotoent;
-    epoll_pwait64;
-    fexecve;
-    fflush_unlocked;
-    fgetc_unlocked;
-    fgets_unlocked;
-    fputc_unlocked;
-    fputs_unlocked;
-    fread_unlocked;
-    fwrite_unlocked;
-    getentropy;
-    getnetent;
-    getprotoent;
-    getrandom;
-    getlogin_r;
-    glob;
-    globfree;
-    hcreate;
-    hcreate_r;
-    hdestroy;
-    hdestroy_r;
-    hsearch;
-    hsearch_r;
-    iconv;
-    iconv_close;
-    iconv_open;
-    posix_spawn;
-    posix_spawnattr_destroy;
-    posix_spawnattr_getflags;
-    posix_spawnattr_getpgroup;
-    posix_spawnattr_getschedparam;
-    posix_spawnattr_getschedpolicy;
-    posix_spawnattr_getsigdefault;
-    posix_spawnattr_getsigdefault64;
-    posix_spawnattr_getsigmask;
-    posix_spawnattr_getsigmask64;
-    posix_spawnattr_init;
-    posix_spawnattr_setflags;
-    posix_spawnattr_setpgroup;
-    posix_spawnattr_setschedparam;
-    posix_spawnattr_setschedpolicy;
-    posix_spawnattr_setsigdefault;
-    posix_spawnattr_setsigdefault64;
-    posix_spawnattr_setsigmask;
-    posix_spawnattr_setsigmask64;
-    posix_spawn_file_actions_addclose;
-    posix_spawn_file_actions_adddup2;
-    posix_spawn_file_actions_addopen;
-    posix_spawn_file_actions_destroy;
-    posix_spawn_file_actions_init;
-    posix_spawnp;
-    ppoll64;
-    pselect64;
-    pthread_attr_getinheritsched;
-    pthread_attr_setinheritsched;
-    pthread_mutex_timedlock_monotonic_np;
-    pthread_mutexattr_getprotocol;
-    pthread_mutexattr_setprotocol;
-    pthread_rwlock_timedrdlock_monotonic_np;
-    pthread_rwlock_timedwrlock_monotonic_np;
-    pthread_setschedprio;
-    pthread_sigmask64;
-    sem_timedwait_monotonic_np;
-    sethostent;
-    setnetent;
-    setprotoent;
-    sigaction64;
-    sigaddset64;
-    sigdelset64;
-    sigemptyset64;
-    sigfillset64;
-    sigismember64;
-    signalfd64;
-    sigpending64;
-    sigprocmask64;
-    sigsuspend64;
-    sigtimedwait64;
-    sigwait64;
-    sigwaitinfo64;
-    strptime_l;
-    swab;
-    syncfs;
-    wcsftime_l;
-    wcstod_l;
-    wcstof_l;
-    wcstol_l;
-    wcstoul_l;
-} LIBC_O;
-
-LIBC_Q { # introduced=Q
-  global:
-    __res_randomid;
-    android_fdsan_close_with_tag;
-    android_fdsan_create_owner_tag;
-    android_fdsan_exchange_owner_tag;
-    android_fdsan_get_owner_tag;
-    android_fdsan_get_tag_type;
-    android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
-    android_fdsan_set_error_level;
-    android_get_device_api_level;
-    getloadavg;
-    pthread_sigqueue;
-    reallocarray;
-    timespec_get;
-} LIBC_P;
-
-LIBC_PRIVATE {
-  global:
-    android_getaddrinfofornet;
-    android_getaddrinfofornetcontext;
-    android_gethostbyaddrfornet;
-    android_gethostbyaddrfornetcontext;
-    android_gethostbynamefornet;
-    android_gethostbynamefornetcontext;
-    free_malloc_leak_info;
-    get_malloc_leak_info;
-    gMallocLeakZygoteChild;
-    write_malloc_leak_info;
-} LIBC_Q;
-
-LIBC_DEPRECATED {
-  global:
-    __system_property_wait_any;
-};
-
-LIBC_PLATFORM {
-  global:
-    __system_properties_init;
-    __system_property_area__; # var
-    __system_property_add;
-    __system_property_area_init;
-    __system_property_set_filename;
-    __system_property_update;
-    android_fdsan_get_fd_table;
-    android_net_res_stats_get_info_for_net;
-    android_net_res_stats_aggregate;
-    android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
-} LIBC_Q;
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index 934ad1f..9dfdbc0 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -207,7 +207,6 @@
     _ctype_; # var
     _Exit; # introduced=21
     _exit;
-    _flush_cache; # mips
     _flushlbf; # introduced=23
     _getlong;
     _getshort;
@@ -1447,20 +1446,49 @@
 
 LIBC_Q { # introduced=Q
   global:
+    __aeabi_read_tp; # arm
     __res_randomid;
     android_fdsan_close_with_tag;
     android_fdsan_create_owner_tag;
     android_fdsan_exchange_owner_tag;
+    android_fdsan_get_error_level;
     android_fdsan_get_owner_tag;
     android_fdsan_get_tag_type;
     android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
     android_fdsan_set_error_level;
     android_get_device_api_level;
     getloadavg;
     pthread_sigqueue;
     reallocarray;
     timespec_get;
+
+    # Used by libselinux
+    __system_properties_init; # apex
+
+    # Used by libmemunreachable
+    malloc_backtrace; # apex
+    malloc_disable; # apex
+    malloc_enable; # apex
+    malloc_iterate; # apex
+
+    # Used by libmediautils
+    write_malloc_leak_info; # apex
+    free_malloc_leak_info; # apex
+    get_malloc_leak_info; # apex
+
+    # Used by libandroid_net
+    android_getaddrinfofornet; # apex
+
+    # Used by libandroid_runtime
+    gMallocLeakZygoteChild; # apex
+
+    # TODO(b/120266448) hide these symbols again
+    # Used by libndk_translation
+    __getdents64; # arm x86 mips apex
+    tkill; # arm x86 mips apex
+    # Used by PtsBionicDeviceTestCases
+    __bionic_brk; # arm x86 mips apex
+    __system_property_add; # apex
 } LIBC_P;
 
 LIBC_PRIVATE {
@@ -1537,7 +1565,6 @@
     __arm_fadvise64_64; # arm
     __ashldi3; # arm
     __ashrdi3; # arm
-    __bionic_brk; # arm x86 mips
     __bionic_libgcc_compat_symbols; # arm x86
     __cmpdf2; # arm
     __divdf3; # arm
@@ -1563,7 +1590,6 @@
     __gedf2; # arm
     __get_thread; # arm x86 mips
     __get_tls; # arm x86 mips
-    __getdents64; # arm x86 mips
     __gnu_ldivmod_helper; # arm
     __gnu_uldivmod_helper; # arm
     __gnu_Unwind_Backtrace; # arm
@@ -1640,7 +1666,6 @@
     _Unwind_VRS_Get; # arm
     _Unwind_VRS_Pop; # arm
     _Unwind_VRS_Set; # arm
-    android_getaddrinfofornet;
     android_getaddrinfofornetcontext;
     android_gethostbyaddrfornet;
     android_gethostbyaddrfornetcontext;
@@ -1655,12 +1680,9 @@
     dlmalloc_inspect_all; # arm x86 mips
     dlmalloc_trim; # arm x86 mips
     dlmalloc_usable_size; # arm x86 mips
-    free_malloc_leak_info;
     ftime; # arm x86 mips
-    get_malloc_leak_info;
     getdents; # arm x86 mips
     getdtablesize; # arm x86 mips
-    gMallocLeakZygoteChild;
     index; # arm x86 mips
     issetugid; # arm x86 mips
     memswap; # arm x86 mips
@@ -1675,10 +1697,8 @@
     strntoumax; # arm x86 mips
     strtotimeval; # arm x86 mips
     sysv_signal; # arm x86 mips
-    tkill; # arm x86 mips
     wait3; # arm x86 mips
     wcswcs; # arm x86 mips
-    write_malloc_leak_info;
 } LIBC_Q;
 
 LIBC_DEPRECATED {
@@ -1688,9 +1708,7 @@
 
 LIBC_PLATFORM {
   global:
-    __system_properties_init;
     __system_property_area__; # var
-    __system_property_add;
     __system_property_area_init;
     __system_property_set_filename;
     __system_property_update;
@@ -1698,8 +1716,4 @@
     android_net_res_stats_get_info_for_net;
     android_net_res_stats_aggregate;
     android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
 } LIBC_Q;
diff --git a/libc/libc.mips.map b/libc/libc.mips.map
deleted file mode 100644
index dc184a6..0000000
--- a/libc/libc.mips.map
+++ /dev/null
@@ -1,1520 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __assert;
-    __assert2;
-    __b64_ntop;
-    __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __connect; # arm x86 mips introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
-    __cxa_atexit;
-    __cxa_finalize;
-    __cxa_thread_atexit_impl; # introduced=23
-    __dn_comp;
-    __dn_count_labels;
-    __dn_skipname;
-    __epoll_pwait; # arm x86 mips introduced=21
-    __errno;
-    __exit; # arm x86 mips introduced=21
-    __fadvise64; # x86 mips introduced=21
-    __fbufsize; # introduced=23
-    __fcntl64; # arm x86 mips
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __flbf; # introduced=23
-    __fp_nquery;
-    __fp_query;
-    __fpclassify; # introduced=21
-    __fpclassifyd;
-    __fpclassifyf;
-    __fpclassifyl;
-    __fpending; # introduced=23
-    __fpurge; # introduced=23
-    __freadable; # introduced=23
-    __fsetlocking; # introduced=23
-    __fstatfs64; # arm x86 mips
-    __fwritable; # introduced=23
-    __get_h_errno;
-    __getcpu; # arm x86 mips introduced-arm=12 introduced-mips=16 introduced-x86=12
-    __getcwd; # arm x86 mips
-    __getpid; # arm x86 mips introduced=21
-    __getpriority; # arm x86 mips
-    __gnu_basename; # introduced=23
-    __gnu_strerror_r; # introduced=23
-    __hostalias;
-    __ioctl; # arm x86 mips
-    __isfinite;
-    __isfinitef;
-    __isfinitel;
-    __isinf;
-    __isinff;
-    __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
-    __isnanl;
-    __isnormal;
-    __isnormalf;
-    __isnormall;
-    __isthreaded; # arm x86 mips var
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
-    __libc_init;
-    __llseek; # arm x86 mips
-    __loc_aton;
-    __loc_ntoa;
-    __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __mmap2; # arm x86 mips
-    __ns_format_ttl; # arm x86 mips
-    __ns_get16; # arm x86 mips
-    __ns_get32; # arm x86 mips
-    __ns_initparse; # arm x86 mips
-    __ns_makecanon; # arm x86 mips
-    __ns_msg_getflag; # arm x86 mips
-    __ns_name_compress; # arm x86 mips
-    __ns_name_ntol; # arm x86 mips
-    __ns_name_ntop; # arm x86 mips
-    __ns_name_pack; # arm x86 mips
-    __ns_name_pton; # arm x86 mips
-    __ns_name_rollback; # arm x86 mips
-    __ns_name_skip; # arm x86 mips
-    __ns_name_uncompress; # arm x86 mips
-    __ns_name_unpack; # arm x86 mips
-    __ns_parserr; # arm x86 mips
-    __ns_put16; # arm x86 mips
-    __ns_put32; # arm x86 mips
-    __ns_samename; # arm x86 mips
-    __ns_skiprr; # arm x86 mips
-    __ns_sprintrr; # arm x86 mips
-    __ns_sprintrrf; # arm x86 mips
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __openat; # arm x86 mips
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __p_cdname;
-    __p_cdnname;
-    __p_class;
-    __p_class_syms; # var
-    __p_fqname;
-    __p_fqnname;
-    __p_option;
-    __p_query;
-    __p_rcode;
-    __p_secstodate;
-    __p_time;
-    __p_type;
-    __p_type_syms; # var
-    __poll_chk; # introduced=23
-    __ppoll; # arm x86 mips introduced=21
-    __ppoll_chk; # introduced=23
-    __ppoll64_chk; # introduced=28
-    __pread64_chk; # introduced=23
-    __pread_chk; # introduced=23
-    __progname; # var
-    __pselect6; # arm x86 mips introduced=21
-    __pthread_cleanup_pop;
-    __pthread_cleanup_push;
-    __ptrace; # arm x86 mips
-    __putlong;
-    __putshort;
-    __read_chk; # introduced=21
-    __readlink_chk; # introduced=23
-    __readlinkat_chk; # introduced=23
-    __reboot; # arm x86 mips
-    __recvfrom_chk; # introduced=21
-    __register_atfork; # introduced=23
-    __res_close;
-    __res_dnok;
-    __res_hnok;
-    __res_hostalias;
-    __res_isourserver;
-    __res_mailok;
-    __res_nameinquery;
-    __res_nclose;
-    __res_ninit;
-    __res_nmkquery;
-    __res_nquery;
-    __res_nquerydomain;
-    __res_nsearch;
-    __res_nsend;
-    __res_ownok;
-    __res_queriesmatch;
-    __res_querydomain;
-    __res_send;
-    __res_send_setqhook;
-    __res_send_setrhook;
-    __rt_sigaction; # arm x86 mips
-    __rt_sigpending; # arm x86 mips introduced=21
-    __rt_sigprocmask; # arm x86 mips
-    __rt_sigsuspend; # arm x86 mips introduced=21
-    __rt_sigtimedwait; # arm x86 mips
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_getaffinity; # arm x86 mips introduced=12
-    __set_tid_address; # arm x86 mips introduced=21
-    __set_tls; # arm mips
-    __sF; # var
-    __sigaction; # arm x86 mips introduced=21
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __socket; # arm x86 mips introduced=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __stack_chk_fail;
-    __stack_chk_guard; # var
-    __statfs64; # arm x86 mips
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __sym_ntop;
-    __sym_ntos;
-    __sym_ston;
-    __system_property_area_serial; # introduced=23
-    __system_property_find;
-    __system_property_find_nth;
-    __system_property_foreach; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_get;
-    __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __timer_create; # arm x86 mips
-    __timer_delete; # arm x86 mips
-    __timer_getoverrun; # arm x86 mips
-    __timer_gettime; # arm x86 mips
-    __timer_settime; # arm x86 mips
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __waitid; # arm x86 mips
-    _ctype_; # var
-    _Exit; # introduced=21
-    _exit;
-    _flush_cache; # mips
-    _flushlbf; # introduced=23
-    _getlong;
-    _getshort;
-    _longjmp;
-    _resolv_delete_cache_for_net; # introduced=21
-    _resolv_flush_cache_for_net; # introduced=21
-    _resolv_set_nameservers_for_net; # introduced=21
-    _setjmp;
-    _tolower; # introduced=21
-    _tolower_tab_; # arm x86 mips var
-    _toupper; # introduced=21
-    _toupper_tab_; # arm x86 mips var
-    abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    accept;
-    accept4; # introduced=21
-    access;
-    acct;
-    alarm;
-    alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
-    arc4random;
-    arc4random_buf;
-    arc4random_uniform;
-    asctime;
-    asctime64; # arm x86 mips
-    asctime64_r; # arm x86 mips
-    asctime_r;
-    asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
-    atoi;
-    atol;
-    atoll;
-    basename;
-    basename_r; # arm x86 mips
-    bind;
-    bindresvport;
-    brk;
-    bsearch;
-    btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
-    cacheflush; # arm mips
-    calloc;
-    capget;
-    capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
-    chdir;
-    chmod;
-    chown;
-    chroot;
-    clearenv;
-    clearerr;
-    clearerr_unlocked; # introduced=23
-    clock;
-    clock_getcpuclockid; # introduced=23
-    clock_getres;
-    clock_gettime;
-    clock_nanosleep;
-    clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    close;
-    closedir;
-    closelog;
-    connect;
-    creat;
-    creat64; # introduced=21
-    ctime;
-    ctime64; # arm x86 mips
-    ctime64_r; # arm x86 mips
-    ctime_r;
-    daemon;
-    daylight; # var
-    delete_module;
-    difftime;
-    dirfd;
-    dirname;
-    dirname_r; # arm x86 mips
-    div;
-    dn_expand;
-    dprintf; # introduced=21
-    drand48;
-    dup;
-    dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
-    endservent;
-    endutent;
-    environ; # var
-    epoll_create;
-    epoll_create1; # introduced=21
-    epoll_ctl;
-    epoll_pwait; # introduced=21
-    epoll_wait;
-    erand48;
-    err;
-    error; # introduced=23
-    error_at_line; # introduced=23
-    error_message_count; # var introduced=23
-    error_one_per_line; # var introduced=23
-    error_print_progname; # var introduced=23
-    errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    eventfd;
-    eventfd_read;
-    eventfd_write;
-    execl;
-    execle;
-    execlp;
-    execv;
-    execve;
-    execvp;
-    execvpe; # introduced=21
-    exit;
-    faccessat; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
-    fchdir;
-    fchmod;
-    fchmodat;
-    fchown;
-    fchownat;
-    fclose;
-    fcntl;
-    fdatasync;
-    fdopen;
-    fdopendir;
-    fdprintf; # arm x86 mips versioned=28
-    feof;
-    feof_unlocked; # introduced=23
-    ferror;
-    ferror_unlocked; # introduced=23
-    fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    fgetc;
-    fgetln;
-    fgetpos;
-    fgets;
-    fgetwc;
-    fgetws;
-    fgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fileno;
-    flistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    flock;
-    flockfile;
-    fmemopen; # introduced=23
-    fnmatch;
-    fopen;
-    fork;
-    forkpty; # introduced=23
-    fpathconf;
-    fprintf;
-    fpurge;
-    fputc;
-    fputs;
-    fputwc;
-    fputws;
-    fread;
-    free;
-    freeaddrinfo;
-    freelocale; # introduced=21
-    fremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    freopen;
-    fscanf;
-    fseek;
-    fseeko;
-    fsetpos;
-    fsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fstat;
-    fstat64; # introduced=21
-    fstatat;
-    fstatat64; # introduced=21
-    fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
-    fsync;
-    ftell;
-    ftello;
-    ftok;
-    ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ftrylockfile;
-    fts_children; # introduced=21
-    fts_close; # introduced=21
-    fts_open; # introduced=21
-    fts_read; # introduced=21
-    fts_set; # introduced=21
-    ftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
-    funlockfile;
-    funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fwide;
-    fwprintf;
-    fwrite;
-    fwscanf;
-    gai_strerror;
-    get_avphys_pages; # introduced=23
-    get_nprocs; # introduced=23
-    get_nprocs_conf; # introduced=23
-    get_phys_pages; # introduced=23
-    getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getc;
-    getc_unlocked;
-    getchar;
-    getchar_unlocked;
-    getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getegid;
-    getenv;
-    geteuid;
-    getgid;
-    getgrgid;
-    getgrnam;
-    getgrouplist;
-    getgroups;
-    gethostbyaddr;
-    gethostbyaddr_r; # introduced=23
-    gethostbyname;
-    gethostbyname2;
-    gethostbyname2_r; # introduced=23
-    gethostbyname_r;
-    gethostent;
-    gethostname;
-    getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getlogin;
-    getmntent;
-    getmntent_r; # introduced=21
-    getnameinfo;
-    getnetbyaddr;
-    getnetbyname;
-    getopt;
-    getopt_long;
-    getopt_long_only;
-    getpagesize; # introduced=21
-    getpeername;
-    getpgid;
-    getpgrp;
-    getpid;
-    getppid;
-    getpriority;
-    getprogname; # introduced=21
-    getprotobyname;
-    getprotobynumber;
-    getpt;
-    getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getresgid;
-    getresuid;
-    getrlimit;
-    getrlimit64; # introduced=21
-    getrusage;
-    gets;
-    getservbyname;
-    getservbyport;
-    getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    getsockname;
-    getsockopt;
-    gettid;
-    gettimeofday;
-    getuid;
-    getutent;
-    getwc;
-    getwchar;
-    getxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    gmtime;
-    gmtime64; # arm x86 mips
-    gmtime64_r; # arm x86 mips
-    gmtime_r;
-    grantpt; # introduced=21
-    herror;
-    hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
-    if_indextoname;
-    if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    inet_addr;
-    inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
-    inet_nsap_addr;
-    inet_nsap_ntoa;
-    inet_ntoa;
-    inet_ntop;
-    inet_pton;
-    init_module;
-    initgroups;
-    initstate; # introduced=21
-    inotify_add_watch;
-    inotify_init;
-    inotify_init1; # introduced=21
-    inotify_rm_watch;
-    insque; # introduced=21
-    ioctl;
-    isalnum;
-    isalnum_l; # introduced=21
-    isalpha;
-    isalpha_l; # introduced=21
-    isascii;
-    isatty;
-    isblank;
-    isblank_l; # introduced=21
-    iscntrl;
-    iscntrl_l; # introduced=21
-    isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
-    isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
-    islower;
-    islower_l; # introduced=21
-    isnan;
-    isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
-    isprint;
-    isprint_l; # introduced=21
-    ispunct;
-    ispunct_l; # introduced=21
-    isspace;
-    isspace_l; # introduced=21
-    isupper;
-    isupper_l; # introduced=21
-    iswalnum;
-    iswalnum_l; # introduced=21
-    iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
-    iswcntrl;
-    iswcntrl_l; # introduced=21
-    iswctype;
-    iswctype_l; # introduced=21
-    iswdigit;
-    iswdigit_l; # introduced=21
-    iswgraph;
-    iswgraph_l; # introduced=21
-    iswlower;
-    iswlower_l; # introduced=21
-    iswprint;
-    iswprint_l; # introduced=21
-    iswpunct;
-    iswpunct_l; # introduced=21
-    iswspace;
-    iswspace_l; # introduced=21
-    iswupper;
-    iswupper_l; # introduced=21
-    iswxdigit;
-    iswxdigit_l; # introduced=21
-    isxdigit;
-    isxdigit_l; # introduced=21
-    jrand48;
-    kill;
-    killpg;
-    klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lchown;
-    lcong48; # introduced=23
-    ldexp;
-    ldiv;
-    lfind; # introduced=21
-    lgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    link;
-    linkat; # introduced=21
-    listen;
-    listxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lldiv;
-    llistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    localeconv; # introduced=21
-    localtime;
-    localtime64; # arm x86 mips
-    localtime64_r; # arm x86 mips
-    localtime_r;
-    login_tty; # introduced=23
-    longjmp;
-    lrand48;
-    lremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lsearch; # introduced=21
-    lseek;
-    lseek64;
-    lsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lstat;
-    lstat64; # introduced=21
-    madvise;
-    mallinfo;
-    malloc;
-    malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
-    mbrtowc;
-    mbsinit;
-    mbsnrtowcs; # introduced=21
-    mbsrtowcs;
-    mbstowcs;
-    mbtowc; # introduced=21
-    memalign;
-    memccpy;
-    memchr;
-    memcmp;
-    memcpy;
-    memmem;
-    memmove;
-    mempcpy; # introduced=23
-    memrchr;
-    memset;
-    mincore;
-    mkdir;
-    mkdirat;
-    mkdtemp;
-    mkfifo; # introduced=21
-    mkfifoat; # introduced=23
-    mknod;
-    mknodat; # introduced=21
-    mkostemp; # introduced=23
-    mkostemp64; # introduced=23
-    mkostemps; # introduced=23
-    mkostemps64; # introduced=23
-    mkstemp;
-    mkstemp64; # introduced=21
-    mkstemps;
-    mkstemps64; # introduced=23
-    mktemp;
-    mktime;
-    mktime64; # arm x86 mips
-    mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mmap;
-    mmap64; # introduced=21
-    mount;
-    mprotect;
-    mrand48;
-    mremap;
-    msync;
-    munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    munmap;
-    nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
-    nice;
-    nrand48;
-    nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
-    open;
-    open64; # introduced=21
-    open_memstream; # introduced=23
-    open_wmemstream; # introduced=23
-    openat;
-    openat64; # introduced=21
-    opendir;
-    openlog;
-    openpty; # introduced=23
-    optarg; # var
-    opterr; # var
-    optind; # var
-    optopt; # var
-    optreset; # var
-    pathconf;
-    pause;
-    pclose;
-    perror;
-    personality; # introduced-arm=15 introduced-arm64=21 introduced-mips=15 introduced-mips64=21 introduced-x86=15 introduced-x86_64=21
-    pipe;
-    pipe2;
-    poll;
-    popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
-    posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
-    prctl;
-    pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    printf;
-    prlimit64; # introduced=21
-    process_vm_readv; # introduced=23
-    process_vm_writev; # introduced=23
-    pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    pthread_attr_destroy;
-    pthread_attr_getdetachstate;
-    pthread_attr_getguardsize;
-    pthread_attr_getschedparam;
-    pthread_attr_getschedpolicy;
-    pthread_attr_getscope;
-    pthread_attr_getstack;
-    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_setstacksize;
-    pthread_cond_broadcast;
-    pthread_cond_destroy;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_timedwait_monotonic; # arm x86 mips
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-mips=9 introduced-arm64=28 introduced-x64_64=28 introduced-mips64=28
-    pthread_cond_timedwait_relative_np; # arm x86 mips
-    pthread_cond_timeout_np; # arm x86 mips
-    pthread_cond_wait;
-    pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
-    pthread_condattr_getpshared;
-    pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
-    pthread_condattr_setpshared;
-    pthread_create;
-    pthread_detach;
-    pthread_equal;
-    pthread_exit;
-    pthread_getattr_np;
-    pthread_getcpuclockid;
-    pthread_getschedparam;
-    pthread_getspecific;
-    pthread_gettid_np; # introduced=21
-    pthread_join;
-    pthread_key_create;
-    pthread_key_delete;
-    pthread_kill;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
-    pthread_mutex_lock_timeout_np; # arm x86 mips
-    pthread_mutex_timedlock; # introduced=21
-    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_rwlock_destroy;
-    pthread_rwlock_init;
-    pthread_rwlock_rdlock;
-    pthread_rwlock_timedrdlock;
-    pthread_rwlock_timedwrlock;
-    pthread_rwlock_tryrdlock;
-    pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
-    pthread_rwlockattr_destroy;
-    pthread_rwlockattr_getkind_np; # introduced=23
-    pthread_rwlockattr_getpshared;
-    pthread_rwlockattr_init;
-    pthread_rwlockattr_setkind_np; # introduced=23
-    pthread_rwlockattr_setpshared;
-    pthread_self;
-    pthread_setname_np;
-    pthread_setschedparam;
-    pthread_setspecific;
-    pthread_sigmask;
-    ptrace;
-    ptsname;
-    ptsname_r;
-    putc;
-    putc_unlocked;
-    putchar;
-    putchar_unlocked;
-    putenv;
-    puts;
-    pututline;
-    putw; # arm x86 mips
-    putwc;
-    putwchar;
-    pvalloc; # arm x86 mips introduced=17
-    pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    qsort;
-    quick_exit; # introduced=21
-    raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
-    read;
-    readahead; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
-    readdir_r;
-    readlink;
-    readlinkat; # introduced=21
-    readv;
-    realloc;
-    realpath;
-    reboot;
-    recv;
-    recvfrom;
-    recvmmsg; # introduced=21
-    recvmsg;
-    regcomp;
-    regerror;
-    regexec;
-    regfree;
-    remove;
-    removexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    remque; # introduced=21
-    rename;
-    renameat;
-    res_init;
-    res_mkquery;
-    res_query;
-    res_search;
-    rewind;
-    rewinddir;
-    rmdir;
-    sbrk;
-    scandir;
-    scandir64; # introduced=21
-    scanf;
-    sched_get_priority_max;
-    sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getparam;
-    sched_getscheduler;
-    sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_setparam;
-    sched_setscheduler;
-    sched_yield;
-    seed48;
-    seekdir; # introduced=23
-    select;
-    sem_close;
-    sem_destroy;
-    sem_getvalue;
-    sem_init;
-    sem_open;
-    sem_post;
-    sem_timedwait;
-    sem_trywait;
-    sem_unlink;
-    sem_wait;
-    send;
-    sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
-    sendmsg;
-    sendto;
-    setbuf;
-    setbuffer;
-    setegid;
-    setenv;
-    seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
-    setgid;
-    setgroups;
-    sethostname; # introduced=23
-    setitimer;
-    setjmp;
-    setlinebuf;
-    setlocale;
-    setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
-    setpgid;
-    setpgrp;
-    setpriority;
-    setprogname; # introduced=21
-    setregid;
-    setresgid;
-    setresuid;
-    setreuid;
-    setrlimit;
-    setrlimit64; # introduced=21
-    setservent;
-    setsid;
-    setsockopt;
-    setstate; # introduced=21
-    settimeofday;
-    setuid;
-    setutent;
-    setvbuf;
-    setxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    shutdown;
-    sigaction;
-    sigaddset; # introduced=21
-    sigaltstack;
-    sigblock;
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
-    siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    sigpending;
-    sigprocmask;
-    sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sigsetmask;
-    sigsuspend;
-    sigtimedwait; # introduced=23
-    sigwait;
-    sigwaitinfo; # introduced=23
-    sleep;
-    snprintf;
-    socket;
-    socketpair;
-    splice; # introduced=21
-    sprintf;
-    srand; # introduced=21
-    srand48;
-    srandom; # introduced=21
-    sscanf;
-    stat;
-    stat64; # introduced=21
-    statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
-    stderr; # var introduced=23
-    stdin; # var introduced=23
-    stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
-    strcasecmp;
-    strcasecmp_l; # introduced=23
-    strcasestr;
-    strcat;
-    strchr;
-    strcmp;
-    strcoll;
-    strcoll_l; # introduced=21
-    strcpy;
-    strcspn;
-    strdup;
-    strerror;
-    strerror_l; # introduced=23
-    strerror_r;
-    strftime;
-    strftime_l; # introduced=21
-    strlcat;
-    strlcpy;
-    strlen;
-    strncasecmp;
-    strncasecmp_l; # introduced=23
-    strncat;
-    strncmp;
-    strncpy;
-    strndup;
-    strnlen;
-    strpbrk;
-    strptime;
-    strrchr;
-    strsep;
-    strsignal;
-    strspn;
-    strstr;
-    strtod;
-    strtof; # introduced=21
-    strtoimax;
-    strtok;
-    strtok_r;
-    strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
-    strtoll;
-    strtoll_l; # introduced=21
-    strtoq; # introduced=21
-    strtoul;
-    strtoull;
-    strtoull_l; # introduced=21
-    strtoumax;
-    strtouq; # introduced=21
-    strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swprintf;
-    swscanf;
-    symlink;
-    symlinkat; # introduced=21
-    sync;
-    sys_siglist; # var
-    sys_signame; # var
-    syscall;
-    sysconf;
-    sysinfo;
-    syslog;
-    system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
-    tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
-    tcsetpgrp;
-    tdelete; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tdestroy; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tee; # introduced=21
-    telldir; # introduced=23
-    tempnam;
-    tfind; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tgkill; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timegm64; # arm x86 mips
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timelocal64; # arm x86 mips
-    timer_create;
-    timer_delete;
-    timer_getoverrun;
-    timer_gettime;
-    timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    times;
-    timezone; # var
-    tmpfile;
-    tmpnam;
-    toascii;
-    tolower;
-    tolower_l; # introduced=21
-    toupper;
-    toupper_l; # introduced=21
-    towlower;
-    towlower_l; # introduced=21
-    towupper;
-    towupper_l; # introduced=21
-    truncate;
-    truncate64; # introduced=21
-    tsearch; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    ttyname;
-    ttyname_r;
-    twalk; # introduced=21
-    tzname; # var
-    tzset;
-    umask;
-    umount;
-    umount2;
-    uname;
-    ungetc;
-    ungetwc;
-    unlink;
-    unlinkat;
-    unlockpt;
-    unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
-    usleep;
-    utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    utimes;
-    utmpname;
-    valloc; # arm x86 mips
-    vasprintf;
-    vdprintf; # introduced=21
-    verr;
-    verrx;
-    vfdprintf; # arm x86 mips versioned=28
-    vfork;
-    vfprintf;
-    vfscanf;
-    vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
-    vprintf;
-    vscanf;
-    vsnprintf;
-    vsprintf;
-    vsscanf;
-    vswprintf;
-    vswscanf; # introduced=21
-    vsyslog;
-    vwarn;
-    vwarnx;
-    vwprintf;
-    vwscanf; # introduced=21
-    wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    waitid;
-    waitpid;
-    warn;
-    warnx;
-    wcpcpy;
-    wcpncpy;
-    wcrtomb;
-    wcscasecmp;
-    wcscasecmp_l; # introduced=23
-    wcscat;
-    wcschr;
-    wcscmp;
-    wcscoll;
-    wcscoll_l; # introduced=21
-    wcscpy;
-    wcscspn;
-    wcsdup;
-    wcsftime;
-    wcslcat;
-    wcslcpy;
-    wcslen;
-    wcsncasecmp;
-    wcsncasecmp_l; # introduced=23
-    wcsncat;
-    wcsncmp;
-    wcsncpy;
-    wcsnlen;
-    wcsnrtombs; # introduced=21
-    wcspbrk;
-    wcsrchr;
-    wcsrtombs;
-    wcsspn;
-    wcsstr;
-    wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
-    wcstok;
-    wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs;
-    wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
-    wcswidth;
-    wcsxfrm;
-    wcsxfrm_l; # introduced=21
-    wctob;
-    wctomb; # introduced=21
-    wctype;
-    wctype_l; # introduced=21
-    wcwidth;
-    wmemchr;
-    wmemcmp;
-    wmemcpy;
-    wmemmove;
-    wmempcpy; # introduced=23
-    wmemset;
-    wprintf;
-    write;
-    writev;
-    wscanf;
-  local:
-    *;
-};
-
-LIBC_N { # introduced-arm64=24 introduced-mips=24 introduced-mips64=24 introduced-x86=24 introduced-x86_64=24
-  global:
-    __fread_chk; # introduced=24
-    __fwrite_chk; # introduced=24
-    __getcwd_chk; # introduced=24
-    __pwrite_chk; # introduced=24
-    __pwrite64_chk; # introduced=24
-    __write_chk; # introduced=24
-    adjtimex; # introduced=24
-    clock_adjtime; # introduced=24
-    fgetpos64; # introduced=24
-    fileno_unlocked; # introduced=24
-    fopen64; # introduced=24
-    freeifaddrs; # introduced=24
-    freopen64; # introduced=24
-    fseeko64; # introduced=24
-    fsetpos64; # introduced=24
-    ftello64; # introduced=24
-    funopen64; # introduced=24
-    getgrgid_r; # introduced=24
-    getgrnam_r; # introduced=24
-    getifaddrs; # introduced=24
-    if_freenameindex; # introduced=24
-    if_nameindex; # introduced=24
-    in6addr_any; # var introduced=24
-    in6addr_loopback; # var introduced=24
-    lockf; # introduced=24
-    lockf64; # introduced=24
-    preadv; # introduced=24
-    preadv64; # introduced=24
-    prlimit; # arm mips x86 introduced=24
-    pthread_barrierattr_destroy; # introduced=24
-    pthread_barrierattr_getpshared; # introduced=24
-    pthread_barrierattr_init; # introduced=24
-    pthread_barrierattr_setpshared; # introduced=24
-    pthread_barrier_destroy; # introduced=24
-    pthread_barrier_init; # introduced=24
-    pthread_barrier_wait; # introduced=24
-    pthread_spin_destroy; # introduced=24
-    pthread_spin_init; # introduced=24
-    pthread_spin_lock; # introduced=24
-    pthread_spin_trylock; # introduced=24
-    pthread_spin_unlock; # introduced=24
-    pwritev; # introduced=24
-    pwritev64; # introduced=24
-    scandirat; # introduced=24
-    scandirat64; # introduced=24
-    strchrnul; # introduced=24
-    tmpfile64; # introduced=24
-} LIBC;
-
-LIBC_O {
-  global:
-    __sendto_chk; # introduced=26
-    __system_property_read_callback; # introduced=26
-    __system_property_wait; # introduced=26
-    bsd_signal; # arm x86 mips versioned=26
-    catclose; # introduced=26
-    catgets; # introduced=26
-    catopen; # introduced=26
-    ctermid; # introduced=26
-    endgrent; # introduced=26
-    endpwent; # introduced=26
-    futimes; # introduced=26
-    futimesat; # introduced=26
-    getdomainname; # introduced=26
-    getgrent; # introduced=26
-    getpwent; # introduced=26
-    getsubopt; # introduced=26
-    hasmntopt; # introduced=26
-    lutimes; # introduced=26
-    mallopt; # introduced=26
-    mblen; # introduced=26
-    msgctl; # introduced=26
-    msgget; # introduced=26
-    msgrcv; # introduced=26
-    msgsnd; # introduced=26
-    nl_langinfo; # introduced=26
-    nl_langinfo_l; # introduced=26
-    pthread_getname_np; # introduced=26
-    quotactl; # introduced=26
-    semctl; # introduced=26
-    semget; # introduced=26
-    semop; # introduced=26
-    semtimedop; # introduced=26
-    setdomainname; # introduced=26
-    setgrent; # introduced=26
-    setpwent; # introduced=26
-    shmat; # introduced=26
-    shmctl; # introduced=26
-    shmdt; # introduced=26
-    shmget; # introduced=26
-    sighold; # introduced=26
-    sigignore; # introduced=26
-    sigpause; # introduced=26
-    sigrelse; # introduced=26
-    sigset; # introduced=26
-    strtod_l; # introduced=26
-    strtof_l; # introduced=26
-    strtol_l; # introduced=26
-    strtoul_l; # introduced=26
-    sync_file_range; # introduced=26
-    towctrans; # introduced=26
-    towctrans_l; # introduced=26
-    wctrans; # introduced=26
-    wctrans_l; # introduced=26
-} LIBC_N;
-
-LIBC_P { # introduced=P
-  global:
-    __freading;
-    __free_hook;
-    __fseterr;
-    __fwriting;
-    __malloc_hook;
-    __memalign_hook;
-    __realloc_hook;
-    aligned_alloc;
-    endhostent;
-    endnetent;
-    endprotoent;
-    epoll_pwait64;
-    fexecve;
-    fflush_unlocked;
-    fgetc_unlocked;
-    fgets_unlocked;
-    fputc_unlocked;
-    fputs_unlocked;
-    fread_unlocked;
-    fwrite_unlocked;
-    getentropy;
-    getnetent;
-    getprotoent;
-    getrandom;
-    getlogin_r;
-    glob;
-    globfree;
-    hcreate;
-    hcreate_r;
-    hdestroy;
-    hdestroy_r;
-    hsearch;
-    hsearch_r;
-    iconv;
-    iconv_close;
-    iconv_open;
-    posix_spawn;
-    posix_spawnattr_destroy;
-    posix_spawnattr_getflags;
-    posix_spawnattr_getpgroup;
-    posix_spawnattr_getschedparam;
-    posix_spawnattr_getschedpolicy;
-    posix_spawnattr_getsigdefault;
-    posix_spawnattr_getsigdefault64;
-    posix_spawnattr_getsigmask;
-    posix_spawnattr_getsigmask64;
-    posix_spawnattr_init;
-    posix_spawnattr_setflags;
-    posix_spawnattr_setpgroup;
-    posix_spawnattr_setschedparam;
-    posix_spawnattr_setschedpolicy;
-    posix_spawnattr_setsigdefault;
-    posix_spawnattr_setsigdefault64;
-    posix_spawnattr_setsigmask;
-    posix_spawnattr_setsigmask64;
-    posix_spawn_file_actions_addclose;
-    posix_spawn_file_actions_adddup2;
-    posix_spawn_file_actions_addopen;
-    posix_spawn_file_actions_destroy;
-    posix_spawn_file_actions_init;
-    posix_spawnp;
-    ppoll64;
-    pselect64;
-    pthread_attr_getinheritsched;
-    pthread_attr_setinheritsched;
-    pthread_mutex_timedlock_monotonic_np;
-    pthread_mutexattr_getprotocol;
-    pthread_mutexattr_setprotocol;
-    pthread_rwlock_timedrdlock_monotonic_np;
-    pthread_rwlock_timedwrlock_monotonic_np;
-    pthread_setschedprio;
-    pthread_sigmask64;
-    sem_timedwait_monotonic_np;
-    sethostent;
-    setnetent;
-    setprotoent;
-    sigaction64;
-    sigaddset64;
-    sigdelset64;
-    sigemptyset64;
-    sigfillset64;
-    sigismember64;
-    signalfd64;
-    sigpending64;
-    sigprocmask64;
-    sigsuspend64;
-    sigtimedwait64;
-    sigwait64;
-    sigwaitinfo64;
-    strptime_l;
-    swab;
-    syncfs;
-    wcsftime_l;
-    wcstod_l;
-    wcstof_l;
-    wcstol_l;
-    wcstoul_l;
-} LIBC_O;
-
-LIBC_Q { # introduced=Q
-  global:
-    __res_randomid;
-    android_fdsan_close_with_tag;
-    android_fdsan_create_owner_tag;
-    android_fdsan_exchange_owner_tag;
-    android_fdsan_get_owner_tag;
-    android_fdsan_get_tag_type;
-    android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
-    android_fdsan_set_error_level;
-    android_get_device_api_level;
-    getloadavg;
-    pthread_sigqueue;
-    reallocarray;
-    timespec_get;
-} LIBC_P;
-
-LIBC_PRIVATE {
-  global:
-    __accept4; # arm x86 mips
-    __bionic_brk; # arm x86 mips
-    __divdi3; # arm x86 mips
-    __futex_wait; # arm x86 mips
-    __futex_wake; # arm x86 mips
-    __get_thread; # arm x86 mips
-    __get_tls; # arm x86 mips
-    __getdents64; # arm x86 mips
-    __open; # arm x86 mips
-    __page_shift; # arm x86 mips
-    __page_size; # arm x86 mips
-    __popcountsi2; # arm x86 mips
-    __pthread_gettid; # arm x86 mips
-    __sclose; # arm x86 mips
-    __sdidinit; # arm x86 mips
-    __set_errno; # arm x86 mips
-    __sflags; # arm x86 mips
-    __sflush; # arm x86 mips
-    __sfp; # arm x86 mips
-    __sglue; # arm x86 mips
-    __sinit; # arm x86 mips
-    __smakebuf; # arm x86 mips
-    __sread; # arm x86 mips
-    __srefill; # arm x86 mips
-    __srget; # arm x86 mips
-    __sseek; # arm x86 mips
-    __swbuf; # arm x86 mips
-    __swrite; # arm x86 mips
-    __swsetup; # arm x86 mips
-    __udivdi3; # arm x86 mips
-    __umoddi3; # x86 mips
-    __wait4; # arm x86 mips
-    _fwalk; # arm x86 mips
-    android_getaddrinfofornet;
-    android_getaddrinfofornetcontext;
-    android_gethostbyaddrfornet;
-    android_gethostbyaddrfornetcontext;
-    android_gethostbynamefornet;
-    android_gethostbynamefornetcontext;
-    arc4random_addrandom; # arm x86 mips
-    arc4random_stir; # arm x86 mips
-    bcopy; # arm x86 mips
-    bzero; # arm x86 mips
-    dlmalloc; # arm x86 mips
-    dlmalloc_inspect_all; # arm x86 mips
-    dlmalloc_trim; # arm x86 mips
-    dlmalloc_usable_size; # arm x86 mips
-    free_malloc_leak_info;
-    ftime; # arm x86 mips
-    get_malloc_leak_info;
-    getdents; # arm x86 mips
-    getdtablesize; # arm x86 mips
-    gMallocLeakZygoteChild;
-    index; # arm x86 mips
-    issetugid; # arm x86 mips
-    memswap; # arm x86 mips
-    pthread_attr_getstackaddr; # arm x86 mips
-    pthread_attr_setstackaddr; # arm x86 mips
-    SHA1Final; # arm x86 mips
-    SHA1Init; # arm x86 mips
-    SHA1Transform; # arm x86 mips
-    SHA1Update; # arm x86 mips
-    strntoimax; # arm x86 mips
-    strntoumax; # arm x86 mips
-    strtotimeval; # arm x86 mips
-    sysv_signal; # arm x86 mips
-    tkill; # arm x86 mips
-    wait3; # arm x86 mips
-    wcswcs; # arm x86 mips
-    write_malloc_leak_info;
-} LIBC_Q;
-
-LIBC_DEPRECATED {
-  global:
-    __system_property_wait_any;
-};
-
-LIBC_PLATFORM {
-  global:
-    __system_properties_init;
-    __system_property_area__; # var
-    __system_property_add;
-    __system_property_area_init;
-    __system_property_set_filename;
-    __system_property_update;
-    android_fdsan_get_fd_table;
-    android_net_res_stats_get_info_for_net;
-    android_net_res_stats_aggregate;
-    android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
-} LIBC_Q;
diff --git a/libc/libc.mips64.map b/libc/libc.mips64.map
deleted file mode 100644
index 81ff00d..0000000
--- a/libc/libc.mips64.map
+++ /dev/null
@@ -1,1397 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __assert;
-    __assert2;
-    __b64_ntop;
-    __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
-    __cxa_atexit;
-    __cxa_finalize;
-    __cxa_thread_atexit_impl; # introduced=23
-    __dn_comp;
-    __dn_count_labels;
-    __dn_skipname;
-    __errno;
-    __fbufsize; # introduced=23
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __flbf; # introduced=23
-    __fp_nquery;
-    __fp_query;
-    __fpclassify; # introduced=21
-    __fpclassifyd;
-    __fpclassifyf;
-    __fpclassifyl;
-    __fpending; # introduced=23
-    __fpurge; # introduced=23
-    __freadable; # introduced=23
-    __fsetlocking; # introduced=23
-    __fwritable; # introduced=23
-    __get_h_errno;
-    __gnu_basename; # introduced=23
-    __gnu_strerror_r; # introduced=23
-    __hostalias;
-    __isfinite;
-    __isfinitef;
-    __isfinitel;
-    __isinf;
-    __isinff;
-    __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
-    __isnanl;
-    __isnormal;
-    __isnormalf;
-    __isnormall;
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
-    __libc_init;
-    __loc_aton;
-    __loc_ntoa;
-    __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __p_cdname;
-    __p_cdnname;
-    __p_class;
-    __p_class_syms; # var
-    __p_fqname;
-    __p_fqnname;
-    __p_option;
-    __p_query;
-    __p_rcode;
-    __p_secstodate;
-    __p_time;
-    __p_type;
-    __p_type_syms; # var
-    __poll_chk; # introduced=23
-    __ppoll_chk; # introduced=23
-    __ppoll64_chk; # introduced=28
-    __pread64_chk; # introduced=23
-    __pread_chk; # introduced=23
-    __progname; # var
-    __pthread_cleanup_pop;
-    __pthread_cleanup_push;
-    __putlong;
-    __putshort;
-    __read_chk; # introduced=21
-    __readlink_chk; # introduced=23
-    __readlinkat_chk; # introduced=23
-    __recvfrom_chk; # introduced=21
-    __register_atfork; # introduced=23
-    __res_close;
-    __res_dnok;
-    __res_hnok;
-    __res_hostalias;
-    __res_isourserver;
-    __res_mailok;
-    __res_nameinquery;
-    __res_nclose;
-    __res_ninit;
-    __res_nmkquery;
-    __res_nquery;
-    __res_nquerydomain;
-    __res_nsearch;
-    __res_nsend;
-    __res_ownok;
-    __res_queriesmatch;
-    __res_querydomain;
-    __res_send;
-    __res_send_setqhook;
-    __res_send_setrhook;
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sF; # var
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __stack_chk_fail;
-    __stack_chk_guard; # var
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __sym_ntop;
-    __sym_ntos;
-    __sym_ston;
-    __system_property_area_serial; # introduced=23
-    __system_property_find;
-    __system_property_find_nth;
-    __system_property_foreach; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_get;
-    __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    _ctype_; # var
-    _Exit; # introduced=21
-    _exit;
-    _flushlbf; # introduced=23
-    _getlong;
-    _getshort;
-    _longjmp;
-    _resolv_delete_cache_for_net; # introduced=21
-    _resolv_flush_cache_for_net; # introduced=21
-    _resolv_set_nameservers_for_net; # introduced=21
-    _setjmp;
-    _tolower; # introduced=21
-    _toupper; # introduced=21
-    abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    accept;
-    accept4; # introduced=21
-    access;
-    acct;
-    alarm;
-    alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
-    arc4random;
-    arc4random_buf;
-    arc4random_uniform;
-    asctime;
-    asctime_r;
-    asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
-    atoi;
-    atol;
-    atoll;
-    basename;
-    bind;
-    bindresvport;
-    brk;
-    bsearch;
-    btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
-    calloc;
-    capget;
-    capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
-    chdir;
-    chmod;
-    chown;
-    chroot;
-    clearenv;
-    clearerr;
-    clearerr_unlocked; # introduced=23
-    clock;
-    clock_getcpuclockid; # introduced=23
-    clock_getres;
-    clock_gettime;
-    clock_nanosleep;
-    clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    close;
-    closedir;
-    closelog;
-    connect;
-    creat;
-    creat64; # introduced=21
-    ctime;
-    ctime_r;
-    daemon;
-    daylight; # var
-    delete_module;
-    difftime;
-    dirfd;
-    dirname;
-    div;
-    dn_expand;
-    dprintf; # introduced=21
-    drand48;
-    dup;
-    dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
-    endservent;
-    endutent;
-    environ; # var
-    epoll_create;
-    epoll_create1; # introduced=21
-    epoll_ctl;
-    epoll_pwait; # introduced=21
-    epoll_wait;
-    erand48;
-    err;
-    error; # introduced=23
-    error_at_line; # introduced=23
-    error_message_count; # var introduced=23
-    error_one_per_line; # var introduced=23
-    error_print_progname; # var introduced=23
-    errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    eventfd;
-    eventfd_read;
-    eventfd_write;
-    execl;
-    execle;
-    execlp;
-    execv;
-    execve;
-    execvp;
-    execvpe; # introduced=21
-    exit;
-    faccessat; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
-    fchdir;
-    fchmod;
-    fchmodat;
-    fchown;
-    fchownat;
-    fclose;
-    fcntl;
-    fdatasync;
-    fdopen;
-    fdopendir;
-    feof;
-    feof_unlocked; # introduced=23
-    ferror;
-    ferror_unlocked; # introduced=23
-    fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    fgetc;
-    fgetln;
-    fgetpos;
-    fgets;
-    fgetwc;
-    fgetws;
-    fgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fileno;
-    flistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    flock;
-    flockfile;
-    fmemopen; # introduced=23
-    fnmatch;
-    fopen;
-    fork;
-    forkpty; # introduced=23
-    fpathconf;
-    fprintf;
-    fpurge;
-    fputc;
-    fputs;
-    fputwc;
-    fputws;
-    fread;
-    free;
-    freeaddrinfo;
-    freelocale; # introduced=21
-    fremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    freopen;
-    fscanf;
-    fseek;
-    fseeko;
-    fsetpos;
-    fsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fstat;
-    fstat64; # introduced=21
-    fstatat;
-    fstatat64; # introduced=21
-    fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
-    fsync;
-    ftell;
-    ftello;
-    ftok;
-    ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ftrylockfile;
-    fts_children; # introduced=21
-    fts_close; # introduced=21
-    fts_open; # introduced=21
-    fts_read; # introduced=21
-    fts_set; # introduced=21
-    ftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
-    funlockfile;
-    funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fwide;
-    fwprintf;
-    fwrite;
-    fwscanf;
-    gai_strerror;
-    get_avphys_pages; # introduced=23
-    get_nprocs; # introduced=23
-    get_nprocs_conf; # introduced=23
-    get_phys_pages; # introduced=23
-    getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getc;
-    getc_unlocked;
-    getchar;
-    getchar_unlocked;
-    getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getegid;
-    getenv;
-    geteuid;
-    getgid;
-    getgrgid;
-    getgrnam;
-    getgrouplist;
-    getgroups;
-    gethostbyaddr;
-    gethostbyaddr_r; # introduced=23
-    gethostbyname;
-    gethostbyname2;
-    gethostbyname2_r; # introduced=23
-    gethostbyname_r;
-    gethostent;
-    gethostname;
-    getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getlogin;
-    getmntent;
-    getmntent_r; # introduced=21
-    getnameinfo;
-    getnetbyaddr;
-    getnetbyname;
-    getopt;
-    getopt_long;
-    getopt_long_only;
-    getpagesize; # introduced=21
-    getpeername;
-    getpgid;
-    getpgrp;
-    getpid;
-    getppid;
-    getpriority;
-    getprogname; # introduced=21
-    getprotobyname;
-    getprotobynumber;
-    getpt;
-    getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getresgid;
-    getresuid;
-    getrlimit;
-    getrlimit64; # introduced=21
-    getrusage;
-    gets;
-    getservbyname;
-    getservbyport;
-    getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    getsockname;
-    getsockopt;
-    gettid;
-    gettimeofday;
-    getuid;
-    getutent;
-    getwc;
-    getwchar;
-    getxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    gmtime;
-    gmtime_r;
-    grantpt; # introduced=21
-    herror;
-    hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
-    if_indextoname;
-    if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    inet_addr;
-    inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
-    inet_nsap_addr;
-    inet_nsap_ntoa;
-    inet_ntoa;
-    inet_ntop;
-    inet_pton;
-    init_module;
-    initgroups;
-    initstate; # introduced=21
-    inotify_add_watch;
-    inotify_init;
-    inotify_init1; # introduced=21
-    inotify_rm_watch;
-    insque; # introduced=21
-    ioctl;
-    isalnum;
-    isalnum_l; # introduced=21
-    isalpha;
-    isalpha_l; # introduced=21
-    isascii;
-    isatty;
-    isblank;
-    isblank_l; # introduced=21
-    iscntrl;
-    iscntrl_l; # introduced=21
-    isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
-    isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
-    islower;
-    islower_l; # introduced=21
-    isnan;
-    isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
-    isprint;
-    isprint_l; # introduced=21
-    ispunct;
-    ispunct_l; # introduced=21
-    isspace;
-    isspace_l; # introduced=21
-    isupper;
-    isupper_l; # introduced=21
-    iswalnum;
-    iswalnum_l; # introduced=21
-    iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
-    iswcntrl;
-    iswcntrl_l; # introduced=21
-    iswctype;
-    iswctype_l; # introduced=21
-    iswdigit;
-    iswdigit_l; # introduced=21
-    iswgraph;
-    iswgraph_l; # introduced=21
-    iswlower;
-    iswlower_l; # introduced=21
-    iswprint;
-    iswprint_l; # introduced=21
-    iswpunct;
-    iswpunct_l; # introduced=21
-    iswspace;
-    iswspace_l; # introduced=21
-    iswupper;
-    iswupper_l; # introduced=21
-    iswxdigit;
-    iswxdigit_l; # introduced=21
-    isxdigit;
-    isxdigit_l; # introduced=21
-    jrand48;
-    kill;
-    killpg;
-    klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lchown;
-    lcong48; # introduced=23
-    ldexp;
-    ldiv;
-    lfind; # introduced=21
-    lgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    link;
-    linkat; # introduced=21
-    listen;
-    listxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lldiv;
-    llistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    localeconv; # introduced=21
-    localtime;
-    localtime_r;
-    login_tty; # introduced=23
-    longjmp;
-    lrand48;
-    lremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lsearch; # introduced=21
-    lseek;
-    lseek64;
-    lsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lstat;
-    lstat64; # introduced=21
-    madvise;
-    mallinfo;
-    malloc;
-    malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
-    mbrtowc;
-    mbsinit;
-    mbsnrtowcs; # introduced=21
-    mbsrtowcs;
-    mbstowcs;
-    mbtowc; # introduced=21
-    memalign;
-    memccpy;
-    memchr;
-    memcmp;
-    memcpy;
-    memmem;
-    memmove;
-    mempcpy; # introduced=23
-    memrchr;
-    memset;
-    mincore;
-    mkdir;
-    mkdirat;
-    mkdtemp;
-    mkfifo; # introduced=21
-    mkfifoat; # introduced=23
-    mknod;
-    mknodat; # introduced=21
-    mkostemp; # introduced=23
-    mkostemp64; # introduced=23
-    mkostemps; # introduced=23
-    mkostemps64; # introduced=23
-    mkstemp;
-    mkstemp64; # introduced=21
-    mkstemps;
-    mkstemps64; # introduced=23
-    mktemp;
-    mktime;
-    mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mmap;
-    mmap64; # introduced=21
-    mount;
-    mprotect;
-    mrand48;
-    mremap;
-    msync;
-    munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    munmap;
-    nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
-    nice;
-    nrand48;
-    ns_format_ttl; # arm64 x86_64 mips64 introduced=22
-    ns_get16; # arm64 x86_64 mips64 introduced=22
-    ns_get32; # arm64 x86_64 mips64 introduced=22
-    ns_initparse; # arm64 x86_64 mips64 introduced=22
-    ns_makecanon; # arm64 x86_64 mips64 introduced=22
-    ns_msg_getflag; # arm64 x86_64 mips64 introduced=22
-    ns_name_compress; # arm64 x86_64 mips64 introduced=22
-    ns_name_ntol; # arm64 x86_64 mips64 introduced=22
-    ns_name_ntop; # arm64 x86_64 mips64 introduced=22
-    ns_name_pack; # arm64 x86_64 mips64 introduced=22
-    ns_name_pton; # arm64 x86_64 mips64 introduced=23
-    ns_name_rollback; # arm64 x86_64 mips64 introduced=22
-    ns_name_skip; # arm64 x86_64 mips64 introduced=22
-    ns_name_uncompress; # arm64 x86_64 mips64 introduced=22
-    ns_name_unpack; # arm64 x86_64 mips64 introduced=22
-    ns_parserr; # arm64 x86_64 mips64 introduced=22
-    ns_put16; # arm64 x86_64 mips64 introduced=22
-    ns_put32; # arm64 x86_64 mips64 introduced=22
-    ns_samename; # arm64 x86_64 mips64 introduced=22
-    ns_skiprr; # arm64 x86_64 mips64 introduced=22
-    ns_sprintrr; # arm64 x86_64 mips64 introduced=22
-    ns_sprintrrf; # arm64 x86_64 mips64 introduced=22
-    nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
-    open;
-    open64; # introduced=21
-    open_memstream; # introduced=23
-    open_wmemstream; # introduced=23
-    openat;
-    openat64; # introduced=21
-    opendir;
-    openlog;
-    openpty; # introduced=23
-    optarg; # var
-    opterr; # var
-    optind; # var
-    optopt; # var
-    optreset; # var
-    pathconf;
-    pause;
-    pclose;
-    perror;
-    personality; # introduced-arm=15 introduced-arm64=21 introduced-mips=15 introduced-mips64=21 introduced-x86=15 introduced-x86_64=21
-    pipe;
-    pipe2;
-    poll;
-    popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
-    posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
-    prctl;
-    pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    printf;
-    prlimit; # arm64 x86_64 mips64
-    prlimit64; # introduced=21
-    process_vm_readv; # introduced=23
-    process_vm_writev; # introduced=23
-    pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    pthread_attr_destroy;
-    pthread_attr_getdetachstate;
-    pthread_attr_getguardsize;
-    pthread_attr_getschedparam;
-    pthread_attr_getschedpolicy;
-    pthread_attr_getscope;
-    pthread_attr_getstack;
-    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_setstacksize;
-    pthread_cond_broadcast;
-    pthread_cond_destroy;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-mips=9 introduced-arm64=28 introduced-x64_64=28 introduced-mips64=28
-    pthread_cond_wait;
-    pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
-    pthread_condattr_getpshared;
-    pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
-    pthread_condattr_setpshared;
-    pthread_create;
-    pthread_detach;
-    pthread_equal;
-    pthread_exit;
-    pthread_getattr_np;
-    pthread_getcpuclockid;
-    pthread_getschedparam;
-    pthread_getspecific;
-    pthread_gettid_np; # introduced=21
-    pthread_join;
-    pthread_key_create;
-    pthread_key_delete;
-    pthread_kill;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
-    pthread_mutex_timedlock; # introduced=21
-    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_rwlock_destroy;
-    pthread_rwlock_init;
-    pthread_rwlock_rdlock;
-    pthread_rwlock_timedrdlock;
-    pthread_rwlock_timedwrlock;
-    pthread_rwlock_tryrdlock;
-    pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
-    pthread_rwlockattr_destroy;
-    pthread_rwlockattr_getkind_np; # introduced=23
-    pthread_rwlockattr_getpshared;
-    pthread_rwlockattr_init;
-    pthread_rwlockattr_setkind_np; # introduced=23
-    pthread_rwlockattr_setpshared;
-    pthread_self;
-    pthread_setname_np;
-    pthread_setschedparam;
-    pthread_setspecific;
-    pthread_sigmask;
-    ptrace;
-    ptsname;
-    ptsname_r;
-    putc;
-    putc_unlocked;
-    putchar;
-    putchar_unlocked;
-    putenv;
-    puts;
-    pututline;
-    putwc;
-    putwchar;
-    pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    qsort;
-    quick_exit; # introduced=21
-    raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
-    read;
-    readahead; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
-    readdir_r;
-    readlink;
-    readlinkat; # introduced=21
-    readv;
-    realloc;
-    realpath;
-    reboot;
-    recv;
-    recvfrom;
-    recvmmsg; # introduced=21
-    recvmsg;
-    regcomp;
-    regerror;
-    regexec;
-    regfree;
-    remove;
-    removexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    remque; # introduced=21
-    rename;
-    renameat;
-    res_init;
-    res_mkquery;
-    res_query;
-    res_search;
-    rewind;
-    rewinddir;
-    rmdir;
-    sbrk;
-    scandir;
-    scandir64; # introduced=21
-    scanf;
-    sched_get_priority_max;
-    sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getparam;
-    sched_getscheduler;
-    sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_setparam;
-    sched_setscheduler;
-    sched_yield;
-    seed48;
-    seekdir; # introduced=23
-    select;
-    sem_close;
-    sem_destroy;
-    sem_getvalue;
-    sem_init;
-    sem_open;
-    sem_post;
-    sem_timedwait;
-    sem_trywait;
-    sem_unlink;
-    sem_wait;
-    send;
-    sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
-    sendmsg;
-    sendto;
-    setbuf;
-    setbuffer;
-    setegid;
-    setenv;
-    seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
-    setgid;
-    setgroups;
-    sethostname; # introduced=23
-    setitimer;
-    setjmp;
-    setlinebuf;
-    setlocale;
-    setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
-    setpgid;
-    setpgrp;
-    setpriority;
-    setprogname; # introduced=21
-    setregid;
-    setresgid;
-    setresuid;
-    setreuid;
-    setrlimit;
-    setrlimit64; # introduced=21
-    setservent;
-    setsid;
-    setsockopt;
-    setstate; # introduced=21
-    settimeofday;
-    setuid;
-    setutent;
-    setvbuf;
-    setxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    shutdown;
-    sigaction;
-    sigaddset; # introduced=21
-    sigaltstack;
-    sigblock;
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
-    siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    sigpending;
-    sigprocmask;
-    sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sigsetmask;
-    sigsuspend;
-    sigtimedwait; # introduced=23
-    sigwait;
-    sigwaitinfo; # introduced=23
-    sleep;
-    snprintf;
-    socket;
-    socketpair;
-    splice; # introduced=21
-    sprintf;
-    srand; # introduced=21
-    srand48;
-    srandom; # introduced=21
-    sscanf;
-    stat;
-    stat64; # introduced=21
-    statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
-    stderr; # var introduced=23
-    stdin; # var introduced=23
-    stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
-    strcasecmp;
-    strcasecmp_l; # introduced=23
-    strcasestr;
-    strcat;
-    strchr;
-    strcmp;
-    strcoll;
-    strcoll_l; # introduced=21
-    strcpy;
-    strcspn;
-    strdup;
-    strerror;
-    strerror_l; # introduced=23
-    strerror_r;
-    strftime;
-    strftime_l; # introduced=21
-    strlcat;
-    strlcpy;
-    strlen;
-    strncasecmp;
-    strncasecmp_l; # introduced=23
-    strncat;
-    strncmp;
-    strncpy;
-    strndup;
-    strnlen;
-    strpbrk;
-    strptime;
-    strrchr;
-    strsep;
-    strsignal;
-    strspn;
-    strstr;
-    strtod;
-    strtof; # introduced=21
-    strtoimax;
-    strtok;
-    strtok_r;
-    strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
-    strtoll;
-    strtoll_l; # introduced=21
-    strtoq; # introduced=21
-    strtoul;
-    strtoull;
-    strtoull_l; # introduced=21
-    strtoumax;
-    strtouq; # introduced=21
-    strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swprintf;
-    swscanf;
-    symlink;
-    symlinkat; # introduced=21
-    sync;
-    sys_siglist; # var
-    sys_signame; # var
-    syscall;
-    sysconf;
-    sysinfo;
-    syslog;
-    system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
-    tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
-    tcsetpgrp;
-    tdelete; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tdestroy; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tee; # introduced=21
-    telldir; # introduced=23
-    tempnam;
-    tfind; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tgkill; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timer_create;
-    timer_delete;
-    timer_getoverrun;
-    timer_gettime;
-    timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    times;
-    timezone; # var
-    tmpfile;
-    tmpnam;
-    toascii;
-    tolower;
-    tolower_l; # introduced=21
-    toupper;
-    toupper_l; # introduced=21
-    towlower;
-    towlower_l; # introduced=21
-    towupper;
-    towupper_l; # introduced=21
-    truncate;
-    truncate64; # introduced=21
-    tsearch; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    ttyname;
-    ttyname_r;
-    twalk; # introduced=21
-    tzname; # var
-    tzset;
-    umask;
-    umount;
-    umount2;
-    uname;
-    ungetc;
-    ungetwc;
-    unlink;
-    unlinkat;
-    unlockpt;
-    unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
-    usleep;
-    utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    utimes;
-    utmpname;
-    vasprintf;
-    vdprintf; # introduced=21
-    verr;
-    verrx;
-    vfork;
-    vfprintf;
-    vfscanf;
-    vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
-    vprintf;
-    vscanf;
-    vsnprintf;
-    vsprintf;
-    vsscanf;
-    vswprintf;
-    vswscanf; # introduced=21
-    vsyslog;
-    vwarn;
-    vwarnx;
-    vwprintf;
-    vwscanf; # introduced=21
-    wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    waitid;
-    waitpid;
-    warn;
-    warnx;
-    wcpcpy;
-    wcpncpy;
-    wcrtomb;
-    wcscasecmp;
-    wcscasecmp_l; # introduced=23
-    wcscat;
-    wcschr;
-    wcscmp;
-    wcscoll;
-    wcscoll_l; # introduced=21
-    wcscpy;
-    wcscspn;
-    wcsdup;
-    wcsftime;
-    wcslcat;
-    wcslcpy;
-    wcslen;
-    wcsncasecmp;
-    wcsncasecmp_l; # introduced=23
-    wcsncat;
-    wcsncmp;
-    wcsncpy;
-    wcsnlen;
-    wcsnrtombs; # introduced=21
-    wcspbrk;
-    wcsrchr;
-    wcsrtombs;
-    wcsspn;
-    wcsstr;
-    wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
-    wcstok;
-    wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs;
-    wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
-    wcswidth;
-    wcsxfrm;
-    wcsxfrm_l; # introduced=21
-    wctob;
-    wctomb; # introduced=21
-    wctype;
-    wctype_l; # introduced=21
-    wcwidth;
-    wmemchr;
-    wmemcmp;
-    wmemcpy;
-    wmemmove;
-    wmempcpy; # introduced=23
-    wmemset;
-    wprintf;
-    write;
-    writev;
-    wscanf;
-  local:
-    *;
-};
-
-LIBC_N { # introduced-arm64=24 introduced-mips=24 introduced-mips64=24 introduced-x86=24 introduced-x86_64=24
-  global:
-    __fread_chk; # introduced=24
-    __fwrite_chk; # introduced=24
-    __getcwd_chk; # introduced=24
-    __pwrite_chk; # introduced=24
-    __pwrite64_chk; # introduced=24
-    __write_chk; # introduced=24
-    adjtimex; # introduced=24
-    clock_adjtime; # introduced=24
-    fgetpos64; # introduced=24
-    fileno_unlocked; # introduced=24
-    fopen64; # introduced=24
-    freeifaddrs; # introduced=24
-    freopen64; # introduced=24
-    fseeko64; # introduced=24
-    fsetpos64; # introduced=24
-    ftello64; # introduced=24
-    funopen64; # introduced=24
-    getgrgid_r; # introduced=24
-    getgrnam_r; # introduced=24
-    getifaddrs; # introduced=24
-    if_freenameindex; # introduced=24
-    if_nameindex; # introduced=24
-    in6addr_any; # var introduced=24
-    in6addr_loopback; # var introduced=24
-    lockf; # introduced=24
-    lockf64; # introduced=24
-    preadv; # introduced=24
-    preadv64; # introduced=24
-    pthread_barrierattr_destroy; # introduced=24
-    pthread_barrierattr_getpshared; # introduced=24
-    pthread_barrierattr_init; # introduced=24
-    pthread_barrierattr_setpshared; # introduced=24
-    pthread_barrier_destroy; # introduced=24
-    pthread_barrier_init; # introduced=24
-    pthread_barrier_wait; # introduced=24
-    pthread_spin_destroy; # introduced=24
-    pthread_spin_init; # introduced=24
-    pthread_spin_lock; # introduced=24
-    pthread_spin_trylock; # introduced=24
-    pthread_spin_unlock; # introduced=24
-    pwritev; # introduced=24
-    pwritev64; # introduced=24
-    scandirat; # introduced=24
-    scandirat64; # introduced=24
-    strchrnul; # introduced=24
-    tmpfile64; # introduced=24
-} LIBC;
-
-LIBC_O {
-  global:
-    __sendto_chk; # introduced=26
-    __system_property_read_callback; # introduced=26
-    __system_property_wait; # introduced=26
-    catclose; # introduced=26
-    catgets; # introduced=26
-    catopen; # introduced=26
-    ctermid; # introduced=26
-    endgrent; # introduced=26
-    endpwent; # introduced=26
-    futimes; # introduced=26
-    futimesat; # introduced=26
-    getdomainname; # introduced=26
-    getgrent; # introduced=26
-    getpwent; # introduced=26
-    getsubopt; # introduced=26
-    hasmntopt; # introduced=26
-    lutimes; # introduced=26
-    mallopt; # introduced=26
-    mblen; # introduced=26
-    msgctl; # introduced=26
-    msgget; # introduced=26
-    msgrcv; # introduced=26
-    msgsnd; # introduced=26
-    nl_langinfo; # introduced=26
-    nl_langinfo_l; # introduced=26
-    pthread_getname_np; # introduced=26
-    quotactl; # introduced=26
-    semctl; # introduced=26
-    semget; # introduced=26
-    semop; # introduced=26
-    semtimedop; # introduced=26
-    setdomainname; # introduced=26
-    setgrent; # introduced=26
-    setpwent; # introduced=26
-    shmat; # introduced=26
-    shmctl; # introduced=26
-    shmdt; # introduced=26
-    shmget; # introduced=26
-    sighold; # introduced=26
-    sigignore; # introduced=26
-    sigpause; # introduced=26
-    sigrelse; # introduced=26
-    sigset; # introduced=26
-    strtod_l; # introduced=26
-    strtof_l; # introduced=26
-    strtol_l; # introduced=26
-    strtoul_l; # introduced=26
-    sync_file_range; # introduced=26
-    towctrans; # introduced=26
-    towctrans_l; # introduced=26
-    wctrans; # introduced=26
-    wctrans_l; # introduced=26
-} LIBC_N;
-
-LIBC_P { # introduced=P
-  global:
-    __freading;
-    __free_hook;
-    __fseterr;
-    __fwriting;
-    __malloc_hook;
-    __memalign_hook;
-    __realloc_hook;
-    aligned_alloc;
-    endhostent;
-    endnetent;
-    endprotoent;
-    epoll_pwait64;
-    fexecve;
-    fflush_unlocked;
-    fgetc_unlocked;
-    fgets_unlocked;
-    fputc_unlocked;
-    fputs_unlocked;
-    fread_unlocked;
-    fwrite_unlocked;
-    getentropy;
-    getnetent;
-    getprotoent;
-    getrandom;
-    getlogin_r;
-    glob;
-    globfree;
-    hcreate;
-    hcreate_r;
-    hdestroy;
-    hdestroy_r;
-    hsearch;
-    hsearch_r;
-    iconv;
-    iconv_close;
-    iconv_open;
-    posix_spawn;
-    posix_spawnattr_destroy;
-    posix_spawnattr_getflags;
-    posix_spawnattr_getpgroup;
-    posix_spawnattr_getschedparam;
-    posix_spawnattr_getschedpolicy;
-    posix_spawnattr_getsigdefault;
-    posix_spawnattr_getsigdefault64;
-    posix_spawnattr_getsigmask;
-    posix_spawnattr_getsigmask64;
-    posix_spawnattr_init;
-    posix_spawnattr_setflags;
-    posix_spawnattr_setpgroup;
-    posix_spawnattr_setschedparam;
-    posix_spawnattr_setschedpolicy;
-    posix_spawnattr_setsigdefault;
-    posix_spawnattr_setsigdefault64;
-    posix_spawnattr_setsigmask;
-    posix_spawnattr_setsigmask64;
-    posix_spawn_file_actions_addclose;
-    posix_spawn_file_actions_adddup2;
-    posix_spawn_file_actions_addopen;
-    posix_spawn_file_actions_destroy;
-    posix_spawn_file_actions_init;
-    posix_spawnp;
-    ppoll64;
-    pselect64;
-    pthread_attr_getinheritsched;
-    pthread_attr_setinheritsched;
-    pthread_mutex_timedlock_monotonic_np;
-    pthread_mutexattr_getprotocol;
-    pthread_mutexattr_setprotocol;
-    pthread_rwlock_timedrdlock_monotonic_np;
-    pthread_rwlock_timedwrlock_monotonic_np;
-    pthread_setschedprio;
-    pthread_sigmask64;
-    sem_timedwait_monotonic_np;
-    sethostent;
-    setnetent;
-    setprotoent;
-    sigaction64;
-    sigaddset64;
-    sigdelset64;
-    sigemptyset64;
-    sigfillset64;
-    sigismember64;
-    signalfd64;
-    sigpending64;
-    sigprocmask64;
-    sigsuspend64;
-    sigtimedwait64;
-    sigwait64;
-    sigwaitinfo64;
-    strptime_l;
-    swab;
-    syncfs;
-    wcsftime_l;
-    wcstod_l;
-    wcstof_l;
-    wcstol_l;
-    wcstoul_l;
-} LIBC_O;
-
-LIBC_Q { # introduced=Q
-  global:
-    __res_randomid;
-    android_fdsan_close_with_tag;
-    android_fdsan_create_owner_tag;
-    android_fdsan_exchange_owner_tag;
-    android_fdsan_get_owner_tag;
-    android_fdsan_get_tag_type;
-    android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
-    android_fdsan_set_error_level;
-    android_get_device_api_level;
-    getloadavg;
-    pthread_sigqueue;
-    reallocarray;
-    timespec_get;
-} LIBC_P;
-
-LIBC_PRIVATE {
-  global:
-    android_getaddrinfofornet;
-    android_getaddrinfofornetcontext;
-    android_gethostbyaddrfornet;
-    android_gethostbyaddrfornetcontext;
-    android_gethostbynamefornet;
-    android_gethostbynamefornetcontext;
-    free_malloc_leak_info;
-    get_malloc_leak_info;
-    gMallocLeakZygoteChild;
-    write_malloc_leak_info;
-} LIBC_Q;
-
-LIBC_DEPRECATED {
-  global:
-    __system_property_wait_any;
-};
-
-LIBC_PLATFORM {
-  global:
-    __system_properties_init;
-    __system_property_area__; # var
-    __system_property_add;
-    __system_property_area_init;
-    __system_property_set_filename;
-    __system_property_update;
-    android_fdsan_get_fd_table;
-    android_net_res_stats_get_info_for_net;
-    android_net_res_stats_aggregate;
-    android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
-} LIBC_Q;
diff --git a/libc/libc.x86.map b/libc/libc.x86.map
deleted file mode 100644
index f360dbf..0000000
--- a/libc/libc.x86.map
+++ /dev/null
@@ -1,1519 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __assert;
-    __assert2;
-    __b64_ntop;
-    __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __connect; # arm x86 mips introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
-    __cxa_atexit;
-    __cxa_finalize;
-    __cxa_thread_atexit_impl; # introduced=23
-    __dn_comp;
-    __dn_count_labels;
-    __dn_skipname;
-    __epoll_pwait; # arm x86 mips introduced=21
-    __errno;
-    __exit; # arm x86 mips introduced=21
-    __fadvise64; # x86 mips introduced=21
-    __fbufsize; # introduced=23
-    __fcntl64; # arm x86 mips
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __flbf; # introduced=23
-    __fp_nquery;
-    __fp_query;
-    __fpclassify; # introduced=21
-    __fpclassifyd;
-    __fpclassifyf;
-    __fpclassifyl;
-    __fpending; # introduced=23
-    __fpurge; # introduced=23
-    __freadable; # introduced=23
-    __fsetlocking; # introduced=23
-    __fstatfs64; # arm x86 mips
-    __fwritable; # introduced=23
-    __get_h_errno;
-    __getcpu; # arm x86 mips introduced-arm=12 introduced-mips=16 introduced-x86=12
-    __getcwd; # arm x86 mips
-    __getpid; # arm x86 mips introduced=21
-    __getpriority; # arm x86 mips
-    __gnu_basename; # introduced=23
-    __gnu_strerror_r; # introduced=23
-    __hostalias;
-    __ioctl; # arm x86 mips
-    __isfinite;
-    __isfinitef;
-    __isfinitel;
-    __isinf;
-    __isinff;
-    __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
-    __isnanl;
-    __isnormal;
-    __isnormalf;
-    __isnormall;
-    __isthreaded; # arm x86 mips var
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
-    __libc_init;
-    __llseek; # arm x86 mips
-    __loc_aton;
-    __loc_ntoa;
-    __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __mmap2; # arm x86 mips
-    __ns_format_ttl; # arm x86 mips
-    __ns_get16; # arm x86 mips
-    __ns_get32; # arm x86 mips
-    __ns_initparse; # arm x86 mips
-    __ns_makecanon; # arm x86 mips
-    __ns_msg_getflag; # arm x86 mips
-    __ns_name_compress; # arm x86 mips
-    __ns_name_ntol; # arm x86 mips
-    __ns_name_ntop; # arm x86 mips
-    __ns_name_pack; # arm x86 mips
-    __ns_name_pton; # arm x86 mips
-    __ns_name_rollback; # arm x86 mips
-    __ns_name_skip; # arm x86 mips
-    __ns_name_uncompress; # arm x86 mips
-    __ns_name_unpack; # arm x86 mips
-    __ns_parserr; # arm x86 mips
-    __ns_put16; # arm x86 mips
-    __ns_put32; # arm x86 mips
-    __ns_samename; # arm x86 mips
-    __ns_skiprr; # arm x86 mips
-    __ns_sprintrr; # arm x86 mips
-    __ns_sprintrrf; # arm x86 mips
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __openat; # arm x86 mips
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __p_cdname;
-    __p_cdnname;
-    __p_class;
-    __p_class_syms; # var
-    __p_fqname;
-    __p_fqnname;
-    __p_option;
-    __p_query;
-    __p_rcode;
-    __p_secstodate;
-    __p_time;
-    __p_type;
-    __p_type_syms; # var
-    __poll_chk; # introduced=23
-    __ppoll; # arm x86 mips introduced=21
-    __ppoll_chk; # introduced=23
-    __ppoll64_chk; # introduced=28
-    __pread64_chk; # introduced=23
-    __pread_chk; # introduced=23
-    __progname; # var
-    __pselect6; # arm x86 mips introduced=21
-    __pthread_cleanup_pop;
-    __pthread_cleanup_push;
-    __ptrace; # arm x86 mips
-    __putlong;
-    __putshort;
-    __read_chk; # introduced=21
-    __readlink_chk; # introduced=23
-    __readlinkat_chk; # introduced=23
-    __reboot; # arm x86 mips
-    __recvfrom_chk; # introduced=21
-    __register_atfork; # introduced=23
-    __res_close;
-    __res_dnok;
-    __res_hnok;
-    __res_hostalias;
-    __res_isourserver;
-    __res_mailok;
-    __res_nameinquery;
-    __res_nclose;
-    __res_ninit;
-    __res_nmkquery;
-    __res_nquery;
-    __res_nquerydomain;
-    __res_nsearch;
-    __res_nsend;
-    __res_ownok;
-    __res_queriesmatch;
-    __res_querydomain;
-    __res_send;
-    __res_send_setqhook;
-    __res_send_setrhook;
-    __rt_sigaction; # arm x86 mips
-    __rt_sigpending; # arm x86 mips introduced=21
-    __rt_sigprocmask; # arm x86 mips
-    __rt_sigsuspend; # arm x86 mips introduced=21
-    __rt_sigtimedwait; # arm x86 mips
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_getaffinity; # arm x86 mips introduced=12
-    __set_thread_area; # x86
-    __set_tid_address; # arm x86 mips introduced=21
-    __sF; # var
-    __sigaction; # arm x86 mips introduced=21
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __socket; # arm x86 mips introduced=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __stack_chk_fail;
-    __stack_chk_guard; # var
-    __statfs64; # arm x86 mips
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __sym_ntop;
-    __sym_ntos;
-    __sym_ston;
-    __system_property_area_serial; # introduced=23
-    __system_property_find;
-    __system_property_find_nth;
-    __system_property_foreach; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_get;
-    __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __timer_create; # arm x86 mips
-    __timer_delete; # arm x86 mips
-    __timer_getoverrun; # arm x86 mips
-    __timer_gettime; # arm x86 mips
-    __timer_settime; # arm x86 mips
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __waitid; # arm x86 mips
-    _ctype_; # var
-    _Exit; # introduced=21
-    _exit;
-    _flushlbf; # introduced=23
-    _getlong;
-    _getshort;
-    _longjmp;
-    _resolv_delete_cache_for_net; # introduced=21
-    _resolv_flush_cache_for_net; # introduced=21
-    _resolv_set_nameservers_for_net; # introduced=21
-    _setjmp;
-    _tolower; # introduced=21
-    _tolower_tab_; # arm x86 mips var
-    _toupper; # introduced=21
-    _toupper_tab_; # arm x86 mips var
-    abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    accept;
-    accept4; # introduced=21
-    access;
-    acct;
-    alarm;
-    alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
-    arc4random;
-    arc4random_buf;
-    arc4random_uniform;
-    asctime;
-    asctime64; # arm x86 mips
-    asctime64_r; # arm x86 mips
-    asctime_r;
-    asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
-    atoi;
-    atol;
-    atoll;
-    basename;
-    basename_r; # arm x86 mips
-    bind;
-    bindresvport;
-    brk;
-    bsearch;
-    btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
-    calloc;
-    capget;
-    capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
-    chdir;
-    chmod;
-    chown;
-    chroot;
-    clearenv;
-    clearerr;
-    clearerr_unlocked; # introduced=23
-    clock;
-    clock_getcpuclockid; # introduced=23
-    clock_getres;
-    clock_gettime;
-    clock_nanosleep;
-    clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    close;
-    closedir;
-    closelog;
-    connect;
-    creat;
-    creat64; # introduced=21
-    ctime;
-    ctime64; # arm x86 mips
-    ctime64_r; # arm x86 mips
-    ctime_r;
-    daemon;
-    daylight; # var
-    delete_module;
-    difftime;
-    dirfd;
-    dirname;
-    dirname_r; # arm x86 mips
-    div;
-    dn_expand;
-    dprintf; # introduced=21
-    drand48;
-    dup;
-    dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
-    endservent;
-    endutent;
-    environ; # var
-    epoll_create;
-    epoll_create1; # introduced=21
-    epoll_ctl;
-    epoll_pwait; # introduced=21
-    epoll_wait;
-    erand48;
-    err;
-    error; # introduced=23
-    error_at_line; # introduced=23
-    error_message_count; # var introduced=23
-    error_one_per_line; # var introduced=23
-    error_print_progname; # var introduced=23
-    errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    eventfd;
-    eventfd_read;
-    eventfd_write;
-    execl;
-    execle;
-    execlp;
-    execv;
-    execve;
-    execvp;
-    execvpe; # introduced=21
-    exit;
-    faccessat; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
-    fchdir;
-    fchmod;
-    fchmodat;
-    fchown;
-    fchownat;
-    fclose;
-    fcntl;
-    fdatasync;
-    fdopen;
-    fdopendir;
-    fdprintf; # arm x86 mips versioned=28
-    feof;
-    feof_unlocked; # introduced=23
-    ferror;
-    ferror_unlocked; # introduced=23
-    fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    fgetc;
-    fgetln;
-    fgetpos;
-    fgets;
-    fgetwc;
-    fgetws;
-    fgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fileno;
-    flistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    flock;
-    flockfile;
-    fmemopen; # introduced=23
-    fnmatch;
-    fopen;
-    fork;
-    forkpty; # introduced=23
-    fpathconf;
-    fprintf;
-    fpurge;
-    fputc;
-    fputs;
-    fputwc;
-    fputws;
-    fread;
-    free;
-    freeaddrinfo;
-    freelocale; # introduced=21
-    fremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    freopen;
-    fscanf;
-    fseek;
-    fseeko;
-    fsetpos;
-    fsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fstat;
-    fstat64; # introduced=21
-    fstatat;
-    fstatat64; # introduced=21
-    fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
-    fsync;
-    ftell;
-    ftello;
-    ftok;
-    ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ftrylockfile;
-    fts_children; # introduced=21
-    fts_close; # introduced=21
-    fts_open; # introduced=21
-    fts_read; # introduced=21
-    fts_set; # introduced=21
-    ftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
-    funlockfile;
-    funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fwide;
-    fwprintf;
-    fwrite;
-    fwscanf;
-    gai_strerror;
-    get_avphys_pages; # introduced=23
-    get_nprocs; # introduced=23
-    get_nprocs_conf; # introduced=23
-    get_phys_pages; # introduced=23
-    getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getc;
-    getc_unlocked;
-    getchar;
-    getchar_unlocked;
-    getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getegid;
-    getenv;
-    geteuid;
-    getgid;
-    getgrgid;
-    getgrnam;
-    getgrouplist;
-    getgroups;
-    gethostbyaddr;
-    gethostbyaddr_r; # introduced=23
-    gethostbyname;
-    gethostbyname2;
-    gethostbyname2_r; # introduced=23
-    gethostbyname_r;
-    gethostent;
-    gethostname;
-    getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getlogin;
-    getmntent;
-    getmntent_r; # introduced=21
-    getnameinfo;
-    getnetbyaddr;
-    getnetbyname;
-    getopt;
-    getopt_long;
-    getopt_long_only;
-    getpagesize; # introduced=21
-    getpeername;
-    getpgid;
-    getpgrp;
-    getpid;
-    getppid;
-    getpriority;
-    getprogname; # introduced=21
-    getprotobyname;
-    getprotobynumber;
-    getpt;
-    getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getresgid;
-    getresuid;
-    getrlimit;
-    getrlimit64; # introduced=21
-    getrusage;
-    gets;
-    getservbyname;
-    getservbyport;
-    getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    getsockname;
-    getsockopt;
-    gettid;
-    gettimeofday;
-    getuid;
-    getutent;
-    getwc;
-    getwchar;
-    getxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    gmtime;
-    gmtime64; # arm x86 mips
-    gmtime64_r; # arm x86 mips
-    gmtime_r;
-    grantpt; # introduced=21
-    herror;
-    hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
-    if_indextoname;
-    if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    inet_addr;
-    inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
-    inet_nsap_addr;
-    inet_nsap_ntoa;
-    inet_ntoa;
-    inet_ntop;
-    inet_pton;
-    init_module;
-    initgroups;
-    initstate; # introduced=21
-    inotify_add_watch;
-    inotify_init;
-    inotify_init1; # introduced=21
-    inotify_rm_watch;
-    insque; # introduced=21
-    ioctl;
-    isalnum;
-    isalnum_l; # introduced=21
-    isalpha;
-    isalpha_l; # introduced=21
-    isascii;
-    isatty;
-    isblank;
-    isblank_l; # introduced=21
-    iscntrl;
-    iscntrl_l; # introduced=21
-    isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
-    isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
-    islower;
-    islower_l; # introduced=21
-    isnan;
-    isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
-    isprint;
-    isprint_l; # introduced=21
-    ispunct;
-    ispunct_l; # introduced=21
-    isspace;
-    isspace_l; # introduced=21
-    isupper;
-    isupper_l; # introduced=21
-    iswalnum;
-    iswalnum_l; # introduced=21
-    iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
-    iswcntrl;
-    iswcntrl_l; # introduced=21
-    iswctype;
-    iswctype_l; # introduced=21
-    iswdigit;
-    iswdigit_l; # introduced=21
-    iswgraph;
-    iswgraph_l; # introduced=21
-    iswlower;
-    iswlower_l; # introduced=21
-    iswprint;
-    iswprint_l; # introduced=21
-    iswpunct;
-    iswpunct_l; # introduced=21
-    iswspace;
-    iswspace_l; # introduced=21
-    iswupper;
-    iswupper_l; # introduced=21
-    iswxdigit;
-    iswxdigit_l; # introduced=21
-    isxdigit;
-    isxdigit_l; # introduced=21
-    jrand48;
-    kill;
-    killpg;
-    klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lchown;
-    lcong48; # introduced=23
-    ldexp;
-    ldiv;
-    lfind; # introduced=21
-    lgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    link;
-    linkat; # introduced=21
-    listen;
-    listxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lldiv;
-    llistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    localeconv; # introduced=21
-    localtime;
-    localtime64; # arm x86 mips
-    localtime64_r; # arm x86 mips
-    localtime_r;
-    login_tty; # introduced=23
-    longjmp;
-    lrand48;
-    lremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lsearch; # introduced=21
-    lseek;
-    lseek64;
-    lsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lstat;
-    lstat64; # introduced=21
-    madvise;
-    mallinfo;
-    malloc;
-    malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
-    mbrtowc;
-    mbsinit;
-    mbsnrtowcs; # introduced=21
-    mbsrtowcs;
-    mbstowcs;
-    mbtowc; # introduced=21
-    memalign;
-    memccpy;
-    memchr;
-    memcmp;
-    memcpy;
-    memmem;
-    memmove;
-    mempcpy; # introduced=23
-    memrchr;
-    memset;
-    mincore;
-    mkdir;
-    mkdirat;
-    mkdtemp;
-    mkfifo; # introduced=21
-    mkfifoat; # introduced=23
-    mknod;
-    mknodat; # introduced=21
-    mkostemp; # introduced=23
-    mkostemp64; # introduced=23
-    mkostemps; # introduced=23
-    mkostemps64; # introduced=23
-    mkstemp;
-    mkstemp64; # introduced=21
-    mkstemps;
-    mkstemps64; # introduced=23
-    mktemp;
-    mktime;
-    mktime64; # arm x86 mips
-    mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mmap;
-    mmap64; # introduced=21
-    mount;
-    mprotect;
-    mrand48;
-    mremap;
-    msync;
-    munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    munmap;
-    nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
-    nice;
-    nrand48;
-    nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
-    open;
-    open64; # introduced=21
-    open_memstream; # introduced=23
-    open_wmemstream; # introduced=23
-    openat;
-    openat64; # introduced=21
-    opendir;
-    openlog;
-    openpty; # introduced=23
-    optarg; # var
-    opterr; # var
-    optind; # var
-    optopt; # var
-    optreset; # var
-    pathconf;
-    pause;
-    pclose;
-    perror;
-    personality; # introduced-arm=15 introduced-arm64=21 introduced-mips=15 introduced-mips64=21 introduced-x86=15 introduced-x86_64=21
-    pipe;
-    pipe2;
-    poll;
-    popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
-    posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
-    prctl;
-    pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    printf;
-    prlimit64; # introduced=21
-    process_vm_readv; # introduced=23
-    process_vm_writev; # introduced=23
-    pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    pthread_attr_destroy;
-    pthread_attr_getdetachstate;
-    pthread_attr_getguardsize;
-    pthread_attr_getschedparam;
-    pthread_attr_getschedpolicy;
-    pthread_attr_getscope;
-    pthread_attr_getstack;
-    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_setstacksize;
-    pthread_cond_broadcast;
-    pthread_cond_destroy;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_timedwait_monotonic; # arm x86 mips
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-mips=9 introduced-arm64=28 introduced-x64_64=28 introduced-mips64=28
-    pthread_cond_timedwait_relative_np; # arm x86 mips
-    pthread_cond_timeout_np; # arm x86 mips
-    pthread_cond_wait;
-    pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
-    pthread_condattr_getpshared;
-    pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
-    pthread_condattr_setpshared;
-    pthread_create;
-    pthread_detach;
-    pthread_equal;
-    pthread_exit;
-    pthread_getattr_np;
-    pthread_getcpuclockid;
-    pthread_getschedparam;
-    pthread_getspecific;
-    pthread_gettid_np; # introduced=21
-    pthread_join;
-    pthread_key_create;
-    pthread_key_delete;
-    pthread_kill;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
-    pthread_mutex_lock_timeout_np; # arm x86 mips
-    pthread_mutex_timedlock; # introduced=21
-    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_rwlock_destroy;
-    pthread_rwlock_init;
-    pthread_rwlock_rdlock;
-    pthread_rwlock_timedrdlock;
-    pthread_rwlock_timedwrlock;
-    pthread_rwlock_tryrdlock;
-    pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
-    pthread_rwlockattr_destroy;
-    pthread_rwlockattr_getkind_np; # introduced=23
-    pthread_rwlockattr_getpshared;
-    pthread_rwlockattr_init;
-    pthread_rwlockattr_setkind_np; # introduced=23
-    pthread_rwlockattr_setpshared;
-    pthread_self;
-    pthread_setname_np;
-    pthread_setschedparam;
-    pthread_setspecific;
-    pthread_sigmask;
-    ptrace;
-    ptsname;
-    ptsname_r;
-    putc;
-    putc_unlocked;
-    putchar;
-    putchar_unlocked;
-    putenv;
-    puts;
-    pututline;
-    putw; # arm x86 mips
-    putwc;
-    putwchar;
-    pvalloc; # arm x86 mips introduced=17
-    pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    qsort;
-    quick_exit; # introduced=21
-    raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
-    read;
-    readahead; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
-    readdir_r;
-    readlink;
-    readlinkat; # introduced=21
-    readv;
-    realloc;
-    realpath;
-    reboot;
-    recv;
-    recvfrom;
-    recvmmsg; # introduced=21
-    recvmsg;
-    regcomp;
-    regerror;
-    regexec;
-    regfree;
-    remove;
-    removexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    remque; # introduced=21
-    rename;
-    renameat;
-    res_init;
-    res_mkquery;
-    res_query;
-    res_search;
-    rewind;
-    rewinddir;
-    rmdir;
-    sbrk;
-    scandir;
-    scandir64; # introduced=21
-    scanf;
-    sched_get_priority_max;
-    sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getparam;
-    sched_getscheduler;
-    sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_setparam;
-    sched_setscheduler;
-    sched_yield;
-    seed48;
-    seekdir; # introduced=23
-    select;
-    sem_close;
-    sem_destroy;
-    sem_getvalue;
-    sem_init;
-    sem_open;
-    sem_post;
-    sem_timedwait;
-    sem_trywait;
-    sem_unlink;
-    sem_wait;
-    send;
-    sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
-    sendmsg;
-    sendto;
-    setbuf;
-    setbuffer;
-    setegid;
-    setenv;
-    seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
-    setgid;
-    setgroups;
-    sethostname; # introduced=23
-    setitimer;
-    setjmp;
-    setlinebuf;
-    setlocale;
-    setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
-    setpgid;
-    setpgrp;
-    setpriority;
-    setprogname; # introduced=21
-    setregid;
-    setresgid;
-    setresuid;
-    setreuid;
-    setrlimit;
-    setrlimit64; # introduced=21
-    setservent;
-    setsid;
-    setsockopt;
-    setstate; # introduced=21
-    settimeofday;
-    setuid;
-    setutent;
-    setvbuf;
-    setxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    shutdown;
-    sigaction;
-    sigaddset; # introduced=21
-    sigaltstack;
-    sigblock;
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
-    siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    sigpending;
-    sigprocmask;
-    sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sigsetmask;
-    sigsuspend;
-    sigtimedwait; # introduced=23
-    sigwait;
-    sigwaitinfo; # introduced=23
-    sleep;
-    snprintf;
-    socket;
-    socketpair;
-    splice; # introduced=21
-    sprintf;
-    srand; # introduced=21
-    srand48;
-    srandom; # introduced=21
-    sscanf;
-    stat;
-    stat64; # introduced=21
-    statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
-    stderr; # var introduced=23
-    stdin; # var introduced=23
-    stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
-    strcasecmp;
-    strcasecmp_l; # introduced=23
-    strcasestr;
-    strcat;
-    strchr;
-    strcmp;
-    strcoll;
-    strcoll_l; # introduced=21
-    strcpy;
-    strcspn;
-    strdup;
-    strerror;
-    strerror_l; # introduced=23
-    strerror_r;
-    strftime;
-    strftime_l; # introduced=21
-    strlcat;
-    strlcpy;
-    strlen;
-    strncasecmp;
-    strncasecmp_l; # introduced=23
-    strncat;
-    strncmp;
-    strncpy;
-    strndup;
-    strnlen;
-    strpbrk;
-    strptime;
-    strrchr;
-    strsep;
-    strsignal;
-    strspn;
-    strstr;
-    strtod;
-    strtof; # introduced=21
-    strtoimax;
-    strtok;
-    strtok_r;
-    strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
-    strtoll;
-    strtoll_l; # introduced=21
-    strtoq; # introduced=21
-    strtoul;
-    strtoull;
-    strtoull_l; # introduced=21
-    strtoumax;
-    strtouq; # introduced=21
-    strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swprintf;
-    swscanf;
-    symlink;
-    symlinkat; # introduced=21
-    sync;
-    sys_siglist; # var
-    sys_signame; # var
-    syscall;
-    sysconf;
-    sysinfo;
-    syslog;
-    system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
-    tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
-    tcsetpgrp;
-    tdelete; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tdestroy; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tee; # introduced=21
-    telldir; # introduced=23
-    tempnam;
-    tfind; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tgkill; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timegm64; # arm x86 mips
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timelocal64; # arm x86 mips
-    timer_create;
-    timer_delete;
-    timer_getoverrun;
-    timer_gettime;
-    timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    times;
-    timezone; # var
-    tmpfile;
-    tmpnam;
-    toascii;
-    tolower;
-    tolower_l; # introduced=21
-    toupper;
-    toupper_l; # introduced=21
-    towlower;
-    towlower_l; # introduced=21
-    towupper;
-    towupper_l; # introduced=21
-    truncate;
-    truncate64; # introduced=21
-    tsearch; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    ttyname;
-    ttyname_r;
-    twalk; # introduced=21
-    tzname; # var
-    tzset;
-    umask;
-    umount;
-    umount2;
-    uname;
-    ungetc;
-    ungetwc;
-    unlink;
-    unlinkat;
-    unlockpt;
-    unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
-    usleep;
-    utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    utimes;
-    utmpname;
-    valloc; # arm x86 mips
-    vasprintf;
-    vdprintf; # introduced=21
-    verr;
-    verrx;
-    vfdprintf; # arm x86 mips versioned=28
-    vfork;
-    vfprintf;
-    vfscanf;
-    vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
-    vprintf;
-    vscanf;
-    vsnprintf;
-    vsprintf;
-    vsscanf;
-    vswprintf;
-    vswscanf; # introduced=21
-    vsyslog;
-    vwarn;
-    vwarnx;
-    vwprintf;
-    vwscanf; # introduced=21
-    wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    waitid;
-    waitpid;
-    warn;
-    warnx;
-    wcpcpy;
-    wcpncpy;
-    wcrtomb;
-    wcscasecmp;
-    wcscasecmp_l; # introduced=23
-    wcscat;
-    wcschr;
-    wcscmp;
-    wcscoll;
-    wcscoll_l; # introduced=21
-    wcscpy;
-    wcscspn;
-    wcsdup;
-    wcsftime;
-    wcslcat;
-    wcslcpy;
-    wcslen;
-    wcsncasecmp;
-    wcsncasecmp_l; # introduced=23
-    wcsncat;
-    wcsncmp;
-    wcsncpy;
-    wcsnlen;
-    wcsnrtombs; # introduced=21
-    wcspbrk;
-    wcsrchr;
-    wcsrtombs;
-    wcsspn;
-    wcsstr;
-    wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
-    wcstok;
-    wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs;
-    wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
-    wcswidth;
-    wcsxfrm;
-    wcsxfrm_l; # introduced=21
-    wctob;
-    wctomb; # introduced=21
-    wctype;
-    wctype_l; # introduced=21
-    wcwidth;
-    wmemchr;
-    wmemcmp;
-    wmemcpy;
-    wmemmove;
-    wmempcpy; # introduced=23
-    wmemset;
-    wprintf;
-    write;
-    writev;
-    wscanf;
-  local:
-    *;
-};
-
-LIBC_N { # introduced-arm64=24 introduced-mips=24 introduced-mips64=24 introduced-x86=24 introduced-x86_64=24
-  global:
-    __fread_chk; # introduced=24
-    __fwrite_chk; # introduced=24
-    __getcwd_chk; # introduced=24
-    __pwrite_chk; # introduced=24
-    __pwrite64_chk; # introduced=24
-    __write_chk; # introduced=24
-    adjtimex; # introduced=24
-    clock_adjtime; # introduced=24
-    fgetpos64; # introduced=24
-    fileno_unlocked; # introduced=24
-    fopen64; # introduced=24
-    freeifaddrs; # introduced=24
-    freopen64; # introduced=24
-    fseeko64; # introduced=24
-    fsetpos64; # introduced=24
-    ftello64; # introduced=24
-    funopen64; # introduced=24
-    getgrgid_r; # introduced=24
-    getgrnam_r; # introduced=24
-    getifaddrs; # introduced=24
-    if_freenameindex; # introduced=24
-    if_nameindex; # introduced=24
-    in6addr_any; # var introduced=24
-    in6addr_loopback; # var introduced=24
-    lockf; # introduced=24
-    lockf64; # introduced=24
-    preadv; # introduced=24
-    preadv64; # introduced=24
-    prlimit; # arm mips x86 introduced=24
-    pthread_barrierattr_destroy; # introduced=24
-    pthread_barrierattr_getpshared; # introduced=24
-    pthread_barrierattr_init; # introduced=24
-    pthread_barrierattr_setpshared; # introduced=24
-    pthread_barrier_destroy; # introduced=24
-    pthread_barrier_init; # introduced=24
-    pthread_barrier_wait; # introduced=24
-    pthread_spin_destroy; # introduced=24
-    pthread_spin_init; # introduced=24
-    pthread_spin_lock; # introduced=24
-    pthread_spin_trylock; # introduced=24
-    pthread_spin_unlock; # introduced=24
-    pwritev; # introduced=24
-    pwritev64; # introduced=24
-    scandirat; # introduced=24
-    scandirat64; # introduced=24
-    strchrnul; # introduced=24
-    tmpfile64; # introduced=24
-} LIBC;
-
-LIBC_O {
-  global:
-    __sendto_chk; # introduced=26
-    __system_property_read_callback; # introduced=26
-    __system_property_wait; # introduced=26
-    bsd_signal; # arm x86 mips versioned=26
-    catclose; # introduced=26
-    catgets; # introduced=26
-    catopen; # introduced=26
-    ctermid; # introduced=26
-    endgrent; # introduced=26
-    endpwent; # introduced=26
-    futimes; # introduced=26
-    futimesat; # introduced=26
-    getdomainname; # introduced=26
-    getgrent; # introduced=26
-    getpwent; # introduced=26
-    getsubopt; # introduced=26
-    hasmntopt; # introduced=26
-    lutimes; # introduced=26
-    mallopt; # introduced=26
-    mblen; # introduced=26
-    msgctl; # introduced=26
-    msgget; # introduced=26
-    msgrcv; # introduced=26
-    msgsnd; # introduced=26
-    nl_langinfo; # introduced=26
-    nl_langinfo_l; # introduced=26
-    pthread_getname_np; # introduced=26
-    quotactl; # introduced=26
-    semctl; # introduced=26
-    semget; # introduced=26
-    semop; # introduced=26
-    semtimedop; # introduced=26
-    setdomainname; # introduced=26
-    setgrent; # introduced=26
-    setpwent; # introduced=26
-    shmat; # introduced=26
-    shmctl; # introduced=26
-    shmdt; # introduced=26
-    shmget; # introduced=26
-    sighold; # introduced=26
-    sigignore; # introduced=26
-    sigpause; # introduced=26
-    sigrelse; # introduced=26
-    sigset; # introduced=26
-    strtod_l; # introduced=26
-    strtof_l; # introduced=26
-    strtol_l; # introduced=26
-    strtoul_l; # introduced=26
-    sync_file_range; # introduced=26
-    towctrans; # introduced=26
-    towctrans_l; # introduced=26
-    wctrans; # introduced=26
-    wctrans_l; # introduced=26
-} LIBC_N;
-
-LIBC_P { # introduced=P
-  global:
-    __freading;
-    __free_hook;
-    __fseterr;
-    __fwriting;
-    __malloc_hook;
-    __memalign_hook;
-    __realloc_hook;
-    aligned_alloc;
-    endhostent;
-    endnetent;
-    endprotoent;
-    epoll_pwait64;
-    fexecve;
-    fflush_unlocked;
-    fgetc_unlocked;
-    fgets_unlocked;
-    fputc_unlocked;
-    fputs_unlocked;
-    fread_unlocked;
-    fwrite_unlocked;
-    getentropy;
-    getnetent;
-    getprotoent;
-    getrandom;
-    getlogin_r;
-    glob;
-    globfree;
-    hcreate;
-    hcreate_r;
-    hdestroy;
-    hdestroy_r;
-    hsearch;
-    hsearch_r;
-    iconv;
-    iconv_close;
-    iconv_open;
-    posix_spawn;
-    posix_spawnattr_destroy;
-    posix_spawnattr_getflags;
-    posix_spawnattr_getpgroup;
-    posix_spawnattr_getschedparam;
-    posix_spawnattr_getschedpolicy;
-    posix_spawnattr_getsigdefault;
-    posix_spawnattr_getsigdefault64;
-    posix_spawnattr_getsigmask;
-    posix_spawnattr_getsigmask64;
-    posix_spawnattr_init;
-    posix_spawnattr_setflags;
-    posix_spawnattr_setpgroup;
-    posix_spawnattr_setschedparam;
-    posix_spawnattr_setschedpolicy;
-    posix_spawnattr_setsigdefault;
-    posix_spawnattr_setsigdefault64;
-    posix_spawnattr_setsigmask;
-    posix_spawnattr_setsigmask64;
-    posix_spawn_file_actions_addclose;
-    posix_spawn_file_actions_adddup2;
-    posix_spawn_file_actions_addopen;
-    posix_spawn_file_actions_destroy;
-    posix_spawn_file_actions_init;
-    posix_spawnp;
-    ppoll64;
-    pselect64;
-    pthread_attr_getinheritsched;
-    pthread_attr_setinheritsched;
-    pthread_mutex_timedlock_monotonic_np;
-    pthread_mutexattr_getprotocol;
-    pthread_mutexattr_setprotocol;
-    pthread_rwlock_timedrdlock_monotonic_np;
-    pthread_rwlock_timedwrlock_monotonic_np;
-    pthread_setschedprio;
-    pthread_sigmask64;
-    sem_timedwait_monotonic_np;
-    sethostent;
-    setnetent;
-    setprotoent;
-    sigaction64;
-    sigaddset64;
-    sigdelset64;
-    sigemptyset64;
-    sigfillset64;
-    sigismember64;
-    signalfd64;
-    sigpending64;
-    sigprocmask64;
-    sigsuspend64;
-    sigtimedwait64;
-    sigwait64;
-    sigwaitinfo64;
-    strptime_l;
-    swab;
-    syncfs;
-    wcsftime_l;
-    wcstod_l;
-    wcstof_l;
-    wcstol_l;
-    wcstoul_l;
-} LIBC_O;
-
-LIBC_Q { # introduced=Q
-  global:
-    __res_randomid;
-    android_fdsan_close_with_tag;
-    android_fdsan_create_owner_tag;
-    android_fdsan_exchange_owner_tag;
-    android_fdsan_get_owner_tag;
-    android_fdsan_get_tag_type;
-    android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
-    android_fdsan_set_error_level;
-    android_get_device_api_level;
-    getloadavg;
-    pthread_sigqueue;
-    reallocarray;
-    timespec_get;
-} LIBC_P;
-
-LIBC_PRIVATE {
-  global:
-    __accept4; # arm x86 mips
-    __bionic_brk; # arm x86 mips
-    __bionic_libgcc_compat_symbols; # arm x86
-    __divdi3; # arm x86 mips
-    __futex_wait; # arm x86 mips
-    __futex_wake; # arm x86 mips
-    __get_thread; # arm x86 mips
-    __get_tls; # arm x86 mips
-    __getdents64; # arm x86 mips
-    __open; # arm x86 mips
-    __page_shift; # arm x86 mips
-    __page_size; # arm x86 mips
-    __popcountsi2; # arm x86 mips
-    __pthread_gettid; # arm x86 mips
-    __sclose; # arm x86 mips
-    __sdidinit; # arm x86 mips
-    __set_errno; # arm x86 mips
-    __sflags; # arm x86 mips
-    __sflush; # arm x86 mips
-    __sfp; # arm x86 mips
-    __sglue; # arm x86 mips
-    __sinit; # arm x86 mips
-    __smakebuf; # arm x86 mips
-    __sread; # arm x86 mips
-    __srefill; # arm x86 mips
-    __srget; # arm x86 mips
-    __sseek; # arm x86 mips
-    __swbuf; # arm x86 mips
-    __swrite; # arm x86 mips
-    __swsetup; # arm x86 mips
-    __udivdi3; # arm x86 mips
-    __umoddi3; # x86 mips
-    __wait4; # arm x86 mips
-    _fwalk; # arm x86 mips
-    android_getaddrinfofornet;
-    android_getaddrinfofornetcontext;
-    android_gethostbyaddrfornet;
-    android_gethostbyaddrfornetcontext;
-    android_gethostbynamefornet;
-    android_gethostbynamefornetcontext;
-    arc4random_addrandom; # arm x86 mips
-    arc4random_stir; # arm x86 mips
-    bcopy; # arm x86 mips
-    bzero; # arm x86 mips
-    dlmalloc; # arm x86 mips
-    dlmalloc_inspect_all; # arm x86 mips
-    dlmalloc_trim; # arm x86 mips
-    dlmalloc_usable_size; # arm x86 mips
-    free_malloc_leak_info;
-    ftime; # arm x86 mips
-    get_malloc_leak_info;
-    getdents; # arm x86 mips
-    getdtablesize; # arm x86 mips
-    gMallocLeakZygoteChild;
-    index; # arm x86 mips
-    issetugid; # arm x86 mips
-    memswap; # arm x86 mips
-    pthread_attr_getstackaddr; # arm x86 mips
-    pthread_attr_setstackaddr; # arm x86 mips
-    SHA1Final; # arm x86 mips
-    SHA1Init; # arm x86 mips
-    SHA1Transform; # arm x86 mips
-    SHA1Update; # arm x86 mips
-    strntoimax; # arm x86 mips
-    strntoumax; # arm x86 mips
-    strtotimeval; # arm x86 mips
-    sysv_signal; # arm x86 mips
-    tkill; # arm x86 mips
-    wait3; # arm x86 mips
-    wcswcs; # arm x86 mips
-    write_malloc_leak_info;
-} LIBC_Q;
-
-LIBC_DEPRECATED {
-  global:
-    __system_property_wait_any;
-};
-
-LIBC_PLATFORM {
-  global:
-    __system_properties_init;
-    __system_property_area__; # var
-    __system_property_add;
-    __system_property_area_init;
-    __system_property_set_filename;
-    __system_property_update;
-    android_fdsan_get_fd_table;
-    android_net_res_stats_get_info_for_net;
-    android_net_res_stats_aggregate;
-    android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
-} LIBC_Q;
diff --git a/libc/libc.x86_64.map b/libc/libc.x86_64.map
deleted file mode 100644
index 81ff00d..0000000
--- a/libc/libc.x86_64.map
+++ /dev/null
@@ -1,1397 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __assert;
-    __assert2;
-    __b64_ntop;
-    __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
-    __cxa_atexit;
-    __cxa_finalize;
-    __cxa_thread_atexit_impl; # introduced=23
-    __dn_comp;
-    __dn_count_labels;
-    __dn_skipname;
-    __errno;
-    __fbufsize; # introduced=23
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __flbf; # introduced=23
-    __fp_nquery;
-    __fp_query;
-    __fpclassify; # introduced=21
-    __fpclassifyd;
-    __fpclassifyf;
-    __fpclassifyl;
-    __fpending; # introduced=23
-    __fpurge; # introduced=23
-    __freadable; # introduced=23
-    __fsetlocking; # introduced=23
-    __fwritable; # introduced=23
-    __get_h_errno;
-    __gnu_basename; # introduced=23
-    __gnu_strerror_r; # introduced=23
-    __hostalias;
-    __isfinite;
-    __isfinitef;
-    __isfinitel;
-    __isinf;
-    __isinff;
-    __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
-    __isnanl;
-    __isnormal;
-    __isnormalf;
-    __isnormall;
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
-    __libc_init;
-    __loc_aton;
-    __loc_ntoa;
-    __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __p_cdname;
-    __p_cdnname;
-    __p_class;
-    __p_class_syms; # var
-    __p_fqname;
-    __p_fqnname;
-    __p_option;
-    __p_query;
-    __p_rcode;
-    __p_secstodate;
-    __p_time;
-    __p_type;
-    __p_type_syms; # var
-    __poll_chk; # introduced=23
-    __ppoll_chk; # introduced=23
-    __ppoll64_chk; # introduced=28
-    __pread64_chk; # introduced=23
-    __pread_chk; # introduced=23
-    __progname; # var
-    __pthread_cleanup_pop;
-    __pthread_cleanup_push;
-    __putlong;
-    __putshort;
-    __read_chk; # introduced=21
-    __readlink_chk; # introduced=23
-    __readlinkat_chk; # introduced=23
-    __recvfrom_chk; # introduced=21
-    __register_atfork; # introduced=23
-    __res_close;
-    __res_dnok;
-    __res_hnok;
-    __res_hostalias;
-    __res_isourserver;
-    __res_mailok;
-    __res_nameinquery;
-    __res_nclose;
-    __res_ninit;
-    __res_nmkquery;
-    __res_nquery;
-    __res_nquerydomain;
-    __res_nsearch;
-    __res_nsend;
-    __res_ownok;
-    __res_queriesmatch;
-    __res_querydomain;
-    __res_send;
-    __res_send_setqhook;
-    __res_send_setrhook;
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __sF; # var
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __stack_chk_fail;
-    __stack_chk_guard; # var
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __sym_ntop;
-    __sym_ntos;
-    __sym_ston;
-    __system_property_area_serial; # introduced=23
-    __system_property_find;
-    __system_property_find_nth;
-    __system_property_foreach; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_get;
-    __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    _ctype_; # var
-    _Exit; # introduced=21
-    _exit;
-    _flushlbf; # introduced=23
-    _getlong;
-    _getshort;
-    _longjmp;
-    _resolv_delete_cache_for_net; # introduced=21
-    _resolv_flush_cache_for_net; # introduced=21
-    _resolv_set_nameservers_for_net; # introduced=21
-    _setjmp;
-    _tolower; # introduced=21
-    _toupper; # introduced=21
-    abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    accept;
-    accept4; # introduced=21
-    access;
-    acct;
-    alarm;
-    alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
-    arc4random;
-    arc4random_buf;
-    arc4random_uniform;
-    asctime;
-    asctime_r;
-    asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
-    atoi;
-    atol;
-    atoll;
-    basename;
-    bind;
-    bindresvport;
-    brk;
-    bsearch;
-    btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
-    calloc;
-    capget;
-    capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
-    chdir;
-    chmod;
-    chown;
-    chroot;
-    clearenv;
-    clearerr;
-    clearerr_unlocked; # introduced=23
-    clock;
-    clock_getcpuclockid; # introduced=23
-    clock_getres;
-    clock_gettime;
-    clock_nanosleep;
-    clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    close;
-    closedir;
-    closelog;
-    connect;
-    creat;
-    creat64; # introduced=21
-    ctime;
-    ctime_r;
-    daemon;
-    daylight; # var
-    delete_module;
-    difftime;
-    dirfd;
-    dirname;
-    div;
-    dn_expand;
-    dprintf; # introduced=21
-    drand48;
-    dup;
-    dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
-    endservent;
-    endutent;
-    environ; # var
-    epoll_create;
-    epoll_create1; # introduced=21
-    epoll_ctl;
-    epoll_pwait; # introduced=21
-    epoll_wait;
-    erand48;
-    err;
-    error; # introduced=23
-    error_at_line; # introduced=23
-    error_message_count; # var introduced=23
-    error_one_per_line; # var introduced=23
-    error_print_progname; # var introduced=23
-    errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    eventfd;
-    eventfd_read;
-    eventfd_write;
-    execl;
-    execle;
-    execlp;
-    execv;
-    execve;
-    execvp;
-    execvpe; # introduced=21
-    exit;
-    faccessat; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
-    fchdir;
-    fchmod;
-    fchmodat;
-    fchown;
-    fchownat;
-    fclose;
-    fcntl;
-    fdatasync;
-    fdopen;
-    fdopendir;
-    feof;
-    feof_unlocked; # introduced=23
-    ferror;
-    ferror_unlocked; # introduced=23
-    fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    fgetc;
-    fgetln;
-    fgetpos;
-    fgets;
-    fgetwc;
-    fgetws;
-    fgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fileno;
-    flistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    flock;
-    flockfile;
-    fmemopen; # introduced=23
-    fnmatch;
-    fopen;
-    fork;
-    forkpty; # introduced=23
-    fpathconf;
-    fprintf;
-    fpurge;
-    fputc;
-    fputs;
-    fputwc;
-    fputws;
-    fread;
-    free;
-    freeaddrinfo;
-    freelocale; # introduced=21
-    fremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    freopen;
-    fscanf;
-    fseek;
-    fseeko;
-    fsetpos;
-    fsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    fstat;
-    fstat64; # introduced=21
-    fstatat;
-    fstatat64; # introduced=21
-    fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
-    fsync;
-    ftell;
-    ftello;
-    ftok;
-    ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    ftrylockfile;
-    fts_children; # introduced=21
-    fts_close; # introduced=21
-    fts_open; # introduced=21
-    fts_read; # introduced=21
-    fts_set; # introduced=21
-    ftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
-    funlockfile;
-    funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    fwide;
-    fwprintf;
-    fwrite;
-    fwscanf;
-    gai_strerror;
-    get_avphys_pages; # introduced=23
-    get_nprocs; # introduced=23
-    get_nprocs_conf; # introduced=23
-    get_phys_pages; # introduced=23
-    getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getc;
-    getc_unlocked;
-    getchar;
-    getchar_unlocked;
-    getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getegid;
-    getenv;
-    geteuid;
-    getgid;
-    getgrgid;
-    getgrnam;
-    getgrouplist;
-    getgroups;
-    gethostbyaddr;
-    gethostbyaddr_r; # introduced=23
-    gethostbyname;
-    gethostbyname2;
-    gethostbyname2_r; # introduced=23
-    gethostbyname_r;
-    gethostent;
-    gethostname;
-    getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    getlogin;
-    getmntent;
-    getmntent_r; # introduced=21
-    getnameinfo;
-    getnetbyaddr;
-    getnetbyname;
-    getopt;
-    getopt_long;
-    getopt_long_only;
-    getpagesize; # introduced=21
-    getpeername;
-    getpgid;
-    getpgrp;
-    getpid;
-    getppid;
-    getpriority;
-    getprogname; # introduced=21
-    getprotobyname;
-    getprotobynumber;
-    getpt;
-    getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    getresgid;
-    getresuid;
-    getrlimit;
-    getrlimit64; # introduced=21
-    getrusage;
-    gets;
-    getservbyname;
-    getservbyport;
-    getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    getsockname;
-    getsockopt;
-    gettid;
-    gettimeofday;
-    getuid;
-    getutent;
-    getwc;
-    getwchar;
-    getxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    gmtime;
-    gmtime_r;
-    grantpt; # introduced=21
-    herror;
-    hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
-    if_indextoname;
-    if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    inet_addr;
-    inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
-    inet_nsap_addr;
-    inet_nsap_ntoa;
-    inet_ntoa;
-    inet_ntop;
-    inet_pton;
-    init_module;
-    initgroups;
-    initstate; # introduced=21
-    inotify_add_watch;
-    inotify_init;
-    inotify_init1; # introduced=21
-    inotify_rm_watch;
-    insque; # introduced=21
-    ioctl;
-    isalnum;
-    isalnum_l; # introduced=21
-    isalpha;
-    isalpha_l; # introduced=21
-    isascii;
-    isatty;
-    isblank;
-    isblank_l; # introduced=21
-    iscntrl;
-    iscntrl_l; # introduced=21
-    isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
-    isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
-    islower;
-    islower_l; # introduced=21
-    isnan;
-    isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
-    isprint;
-    isprint_l; # introduced=21
-    ispunct;
-    ispunct_l; # introduced=21
-    isspace;
-    isspace_l; # introduced=21
-    isupper;
-    isupper_l; # introduced=21
-    iswalnum;
-    iswalnum_l; # introduced=21
-    iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
-    iswcntrl;
-    iswcntrl_l; # introduced=21
-    iswctype;
-    iswctype_l; # introduced=21
-    iswdigit;
-    iswdigit_l; # introduced=21
-    iswgraph;
-    iswgraph_l; # introduced=21
-    iswlower;
-    iswlower_l; # introduced=21
-    iswprint;
-    iswprint_l; # introduced=21
-    iswpunct;
-    iswpunct_l; # introduced=21
-    iswspace;
-    iswspace_l; # introduced=21
-    iswupper;
-    iswupper_l; # introduced=21
-    iswxdigit;
-    iswxdigit_l; # introduced=21
-    isxdigit;
-    isxdigit_l; # introduced=21
-    jrand48;
-    kill;
-    killpg;
-    klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lchown;
-    lcong48; # introduced=23
-    ldexp;
-    ldiv;
-    lfind; # introduced=21
-    lgetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    link;
-    linkat; # introduced=21
-    listen;
-    listxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    lldiv;
-    llistxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    localeconv; # introduced=21
-    localtime;
-    localtime_r;
-    login_tty; # introduced=23
-    longjmp;
-    lrand48;
-    lremovexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lsearch; # introduced=21
-    lseek;
-    lseek64;
-    lsetxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    lstat;
-    lstat64; # introduced=21
-    madvise;
-    mallinfo;
-    malloc;
-    malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
-    mbrtowc;
-    mbsinit;
-    mbsnrtowcs; # introduced=21
-    mbsrtowcs;
-    mbstowcs;
-    mbtowc; # introduced=21
-    memalign;
-    memccpy;
-    memchr;
-    memcmp;
-    memcpy;
-    memmem;
-    memmove;
-    mempcpy; # introduced=23
-    memrchr;
-    memset;
-    mincore;
-    mkdir;
-    mkdirat;
-    mkdtemp;
-    mkfifo; # introduced=21
-    mkfifoat; # introduced=23
-    mknod;
-    mknodat; # introduced=21
-    mkostemp; # introduced=23
-    mkostemp64; # introduced=23
-    mkostemps; # introduced=23
-    mkostemps64; # introduced=23
-    mkstemp;
-    mkstemp64; # introduced=21
-    mkstemps;
-    mkstemps64; # introduced=23
-    mktemp;
-    mktime;
-    mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    mmap;
-    mmap64; # introduced=21
-    mount;
-    mprotect;
-    mrand48;
-    mremap;
-    msync;
-    munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    munmap;
-    nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
-    nice;
-    nrand48;
-    ns_format_ttl; # arm64 x86_64 mips64 introduced=22
-    ns_get16; # arm64 x86_64 mips64 introduced=22
-    ns_get32; # arm64 x86_64 mips64 introduced=22
-    ns_initparse; # arm64 x86_64 mips64 introduced=22
-    ns_makecanon; # arm64 x86_64 mips64 introduced=22
-    ns_msg_getflag; # arm64 x86_64 mips64 introduced=22
-    ns_name_compress; # arm64 x86_64 mips64 introduced=22
-    ns_name_ntol; # arm64 x86_64 mips64 introduced=22
-    ns_name_ntop; # arm64 x86_64 mips64 introduced=22
-    ns_name_pack; # arm64 x86_64 mips64 introduced=22
-    ns_name_pton; # arm64 x86_64 mips64 introduced=23
-    ns_name_rollback; # arm64 x86_64 mips64 introduced=22
-    ns_name_skip; # arm64 x86_64 mips64 introduced=22
-    ns_name_uncompress; # arm64 x86_64 mips64 introduced=22
-    ns_name_unpack; # arm64 x86_64 mips64 introduced=22
-    ns_parserr; # arm64 x86_64 mips64 introduced=22
-    ns_put16; # arm64 x86_64 mips64 introduced=22
-    ns_put32; # arm64 x86_64 mips64 introduced=22
-    ns_samename; # arm64 x86_64 mips64 introduced=22
-    ns_skiprr; # arm64 x86_64 mips64 introduced=22
-    ns_sprintrr; # arm64 x86_64 mips64 introduced=22
-    ns_sprintrrf; # arm64 x86_64 mips64 introduced=22
-    nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
-    open;
-    open64; # introduced=21
-    open_memstream; # introduced=23
-    open_wmemstream; # introduced=23
-    openat;
-    openat64; # introduced=21
-    opendir;
-    openlog;
-    openpty; # introduced=23
-    optarg; # var
-    opterr; # var
-    optind; # var
-    optopt; # var
-    optreset; # var
-    pathconf;
-    pause;
-    pclose;
-    perror;
-    personality; # introduced-arm=15 introduced-arm64=21 introduced-mips=15 introduced-mips64=21 introduced-x86=15 introduced-x86_64=21
-    pipe;
-    pipe2;
-    poll;
-    popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
-    posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
-    prctl;
-    pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    printf;
-    prlimit; # arm64 x86_64 mips64
-    prlimit64; # introduced=21
-    process_vm_readv; # introduced=23
-    process_vm_writev; # introduced=23
-    pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    pthread_attr_destroy;
-    pthread_attr_getdetachstate;
-    pthread_attr_getguardsize;
-    pthread_attr_getschedparam;
-    pthread_attr_getschedpolicy;
-    pthread_attr_getscope;
-    pthread_attr_getstack;
-    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_setstacksize;
-    pthread_cond_broadcast;
-    pthread_cond_destroy;
-    pthread_cond_init;
-    pthread_cond_signal;
-    pthread_cond_timedwait;
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-mips=9 introduced-arm64=28 introduced-x64_64=28 introduced-mips64=28
-    pthread_cond_wait;
-    pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
-    pthread_condattr_getpshared;
-    pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
-    pthread_condattr_setpshared;
-    pthread_create;
-    pthread_detach;
-    pthread_equal;
-    pthread_exit;
-    pthread_getattr_np;
-    pthread_getcpuclockid;
-    pthread_getschedparam;
-    pthread_getspecific;
-    pthread_gettid_np; # introduced=21
-    pthread_join;
-    pthread_key_create;
-    pthread_key_delete;
-    pthread_kill;
-    pthread_mutex_destroy;
-    pthread_mutex_init;
-    pthread_mutex_lock;
-    pthread_mutex_timedlock; # introduced=21
-    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_rwlock_destroy;
-    pthread_rwlock_init;
-    pthread_rwlock_rdlock;
-    pthread_rwlock_timedrdlock;
-    pthread_rwlock_timedwrlock;
-    pthread_rwlock_tryrdlock;
-    pthread_rwlock_trywrlock;
-    pthread_rwlock_unlock;
-    pthread_rwlock_wrlock;
-    pthread_rwlockattr_destroy;
-    pthread_rwlockattr_getkind_np; # introduced=23
-    pthread_rwlockattr_getpshared;
-    pthread_rwlockattr_init;
-    pthread_rwlockattr_setkind_np; # introduced=23
-    pthread_rwlockattr_setpshared;
-    pthread_self;
-    pthread_setname_np;
-    pthread_setschedparam;
-    pthread_setspecific;
-    pthread_sigmask;
-    ptrace;
-    ptsname;
-    ptsname_r;
-    putc;
-    putc_unlocked;
-    putchar;
-    putchar_unlocked;
-    putenv;
-    puts;
-    pututline;
-    putwc;
-    putwchar;
-    pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    qsort;
-    quick_exit; # introduced=21
-    raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
-    read;
-    readahead; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
-    readdir_r;
-    readlink;
-    readlinkat; # introduced=21
-    readv;
-    realloc;
-    realpath;
-    reboot;
-    recv;
-    recvfrom;
-    recvmmsg; # introduced=21
-    recvmsg;
-    regcomp;
-    regerror;
-    regexec;
-    regfree;
-    remove;
-    removexattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    remque; # introduced=21
-    rename;
-    renameat;
-    res_init;
-    res_mkquery;
-    res_query;
-    res_search;
-    rewind;
-    rewinddir;
-    rmdir;
-    sbrk;
-    scandir;
-    scandir64; # introduced=21
-    scanf;
-    sched_get_priority_max;
-    sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getparam;
-    sched_getscheduler;
-    sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sched_setparam;
-    sched_setscheduler;
-    sched_yield;
-    seed48;
-    seekdir; # introduced=23
-    select;
-    sem_close;
-    sem_destroy;
-    sem_getvalue;
-    sem_init;
-    sem_open;
-    sem_post;
-    sem_timedwait;
-    sem_trywait;
-    sem_unlink;
-    sem_wait;
-    send;
-    sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
-    sendmsg;
-    sendto;
-    setbuf;
-    setbuffer;
-    setegid;
-    setenv;
-    seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
-    setgid;
-    setgroups;
-    sethostname; # introduced=23
-    setitimer;
-    setjmp;
-    setlinebuf;
-    setlocale;
-    setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
-    setpgid;
-    setpgrp;
-    setpriority;
-    setprogname; # introduced=21
-    setregid;
-    setresgid;
-    setresuid;
-    setreuid;
-    setrlimit;
-    setrlimit64; # introduced=21
-    setservent;
-    setsid;
-    setsockopt;
-    setstate; # introduced=21
-    settimeofday;
-    setuid;
-    setutent;
-    setvbuf;
-    setxattr; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    shutdown;
-    sigaction;
-    sigaddset; # introduced=21
-    sigaltstack;
-    sigblock;
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
-    siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    sigpending;
-    sigprocmask;
-    sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    sigsetmask;
-    sigsuspend;
-    sigtimedwait; # introduced=23
-    sigwait;
-    sigwaitinfo; # introduced=23
-    sleep;
-    snprintf;
-    socket;
-    socketpair;
-    splice; # introduced=21
-    sprintf;
-    srand; # introduced=21
-    srand48;
-    srandom; # introduced=21
-    sscanf;
-    stat;
-    stat64; # introduced=21
-    statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
-    stderr; # var introduced=23
-    stdin; # var introduced=23
-    stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
-    strcasecmp;
-    strcasecmp_l; # introduced=23
-    strcasestr;
-    strcat;
-    strchr;
-    strcmp;
-    strcoll;
-    strcoll_l; # introduced=21
-    strcpy;
-    strcspn;
-    strdup;
-    strerror;
-    strerror_l; # introduced=23
-    strerror_r;
-    strftime;
-    strftime_l; # introduced=21
-    strlcat;
-    strlcpy;
-    strlen;
-    strncasecmp;
-    strncasecmp_l; # introduced=23
-    strncat;
-    strncmp;
-    strncpy;
-    strndup;
-    strnlen;
-    strpbrk;
-    strptime;
-    strrchr;
-    strsep;
-    strsignal;
-    strspn;
-    strstr;
-    strtod;
-    strtof; # introduced=21
-    strtoimax;
-    strtok;
-    strtok_r;
-    strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
-    strtoll;
-    strtoll_l; # introduced=21
-    strtoq; # introduced=21
-    strtoul;
-    strtoull;
-    strtoull_l; # introduced=21
-    strtoumax;
-    strtouq; # introduced=21
-    strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    swprintf;
-    swscanf;
-    symlink;
-    symlinkat; # introduced=21
-    sync;
-    sys_siglist; # var
-    sys_signame; # var
-    syscall;
-    sysconf;
-    sysinfo;
-    syslog;
-    system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
-    tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
-    tcsetpgrp;
-    tdelete; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tdestroy; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tee; # introduced=21
-    telldir; # introduced=23
-    tempnam;
-    tfind; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    tgkill; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    timer_create;
-    timer_delete;
-    timer_getoverrun;
-    timer_gettime;
-    timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-mips=19 introduced-mips64=21 introduced-x86=19 introduced-x86_64=21
-    times;
-    timezone; # var
-    tmpfile;
-    tmpnam;
-    toascii;
-    tolower;
-    tolower_l; # introduced=21
-    toupper;
-    toupper_l; # introduced=21
-    towlower;
-    towlower_l; # introduced=21
-    towupper;
-    towupper_l; # introduced=21
-    truncate;
-    truncate64; # introduced=21
-    tsearch; # introduced-arm=16 introduced-arm64=21 introduced-mips=16 introduced-mips64=21 introduced-x86=16 introduced-x86_64=21
-    ttyname;
-    ttyname_r;
-    twalk; # introduced=21
-    tzname; # var
-    tzset;
-    umask;
-    umount;
-    umount2;
-    uname;
-    ungetc;
-    ungetwc;
-    unlink;
-    unlinkat;
-    unlockpt;
-    unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
-    usleep;
-    utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-mips=12 introduced-mips64=21 introduced-x86=12 introduced-x86_64=21
-    utimes;
-    utmpname;
-    vasprintf;
-    vdprintf; # introduced=21
-    verr;
-    verrx;
-    vfork;
-    vfprintf;
-    vfscanf;
-    vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
-    vprintf;
-    vscanf;
-    vsnprintf;
-    vsprintf;
-    vsscanf;
-    vswprintf;
-    vswscanf; # introduced=21
-    vsyslog;
-    vwarn;
-    vwarnx;
-    vwprintf;
-    vwscanf; # introduced=21
-    wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    waitid;
-    waitpid;
-    warn;
-    warnx;
-    wcpcpy;
-    wcpncpy;
-    wcrtomb;
-    wcscasecmp;
-    wcscasecmp_l; # introduced=23
-    wcscat;
-    wcschr;
-    wcscmp;
-    wcscoll;
-    wcscoll_l; # introduced=21
-    wcscpy;
-    wcscspn;
-    wcsdup;
-    wcsftime;
-    wcslcat;
-    wcslcpy;
-    wcslen;
-    wcsncasecmp;
-    wcsncasecmp_l; # introduced=23
-    wcsncat;
-    wcsncmp;
-    wcsncpy;
-    wcsnlen;
-    wcsnrtombs; # introduced=21
-    wcspbrk;
-    wcsrchr;
-    wcsrtombs;
-    wcsspn;
-    wcsstr;
-    wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
-    wcstok;
-    wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs;
-    wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
-    wcswidth;
-    wcsxfrm;
-    wcsxfrm_l; # introduced=21
-    wctob;
-    wctomb; # introduced=21
-    wctype;
-    wctype_l; # introduced=21
-    wcwidth;
-    wmemchr;
-    wmemcmp;
-    wmemcpy;
-    wmemmove;
-    wmempcpy; # introduced=23
-    wmemset;
-    wprintf;
-    write;
-    writev;
-    wscanf;
-  local:
-    *;
-};
-
-LIBC_N { # introduced-arm64=24 introduced-mips=24 introduced-mips64=24 introduced-x86=24 introduced-x86_64=24
-  global:
-    __fread_chk; # introduced=24
-    __fwrite_chk; # introduced=24
-    __getcwd_chk; # introduced=24
-    __pwrite_chk; # introduced=24
-    __pwrite64_chk; # introduced=24
-    __write_chk; # introduced=24
-    adjtimex; # introduced=24
-    clock_adjtime; # introduced=24
-    fgetpos64; # introduced=24
-    fileno_unlocked; # introduced=24
-    fopen64; # introduced=24
-    freeifaddrs; # introduced=24
-    freopen64; # introduced=24
-    fseeko64; # introduced=24
-    fsetpos64; # introduced=24
-    ftello64; # introduced=24
-    funopen64; # introduced=24
-    getgrgid_r; # introduced=24
-    getgrnam_r; # introduced=24
-    getifaddrs; # introduced=24
-    if_freenameindex; # introduced=24
-    if_nameindex; # introduced=24
-    in6addr_any; # var introduced=24
-    in6addr_loopback; # var introduced=24
-    lockf; # introduced=24
-    lockf64; # introduced=24
-    preadv; # introduced=24
-    preadv64; # introduced=24
-    pthread_barrierattr_destroy; # introduced=24
-    pthread_barrierattr_getpshared; # introduced=24
-    pthread_barrierattr_init; # introduced=24
-    pthread_barrierattr_setpshared; # introduced=24
-    pthread_barrier_destroy; # introduced=24
-    pthread_barrier_init; # introduced=24
-    pthread_barrier_wait; # introduced=24
-    pthread_spin_destroy; # introduced=24
-    pthread_spin_init; # introduced=24
-    pthread_spin_lock; # introduced=24
-    pthread_spin_trylock; # introduced=24
-    pthread_spin_unlock; # introduced=24
-    pwritev; # introduced=24
-    pwritev64; # introduced=24
-    scandirat; # introduced=24
-    scandirat64; # introduced=24
-    strchrnul; # introduced=24
-    tmpfile64; # introduced=24
-} LIBC;
-
-LIBC_O {
-  global:
-    __sendto_chk; # introduced=26
-    __system_property_read_callback; # introduced=26
-    __system_property_wait; # introduced=26
-    catclose; # introduced=26
-    catgets; # introduced=26
-    catopen; # introduced=26
-    ctermid; # introduced=26
-    endgrent; # introduced=26
-    endpwent; # introduced=26
-    futimes; # introduced=26
-    futimesat; # introduced=26
-    getdomainname; # introduced=26
-    getgrent; # introduced=26
-    getpwent; # introduced=26
-    getsubopt; # introduced=26
-    hasmntopt; # introduced=26
-    lutimes; # introduced=26
-    mallopt; # introduced=26
-    mblen; # introduced=26
-    msgctl; # introduced=26
-    msgget; # introduced=26
-    msgrcv; # introduced=26
-    msgsnd; # introduced=26
-    nl_langinfo; # introduced=26
-    nl_langinfo_l; # introduced=26
-    pthread_getname_np; # introduced=26
-    quotactl; # introduced=26
-    semctl; # introduced=26
-    semget; # introduced=26
-    semop; # introduced=26
-    semtimedop; # introduced=26
-    setdomainname; # introduced=26
-    setgrent; # introduced=26
-    setpwent; # introduced=26
-    shmat; # introduced=26
-    shmctl; # introduced=26
-    shmdt; # introduced=26
-    shmget; # introduced=26
-    sighold; # introduced=26
-    sigignore; # introduced=26
-    sigpause; # introduced=26
-    sigrelse; # introduced=26
-    sigset; # introduced=26
-    strtod_l; # introduced=26
-    strtof_l; # introduced=26
-    strtol_l; # introduced=26
-    strtoul_l; # introduced=26
-    sync_file_range; # introduced=26
-    towctrans; # introduced=26
-    towctrans_l; # introduced=26
-    wctrans; # introduced=26
-    wctrans_l; # introduced=26
-} LIBC_N;
-
-LIBC_P { # introduced=P
-  global:
-    __freading;
-    __free_hook;
-    __fseterr;
-    __fwriting;
-    __malloc_hook;
-    __memalign_hook;
-    __realloc_hook;
-    aligned_alloc;
-    endhostent;
-    endnetent;
-    endprotoent;
-    epoll_pwait64;
-    fexecve;
-    fflush_unlocked;
-    fgetc_unlocked;
-    fgets_unlocked;
-    fputc_unlocked;
-    fputs_unlocked;
-    fread_unlocked;
-    fwrite_unlocked;
-    getentropy;
-    getnetent;
-    getprotoent;
-    getrandom;
-    getlogin_r;
-    glob;
-    globfree;
-    hcreate;
-    hcreate_r;
-    hdestroy;
-    hdestroy_r;
-    hsearch;
-    hsearch_r;
-    iconv;
-    iconv_close;
-    iconv_open;
-    posix_spawn;
-    posix_spawnattr_destroy;
-    posix_spawnattr_getflags;
-    posix_spawnattr_getpgroup;
-    posix_spawnattr_getschedparam;
-    posix_spawnattr_getschedpolicy;
-    posix_spawnattr_getsigdefault;
-    posix_spawnattr_getsigdefault64;
-    posix_spawnattr_getsigmask;
-    posix_spawnattr_getsigmask64;
-    posix_spawnattr_init;
-    posix_spawnattr_setflags;
-    posix_spawnattr_setpgroup;
-    posix_spawnattr_setschedparam;
-    posix_spawnattr_setschedpolicy;
-    posix_spawnattr_setsigdefault;
-    posix_spawnattr_setsigdefault64;
-    posix_spawnattr_setsigmask;
-    posix_spawnattr_setsigmask64;
-    posix_spawn_file_actions_addclose;
-    posix_spawn_file_actions_adddup2;
-    posix_spawn_file_actions_addopen;
-    posix_spawn_file_actions_destroy;
-    posix_spawn_file_actions_init;
-    posix_spawnp;
-    ppoll64;
-    pselect64;
-    pthread_attr_getinheritsched;
-    pthread_attr_setinheritsched;
-    pthread_mutex_timedlock_monotonic_np;
-    pthread_mutexattr_getprotocol;
-    pthread_mutexattr_setprotocol;
-    pthread_rwlock_timedrdlock_monotonic_np;
-    pthread_rwlock_timedwrlock_monotonic_np;
-    pthread_setschedprio;
-    pthread_sigmask64;
-    sem_timedwait_monotonic_np;
-    sethostent;
-    setnetent;
-    setprotoent;
-    sigaction64;
-    sigaddset64;
-    sigdelset64;
-    sigemptyset64;
-    sigfillset64;
-    sigismember64;
-    signalfd64;
-    sigpending64;
-    sigprocmask64;
-    sigsuspend64;
-    sigtimedwait64;
-    sigwait64;
-    sigwaitinfo64;
-    strptime_l;
-    swab;
-    syncfs;
-    wcsftime_l;
-    wcstod_l;
-    wcstof_l;
-    wcstol_l;
-    wcstoul_l;
-} LIBC_O;
-
-LIBC_Q { # introduced=Q
-  global:
-    __res_randomid;
-    android_fdsan_close_with_tag;
-    android_fdsan_create_owner_tag;
-    android_fdsan_exchange_owner_tag;
-    android_fdsan_get_owner_tag;
-    android_fdsan_get_tag_type;
-    android_fdsan_get_tag_value;
-    android_fdsan_get_error_level;
-    android_fdsan_set_error_level;
-    android_get_device_api_level;
-    getloadavg;
-    pthread_sigqueue;
-    reallocarray;
-    timespec_get;
-} LIBC_P;
-
-LIBC_PRIVATE {
-  global:
-    android_getaddrinfofornet;
-    android_getaddrinfofornetcontext;
-    android_gethostbyaddrfornet;
-    android_gethostbyaddrfornetcontext;
-    android_gethostbynamefornet;
-    android_gethostbynamefornetcontext;
-    free_malloc_leak_info;
-    get_malloc_leak_info;
-    gMallocLeakZygoteChild;
-    write_malloc_leak_info;
-} LIBC_Q;
-
-LIBC_DEPRECATED {
-  global:
-    __system_property_wait_any;
-};
-
-LIBC_PLATFORM {
-  global:
-    __system_properties_init;
-    __system_property_area__; # var
-    __system_property_add;
-    __system_property_area_init;
-    __system_property_set_filename;
-    __system_property_update;
-    android_fdsan_get_fd_table;
-    android_net_res_stats_get_info_for_net;
-    android_net_res_stats_aggregate;
-    android_net_res_stats_get_usable_servers;
-    malloc_backtrace;
-    malloc_disable;
-    malloc_enable;
-    malloc_iterate;
-} LIBC_Q;
diff --git a/libc/libstdc++.arm.map b/libc/libstdc++.arm.map
deleted file mode 100644
index 8ee5863..0000000
--- a/libc/libstdc++.arm.map
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC_O {
-  global:
-    _ZSt7nothrow; # var
-    _ZdaPv; # weak
-    _ZdaPvRKSt9nothrow_t; # weak
-    _ZdlPv; # weak
-    _ZdlPvRKSt9nothrow_t; # weak
-    _Znaj; # arm x86 mips weak
-    _ZnajRKSt9nothrow_t; # arm x86 mips weak
-    _Znwj; # arm x86 mips weak
-    _ZnwjRKSt9nothrow_t; # arm x86 mips weak
-    __cxa_guard_abort;
-    __cxa_guard_acquire;
-    __cxa_guard_release;
-    __cxa_pure_virtual;
-  local:
-    *;
-};
diff --git a/libc/libstdc++.arm64.map b/libc/libstdc++.arm64.map
deleted file mode 100644
index cd4f3c3..0000000
--- a/libc/libstdc++.arm64.map
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC_O {
-  global:
-    _ZSt7nothrow; # var
-    _ZdaPv; # weak
-    _ZdaPvRKSt9nothrow_t; # weak
-    _ZdlPv; # weak
-    _ZdlPvRKSt9nothrow_t; # weak
-    _Znam; # arm64 x86_64 mips64 weak
-    _ZnamRKSt9nothrow_t; # arm64 x86_64 mips64 weak
-    _Znwm; # arm64 x86_64 mips64 weak
-    _ZnwmRKSt9nothrow_t; # arm64 x86_64 mips64 weak
-    __cxa_guard_abort;
-    __cxa_guard_acquire;
-    __cxa_guard_release;
-    __cxa_pure_virtual;
-  local:
-    *;
-};
diff --git a/libc/libstdc++.mips.map b/libc/libstdc++.mips.map
deleted file mode 100644
index 8ee5863..0000000
--- a/libc/libstdc++.mips.map
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC_O {
-  global:
-    _ZSt7nothrow; # var
-    _ZdaPv; # weak
-    _ZdaPvRKSt9nothrow_t; # weak
-    _ZdlPv; # weak
-    _ZdlPvRKSt9nothrow_t; # weak
-    _Znaj; # arm x86 mips weak
-    _ZnajRKSt9nothrow_t; # arm x86 mips weak
-    _Znwj; # arm x86 mips weak
-    _ZnwjRKSt9nothrow_t; # arm x86 mips weak
-    __cxa_guard_abort;
-    __cxa_guard_acquire;
-    __cxa_guard_release;
-    __cxa_pure_virtual;
-  local:
-    *;
-};
diff --git a/libc/libstdc++.mips64.map b/libc/libstdc++.mips64.map
deleted file mode 100644
index cd4f3c3..0000000
--- a/libc/libstdc++.mips64.map
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC_O {
-  global:
-    _ZSt7nothrow; # var
-    _ZdaPv; # weak
-    _ZdaPvRKSt9nothrow_t; # weak
-    _ZdlPv; # weak
-    _ZdlPvRKSt9nothrow_t; # weak
-    _Znam; # arm64 x86_64 mips64 weak
-    _ZnamRKSt9nothrow_t; # arm64 x86_64 mips64 weak
-    _Znwm; # arm64 x86_64 mips64 weak
-    _ZnwmRKSt9nothrow_t; # arm64 x86_64 mips64 weak
-    __cxa_guard_abort;
-    __cxa_guard_acquire;
-    __cxa_guard_release;
-    __cxa_pure_virtual;
-  local:
-    *;
-};
diff --git a/libc/libstdc++.x86.map b/libc/libstdc++.x86.map
deleted file mode 100644
index 8ee5863..0000000
--- a/libc/libstdc++.x86.map
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC_O {
-  global:
-    _ZSt7nothrow; # var
-    _ZdaPv; # weak
-    _ZdaPvRKSt9nothrow_t; # weak
-    _ZdlPv; # weak
-    _ZdlPvRKSt9nothrow_t; # weak
-    _Znaj; # arm x86 mips weak
-    _ZnajRKSt9nothrow_t; # arm x86 mips weak
-    _Znwj; # arm x86 mips weak
-    _ZnwjRKSt9nothrow_t; # arm x86 mips weak
-    __cxa_guard_abort;
-    __cxa_guard_acquire;
-    __cxa_guard_release;
-    __cxa_pure_virtual;
-  local:
-    *;
-};
diff --git a/libc/libstdc++.x86_64.map b/libc/libstdc++.x86_64.map
deleted file mode 100644
index cd4f3c3..0000000
--- a/libc/libstdc++.x86_64.map
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC_O {
-  global:
-    _ZSt7nothrow; # var
-    _ZdaPv; # weak
-    _ZdaPvRKSt9nothrow_t; # weak
-    _ZdlPv; # weak
-    _ZdlPvRKSt9nothrow_t; # weak
-    _Znam; # arm64 x86_64 mips64 weak
-    _ZnamRKSt9nothrow_t; # arm64 x86_64 mips64 weak
-    _Znwm; # arm64 x86_64 mips64 weak
-    _ZnwmRKSt9nothrow_t; # arm64 x86_64 mips64 weak
-    __cxa_guard_abort;
-    __cxa_guard_acquire;
-    __cxa_guard_release;
-    __cxa_pure_virtual;
-  local:
-    *;
-};
diff --git a/libc/malloc_debug/MapData.cpp b/libc/malloc_debug/MapData.cpp
index 060425e..e8fbc54 100644
--- a/libc/malloc_debug/MapData.cpp
+++ b/libc/malloc_debug/MapData.cpp
@@ -33,6 +33,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/mman.h>
 
 #include <vector>
 
@@ -44,6 +45,7 @@
   uintptr_t start;
   uintptr_t end;
   uintptr_t offset;
+  int flags;
   char permissions[5];
   int name_pos;
   if (sscanf(line, "%" PRIxPTR "-%" PRIxPTR " %4s %" PRIxPTR " %*x:%*x %*d %n", &start, &end,
@@ -57,18 +59,27 @@
     name_len -= 1;
   }
 
-  MapEntry* entry = new MapEntry(start, end, offset, name, name_len);
-  if (permissions[0] != 'r') {
-    // Any unreadable map will just get a zero load base.
-    entry->load_base = 0;
-    entry->load_base_read = true;
+  flags = 0;
+  if (permissions[0] == 'r') {
+    flags |= PROT_READ;
+  }
+  if (permissions[2] == 'x') {
+    flags |= PROT_EXEC;
+  }
+
+  MapEntry* entry = new MapEntry(start, end, offset, name, name_len, flags);
+  if (!(flags & PROT_READ)) {
+    // Any unreadable map will just get a zero load bias.
+    entry->load_bias = 0;
+    entry->init = true;
+    entry->valid = false;
   }
   return entry;
 }
 
 template <typename T>
 static inline bool get_val(MapEntry* entry, uintptr_t addr, T* store) {
-  if (addr < entry->start || addr + sizeof(T) > entry->end) {
+  if (!(entry->flags & PROT_READ) || addr < entry->start || addr + sizeof(T) > entry->end) {
     return false;
   }
   // Make sure the address is aligned properly.
@@ -79,9 +90,18 @@
   return true;
 }
 
-static void read_loadbase(MapEntry* entry) {
-  entry->load_base = 0;
-  entry->load_base_read = true;
+static bool valid_elf(MapEntry* entry) {
+  uintptr_t addr = entry->start;
+  uintptr_t end;
+  if (__builtin_add_overflow(addr, SELFMAG, &end) || end >= entry->end) {
+    return false;
+  }
+
+  return memcmp(reinterpret_cast<void*>(addr), ELFMAG, SELFMAG) == 0;
+}
+
+static void read_loadbias(MapEntry* entry) {
+  entry->load_bias = 0;
   uintptr_t addr = entry->start;
   ElfW(Ehdr) ehdr;
   if (!get_val<ElfW(Half)>(entry, addr + offsetof(ElfW(Ehdr), e_phnum), &ehdr.e_phnum)) {
@@ -103,13 +123,24 @@
       if (!get_val<ElfW(Addr)>(entry, addr + offsetof(ElfW(Phdr), p_vaddr), &phdr.p_vaddr)) {
         return;
       }
-      entry->load_base = phdr.p_vaddr;
+      entry->load_bias = phdr.p_vaddr;
       return;
     }
     addr += sizeof(phdr);
   }
 }
 
+static void inline init(MapEntry* entry) {
+  if (entry->init) {
+    return;
+  }
+  entry->init = true;
+  if (valid_elf(entry)) {
+    entry->valid = true;
+    read_loadbias(entry);
+  }
+}
+
 bool MapData::ReadMaps() {
   FILE* fp = fopen("/proc/self/maps", "re");
   if (fp == nullptr) {
@@ -158,11 +189,25 @@
   }
 
   MapEntry* entry = *it;
-  if (!entry->load_base_read) {
-    read_loadbase(entry);
-  }
-  if (rel_pc) {
-    *rel_pc = pc - entry->start + entry->load_base;
+  init(entry);
+
+  if (rel_pc != nullptr) {
+    // Need to check to see if this is a read-execute map and the read-only
+    // map is the previous one.
+    if (!entry->valid && it != entries_.begin()) {
+      MapEntry* prev_entry = *--it;
+      if (prev_entry->flags == PROT_READ && prev_entry->offset < entry->offset &&
+          prev_entry->name == entry->name) {
+        init(prev_entry);
+
+        if (prev_entry->valid) {
+          entry->elf_start_offset = prev_entry->offset;
+          *rel_pc = pc - entry->start + entry->offset + prev_entry->load_bias;
+          return entry;
+        }
+      }
+    }
+    *rel_pc = pc - entry->start + entry->load_bias;
   }
   return entry;
 }
diff --git a/libc/malloc_debug/MapData.h b/libc/malloc_debug/MapData.h
index b9b697c..5b08b90 100644
--- a/libc/malloc_debug/MapData.h
+++ b/libc/malloc_debug/MapData.h
@@ -37,17 +37,20 @@
 #include <private/bionic_macros.h>
 
 struct MapEntry {
-  MapEntry(uintptr_t start, uintptr_t end, uintptr_t offset, const char* name, size_t name_len)
-      : start(start), end(end), offset(offset), name(name, name_len) {}
+  MapEntry(uintptr_t start, uintptr_t end, uintptr_t offset, const char* name, size_t name_len, int flags)
+      : start(start), end(end), offset(offset), name(name, name_len), flags(flags) {}
 
   explicit MapEntry(uintptr_t pc) : start(pc), end(pc) {}
 
   uintptr_t start;
   uintptr_t end;
   uintptr_t offset;
-  uintptr_t load_base;
-  bool load_base_read = false;
+  uintptr_t load_bias;
+  uintptr_t elf_start_offset = 0;
   std::string name;
+  int flags;
+  bool init = false;
+  bool valid = false;
 };
 
 // Ordering comparator that returns equivalence for overlapping entries
diff --git a/libc/malloc_debug/PointerData.h b/libc/malloc_debug/PointerData.h
index b05a763..6955c9a 100644
--- a/libc/malloc_debug/PointerData.h
+++ b/libc/malloc_debug/PointerData.h
@@ -112,7 +112,7 @@
 
 class PointerData : public OptionData {
  public:
-  PointerData(DebugData* debug_data);
+  explicit PointerData(DebugData* debug_data);
   virtual ~PointerData() = default;
 
   bool Initialize(const Config& config);
diff --git a/libc/malloc_debug/backtrace.cpp b/libc/malloc_debug/backtrace.cpp
index cd8c334..0e3a53f 100644
--- a/libc/malloc_debug/backtrace.cpp
+++ b/libc/malloc_debug/backtrace.cpp
@@ -156,8 +156,8 @@
     }
 
     char offset_buf[128];
-    if (entry != nullptr && entry->offset != 0) {
-      snprintf(offset_buf, sizeof(offset_buf), " (offset 0x%" PRIxPTR ")", entry->offset);
+    if (entry != nullptr && entry->elf_start_offset != 0) {
+      snprintf(offset_buf, sizeof(offset_buf), " (offset 0x%" PRIxPTR ")", entry->elf_start_offset);
     } else {
       offset_buf[0] = '\0';
     }
diff --git a/libc/private/ScopedReaddir.h b/libc/private/ScopedReaddir.h
index dc22309..9a20c09 100644
--- a/libc/private/ScopedReaddir.h
+++ b/libc/private/ScopedReaddir.h
@@ -22,10 +22,10 @@
 
 class ScopedReaddir {
  public:
-  ScopedReaddir(const char* path) : ScopedReaddir(opendir(path)) {
+  explicit ScopedReaddir(const char* path) : ScopedReaddir(opendir(path)) {
   }
 
-  ScopedReaddir(DIR* dir) {
+  explicit ScopedReaddir(DIR* dir) {
     dir_ = dir;
   }
 
diff --git a/libc/private/ScopedSignalHandler.h b/libc/private/ScopedSignalHandler.h
index dd5823f..7031752 100644
--- a/libc/private/ScopedSignalHandler.h
+++ b/libc/private/ScopedSignalHandler.h
@@ -33,7 +33,7 @@
     sigaction64(signal_number_, &action_, &old_action_);
   }
 
-  ScopedSignalHandler(int signal_number) : signal_number_(signal_number) {
+  explicit ScopedSignalHandler(int signal_number) : signal_number_(signal_number) {
     sigaction64(signal_number, nullptr, &old_action_);
   }
 
diff --git a/libc/private/bionic_asm_tls.h b/libc/private/bionic_asm_tls.h
new file mode 100644
index 0000000..06e3dce
--- /dev/null
+++ b/libc/private/bionic_asm_tls.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#pragma once
+
+/** WARNING WARNING WARNING
+ **
+ ** This header file is *NOT* part of the public Bionic ABI/API and should not
+ ** be used/included by user-serviceable parts of the system (e.g.
+ ** applications).
+ **
+ ** It is only provided here for the benefit of Android components that need a
+ ** pre-allocated slot for performance reasons (including ART, the OpenGL
+ ** subsystem, and sanitizers).
+ **/
+
+// Bionic TCB / TLS slots:
+//
+//  - TLS_SLOT_SELF: On x86-{32,64}, the kernel makes TLS memory available via
+//    the gs/fs segments. To get the address of a TLS variable, the first slot
+//    of TLS memory (accessed using %gs:0 / %fs:0) holds the address of the
+//    gs/fs segment. This slot is used by:
+//     - OpenGL and compiler-rt
+//     - Accesses of x86 ELF TLS variables
+//
+//  - TLS_SLOT_OPENGL and TLS_SLOT_OPENGL_API: These two aren't used by bionic
+//    itself, but allow the graphics code to access TLS directly rather than
+//    using the pthread API.
+//
+//  - TLS_SLOT_STACK_GUARD: Used for -fstack-protector by:
+//     - Clang targeting Android/arm64
+//     - gcc targeting Linux/x86-{32,64}
+//
+//  - TLS_SLOT_SANITIZER: Lets sanitizers avoid using pthread_getspecific for
+//    finding the current thread state.
+//
+//  - TLS_SLOT_DTV: Pointer to ELF TLS dynamic thread vector.
+//
+//  - TLS_SLOT_ART_THREAD_SELF: Fast storage for Thread::Current() in ART.
+//
+//  - TLS_SLOT_BIONIC_TLS: Optimizes accesses to bionic_tls by one load versus
+//    finding it using __get_thread().
+
+#if defined(__arm__) || defined(__aarch64__)
+
+// The ARM ELF TLS ABI specifies[1] that the thread pointer points at a 2-word
+// TCB followed by the executable's TLS segment. Both the TCB and the
+// executable's segment are aligned according to the segment, so Bionic requires
+// a minimum segment alignment, which effectively reserves an 8-word TCB. The
+// ARM spec allocates the first TCB word to the DTV.
+//
+// [1] "Addenda to, and Errata in, the ABI for the ARM Architecture". Section 3.
+// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0045e/IHI0045E_ABI_addenda.pdf
+
+#define MIN_TLS_SLOT              -1 // update this value when reserving a slot
+#define TLS_SLOT_BIONIC_TLS       -1
+#define TLS_SLOT_DTV              0
+#define TLS_SLOT_THREAD_ID        1
+// Slot 2 is free (was historically used for TLS_SLOT_ERRNO)
+#define TLS_SLOT_OPENGL           3
+#define TLS_SLOT_OPENGL_API       4
+#define TLS_SLOT_STACK_GUARD      5
+#define TLS_SLOT_SANITIZER        6 // was historically used for dlerror
+#define TLS_SLOT_ART_THREAD_SELF  7
+#define TLS_SLOT_TSAN             8 // should be replaced with TLS_SLOT_SANITIZER
+
+// The maximum slot is fixed by the minimum TLS alignment in Bionic executables.
+// It should be changed to 7 once TLS_SLOT_TSAN is removed.
+#define MAX_TLS_SLOT              8
+
+#elif defined(__i386__) || defined(__x86_64__)
+
+// x86 uses variant 2 ELF TLS layout, which places the executable's TLS segment
+// immediately before the thread pointer. New slots are allocated at positive
+// offsets from the thread pointer.
+
+#define MIN_TLS_SLOT              0
+
+#define TLS_SLOT_SELF             0
+#define TLS_SLOT_THREAD_ID        1
+// Slot 2 is free (was historically used for TLS_SLOT_ERRNO)
+#define TLS_SLOT_OPENGL           3
+#define TLS_SLOT_OPENGL_API       4
+#define TLS_SLOT_STACK_GUARD      5
+#define TLS_SLOT_SANITIZER        6 // was historically used for dlerror
+#define TLS_SLOT_ART_THREAD_SELF  7
+#define TLS_SLOT_TSAN             8 // should be replaced with TLS_SLOT_SANITIZER
+#define TLS_SLOT_DTV              9
+#define TLS_SLOT_BIONIC_TLS       10
+#define MAX_TLS_SLOT              10 // update this value when reserving a slot
+
+#endif
+
+#define BIONIC_TLS_SLOTS (MAX_TLS_SLOT - MIN_TLS_SLOT + 1)
diff --git a/libc/private/bionic_elf_tls.h b/libc/private/bionic_elf_tls.h
new file mode 100644
index 0000000..e847669
--- /dev/null
+++ b/libc/private/bionic_elf_tls.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+struct StaticTlsLayout {
+  constexpr StaticTlsLayout() {}
+
+private:
+  size_t offset_ = 0;
+  size_t alignment_ = 1;
+  bool overflowed_ = false;
+
+  // Offsets to various Bionic TLS structs from the beginning of static TLS.
+  size_t offset_bionic_tcb_ = SIZE_MAX;
+  size_t offset_bionic_tls_ = SIZE_MAX;
+
+public:
+  size_t offset_bionic_tcb() const { return offset_bionic_tcb_; }
+  size_t offset_bionic_tls() const { return offset_bionic_tls_; }
+
+  size_t size() const { return offset_; }
+  size_t alignment() const { return alignment_; }
+  bool overflowed() const { return overflowed_; }
+
+  void reserve_tcb();
+  void reserve_bionic_tls();
+  void finish_layout();
+
+private:
+  size_t reserve(size_t size, size_t alignment);
+
+  template <typename T> size_t reserve_type() {
+    return reserve(sizeof(T), alignof(T));
+  }
+
+  size_t round_up_with_overflow_check(size_t value, size_t alignment);
+};
diff --git a/libc/private/bionic_fdsan.h b/libc/private/bionic_fdsan.h
index de14cf8..f403d08 100644
--- a/libc/private/bionic_fdsan.h
+++ b/libc/private/bionic_fdsan.h
@@ -39,21 +39,23 @@
 #include <sys/user.h>
 
 struct FdEntry {
-  _Atomic(uint64_t) close_tag;
+  _Atomic(uint64_t) close_tag = 0;
 };
 
 struct FdTableOverflow {
-  size_t len;
+  size_t len = 0;
   FdEntry entries[0];
 };
 
 template <size_t inline_fds>
 struct FdTableImpl {
-  uint32_t version;  // currently 0, and hopefully it'll stay that way.
-  _Atomic(android_fdsan_error_level) error_level;
+  constexpr FdTableImpl() {}
+
+  uint32_t version = 0;  // currently 0, and hopefully it'll stay that way.
+  _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
 
   FdEntry entries[inline_fds];
-  _Atomic(FdTableOverflow*) overflow;
+  _Atomic(FdTableOverflow*) overflow = nullptr;
 
   FdEntry* at(size_t idx);
 };
diff --git a/libc/private/bionic_globals.h b/libc/private/bionic_globals.h
index ba510b1..b5e677e 100644
--- a/libc/private/bionic_globals.h
+++ b/libc/private/bionic_globals.h
@@ -33,6 +33,7 @@
 #include <link.h>
 #include <pthread.h>
 
+#include "private/bionic_elf_tls.h"
 #include "private/bionic_fdsan.h"
 #include "private/bionic_malloc_dispatch.h"
 #include "private/bionic_vdso.h"
@@ -50,21 +51,28 @@
 
 // Globals shared between the dynamic linker and libc.so.
 struct libc_shared_globals {
+  // Construct the shared globals using a constexpr constructor to ensure that
+  // the object doesn't need dynamic initialization. The object is accessed
+  // before the dynamic linker has relocated itself.
+  constexpr libc_shared_globals() {}
+
   FdTable fd_table;
 
   // When the linker is invoked on a binary (e.g. `linker64 /system/bin/date`),
   // record the number of arguments passed to the linker itself rather than to
   // the program it's loading. Typically 0, sometimes 1.
-  int initial_linker_arg_count;
+  int initial_linker_arg_count = 0;
 
-  ElfW(auxv_t)* auxv;
+  ElfW(auxv_t)* auxv = nullptr;
 
-  pthread_mutex_t abort_msg_lock;
-  abort_msg_t* abort_msg;
+  pthread_mutex_t abort_msg_lock = PTHREAD_MUTEX_INITIALIZER;
+  abort_msg_t* abort_msg = nullptr;
+
+  StaticTlsLayout static_tls_layout;
 
   // Values passed from the linker to libc.so.
-  const char* init_progname;
-  char** init_environ;
+  const char* init_progname = nullptr;
+  char** init_environ = nullptr;
 };
 
 __LIBC_HIDDEN__ libc_shared_globals* __libc_shared_globals();
diff --git a/libc/private/bionic_lock.h b/libc/private/bionic_lock.h
index eebfeff..410e637 100644
--- a/libc/private/bionic_lock.h
+++ b/libc/private/bionic_lock.h
@@ -78,7 +78,7 @@
 
 class LockGuard {
  public:
-  LockGuard(Lock& lock) : lock_(lock) {
+  explicit LockGuard(Lock& lock) : lock_(lock) {
     lock_.lock();
   }
   ~LockGuard() {
diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h
index 4749cee..90914c3 100644
--- a/libc/private/bionic_tls.h
+++ b/libc/private/bionic_tls.h
@@ -26,8 +26,7 @@
  * SUCH DAMAGE.
  */
 
-#ifndef __BIONIC_PRIVATE_BIONIC_TLS_H_
-#define __BIONIC_PRIVATE_BIONIC_TLS_H_
+#pragma once
 
 #include <locale.h>
 #include <mntent.h>
@@ -35,73 +34,48 @@
 #include <sys/cdefs.h>
 #include <sys/param.h>
 
+#include "bionic_asm_tls.h"
 #include "bionic_macros.h"
 #include "__get_tls.h"
 #include "grp_pwd.h"
 
-__BEGIN_DECLS
-
 /** WARNING WARNING WARNING
  **
- ** This header file is *NOT* part of the public Bionic ABI/API
- ** and should not be used/included by user-serviceable parts of
- ** the system (e.g. applications).
- **
- ** It is only provided here for the benefit of the system dynamic
- ** linker and the OpenGL sub-system (which needs to access the
- ** pre-allocated slot directly for performance reason).
+ ** This header file is *NOT* part of the public Bionic ABI/API and should not
+ ** be used/included by user-serviceable parts of the system (e.g.
+ ** applications).
  **/
 
-// Well-known TLS slots. What data goes in which slot is arbitrary unless otherwise noted.
-enum {
-  TLS_SLOT_SELF = 0, // The kernel requires this specific slot for x86.
-  TLS_SLOT_THREAD_ID,
+class pthread_internal_t;
 
-  // TLS slot 2 was used for errno but is now free.
+// This struct is small, so the linker can allocate a temporary copy on its
+// stack. It can't be combined with pthread_internal_t because:
+//  - native bridge requires pthread_internal_t to have the same layout across
+//    architectures, and
+//  - On x86, this struct would have to be placed at the front of
+//    pthread_internal_t, moving fields like `tid`.
+//  - We'd like to avoid having a temporary pthread_internal_t object that
+//    needs to be transferred once the final size of static TLS is known.
+struct bionic_tcb {
+  void* raw_slots_storage[BIONIC_TLS_SLOTS];
 
-  // These two aren't used by bionic itself, but allow the graphics code to
-  // access TLS directly rather than using the pthread API.
-  TLS_SLOT_OPENGL_API = 3,
-  TLS_SLOT_OPENGL = 4,
+  // Return a reference to a slot given its TP-relative TLS_SLOT_xxx index.
+  // The thread pointer (i.e. __get_tls()) points at &tls_slot(0).
+  void*& tls_slot(size_t tpindex) {
+    return raw_slots_storage[tpindex - MIN_TLS_SLOT];
+  }
 
-  TLS_SLOT_STACK_GUARD = 5, // GCC requires this specific slot for x86.
+  // Initialize the main thread's final object using its bootstrap object.
+  void copy_from_bootstrap(const bionic_tcb* boot) {
+    // Copy everything. Problematic slots will be reinitialized.
+    *this = *boot;
+  }
 
-  // Lets sanitizers avoid using pthread_getspecific for finding the current
-  // thread state. (Slot 6 was historically used for dlerror instead.)
-  TLS_SLOT_SANITIZER = 6,
-
-  // Fast storage for Thread::Current() in ART.
-  TLS_SLOT_ART_THREAD_SELF = 7,
-
-  // Lets TSAN avoid using pthread_getspecific for finding the current thread
-  // state.
-  TLS_SLOT_TSAN = 8,
-
-  BIONIC_TLS_SLOTS // Must come last!
+  pthread_internal_t* thread() {
+    return static_cast<pthread_internal_t*>(tls_slot(TLS_SLOT_THREAD_ID));
+  }
 };
 
-// ~3 pages.
-struct bionic_tls {
-  locale_t locale;
-
-  char basename_buf[MAXPATHLEN];
-  char dirname_buf[MAXPATHLEN];
-
-  mntent mntent_buf;
-  char mntent_strings[BUFSIZ];
-
-  char ptsname_buf[32];
-  char ttyname_buf[64];
-
-  char strerror_buf[NL_TEXTMAX];
-  char strsignal_buf[NL_TEXTMAX];
-
-  group_state_t group;
-  passwd_state_t passwd;
-};
-
-#define BIONIC_TLS_SIZE (__BIONIC_ALIGN(sizeof(bionic_tls), PAGE_SIZE))
-
 /*
  * Bionic uses some pthread keys internally. All pthread keys used internally
  * should be created in constructors, except for keys that may be used in or
@@ -126,12 +100,42 @@
  */
 #define BIONIC_PTHREAD_KEY_COUNT (BIONIC_PTHREAD_KEY_RESERVED_COUNT + PTHREAD_KEYS_MAX)
 
-__END_DECLS
+class pthread_key_data_t {
+ public:
+  uintptr_t seq; // Use uintptr_t just for alignment, as we use pointer below.
+  void* data;
+};
 
-#if defined(__cplusplus)
+// ~3 pages. This struct is allocated as static TLS memory (i.e. at a fixed
+// offset from the thread pointer).
+struct bionic_tls {
+  pthread_key_data_t key_data[BIONIC_PTHREAD_KEY_COUNT];
+
+  locale_t locale;
+
+  char basename_buf[MAXPATHLEN];
+  char dirname_buf[MAXPATHLEN];
+
+  mntent mntent_buf;
+  char mntent_strings[BUFSIZ];
+
+  char ptsname_buf[32];
+  char ttyname_buf[64];
+
+  char strerror_buf[NL_TEXTMAX];
+  char strsignal_buf[NL_TEXTMAX];
+
+  group_state_t group;
+  passwd_state_t passwd;
+
+  // Initialize the main thread's final object using its bootstrap object.
+  void copy_from_bootstrap(const bionic_tls* boot __attribute__((unused))) {
+    // Nothing in bionic_tls needs to be preserved in the transition to the
+    // final TLS objects, so don't copy anything.
+  }
+};
+
 class KernelArgumentBlock;
-extern void __libc_init_main_thread_early(KernelArgumentBlock& args);
-extern void __libc_init_main_thread_late();
-#endif
-
-#endif /* __BIONIC_PRIVATE_BIONIC_TLS_H_ */
+extern "C" void __libc_init_main_thread_early(const KernelArgumentBlock& args, bionic_tcb* temp_tcb);
+extern "C" void __libc_init_main_thread_late();
+extern "C" void __libc_init_main_thread_final();
diff --git a/libc/private/linker_native_bridge.h b/libc/private/linker_native_bridge.h
new file mode 100644
index 0000000..bfd0153
--- /dev/null
+++ b/libc/private/linker_native_bridge.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+extern "C" void __linker_reserve_bionic_tls_in_static_tls();
diff --git a/libc/symbol_ordering b/libc/symbol_ordering
new file mode 100644
index 0000000..5b365f0
--- /dev/null
+++ b/libc/symbol_ordering
@@ -0,0 +1,210 @@
+# This file is generated by sorting symbols in the .bss section in libc.so by
+# their sizes and taking out symbols that are unique to a target.  By sorting
+# symbols by size, we usually have less dirty pages at runtime, because small
+# symbols are grouped together.
+
+je_background_thread_enabled_state
+je_can_enable_background_thread
+_ZZ17__find_icu_symbolPKcE9found_icu
+_ZL28g_heapprofd_init_in_progress
+_ZL31g_heapprofd_init_hook_installed
+je_opt_abort
+je_opt_abort_conf
+je_opt_junk_alloc
+je_opt_junk_free
+je_opt_utrace
+je_opt_xmalloc
+je_opt_zero
+malloc_disabled_tcache
+had_conf_error
+malloc_slow_flags
+je_opt_background_thread
+background_thread_enabled_at_fork
+ctl_initialized
+je_log_init_done
+mmap_flags
+os_overcommits
+je_opt_stats_print
+je_tsd_booted
+global_hashtable_initialized
+gmtcheck.gmt_is_set
+restartloop
+_ZZ12bindresvportE4port
+ru_counter
+ru_a
+ru_x
+ru_b
+ru_seed
+ru_g
+ru_seed2
+ru_msb
+je_narenas_auto
+je_ncpus
+je_init_system_thp_mode
+je_nhbins
+je_tsd_tsd
+optreset
+_rs_forked
+daylight
+_ZL17g_icudata_version
+gMallocLeakZygoteChild
+_ZL18netdClientInitOnce
+je_opt_narenas
+narenas_total
+je_malloc_disable.once_control
+je_opt_metadata_thp
+je_opt_thp
+stack_nelms
+tcaches_past
+ncleanups
+error_message_count
+error_one_per_line
+_ZZ13error_at_lineE9last_line
+_ZL13g_locale_once
+_ZL30g_propservice_protocol_version
+_res_cache_once
+_res_key
+_rs_forkdetect._rs_pid
+ru_pid
+lcl_is_set
+__cxa_finalize.call_depth
+seed48.sseed
+ether_aton.addr
+je_background_thread_info
+je_max_background_threads
+je_n_background_threads
+je_malloc_message
+je_tcache_bin_info
+je_tcache_maxclass
+je_tcaches
+optarg
+suboptarg
+timezone
+_ZGVZ17__find_icu_symbolPKcE9found_icu
+_ZL17g_libicuuc_handle
+__malloc_hook
+__realloc_hook
+__free_hook
+__memalign_hook
+_ZL21g_heapprofd_init_func
+je_malloc_conf
+malloc_initializer
+a0
+je_opt_dirty_decay_ms
+je_opt_muzzy_decay_ms
+dirty_decay_ms_default.0
+muzzy_decay_ms_default.0
+pthread_create_fptr
+b0
+ctl_arenas
+ctl_stats
+je_hooks_arena_new_hook
+os_page
+tcaches_avail
+_ZN9prop_area8pa_size_E
+_ZN9prop_area13pa_data_size_E
+_ZL6g_lock
+_ZL6g_tags
+_ZZ8c16rtombE15__private_state
+_ZZ8c32rtombE15__private_state
+environ
+error_print_progname
+_ZZ13error_at_lineE9last_file
+_ZZ14__icu_charTypejE10u_charType
+_ZGVZ14__icu_charTypejE10u_charType
+_ZZ25__icu_getIntPropertyValuej9UPropertyE21u_getIntPropertyValue
+_ZGVZ25__icu_getIntPropertyValuej9UPropertyE21u_getIntPropertyValue
+_ZZ23__icu_hasBinaryPropertyj9UPropertyPFiiEE19u_hasBinaryProperty
+_ZGVZ23__icu_hasBinaryPropertyj9UPropertyPFiiEE19u_hasBinaryProperty
+__progname
+_ZZ8mbrtoc16E15__private_state
+_ZZ8mbrtoc32E15__private_state
+_ZL14syslog_log_tag
+__system_property_area__
+_ZZ7mbrtowcE15__private_state
+_ZZ10mbsnrtowcsE15__private_state
+_ZZ7wcrtombE15__private_state
+_ZZ10wcsnrtombsE15__private_state
+_ZZ8iswcntrlE10u_charType
+_ZGVZ8iswcntrlE10u_charType
+_ZZ8iswdigitE9u_isdigit
+_ZGVZ8iswdigitE9u_isdigit
+_ZZ8iswpunctE9u_ispunct
+_ZGVZ8iswpunctE9u_ispunct
+_ZZ8towlowerE9u_tolower
+_ZGVZ8towlowerE9u_tolower
+_ZZ8towupperE9u_toupper
+_ZGVZ8towupperE9u_toupper
+global_hashtable
+handlers
+p5s
+ut
+rs
+rsx
+mbrlen.mbs
+mbtowc.mbs
+wctomb.mbs
+ru_reseed
+ru_prf
+tmpnam.tmpcount
+lastenv
+strtok.last
+__stack_chk_guard
+lclptr
+gmtptr
+_ZGVZ14tzset_unlockedE20persist_sys_timezone
+_ZL13g_thread_list
+__atexit
+je_opt_stats_print_opts
+nuls
+precsize_ntoa.retbuf
+__p_secstodate.output
+_ZL13g_atfork_list
+inet_ntoa.b
+ether_ntoa.buf
+__sym_ntos.unname
+__sym_ntop.unname
+__p_type.typebuf
+__p_class.classbuf
+malloc_disabled_lock
+_ZL11g_arc4_lock
+_res_cache_list_lock
+__p_option.nbuf
+__p_time.nbuf
+atexit_mutex
+random_mutex
+__res_randomid.__libc_mutex_random
+locallock
+g_atexit_lock
+_ZL11g_functions
+_ZL13vendor_passwd
+_ZL12vendor_group
+tm
+_ZL18g_thread_list_lock
+buf_asctime
+__dtoa_locks
+freelist
+__loc_ntoa.tmpbuf
+_ZL8g_locale
+je_arenas_lock
+je_background_thread_lock
+init_lock
+ctl_mtx
+tcaches_mtx
+je_tsd_init_head
+_ZZ14tzset_unlockedE20persist_sys_timezone
+arena_binind_div_info
+__hexdig_D2A
+lcl_TZname
+utmp
+inet_nsap_ntoa_tmpbuf
+_ZL17system_properties
+_ZL7key_map
+private_mem
+__libc_globals
+tmpnam.buf
+_res_cache_list
+_nres
+je_extent_mutex_pool
+je_arenas
+je_extents_rtree
diff --git a/libc/tools/genversion-scripts.py b/libc/tools/genversion-scripts.py
deleted file mode 100755
index 5410580..0000000
--- a/libc/tools/genversion-scripts.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-
-# This tool is used to generate the version scripts for libc and libm
-# for every architecture.
-
-import atexit
-import os.path
-import shutil
-import tempfile
-import sys
-
-
-all_arches = ["arm", "arm64", "mips", "mips64", "x86", "x86_64"]
-bionic_libc_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libc")
-bionic_libm_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libm")
-bionic_libdl_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libdl")
-libc_script = os.path.join(bionic_libc_root, "libc.map.txt")
-libm_script = os.path.join(bionic_libm_root, "libm.map.txt")
-libdl_script = os.path.join(bionic_libdl_root, "libdl.map.txt")
-libstdcxx_script = os.path.join(bionic_libc_root, "libstdc++.map.txt")
-
-script_name = os.path.basename(sys.argv[0])
-
-# TODO (dimity): generate architecture-specific version scripts as part of build
-
-# temp directory where we store all intermediate files
-bionic_temp = tempfile.mkdtemp(prefix="bionic_genversionscripts")
-# Make sure the directory is deleted when the script exits.
-atexit.register(shutil.rmtree, bionic_temp)
-
-bionic_libc_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libc")
-
-warning = "Generated by %s. Do not edit." % script_name
-
-
-def has_arch_tags(tags):
-  for arch in all_arches:
-    if arch in tags:
-      return True
-  return False
-
-
-class VersionScriptGenerator(object):
-
-  def run(self):
-    for script in [libc_script, libstdcxx_script, libm_script, libdl_script]:
-      basename = os.path.basename(script)
-      dirname = os.path.dirname(script)
-      for arch in all_arches:
-        name = basename.split(".")[0] + "." + arch + ".map"
-        tmp_path = os.path.join(bionic_temp, name)
-        dest_path = os.path.join(dirname, name)
-        with open(tmp_path, "w") as fout:
-          with open(script, "r") as fin:
-            fout.write("# %s\n" % warning)
-            for line in fin:
-              index = line.find("#")
-              if index != -1:
-                tags = line[index+1:].split()
-                if arch not in tags and has_arch_tags(tags):
-                  continue
-              fout.write(line)
-        shutil.copyfile(tmp_path, dest_path)
-
-
-generator = VersionScriptGenerator()
-generator.run()
diff --git a/libc/tzcode/bionic.cpp b/libc/tzcode/bionic.cpp
index cb9c359..9051308 100644
--- a/libc/tzcode/bionic.cpp
+++ b/libc/tzcode/bionic.cpp
@@ -228,13 +228,18 @@
   if (fd >= 0) return fd;
 #else
   // On the host, we don't expect those locations to exist, and we're not
-  // worried about security so we trust $ANDROID_DATA and $ANDROID_ROOT to
-  // point us in the right direction.
+  // worried about security so we trust $ANDROID_DATA, $ANDROID_RUNTIME_ROOT
+  // and $ANDROID_ROOT to point us in the right direction.
   char* path = make_path("ANDROID_DATA", "/misc/zoneinfo/current/tzdata");
   fd = __bionic_open_tzdata_path(path, olson_id, entry_length);
   free(path);
   if (fd >= 0) return fd;
 
+  path = make_path("ANDROID_RUNTIME_ROOT", "/etc/tz/tzdata");
+  fd = __bionic_open_tzdata_path(path, olson_id, entry_length);
+  free(path);
+  if (fd >= 0) return fd;
+
   path = make_path("ANDROID_ROOT", "/usr/share/zoneinfo/tzdata");
   fd = __bionic_open_tzdata_path(path, olson_id, entry_length);
   free(path);
diff --git a/libdl/Android.bp b/libdl/Android.bp
index 656d3ab..262da6c 100644
--- a/libdl/Android.bp
+++ b/libdl/Android.bp
@@ -56,18 +56,12 @@
     // for x86, exclude libgcc_eh.a for the same reasons as above
     arch: {
         arm: {
-            version_script: "libdl.arm.map",
+            version_script: ":libdl.arm.map",
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
         },
         arm64: {
-            version_script: "libdl.arm64.map",
-        },
-        mips: {
-            version_script: "libdl.mips.map",
-        },
-        mips64: {
-            version_script: "libdl.mips64.map",
+            version_script: ":libdl.arm64.map",
         },
         x86: {
             pack_relocations: false,
@@ -75,11 +69,11 @@
                 "-Wl,--exclude-libs=libgcc_eh.a",
                 "-Wl,--hash-style=both",
             ],
-            version_script: "libdl.x86.map",
+            version_script: ":libdl.x86.map",
         },
         x86_64: {
             ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
-            version_script: "libdl.x86_64.map",
+            version_script: ":libdl.x86_64.map",
         },
     },
     shared: {
@@ -106,6 +100,11 @@
     sanitize: {
         never: true,
     },
+
+    stubs: {
+        symbol_file: "libdl.map.txt",
+        versions: ["10000"],
+    },
 }
 
 ndk_library {
@@ -118,3 +117,35 @@
     name: "libdl",
     symbol_file: "libdl.map.txt",
 }
+
+genrule {
+    name: "libdl.arm.map",
+    out: ["libdl.arm.map"],
+    srcs: ["libdl.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm $(in) $(out)",
+}
+
+genrule {
+    name: "libdl.arm64.map",
+    out: ["libdl.arm64.map"],
+    srcs: ["libdl.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm64 $(in) $(out)",
+}
+
+genrule {
+    name: "libdl.x86.map",
+    out: ["libdl.x86.map"],
+    srcs: ["libdl.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86 $(in) $(out)",
+}
+
+genrule {
+    name: "libdl.x86_64.map",
+    out: ["libdl.x86_64.map"],
+    srcs: ["libdl.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86_64 $(in) $(out)",
+}
diff --git a/libdl/libdl.arm.map b/libdl/libdl.arm.map
deleted file mode 100644
index 28f0601..0000000
--- a/libdl/libdl.arm.map
+++ /dev/null
@@ -1,56 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LIBC {
-  global:
-    android_dlopen_ext; # introduced=21
-    dl_iterate_phdr; # introduced-arm=21
-    dl_unwind_find_exidx; # arm
-    dladdr;
-    dlclose;
-    dlerror;
-    dlopen;
-    dlsym;
-  local:
-    *;
-};
-
-LIBC_N {
-  global:
-    android_get_application_target_sdk_version; # introduced=24 versioned=29
-    dlvsym; # introduced=24
-} LIBC;
-
-LIBC_OMR1 { # introduced=27
-  global:
-    __cfi_shadow_size;
-    __cfi_slowpath;
-    __cfi_slowpath_diag;
-} LIBC_N;
-
-LIBC_PLATFORM {
-  global:
-    __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
-    android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
diff --git a/libdl/libdl.arm64.map b/libdl/libdl.arm64.map
deleted file mode 100644
index a03e9e1..0000000
--- a/libdl/libdl.arm64.map
+++ /dev/null
@@ -1,55 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LIBC {
-  global:
-    android_dlopen_ext; # introduced=21
-    dl_iterate_phdr; # introduced-arm=21
-    dladdr;
-    dlclose;
-    dlerror;
-    dlopen;
-    dlsym;
-  local:
-    *;
-};
-
-LIBC_N {
-  global:
-    android_get_application_target_sdk_version; # introduced=24 versioned=29
-    dlvsym; # introduced=24
-} LIBC;
-
-LIBC_OMR1 { # introduced=27
-  global:
-    __cfi_shadow_size;
-    __cfi_slowpath;
-    __cfi_slowpath_diag;
-} LIBC_N;
-
-LIBC_PLATFORM {
-  global:
-    __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
-    android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
diff --git a/libdl/libdl.map.txt b/libdl/libdl.map.txt
index c5d1be4..1514827 100644
--- a/libdl/libdl.map.txt
+++ b/libdl/libdl.map.txt
@@ -41,15 +41,19 @@
     __cfi_slowpath_diag;
 } LIBC_N;
 
+LIBC_Q { # introduced=29
+  global:
+    android_create_namespace; # apex
+    android_dlwarning; # apex
+    android_get_LD_LIBRARY_PATH; # apex
+    android_get_exported_namespace; # apex
+    android_init_anonymous_namespace; # apex
+    android_link_namespaces; # apex
+    android_set_application_target_sdk_version; # apex
+} LIBC_OMR1;
+
 LIBC_PLATFORM {
   global:
     __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
     android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
+} LIBC_Q;
diff --git a/libdl/libdl.mips.map b/libdl/libdl.mips.map
deleted file mode 100644
index a03e9e1..0000000
--- a/libdl/libdl.mips.map
+++ /dev/null
@@ -1,55 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LIBC {
-  global:
-    android_dlopen_ext; # introduced=21
-    dl_iterate_phdr; # introduced-arm=21
-    dladdr;
-    dlclose;
-    dlerror;
-    dlopen;
-    dlsym;
-  local:
-    *;
-};
-
-LIBC_N {
-  global:
-    android_get_application_target_sdk_version; # introduced=24 versioned=29
-    dlvsym; # introduced=24
-} LIBC;
-
-LIBC_OMR1 { # introduced=27
-  global:
-    __cfi_shadow_size;
-    __cfi_slowpath;
-    __cfi_slowpath_diag;
-} LIBC_N;
-
-LIBC_PLATFORM {
-  global:
-    __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
-    android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
diff --git a/libdl/libdl.mips64.map b/libdl/libdl.mips64.map
deleted file mode 100644
index a03e9e1..0000000
--- a/libdl/libdl.mips64.map
+++ /dev/null
@@ -1,55 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LIBC {
-  global:
-    android_dlopen_ext; # introduced=21
-    dl_iterate_phdr; # introduced-arm=21
-    dladdr;
-    dlclose;
-    dlerror;
-    dlopen;
-    dlsym;
-  local:
-    *;
-};
-
-LIBC_N {
-  global:
-    android_get_application_target_sdk_version; # introduced=24 versioned=29
-    dlvsym; # introduced=24
-} LIBC;
-
-LIBC_OMR1 { # introduced=27
-  global:
-    __cfi_shadow_size;
-    __cfi_slowpath;
-    __cfi_slowpath_diag;
-} LIBC_N;
-
-LIBC_PLATFORM {
-  global:
-    __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
-    android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
diff --git a/libdl/libdl.x86.map b/libdl/libdl.x86.map
deleted file mode 100644
index a03e9e1..0000000
--- a/libdl/libdl.x86.map
+++ /dev/null
@@ -1,55 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LIBC {
-  global:
-    android_dlopen_ext; # introduced=21
-    dl_iterate_phdr; # introduced-arm=21
-    dladdr;
-    dlclose;
-    dlerror;
-    dlopen;
-    dlsym;
-  local:
-    *;
-};
-
-LIBC_N {
-  global:
-    android_get_application_target_sdk_version; # introduced=24 versioned=29
-    dlvsym; # introduced=24
-} LIBC;
-
-LIBC_OMR1 { # introduced=27
-  global:
-    __cfi_shadow_size;
-    __cfi_slowpath;
-    __cfi_slowpath_diag;
-} LIBC_N;
-
-LIBC_PLATFORM {
-  global:
-    __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
-    android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
diff --git a/libdl/libdl.x86_64.map b/libdl/libdl.x86_64.map
deleted file mode 100644
index a03e9e1..0000000
--- a/libdl/libdl.x86_64.map
+++ /dev/null
@@ -1,55 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-#
-# Copyright (C) 2015 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-LIBC {
-  global:
-    android_dlopen_ext; # introduced=21
-    dl_iterate_phdr; # introduced-arm=21
-    dladdr;
-    dlclose;
-    dlerror;
-    dlopen;
-    dlsym;
-  local:
-    *;
-};
-
-LIBC_N {
-  global:
-    android_get_application_target_sdk_version; # introduced=24 versioned=29
-    dlvsym; # introduced=24
-} LIBC;
-
-LIBC_OMR1 { # introduced=27
-  global:
-    __cfi_shadow_size;
-    __cfi_slowpath;
-    __cfi_slowpath_diag;
-} LIBC_N;
-
-LIBC_PLATFORM {
-  global:
-    __cfi_init;
-    android_dlwarning;
-    android_set_application_target_sdk_version;
-    android_get_LD_LIBRARY_PATH;
-    android_update_LD_LIBRARY_PATH;
-    android_init_anonymous_namespace;
-    android_create_namespace;
-    android_link_namespaces;
-    android_get_exported_namespace;
-} LIBC_OMR1;
diff --git a/libm/Android.bp b/libm/Android.bp
index e4ba20d..28cf1fd 100644
--- a/libm/Android.bp
+++ b/libm/Android.bp
@@ -285,7 +285,7 @@
             instruction_set: "arm",
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
-            version_script: "libm.arm.map",
+            version_script: ":libm.arm.map",
         },
 
         arm64: {
@@ -318,17 +318,7 @@
                 "upstream-freebsd/lib/msun/src/s_trunc.c",
                 "upstream-freebsd/lib/msun/src/s_truncf.c",
             ],
-            version_script: "libm.arm64.map",
-        },
-
-        mips: {
-            srcs: ["mips/fenv.c"],
-            version_script: "libm.mips.map",
-        },
-
-        mips64: {
-            srcs: ["mips/fenv.c"],
-            version_script: "libm.mips64.map",
+            version_script: ":libm.arm64.map",
         },
 
         x86: {
@@ -403,7 +393,7 @@
             local_include_dirs: ["i387"],
             pack_relocations: false,
             ldflags: ["-Wl,--hash-style=both"],
-            version_script: "libm.x86.map",
+            version_script: ":libm.x86.map",
         },
 
         x86_64: {
@@ -474,7 +464,7 @@
                     "upstream-freebsd/lib/msun/src/s_truncf.c",
                 ],
             },
-            version_script: "libm.x86_64.map",
+            version_script: ":libm.x86_64.map",
         },
     },
 
@@ -504,6 +494,9 @@
         "-Wl,--Bsymbolic-functions",
     ],
 
+    // b/120614316, non-critical readibility check
+    tidy_checks: ["-cert-dcl16-c"],
+
     include_dirs: ["bionic/libc"],
     system_shared_libs: ["libc"],
 
@@ -517,6 +510,11 @@
 
     // TODO(ivanlozano): Remove after b/118321713
     xom: false,
+
+    stubs: {
+        symbol_file: "libm.map.txt",
+        versions: ["10000"],
+    },
 }
 
 ndk_library {
@@ -529,3 +527,35 @@
     name: "libm",
     symbol_file: "libm.map.txt",
 }
+
+genrule {
+    name: "libm.arm.map",
+    out: ["libm.arm.map"],
+    srcs: ["libm.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm $(in) $(out)",
+}
+
+genrule {
+    name: "libm.arm64.map",
+    out: ["libm.arm64.map"],
+    srcs: ["libm.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) arm64 $(in) $(out)",
+}
+
+genrule {
+    name: "libm.x86.map",
+    out: ["libm.x86.map"],
+    srcs: ["libm.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86 $(in) $(out)",
+}
+
+genrule {
+    name: "libm.x86_64.map",
+    out: ["libm.x86_64.map"],
+    srcs: ["libm.map.txt"],
+    tool_files: [":bionic-generate-version-script"],
+    cmd: "$(location :bionic-generate-version-script) x86_64 $(in) $(out)",
+}
diff --git a/libm/libm.arm.map b/libm/libm.arm.map
deleted file mode 100644
index bee08d4..0000000
--- a/libm/libm.arm.map
+++ /dev/null
@@ -1,401 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __fe_dfl_env; # var
-    __signbit;
-    __signbitf;
-    __signbitl;
-    acos;
-    acosf;
-    acosh;
-    acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
-    asin;
-    asinf;
-    asinh;
-    asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
-    atan;
-    atan2;
-    atan2f;
-    atan2l; # introduced=21
-    atanf;
-    atanh;
-    atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
-    cabs; # introduced=23
-    cabsf; # introduced=23
-    cabsl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    cacos; # introduced=23
-    cacosf; # introduced=23
-    cacosh; # introduced=23
-    cacoshf; # introduced=23
-    carg; # introduced=23
-    cargf; # introduced=23
-    cargl; # introduced=23
-    casin; # introduced=23
-    casinf; # introduced=23
-    casinh; # introduced=23
-    casinhf; # introduced=23
-    catan; # introduced=23
-    catanf; # introduced=23
-    catanh; # introduced=23
-    catanhf; # introduced=23
-    cbrt;
-    cbrtf;
-    cbrtl; # introduced=21
-    ccos; # introduced=23
-    ccosf; # introduced=23
-    ccosh; # introduced=23
-    ccoshf; # introduced=23
-    ceil;
-    ceilf;
-    ceill;
-    cexp; # introduced=23
-    cexpf; # introduced=23
-    cimag; # introduced=23
-    cimagf; # introduced=23
-    cimagl; # introduced=23
-    conj; # introduced=23
-    conjf; # introduced=23
-    conjl; # introduced=23
-    copysign;
-    copysignf;
-    copysignl;
-    cos;
-    cosf;
-    cosh;
-    coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
-    cproj; # introduced=23
-    cprojf; # introduced=23
-    cprojl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    creal; # introduced=23
-    crealf; # introduced=23
-    creall; # introduced=23
-    csin; # introduced=23
-    csinf; # introduced=23
-    csinh; # introduced=23
-    csinhf; # introduced=23
-    csqrt; # introduced=23
-    csqrtf; # introduced=23
-    csqrtl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    ctan; # introduced=23
-    ctanf; # introduced=23
-    ctanh; # introduced=23
-    ctanhf; # introduced=23
-    drem;
-    dremf;
-    erf;
-    erfc;
-    erfcf;
-    erfcl; # introduced=21
-    erff;
-    erfl; # introduced=21
-    exp;
-    exp2;
-    exp2f;
-    exp2l; # introduced=21
-    expf;
-    expl; # introduced=21
-    expm1;
-    expm1f;
-    expm1l; # introduced=21
-    fabs;
-    fabsf;
-    fabsl;
-    fdim;
-    fdimf;
-    fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    finite;
-    finitef;
-    floor;
-    floorf;
-    floorl;
-    fma;
-    fmaf;
-    fmal; # introduced=21
-    fmax;
-    fmaxf;
-    fmaxl;
-    fmin;
-    fminf;
-    fminl;
-    fmod;
-    fmodf;
-    fmodl; # introduced=21
-    frexp;
-    frexpf;
-    frexpl; # introduced=21
-    gamma;
-    gamma_r;
-    gammaf;
-    gammaf_r;
-    hypot;
-    hypotf;
-    hypotl; # introduced=21
-    ilogb;
-    ilogbf;
-    ilogbl;
-    j0;
-    j0f;
-    j1;
-    j1f;
-    jn;
-    jnf;
-    ldexpf;
-    ldexpl;
-    lgamma;
-    lgamma_r;
-    lgammaf;
-    lgammaf_r;
-    lgammal; # introduced=21
-    lgammal_r; # introduced=23
-    llrint;
-    llrintf;
-    llrintl; # introduced=21
-    llround;
-    llroundf;
-    llroundl;
-    log;
-    log10;
-    log10f;
-    log10l; # introduced=21
-    log1p;
-    log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logb;
-    logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logf;
-    logl; # introduced=21
-    lrint;
-    lrintf;
-    lrintl; # introduced=21
-    lround;
-    lroundf;
-    lroundl;
-    modf;
-    modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
-    nearbyint;
-    nearbyintf;
-    nearbyintl; # introduced=21
-    nextafter;
-    nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    pow;
-    powf;
-    powl; # introduced=21
-    remainder;
-    remainderf;
-    remainderl; # introduced=21
-    remquo;
-    remquof;
-    remquol; # introduced=21
-    rint;
-    rintf;
-    rintl; # introduced=21
-    round;
-    roundf;
-    roundl;
-    scalb;
-    scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalbn;
-    scalbnf;
-    scalbnl;
-    signgam; # var
-    significand;
-    significandf;
-    significandl; # introduced=21
-    sin;
-    sincos;
-    sincosf;
-    sincosl;
-    sinf;
-    sinh;
-    sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
-    sqrt;
-    sqrtf;
-    sqrtl; # introduced=21
-    tan;
-    tanf;
-    tanh;
-    tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
-    tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
-    trunc;
-    truncf;
-    truncl;
-    y0;
-    y0f;
-    y1;
-    y1f;
-    yn;
-    ynf;
-  local:
-    *;
-};
-
-LIBC_O { # introduced=O
-  global:
-    cacoshl;
-    cacosl;
-    casinhl;
-    casinl;
-    catanhl;
-    catanl;
-    ccoshl;
-    ccosl;
-    cexpl;
-    clog;
-    clogf;
-    clogl;
-    cpow;
-    cpowf;
-    cpowl;
-    csinhl;
-    csinl;
-    ctanhl;
-    ctanl;
-} LIBC;
-
-LIBC_DEPRECATED { # arm mips platform-only
-  global: # arm mips
-    ___Unwind_Backtrace; # arm
-    ___Unwind_ForcedUnwind; # arm
-    ___Unwind_RaiseException; # arm
-    ___Unwind_Resume; # arm
-    ___Unwind_Resume_or_Rethrow; # arm
-    __adddf3; # arm
-    __aeabi_cdcmpeq; # arm
-    __aeabi_cdcmple; # arm
-    __aeabi_cdrcmple; # arm
-    __aeabi_cfcmpeq; # arm
-    __aeabi_cfcmple; # arm
-    __aeabi_cfrcmple; # arm
-    __aeabi_d2lz; # arm
-    __aeabi_d2uiz; # arm
-    __aeabi_d2ulz; # arm
-    __aeabi_dadd; # arm
-    __aeabi_dcmpeq; # arm
-    __aeabi_dcmpge; # arm
-    __aeabi_dcmpgt; # arm
-    __aeabi_dcmple; # arm
-    __aeabi_dcmplt; # arm
-    __aeabi_ddiv; # arm
-    __aeabi_dmul; # arm
-    __aeabi_drsub; # arm
-    __aeabi_dsub; # arm
-    __aeabi_f2d; # arm
-    __aeabi_f2lz; # arm
-    __aeabi_f2ulz; # arm
-    __aeabi_fcmpeq; # arm
-    __aeabi_fcmpge; # arm
-    __aeabi_fcmpgt; # arm
-    __aeabi_fcmple; # arm
-    __aeabi_fcmplt; # arm
-    __aeabi_i2d; # arm
-    __aeabi_l2d; # arm
-    __aeabi_ui2d; # arm
-    __aeabi_ul2d; # arm
-    __aeabi_unwind_cpp_pr0; # arm
-    __aeabi_unwind_cpp_pr1; # arm
-    __aeabi_unwind_cpp_pr2; # arm
-    __cmpdf2; # arm
-    __cmpsf2; # arm
-    __divdf3; # arm
-    __eqdf2; # arm
-    __eqsf2; # arm
-    __extendsfdf2; # arm
-    __fixdfdi; # arm mips
-    __fixsfdi; # arm mips
-    __fixunsdfdi; # arm mips
-    __fixunsdfsi; # arm
-    __fixunssfdi; # arm mips
-    __floatdidf; # arm
-    __floatsidf; # arm
-    __floatundidf; # arm
-    __floatunsidf; # arm
-    __gedf2; # arm
-    __gesf2; # arm
-    __gnu_Unwind_Backtrace; # arm
-    __gnu_unwind_execute; # arm
-    __gnu_Unwind_ForcedUnwind; # arm
-    __gnu_unwind_frame; # arm
-    __gnu_Unwind_RaiseException; # arm
-    __gnu_Unwind_Restore_VFP; # arm
-    __gnu_Unwind_Restore_VFP_D; # arm
-    __gnu_Unwind_Restore_VFP_D_16_to_31; # arm
-    __gnu_Unwind_Restore_WMMXC; # arm
-    __gnu_Unwind_Restore_WMMXD; # arm
-    __gnu_Unwind_Resume; # arm
-    __gnu_Unwind_Resume_or_Rethrow; # arm
-    __gnu_Unwind_Save_VFP; # arm
-    __gnu_Unwind_Save_VFP_D; # arm
-    __gnu_Unwind_Save_VFP_D_16_to_31; # arm
-    __gnu_Unwind_Save_WMMXC; # arm
-    __gnu_Unwind_Save_WMMXD; # arm
-    __gtdf2; # arm
-    __gtsf2; # arm
-    __ledf2; # arm
-    __lesf2; # arm
-    __ltdf2; # arm
-    __ltsf2; # arm
-    __muldf3; # arm
-    __nedf2; # arm
-    __nesf2; # arm
-    __restore_core_regs; # arm
-    __subdf3; # arm
-    _Unwind_Backtrace; # arm
-    _Unwind_Complete; # arm
-    _Unwind_DeleteException; # arm
-    _Unwind_ForcedUnwind; # arm
-    _Unwind_GetCFA; # arm
-    _Unwind_GetDataRelBase; # arm
-    _Unwind_GetLanguageSpecificData; # arm
-    _Unwind_GetRegionStart; # arm
-    _Unwind_GetTextRelBase; # arm
-    _Unwind_RaiseException; # arm
-    _Unwind_Resume; # arm
-    _Unwind_Resume_or_Rethrow; # arm
-    _Unwind_VRS_Get; # arm
-    _Unwind_VRS_Pop; # arm
-    _Unwind_VRS_Set; # arm
-    restore_core_regs; # arm
-} LIBC_O; # arm mips
diff --git a/libm/libm.arm64.map b/libm/libm.arm64.map
deleted file mode 100644
index 550c39b..0000000
--- a/libm/libm.arm64.map
+++ /dev/null
@@ -1,297 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __fe_dfl_env; # var
-    __signbit;
-    __signbitf;
-    __signbitl;
-    acos;
-    acosf;
-    acosh;
-    acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
-    asin;
-    asinf;
-    asinh;
-    asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
-    atan;
-    atan2;
-    atan2f;
-    atan2l; # introduced=21
-    atanf;
-    atanh;
-    atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
-    cabs; # introduced=23
-    cabsf; # introduced=23
-    cabsl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    cacos; # introduced=23
-    cacosf; # introduced=23
-    cacosh; # introduced=23
-    cacoshf; # introduced=23
-    carg; # introduced=23
-    cargf; # introduced=23
-    cargl; # introduced=23
-    casin; # introduced=23
-    casinf; # introduced=23
-    casinh; # introduced=23
-    casinhf; # introduced=23
-    catan; # introduced=23
-    catanf; # introduced=23
-    catanh; # introduced=23
-    catanhf; # introduced=23
-    cbrt;
-    cbrtf;
-    cbrtl; # introduced=21
-    ccos; # introduced=23
-    ccosf; # introduced=23
-    ccosh; # introduced=23
-    ccoshf; # introduced=23
-    ceil;
-    ceilf;
-    ceill;
-    cexp; # introduced=23
-    cexpf; # introduced=23
-    cimag; # introduced=23
-    cimagf; # introduced=23
-    cimagl; # introduced=23
-    conj; # introduced=23
-    conjf; # introduced=23
-    conjl; # introduced=23
-    copysign;
-    copysignf;
-    copysignl;
-    cos;
-    cosf;
-    cosh;
-    coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
-    cproj; # introduced=23
-    cprojf; # introduced=23
-    cprojl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    creal; # introduced=23
-    crealf; # introduced=23
-    creall; # introduced=23
-    csin; # introduced=23
-    csinf; # introduced=23
-    csinh; # introduced=23
-    csinhf; # introduced=23
-    csqrt; # introduced=23
-    csqrtf; # introduced=23
-    csqrtl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    ctan; # introduced=23
-    ctanf; # introduced=23
-    ctanh; # introduced=23
-    ctanhf; # introduced=23
-    drem;
-    dremf;
-    erf;
-    erfc;
-    erfcf;
-    erfcl; # introduced=21
-    erff;
-    erfl; # introduced=21
-    exp;
-    exp2;
-    exp2f;
-    exp2l; # introduced=21
-    expf;
-    expl; # introduced=21
-    expm1;
-    expm1f;
-    expm1l; # introduced=21
-    fabs;
-    fabsf;
-    fabsl;
-    fdim;
-    fdimf;
-    fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    finite;
-    finitef;
-    floor;
-    floorf;
-    floorl;
-    fma;
-    fmaf;
-    fmal; # introduced=21
-    fmax;
-    fmaxf;
-    fmaxl;
-    fmin;
-    fminf;
-    fminl;
-    fmod;
-    fmodf;
-    fmodl; # introduced=21
-    frexp;
-    frexpf;
-    frexpl; # introduced=21
-    gamma;
-    gamma_r;
-    gammaf;
-    gammaf_r;
-    hypot;
-    hypotf;
-    hypotl; # introduced=21
-    ilogb;
-    ilogbf;
-    ilogbl;
-    j0;
-    j0f;
-    j1;
-    j1f;
-    jn;
-    jnf;
-    ldexpf;
-    ldexpl;
-    lgamma;
-    lgamma_r;
-    lgammaf;
-    lgammaf_r;
-    lgammal; # introduced=21
-    lgammal_r; # introduced=23
-    llrint;
-    llrintf;
-    llrintl; # introduced=21
-    llround;
-    llroundf;
-    llroundl;
-    log;
-    log10;
-    log10f;
-    log10l; # introduced=21
-    log1p;
-    log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logb;
-    logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logf;
-    logl; # introduced=21
-    lrint;
-    lrintf;
-    lrintl; # introduced=21
-    lround;
-    lroundf;
-    lroundl;
-    modf;
-    modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
-    nearbyint;
-    nearbyintf;
-    nearbyintl; # introduced=21
-    nextafter;
-    nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    pow;
-    powf;
-    powl; # introduced=21
-    remainder;
-    remainderf;
-    remainderl; # introduced=21
-    remquo;
-    remquof;
-    remquol; # introduced=21
-    rint;
-    rintf;
-    rintl; # introduced=21
-    round;
-    roundf;
-    roundl;
-    scalb;
-    scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalbn;
-    scalbnf;
-    scalbnl;
-    signgam; # var
-    significand;
-    significandf;
-    significandl; # introduced=21
-    sin;
-    sincos;
-    sincosf;
-    sincosl;
-    sinf;
-    sinh;
-    sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
-    sqrt;
-    sqrtf;
-    sqrtl; # introduced=21
-    tan;
-    tanf;
-    tanh;
-    tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
-    tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
-    trunc;
-    truncf;
-    truncl;
-    y0;
-    y0f;
-    y1;
-    y1f;
-    yn;
-    ynf;
-  local:
-    *;
-};
-
-LIBC_O { # introduced=O
-  global:
-    cacoshl;
-    cacosl;
-    casinhl;
-    casinl;
-    catanhl;
-    catanl;
-    ccoshl;
-    ccosl;
-    cexpl;
-    clog;
-    clogf;
-    clogl;
-    cpow;
-    cpowf;
-    cpowl;
-    csinhl;
-    csinl;
-    ctanhl;
-    ctanl;
-} LIBC;
-
diff --git a/libm/libm.mips.map b/libm/libm.mips.map
deleted file mode 100644
index 0b6dc02..0000000
--- a/libm/libm.mips.map
+++ /dev/null
@@ -1,304 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __fe_dfl_env; # var
-    __signbit;
-    __signbitf;
-    __signbitl;
-    acos;
-    acosf;
-    acosh;
-    acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
-    asin;
-    asinf;
-    asinh;
-    asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
-    atan;
-    atan2;
-    atan2f;
-    atan2l; # introduced=21
-    atanf;
-    atanh;
-    atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
-    cabs; # introduced=23
-    cabsf; # introduced=23
-    cabsl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    cacos; # introduced=23
-    cacosf; # introduced=23
-    cacosh; # introduced=23
-    cacoshf; # introduced=23
-    carg; # introduced=23
-    cargf; # introduced=23
-    cargl; # introduced=23
-    casin; # introduced=23
-    casinf; # introduced=23
-    casinh; # introduced=23
-    casinhf; # introduced=23
-    catan; # introduced=23
-    catanf; # introduced=23
-    catanh; # introduced=23
-    catanhf; # introduced=23
-    cbrt;
-    cbrtf;
-    cbrtl; # introduced=21
-    ccos; # introduced=23
-    ccosf; # introduced=23
-    ccosh; # introduced=23
-    ccoshf; # introduced=23
-    ceil;
-    ceilf;
-    ceill;
-    cexp; # introduced=23
-    cexpf; # introduced=23
-    cimag; # introduced=23
-    cimagf; # introduced=23
-    cimagl; # introduced=23
-    conj; # introduced=23
-    conjf; # introduced=23
-    conjl; # introduced=23
-    copysign;
-    copysignf;
-    copysignl;
-    cos;
-    cosf;
-    cosh;
-    coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
-    cproj; # introduced=23
-    cprojf; # introduced=23
-    cprojl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    creal; # introduced=23
-    crealf; # introduced=23
-    creall; # introduced=23
-    csin; # introduced=23
-    csinf; # introduced=23
-    csinh; # introduced=23
-    csinhf; # introduced=23
-    csqrt; # introduced=23
-    csqrtf; # introduced=23
-    csqrtl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    ctan; # introduced=23
-    ctanf; # introduced=23
-    ctanh; # introduced=23
-    ctanhf; # introduced=23
-    drem;
-    dremf;
-    erf;
-    erfc;
-    erfcf;
-    erfcl; # introduced=21
-    erff;
-    erfl; # introduced=21
-    exp;
-    exp2;
-    exp2f;
-    exp2l; # introduced=21
-    expf;
-    expl; # introduced=21
-    expm1;
-    expm1f;
-    expm1l; # introduced=21
-    fabs;
-    fabsf;
-    fabsl;
-    fdim;
-    fdimf;
-    fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    finite;
-    finitef;
-    floor;
-    floorf;
-    floorl;
-    fma;
-    fmaf;
-    fmal; # introduced=21
-    fmax;
-    fmaxf;
-    fmaxl;
-    fmin;
-    fminf;
-    fminl;
-    fmod;
-    fmodf;
-    fmodl; # introduced=21
-    frexp;
-    frexpf;
-    frexpl; # introduced=21
-    gamma;
-    gamma_r;
-    gammaf;
-    gammaf_r;
-    hypot;
-    hypotf;
-    hypotl; # introduced=21
-    ilogb;
-    ilogbf;
-    ilogbl;
-    j0;
-    j0f;
-    j1;
-    j1f;
-    jn;
-    jnf;
-    ldexpf;
-    ldexpl;
-    lgamma;
-    lgamma_r;
-    lgammaf;
-    lgammaf_r;
-    lgammal; # introduced=21
-    lgammal_r; # introduced=23
-    llrint;
-    llrintf;
-    llrintl; # introduced=21
-    llround;
-    llroundf;
-    llroundl;
-    log;
-    log10;
-    log10f;
-    log10l; # introduced=21
-    log1p;
-    log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logb;
-    logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logf;
-    logl; # introduced=21
-    lrint;
-    lrintf;
-    lrintl; # introduced=21
-    lround;
-    lroundf;
-    lroundl;
-    modf;
-    modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
-    nearbyint;
-    nearbyintf;
-    nearbyintl; # introduced=21
-    nextafter;
-    nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    pow;
-    powf;
-    powl; # introduced=21
-    remainder;
-    remainderf;
-    remainderl; # introduced=21
-    remquo;
-    remquof;
-    remquol; # introduced=21
-    rint;
-    rintf;
-    rintl; # introduced=21
-    round;
-    roundf;
-    roundl;
-    scalb;
-    scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalbn;
-    scalbnf;
-    scalbnl;
-    signgam; # var
-    significand;
-    significandf;
-    significandl; # introduced=21
-    sin;
-    sincos;
-    sincosf;
-    sincosl;
-    sinf;
-    sinh;
-    sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
-    sqrt;
-    sqrtf;
-    sqrtl; # introduced=21
-    tan;
-    tanf;
-    tanh;
-    tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
-    tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
-    trunc;
-    truncf;
-    truncl;
-    y0;
-    y0f;
-    y1;
-    y1f;
-    yn;
-    ynf;
-  local:
-    *;
-};
-
-LIBC_O { # introduced=O
-  global:
-    cacoshl;
-    cacosl;
-    casinhl;
-    casinl;
-    catanhl;
-    catanl;
-    ccoshl;
-    ccosl;
-    cexpl;
-    clog;
-    clogf;
-    clogl;
-    cpow;
-    cpowf;
-    cpowl;
-    csinhl;
-    csinl;
-    ctanhl;
-    ctanl;
-} LIBC;
-
-LIBC_DEPRECATED { # arm mips platform-only
-  global: # arm mips
-    __fixdfdi; # arm mips
-    __fixsfdi; # arm mips
-    __fixunsdfdi; # arm mips
-    __fixunssfdi; # arm mips
-} LIBC_O; # arm mips
diff --git a/libm/libm.mips64.map b/libm/libm.mips64.map
deleted file mode 100644
index 550c39b..0000000
--- a/libm/libm.mips64.map
+++ /dev/null
@@ -1,297 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __fe_dfl_env; # var
-    __signbit;
-    __signbitf;
-    __signbitl;
-    acos;
-    acosf;
-    acosh;
-    acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
-    asin;
-    asinf;
-    asinh;
-    asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
-    atan;
-    atan2;
-    atan2f;
-    atan2l; # introduced=21
-    atanf;
-    atanh;
-    atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
-    cabs; # introduced=23
-    cabsf; # introduced=23
-    cabsl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    cacos; # introduced=23
-    cacosf; # introduced=23
-    cacosh; # introduced=23
-    cacoshf; # introduced=23
-    carg; # introduced=23
-    cargf; # introduced=23
-    cargl; # introduced=23
-    casin; # introduced=23
-    casinf; # introduced=23
-    casinh; # introduced=23
-    casinhf; # introduced=23
-    catan; # introduced=23
-    catanf; # introduced=23
-    catanh; # introduced=23
-    catanhf; # introduced=23
-    cbrt;
-    cbrtf;
-    cbrtl; # introduced=21
-    ccos; # introduced=23
-    ccosf; # introduced=23
-    ccosh; # introduced=23
-    ccoshf; # introduced=23
-    ceil;
-    ceilf;
-    ceill;
-    cexp; # introduced=23
-    cexpf; # introduced=23
-    cimag; # introduced=23
-    cimagf; # introduced=23
-    cimagl; # introduced=23
-    conj; # introduced=23
-    conjf; # introduced=23
-    conjl; # introduced=23
-    copysign;
-    copysignf;
-    copysignl;
-    cos;
-    cosf;
-    cosh;
-    coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
-    cproj; # introduced=23
-    cprojf; # introduced=23
-    cprojl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    creal; # introduced=23
-    crealf; # introduced=23
-    creall; # introduced=23
-    csin; # introduced=23
-    csinf; # introduced=23
-    csinh; # introduced=23
-    csinhf; # introduced=23
-    csqrt; # introduced=23
-    csqrtf; # introduced=23
-    csqrtl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    ctan; # introduced=23
-    ctanf; # introduced=23
-    ctanh; # introduced=23
-    ctanhf; # introduced=23
-    drem;
-    dremf;
-    erf;
-    erfc;
-    erfcf;
-    erfcl; # introduced=21
-    erff;
-    erfl; # introduced=21
-    exp;
-    exp2;
-    exp2f;
-    exp2l; # introduced=21
-    expf;
-    expl; # introduced=21
-    expm1;
-    expm1f;
-    expm1l; # introduced=21
-    fabs;
-    fabsf;
-    fabsl;
-    fdim;
-    fdimf;
-    fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    finite;
-    finitef;
-    floor;
-    floorf;
-    floorl;
-    fma;
-    fmaf;
-    fmal; # introduced=21
-    fmax;
-    fmaxf;
-    fmaxl;
-    fmin;
-    fminf;
-    fminl;
-    fmod;
-    fmodf;
-    fmodl; # introduced=21
-    frexp;
-    frexpf;
-    frexpl; # introduced=21
-    gamma;
-    gamma_r;
-    gammaf;
-    gammaf_r;
-    hypot;
-    hypotf;
-    hypotl; # introduced=21
-    ilogb;
-    ilogbf;
-    ilogbl;
-    j0;
-    j0f;
-    j1;
-    j1f;
-    jn;
-    jnf;
-    ldexpf;
-    ldexpl;
-    lgamma;
-    lgamma_r;
-    lgammaf;
-    lgammaf_r;
-    lgammal; # introduced=21
-    lgammal_r; # introduced=23
-    llrint;
-    llrintf;
-    llrintl; # introduced=21
-    llround;
-    llroundf;
-    llroundl;
-    log;
-    log10;
-    log10f;
-    log10l; # introduced=21
-    log1p;
-    log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logb;
-    logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logf;
-    logl; # introduced=21
-    lrint;
-    lrintf;
-    lrintl; # introduced=21
-    lround;
-    lroundf;
-    lroundl;
-    modf;
-    modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
-    nearbyint;
-    nearbyintf;
-    nearbyintl; # introduced=21
-    nextafter;
-    nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    pow;
-    powf;
-    powl; # introduced=21
-    remainder;
-    remainderf;
-    remainderl; # introduced=21
-    remquo;
-    remquof;
-    remquol; # introduced=21
-    rint;
-    rintf;
-    rintl; # introduced=21
-    round;
-    roundf;
-    roundl;
-    scalb;
-    scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalbn;
-    scalbnf;
-    scalbnl;
-    signgam; # var
-    significand;
-    significandf;
-    significandl; # introduced=21
-    sin;
-    sincos;
-    sincosf;
-    sincosl;
-    sinf;
-    sinh;
-    sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
-    sqrt;
-    sqrtf;
-    sqrtl; # introduced=21
-    tan;
-    tanf;
-    tanh;
-    tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
-    tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
-    trunc;
-    truncf;
-    truncl;
-    y0;
-    y0f;
-    y1;
-    y1f;
-    yn;
-    ynf;
-  local:
-    *;
-};
-
-LIBC_O { # introduced=O
-  global:
-    cacoshl;
-    cacosl;
-    casinhl;
-    casinl;
-    catanhl;
-    catanl;
-    ccoshl;
-    ccosl;
-    cexpl;
-    clog;
-    clogf;
-    clogl;
-    cpow;
-    cpowf;
-    cpowl;
-    csinhl;
-    csinl;
-    ctanhl;
-    ctanl;
-} LIBC;
-
diff --git a/libm/libm.x86.map b/libm/libm.x86.map
deleted file mode 100644
index 550c39b..0000000
--- a/libm/libm.x86.map
+++ /dev/null
@@ -1,297 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __fe_dfl_env; # var
-    __signbit;
-    __signbitf;
-    __signbitl;
-    acos;
-    acosf;
-    acosh;
-    acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
-    asin;
-    asinf;
-    asinh;
-    asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
-    atan;
-    atan2;
-    atan2f;
-    atan2l; # introduced=21
-    atanf;
-    atanh;
-    atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
-    cabs; # introduced=23
-    cabsf; # introduced=23
-    cabsl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    cacos; # introduced=23
-    cacosf; # introduced=23
-    cacosh; # introduced=23
-    cacoshf; # introduced=23
-    carg; # introduced=23
-    cargf; # introduced=23
-    cargl; # introduced=23
-    casin; # introduced=23
-    casinf; # introduced=23
-    casinh; # introduced=23
-    casinhf; # introduced=23
-    catan; # introduced=23
-    catanf; # introduced=23
-    catanh; # introduced=23
-    catanhf; # introduced=23
-    cbrt;
-    cbrtf;
-    cbrtl; # introduced=21
-    ccos; # introduced=23
-    ccosf; # introduced=23
-    ccosh; # introduced=23
-    ccoshf; # introduced=23
-    ceil;
-    ceilf;
-    ceill;
-    cexp; # introduced=23
-    cexpf; # introduced=23
-    cimag; # introduced=23
-    cimagf; # introduced=23
-    cimagl; # introduced=23
-    conj; # introduced=23
-    conjf; # introduced=23
-    conjl; # introduced=23
-    copysign;
-    copysignf;
-    copysignl;
-    cos;
-    cosf;
-    cosh;
-    coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
-    cproj; # introduced=23
-    cprojf; # introduced=23
-    cprojl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    creal; # introduced=23
-    crealf; # introduced=23
-    creall; # introduced=23
-    csin; # introduced=23
-    csinf; # introduced=23
-    csinh; # introduced=23
-    csinhf; # introduced=23
-    csqrt; # introduced=23
-    csqrtf; # introduced=23
-    csqrtl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    ctan; # introduced=23
-    ctanf; # introduced=23
-    ctanh; # introduced=23
-    ctanhf; # introduced=23
-    drem;
-    dremf;
-    erf;
-    erfc;
-    erfcf;
-    erfcl; # introduced=21
-    erff;
-    erfl; # introduced=21
-    exp;
-    exp2;
-    exp2f;
-    exp2l; # introduced=21
-    expf;
-    expl; # introduced=21
-    expm1;
-    expm1f;
-    expm1l; # introduced=21
-    fabs;
-    fabsf;
-    fabsl;
-    fdim;
-    fdimf;
-    fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    finite;
-    finitef;
-    floor;
-    floorf;
-    floorl;
-    fma;
-    fmaf;
-    fmal; # introduced=21
-    fmax;
-    fmaxf;
-    fmaxl;
-    fmin;
-    fminf;
-    fminl;
-    fmod;
-    fmodf;
-    fmodl; # introduced=21
-    frexp;
-    frexpf;
-    frexpl; # introduced=21
-    gamma;
-    gamma_r;
-    gammaf;
-    gammaf_r;
-    hypot;
-    hypotf;
-    hypotl; # introduced=21
-    ilogb;
-    ilogbf;
-    ilogbl;
-    j0;
-    j0f;
-    j1;
-    j1f;
-    jn;
-    jnf;
-    ldexpf;
-    ldexpl;
-    lgamma;
-    lgamma_r;
-    lgammaf;
-    lgammaf_r;
-    lgammal; # introduced=21
-    lgammal_r; # introduced=23
-    llrint;
-    llrintf;
-    llrintl; # introduced=21
-    llround;
-    llroundf;
-    llroundl;
-    log;
-    log10;
-    log10f;
-    log10l; # introduced=21
-    log1p;
-    log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logb;
-    logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logf;
-    logl; # introduced=21
-    lrint;
-    lrintf;
-    lrintl; # introduced=21
-    lround;
-    lroundf;
-    lroundl;
-    modf;
-    modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
-    nearbyint;
-    nearbyintf;
-    nearbyintl; # introduced=21
-    nextafter;
-    nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    pow;
-    powf;
-    powl; # introduced=21
-    remainder;
-    remainderf;
-    remainderl; # introduced=21
-    remquo;
-    remquof;
-    remquol; # introduced=21
-    rint;
-    rintf;
-    rintl; # introduced=21
-    round;
-    roundf;
-    roundl;
-    scalb;
-    scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalbn;
-    scalbnf;
-    scalbnl;
-    signgam; # var
-    significand;
-    significandf;
-    significandl; # introduced=21
-    sin;
-    sincos;
-    sincosf;
-    sincosl;
-    sinf;
-    sinh;
-    sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
-    sqrt;
-    sqrtf;
-    sqrtl; # introduced=21
-    tan;
-    tanf;
-    tanh;
-    tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
-    tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
-    trunc;
-    truncf;
-    truncl;
-    y0;
-    y0f;
-    y1;
-    y1f;
-    yn;
-    ynf;
-  local:
-    *;
-};
-
-LIBC_O { # introduced=O
-  global:
-    cacoshl;
-    cacosl;
-    casinhl;
-    casinl;
-    catanhl;
-    catanl;
-    ccoshl;
-    ccosl;
-    cexpl;
-    clog;
-    clogf;
-    clogl;
-    cpow;
-    cpowf;
-    cpowl;
-    csinhl;
-    csinl;
-    ctanhl;
-    ctanl;
-} LIBC;
-
diff --git a/libm/libm.x86_64.map b/libm/libm.x86_64.map
deleted file mode 100644
index 550c39b..0000000
--- a/libm/libm.x86_64.map
+++ /dev/null
@@ -1,297 +0,0 @@
-# Generated by genversion-scripts.py. Do not edit.
-LIBC {
-  global:
-    __fe_dfl_env; # var
-    __signbit;
-    __signbitf;
-    __signbitl;
-    acos;
-    acosf;
-    acosh;
-    acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
-    asin;
-    asinf;
-    asinh;
-    asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
-    atan;
-    atan2;
-    atan2f;
-    atan2l; # introduced=21
-    atanf;
-    atanh;
-    atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
-    cabs; # introduced=23
-    cabsf; # introduced=23
-    cabsl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    cacos; # introduced=23
-    cacosf; # introduced=23
-    cacosh; # introduced=23
-    cacoshf; # introduced=23
-    carg; # introduced=23
-    cargf; # introduced=23
-    cargl; # introduced=23
-    casin; # introduced=23
-    casinf; # introduced=23
-    casinh; # introduced=23
-    casinhf; # introduced=23
-    catan; # introduced=23
-    catanf; # introduced=23
-    catanh; # introduced=23
-    catanhf; # introduced=23
-    cbrt;
-    cbrtf;
-    cbrtl; # introduced=21
-    ccos; # introduced=23
-    ccosf; # introduced=23
-    ccosh; # introduced=23
-    ccoshf; # introduced=23
-    ceil;
-    ceilf;
-    ceill;
-    cexp; # introduced=23
-    cexpf; # introduced=23
-    cimag; # introduced=23
-    cimagf; # introduced=23
-    cimagl; # introduced=23
-    conj; # introduced=23
-    conjf; # introduced=23
-    conjl; # introduced=23
-    copysign;
-    copysignf;
-    copysignl;
-    cos;
-    cosf;
-    cosh;
-    coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
-    cproj; # introduced=23
-    cprojf; # introduced=23
-    cprojl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    creal; # introduced=23
-    crealf; # introduced=23
-    creall; # introduced=23
-    csin; # introduced=23
-    csinf; # introduced=23
-    csinh; # introduced=23
-    csinhf; # introduced=23
-    csqrt; # introduced=23
-    csqrtf; # introduced=23
-    csqrtl; # introduced-arm=21 introduced-arm64=23 introduced-mips=21 introduced-mips64=23 introduced-x86=21 introduced-x86_64=23
-    ctan; # introduced=23
-    ctanf; # introduced=23
-    ctanh; # introduced=23
-    ctanhf; # introduced=23
-    drem;
-    dremf;
-    erf;
-    erfc;
-    erfcf;
-    erfcl; # introduced=21
-    erff;
-    erfl; # introduced=21
-    exp;
-    exp2;
-    exp2f;
-    exp2l; # introduced=21
-    expf;
-    expl; # introduced=21
-    expm1;
-    expm1f;
-    expm1l; # introduced=21
-    fabs;
-    fabsf;
-    fabsl;
-    fdim;
-    fdimf;
-    fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-mips=21 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    finite;
-    finitef;
-    floor;
-    floorf;
-    floorl;
-    fma;
-    fmaf;
-    fmal; # introduced=21
-    fmax;
-    fmaxf;
-    fmaxl;
-    fmin;
-    fminf;
-    fminl;
-    fmod;
-    fmodf;
-    fmodl; # introduced=21
-    frexp;
-    frexpf;
-    frexpl; # introduced=21
-    gamma;
-    gamma_r;
-    gammaf;
-    gammaf_r;
-    hypot;
-    hypotf;
-    hypotl; # introduced=21
-    ilogb;
-    ilogbf;
-    ilogbl;
-    j0;
-    j0f;
-    j1;
-    j1f;
-    jn;
-    jnf;
-    ldexpf;
-    ldexpl;
-    lgamma;
-    lgamma_r;
-    lgammaf;
-    lgammaf_r;
-    lgammal; # introduced=21
-    lgammal_r; # introduced=23
-    llrint;
-    llrintf;
-    llrintl; # introduced=21
-    llround;
-    llroundf;
-    llroundl;
-    log;
-    log10;
-    log10f;
-    log10l; # introduced=21
-    log1p;
-    log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logb;
-    logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    logf;
-    logl; # introduced=21
-    lrint;
-    lrintf;
-    lrintl; # introduced=21
-    lround;
-    lroundf;
-    lroundl;
-    modf;
-    modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
-    nearbyint;
-    nearbyintf;
-    nearbyintl; # introduced=21
-    nextafter;
-    nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-mips=18 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    pow;
-    powf;
-    powl; # introduced=21
-    remainder;
-    remainderf;
-    remainderl; # introduced=21
-    remquo;
-    remquof;
-    remquol; # introduced=21
-    rint;
-    rintf;
-    rintl; # introduced=21
-    round;
-    roundf;
-    roundl;
-    scalb;
-    scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-mips=9 introduced-mips64=21 introduced-x86=18 introduced-x86_64=21
-    scalbn;
-    scalbnf;
-    scalbnl;
-    signgam; # var
-    significand;
-    significandf;
-    significandl; # introduced=21
-    sin;
-    sincos;
-    sincosf;
-    sincosl;
-    sinf;
-    sinh;
-    sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
-    sqrt;
-    sqrtf;
-    sqrtl; # introduced=21
-    tan;
-    tanf;
-    tanh;
-    tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
-    tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
-    trunc;
-    truncf;
-    truncl;
-    y0;
-    y0f;
-    y1;
-    y1f;
-    yn;
-    ynf;
-  local:
-    *;
-};
-
-LIBC_O { # introduced=O
-  global:
-    cacoshl;
-    cacosl;
-    casinhl;
-    casinl;
-    catanhl;
-    catanl;
-    ccoshl;
-    ccosl;
-    cexpl;
-    clog;
-    clogf;
-    clogl;
-    cpow;
-    cpowf;
-    cpowl;
-    csinhl;
-    csinl;
-    ctanhl;
-    ctanl;
-} LIBC;
-
diff --git a/linker/Android.bp b/linker/Android.bp
index 0e3484a..38a53f8 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -86,6 +86,7 @@
         "linker_phdr.cpp",
         "linker_sdk_versions.cpp",
         "linker_soinfo.cpp",
+        "linker_tls.cpp",
         "linker_utils.cpp",
         "rt.cpp",
     ],
diff --git a/linker/linker_allocator.cpp b/linker/linker_allocator.cpp
index 8b05a7e..015768a 100644
--- a/linker/linker_allocator.cpp
+++ b/linker/linker_allocator.cpp
@@ -30,9 +30,6 @@
 #include "linker_debug.h"
 #include "linker.h"
 
-#include <algorithm>
-#include <vector>
-
 #include <stdlib.h>
 #include <sys/mman.h>
 #include <sys/prctl.h>
@@ -56,9 +53,19 @@
 // the memory.
 //
 // For a pointer allocated using SmallObjectAllocator it adds
-// the block to free_blocks_list_. If the number of free pages reaches 2,
-// SmallObjectAllocator munmaps one of the pages keeping the other one
-// in reserve.
+// the block to free_blocks_list in the corresponding page. If the number of
+// free pages reaches 2, SmallObjectAllocator munmaps one of the pages keeping
+// the other one in reserve.
+
+// Memory management for large objects is fairly straightforward, but for small
+// objects it is more complicated.  If you are changing this code, one simple
+// way to evaluate the memory usage change is by running 'dd' and examine the
+// memory usage by 'showmap $(pidof dd)'.  'dd' is nice in that:
+//   1. It links in quite a few libraries, so you get some linker memory use.
+//   2. When run with no arguments, it sits waiting for input, so it is easy to
+//      examine its memory usage with showmap.
+//   3. Since it does nothing while waiting for input, the memory usage is
+//      determinisitic.
 
 static const char kSignature[4] = {'L', 'M', 'A', 1};
 
@@ -67,9 +74,9 @@
 // This type is used for large allocations (with size >1k)
 static const uint32_t kLargeObject = 111;
 
-bool operator<(const small_object_page_record& one, const small_object_page_record& two) {
-  return one.page_addr < two.page_addr;
-}
+// Allocated pointers must be at least 16-byte aligned.  Round up the size of
+// page_info to multiple of 16.
+static constexpr size_t kPageInfoSize = __BIONIC_ALIGN(sizeof(page_info), 16);
 
 static inline uint16_t log2(size_t number) {
   uint16_t result = 0;
@@ -83,149 +90,159 @@
   return result;
 }
 
-LinkerSmallObjectAllocator::LinkerSmallObjectAllocator(uint32_t type, size_t block_size)
-    : type_(type), block_size_(block_size), free_pages_cnt_(0), free_blocks_list_(nullptr) {}
+LinkerSmallObjectAllocator::LinkerSmallObjectAllocator(uint32_t type,
+                                                       size_t block_size)
+    : type_(type),
+      block_size_(block_size),
+      blocks_per_page_((PAGE_SIZE - sizeof(small_object_page_info)) /
+                       block_size),
+      free_pages_cnt_(0),
+      page_list_(nullptr) {}
 
 void* LinkerSmallObjectAllocator::alloc() {
   CHECK(block_size_ != 0);
 
-  if (free_blocks_list_ == nullptr) {
+  if (page_list_ == nullptr) {
     alloc_page();
   }
 
-  small_object_block_record* block_record = free_blocks_list_;
+  // Fully allocated pages are de-managed and removed from the page list, so
+  // every page from the page list must be useable.  Let's just take the first
+  // one.
+  small_object_page_info* page = page_list_;
+  CHECK(page->free_block_list != nullptr);
+
+  small_object_block_record* const block_record = page->free_block_list;
   if (block_record->free_blocks_cnt > 1) {
-    small_object_block_record* next_free = reinterpret_cast<small_object_block_record*>(
-        reinterpret_cast<uint8_t*>(block_record) + block_size_);
+    small_object_block_record* next_free =
+        reinterpret_cast<small_object_block_record*>(
+            reinterpret_cast<uint8_t*>(block_record) + block_size_);
     next_free->next = block_record->next;
     next_free->free_blocks_cnt = block_record->free_blocks_cnt - 1;
-    free_blocks_list_ = next_free;
+    page->free_block_list = next_free;
   } else {
-    free_blocks_list_ = block_record->next;
+    page->free_block_list = block_record->next;
   }
 
-  // bookkeeping...
-  auto page_record = find_page_record(block_record);
-
-  if (page_record->allocated_blocks_cnt == 0) {
+  if (page->free_blocks_cnt == blocks_per_page_) {
     free_pages_cnt_--;
   }
 
-  page_record->free_blocks_cnt--;
-  page_record->allocated_blocks_cnt++;
+  page->free_blocks_cnt--;
 
   memset(block_record, 0, block_size_);
 
+  if (page->free_blocks_cnt == 0) {
+    // De-manage fully allocated pages.  These pages will be managed again if
+    // a block is freed.
+    remove_from_page_list(page);
+  }
+
   return block_record;
 }
 
-void LinkerSmallObjectAllocator::free_page(linker_vector_t::iterator page_record) {
-  void* page_start = reinterpret_cast<void*>(page_record->page_addr);
-  void* page_end = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(page_start) + PAGE_SIZE);
-
-  while (free_blocks_list_ != nullptr &&
-      free_blocks_list_ > page_start &&
-      free_blocks_list_ < page_end) {
-    free_blocks_list_ = free_blocks_list_->next;
+void LinkerSmallObjectAllocator::free_page(small_object_page_info* page) {
+  CHECK(page->free_blocks_cnt == blocks_per_page_);
+  if (page->prev_page) {
+    page->prev_page->next_page = page->next_page;
   }
-
-  small_object_block_record* current = free_blocks_list_;
-
-  while (current != nullptr) {
-    while (current->next > page_start && current->next < page_end) {
-      current->next = current->next->next;
-    }
-
-    current = current->next;
+  if (page->next_page) {
+    page->next_page->prev_page = page->prev_page;
   }
-
-  munmap(page_start, PAGE_SIZE);
-  page_records_.erase(page_record);
+  if (page_list_ == page) {
+    page_list_ = page->next_page;
+  }
+  munmap(page, PAGE_SIZE);
   free_pages_cnt_--;
 }
 
 void LinkerSmallObjectAllocator::free(void* ptr) {
-  auto page_record = find_page_record(ptr);
+  small_object_page_info* const page =
+      reinterpret_cast<small_object_page_info*>(
+          PAGE_START(reinterpret_cast<uintptr_t>(ptr)));
 
-  ssize_t offset = reinterpret_cast<uintptr_t>(ptr) - sizeof(page_info);
-
-  if (offset % block_size_ != 0) {
+  if (reinterpret_cast<uintptr_t>(ptr) % block_size_ != 0) {
     async_safe_fatal("invalid pointer: %p (block_size=%zd)", ptr, block_size_);
   }
 
   memset(ptr, 0, block_size_);
-  small_object_block_record* block_record = reinterpret_cast<small_object_block_record*>(ptr);
+  small_object_block_record* const block_record =
+      reinterpret_cast<small_object_block_record*>(ptr);
 
-  block_record->next = free_blocks_list_;
+  block_record->next = page->free_block_list;
   block_record->free_blocks_cnt = 1;
 
-  free_blocks_list_ = block_record;
+  page->free_block_list = block_record;
+  page->free_blocks_cnt++;
 
-  page_record->free_blocks_cnt++;
-  page_record->allocated_blocks_cnt--;
-
-  if (page_record->allocated_blocks_cnt == 0) {
-    if (free_pages_cnt_++ > 1) {
+  if (page->free_blocks_cnt == blocks_per_page_) {
+    if (++free_pages_cnt_ > 1) {
       // if we already have a free page - unmap this one.
-      free_page(page_record);
+      free_page(page);
     }
+  } else if (page->free_blocks_cnt == 1) {
+    // We just freed from a full page.  Add this page back to the list.
+    add_to_page_list(page);
   }
 }
 
-linker_vector_t::iterator LinkerSmallObjectAllocator::find_page_record(void* ptr) {
-  void* addr = reinterpret_cast<void*>(PAGE_START(reinterpret_cast<uintptr_t>(ptr)));
-  small_object_page_record boundary;
-  boundary.page_addr = addr;
-  linker_vector_t::iterator it = std::lower_bound(
-      page_records_.begin(), page_records_.end(), boundary);
-
-  if (it == page_records_.end() || it->page_addr != addr) {
-    // not found...
-    async_safe_fatal("page record for %p was not found (block_size=%zd)", ptr, block_size_);
-  }
-
-  return it;
-}
-
-void LinkerSmallObjectAllocator::create_page_record(void* page_addr, size_t free_blocks_cnt) {
-  small_object_page_record record;
-  record.page_addr = page_addr;
-  record.free_blocks_cnt = free_blocks_cnt;
-  record.allocated_blocks_cnt = 0;
-
-  linker_vector_t::iterator it = std::lower_bound(
-      page_records_.begin(), page_records_.end(), record);
-  page_records_.insert(it, record);
-}
-
 void LinkerSmallObjectAllocator::alloc_page() {
-  static_assert(sizeof(page_info) % 16 == 0, "sizeof(page_info) is not multiple of 16");
-  void* map_ptr = mmap(nullptr, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+  void* const map_ptr = mmap(nullptr, PAGE_SIZE, PROT_READ | PROT_WRITE,
+                             MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
   if (map_ptr == MAP_FAILED) {
     async_safe_fatal("mmap failed: %s", strerror(errno));
   }
 
-  prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map_ptr, PAGE_SIZE, "linker_alloc_small_objects");
+  prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, map_ptr, PAGE_SIZE,
+        "linker_alloc_small_objects");
 
-  page_info* info = reinterpret_cast<page_info*>(map_ptr);
-  memcpy(info->signature, kSignature, sizeof(kSignature));
-  info->type = type_;
-  info->allocator_addr = this;
+  small_object_page_info* const page =
+      reinterpret_cast<small_object_page_info*>(map_ptr);
+  memcpy(page->info.signature, kSignature, sizeof(kSignature));
+  page->info.type = type_;
+  page->info.allocator_addr = this;
 
-  size_t free_blocks_cnt = (PAGE_SIZE - sizeof(page_info))/block_size_;
+  page->free_blocks_cnt = blocks_per_page_;
 
-  create_page_record(map_ptr, free_blocks_cnt);
+  // Align the first block to block_size_.
+  const uintptr_t first_block_addr =
+      __BIONIC_ALIGN(reinterpret_cast<uintptr_t>(page + 1), block_size_);
+  small_object_block_record* const first_block =
+      reinterpret_cast<small_object_block_record*>(first_block_addr);
 
-  small_object_block_record* first_block = reinterpret_cast<small_object_block_record*>(info + 1);
+  first_block->next = nullptr;
+  first_block->free_blocks_cnt = blocks_per_page_;
 
-  first_block->next = free_blocks_list_;
-  first_block->free_blocks_cnt = free_blocks_cnt;
+  page->free_block_list = first_block;
 
-  free_blocks_list_ = first_block;
+  add_to_page_list(page);
 
   free_pages_cnt_++;
 }
 
+void LinkerSmallObjectAllocator::add_to_page_list(small_object_page_info* page) {
+  page->next_page = page_list_;
+  page->prev_page = nullptr;
+  if (page_list_) {
+    page_list_->prev_page = page;
+  }
+  page_list_ = page;
+}
+
+void LinkerSmallObjectAllocator::remove_from_page_list(
+    small_object_page_info* page) {
+  if (page->prev_page) {
+    page->prev_page->next_page = page->next_page;
+  }
+  if (page->next_page) {
+    page->next_page->prev_page = page->prev_page;
+  }
+  if (page_list_ == page) {
+    page_list_ = page->next_page;
+  }
+  page->prev_page = nullptr;
+  page->next_page = nullptr;
+}
 
 void LinkerMemoryAllocator::initialize_allocators() {
   if (allocators_ != nullptr) {
@@ -244,7 +261,7 @@
 }
 
 void* LinkerMemoryAllocator::alloc_mmap(size_t size) {
-  size_t allocated_size = PAGE_END(size + sizeof(page_info));
+  size_t allocated_size = PAGE_END(size + kPageInfoSize);
   void* map_ptr = mmap(nullptr, allocated_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
                        -1, 0);
 
@@ -259,7 +276,8 @@
   info->type = kLargeObject;
   info->allocated_size = allocated_size;
 
-  return info + 1;
+  return reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(info) +
+                                 kPageInfoSize);
 }
 
 void* LinkerMemoryAllocator::alloc(size_t size) {
@@ -305,7 +323,7 @@
   size_t old_size = 0;
 
   if (info->type == kLargeObject) {
-    old_size = info->allocated_size - sizeof(page_info);
+    old_size = info->allocated_size - kPageInfoSize;
   } else {
     LinkerSmallObjectAllocator* allocator = get_small_object_allocator(info->type);
     if (allocator != info->allocator_addr) {
diff --git a/linker/linker_allocator.h b/linker/linker_allocator.h
index 8c4198b..44a8b0d 100644
--- a/linker/linker_allocator.h
+++ b/linker/linker_allocator.h
@@ -36,8 +36,6 @@
 #include <stddef.h>
 #include <unistd.h>
 
-#include <vector>
-
 #include <async_safe/log.h>
 
 const uint32_t kSmallObjectMaxSizeLog2 = 10;
@@ -57,59 +55,32 @@
     // and allocator_addr for small ones.
     LinkerSmallObjectAllocator* allocator_addr;
   };
-} __attribute__((aligned(16)));
-
-struct small_object_page_record {
-  void* page_addr;
-  size_t free_blocks_cnt;
-  size_t allocated_blocks_cnt;
 };
 
-// for lower_bound...
-bool operator<(const small_object_page_record& one, const small_object_page_record& two);
-
 struct small_object_block_record {
   small_object_block_record* next;
   size_t free_blocks_cnt;
 };
 
-// This is implementation for std::vector allocator
-template <typename T>
-class linker_vector_allocator {
- public:
-  typedef T value_type;
-  typedef T* pointer;
-  typedef const T* const_pointer;
-  typedef T& reference;
-  typedef const T& const_reference;
-  typedef size_t size_type;
-  typedef ptrdiff_t difference_type;
+// This structure is placed at the beginning of each page managed by
+// LinkerSmallObjectAllocator.  Note that a page_info struct is expected at the
+// beginning of each page as well, and therefore this structure contains a
+// page_info as its *first* field.
+struct small_object_page_info {
+  page_info info;  // Must be the first field.
 
-  T* allocate(size_t n, const T* hint = nullptr) {
-    size_t size = n * sizeof(T);
-    void* ptr = mmap(const_cast<T*>(hint), size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-                     -1, 0);
-    if (ptr == MAP_FAILED) {
-      // Spec says we need to throw std::bad_alloc here but because our
-      // code does not support exception handling anyways - we are going to abort.
-      async_safe_fatal("mmap failed: %s", strerror(errno));
-    }
+  // Doubly linked list for traversing all pages allocated by a
+  // LinkerSmallObjectAllocator.
+  small_object_page_info* next_page;
+  small_object_page_info* prev_page;
 
-    prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, ptr, size, "linker_alloc_vector");
+  // Linked list containing all free blocks in this page.
+  small_object_block_record* free_block_list;
 
-    return reinterpret_cast<T*>(ptr);
-  }
-
-  void deallocate(T* ptr, size_t n) {
-    munmap(ptr, n * sizeof(T));
-  }
+  // Free blocks counter.
+  size_t free_blocks_cnt;
 };
 
-typedef
-    std::vector<small_object_page_record, linker_vector_allocator<small_object_page_record>>
-    linker_vector_t;
-
-
 class LinkerSmallObjectAllocator {
  public:
   LinkerSmallObjectAllocator(uint32_t type, size_t block_size);
@@ -119,18 +90,17 @@
   size_t get_block_size() const { return block_size_; }
  private:
   void alloc_page();
-  void free_page(linker_vector_t::iterator page_record);
-  linker_vector_t::iterator find_page_record(void* ptr);
-  void create_page_record(void* page_addr, size_t free_blocks_cnt);
+  void free_page(small_object_page_info* page);
+  void add_to_page_list(small_object_page_info* page);
+  void remove_from_page_list(small_object_page_info* page);
 
-  uint32_t type_;
-  size_t block_size_;
+  const uint32_t type_;
+  const size_t block_size_;
+  const size_t blocks_per_page_;
 
   size_t free_pages_cnt_;
-  small_object_block_record* free_blocks_list_;
 
-  // sorted vector of page records
-  linker_vector_t page_records_;
+  small_object_page_info* page_list_;
 };
 
 class LinkerMemoryAllocator {
diff --git a/linker/linker_config.cpp b/linker/linker_config.cpp
index ac4c1fd..0e75c85 100644
--- a/linker/linker_config.cpp
+++ b/linker/linker_config.cpp
@@ -241,11 +241,15 @@
       if (realpath(value.c_str(), buf)) {
         resolved_path = buf;
       } else if (errno != ENOENT)  {
-        DL_WARN("%s:%zd: warning: path \"%s\" couldn't be resolved: %s",
-                ld_config_file_path,
-                cp.lineno(),
-                value.c_str(),
-                strerror(errno));
+        // realpath is expected to fail with EPERM in some situations, so log
+        // the failure with INFO rather than DL_WARN. e.g. A binary in
+        // /data/local/tmp may attempt to stat /postinstall. See
+        // http://b/120996057.
+        INFO("%s:%zd: warning: path \"%s\" couldn't be resolved: %s",
+             ld_config_file_path,
+             cp.lineno(),
+             value.c_str(),
+             strerror(errno));
         resolved_path = value;
       } else {
         // ENOENT: no need to test if binary is under the path
diff --git a/linker/linker_main.cpp b/linker/linker_main.cpp
index 3318c2c..9b4ce47 100644
--- a/linker/linker_main.cpp
+++ b/linker/linker_main.cpp
@@ -36,6 +36,7 @@
 #include "linker_gdb_support.h"
 #include "linker_globals.h"
 #include "linker_phdr.h"
+#include "linker_tls.h"
 #include "linker_utils.h"
 
 #include "private/bionic_globals.h"
@@ -51,6 +52,7 @@
 
 #include <async_safe/log.h>
 #include <bionic/libc_init_common.h>
+#include <bionic/pthread_internal.h>
 
 #include <vector>
 
@@ -450,6 +452,10 @@
     si->increment_ref_count();
   }
 
+  layout_linker_static_tls();
+
+  __libc_init_main_thread_final();
+
   if (!get_cfi_shadow()->InitialLinkDone(solist)) __linker_cannot_link(g_argv[0]);
 
   si->call_pre_init_constructors();
@@ -557,7 +563,8 @@
 extern "C" ElfW(Addr) __linker_init(void* raw_args) {
   // Initialize TLS early so system calls and errno work.
   KernelArgumentBlock args(raw_args);
-  __libc_init_main_thread_early(args);
+  bionic_tcb temp_tcb = {};
+  __libc_init_main_thread_early(args, &temp_tcb);
 
   // When the linker is run by itself (rather than as an interpreter for
   // another program), AT_BASE is 0.
diff --git a/linker/linker_relocs.h b/linker/linker_relocs.h
index 4bab0e0..68191f9 100644
--- a/linker/linker_relocs.h
+++ b/linker/linker_relocs.h
@@ -34,30 +34,46 @@
 
 #if defined (__aarch64__)
 
-#define R_GENERIC_JUMP_SLOT R_AARCH64_JUMP_SLOT
-#define R_GENERIC_GLOB_DAT  R_AARCH64_GLOB_DAT
-#define R_GENERIC_RELATIVE  R_AARCH64_RELATIVE
-#define R_GENERIC_IRELATIVE R_AARCH64_IRELATIVE
+#define R_GENERIC_JUMP_SLOT     R_AARCH64_JUMP_SLOT
+#define R_GENERIC_GLOB_DAT      R_AARCH64_GLOB_DAT
+#define R_GENERIC_RELATIVE      R_AARCH64_RELATIVE
+#define R_GENERIC_IRELATIVE     R_AARCH64_IRELATIVE
+#define R_GENERIC_TLS_DTPMOD    R_AARCH64_TLS_DTPMOD64
+#define R_GENERIC_TLS_DTPREL    R_AARCH64_TLS_DTPREL64
+#define R_GENERIC_TLS_TPREL     R_AARCH64_TLS_TPREL64
+#define R_GENERIC_TLSDESC       R_AARCH64_TLSDESC
 
 #elif defined (__arm__)
 
-#define R_GENERIC_JUMP_SLOT R_ARM_JUMP_SLOT
-#define R_GENERIC_GLOB_DAT  R_ARM_GLOB_DAT
-#define R_GENERIC_RELATIVE  R_ARM_RELATIVE
-#define R_GENERIC_IRELATIVE R_ARM_IRELATIVE
+#define R_GENERIC_JUMP_SLOT     R_ARM_JUMP_SLOT
+#define R_GENERIC_GLOB_DAT      R_ARM_GLOB_DAT
+#define R_GENERIC_RELATIVE      R_ARM_RELATIVE
+#define R_GENERIC_IRELATIVE     R_ARM_IRELATIVE
+#define R_GENERIC_TLS_DTPMOD    R_ARM_TLS_DTPMOD32
+#define R_GENERIC_TLS_DTPREL    R_ARM_TLS_DTPOFF32
+#define R_GENERIC_TLS_TPREL     R_ARM_TLS_TPOFF32
+#define R_GENERIC_TLSDESC       R_ARM_TLS_DESC
 
 #elif defined (__i386__)
 
-#define R_GENERIC_JUMP_SLOT R_386_JMP_SLOT
-#define R_GENERIC_GLOB_DAT  R_386_GLOB_DAT
-#define R_GENERIC_RELATIVE  R_386_RELATIVE
-#define R_GENERIC_IRELATIVE R_386_IRELATIVE
+#define R_GENERIC_JUMP_SLOT     R_386_JMP_SLOT
+#define R_GENERIC_GLOB_DAT      R_386_GLOB_DAT
+#define R_GENERIC_RELATIVE      R_386_RELATIVE
+#define R_GENERIC_IRELATIVE     R_386_IRELATIVE
+#define R_GENERIC_TLS_DTPMOD    R_386_TLS_DTPMOD32
+#define R_GENERIC_TLS_DTPREL    R_386_TLS_DTPOFF32
+#define R_GENERIC_TLS_TPREL     R_386_TLS_TPOFF
+#define R_GENERIC_TLSDESC       R_386_TLS_DESC
 
 #elif defined (__x86_64__)
 
-#define R_GENERIC_JUMP_SLOT R_X86_64_JUMP_SLOT
-#define R_GENERIC_GLOB_DAT  R_X86_64_GLOB_DAT
-#define R_GENERIC_RELATIVE  R_X86_64_RELATIVE
-#define R_GENERIC_IRELATIVE R_X86_64_IRELATIVE
+#define R_GENERIC_JUMP_SLOT     R_X86_64_JUMP_SLOT
+#define R_GENERIC_GLOB_DAT      R_X86_64_GLOB_DAT
+#define R_GENERIC_RELATIVE      R_X86_64_RELATIVE
+#define R_GENERIC_IRELATIVE     R_X86_64_IRELATIVE
+#define R_GENERIC_TLS_DTPMOD    R_X86_64_DTPMOD64
+#define R_GENERIC_TLS_DTPREL    R_X86_64_DTPOFF64
+#define R_GENERIC_TLS_TPREL     R_X86_64_TPOFF64
+#define R_GENERIC_TLSDESC       R_X86_64_TLSDESC
 
 #endif
diff --git a/linker/linker_tls.cpp b/linker/linker_tls.cpp
new file mode 100644
index 0000000..3327453
--- /dev/null
+++ b/linker/linker_tls.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2019 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 "linker_tls.h"
+
+#include "private/bionic_defs.h"
+#include "private/bionic_elf_tls.h"
+#include "private/bionic_globals.h"
+#include "private/linker_native_bridge.h"
+
+__BIONIC_WEAK_FOR_NATIVE_BRIDGE
+extern "C" void __linker_reserve_bionic_tls_in_static_tls() {
+  __libc_shared_globals()->static_tls_layout.reserve_bionic_tls();
+}
+
+// Stub for linker static TLS layout.
+void layout_linker_static_tls() {
+  StaticTlsLayout& layout = __libc_shared_globals()->static_tls_layout;
+  layout.reserve_tcb();
+
+  // The pthread key data is located at the very front of bionic_tls. As a
+  // temporary workaround, allocate bionic_tls just after the thread pointer so
+  // Golang can find its pthread key, as long as the executable's TLS segment is
+  // small enough. Specifically, Golang scans forward 384 words from the TP on
+  // ARM.
+  //  - http://b/118381796
+  //  - https://groups.google.com/d/msg/golang-dev/yVrkFnYrYPE/2G3aFzYqBgAJ
+  __linker_reserve_bionic_tls_in_static_tls();
+
+  layout.finish_layout();
+}
diff --git a/linker/linker_tls.h b/linker/linker_tls.h
new file mode 100644
index 0000000..2f0a57d
--- /dev/null
+++ b/linker/linker_tls.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+
+#pragma once
+
+void layout_linker_static_tls();
diff --git a/tests/Android.bp b/tests/Android.bp
index 899fc66..beed07a 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -42,6 +42,7 @@
     sanitize: {
         never: true,
     },
+    bootstrap: true,
 }
 
 // -----------------------------------------------------------------------------
@@ -64,6 +65,7 @@
     name: "libBionicStandardTests",
     defaults: ["bionic_tests_defaults"],
     srcs: [
+        "__aeabi_read_tp_test.cpp",
         "alloca_test.cpp",
         "android_get_device_api_level.cpp",
         "arpa_inet_test.cpp",
diff --git a/tests/__aeabi_read_tp_test.cpp b/tests/__aeabi_read_tp_test.cpp
new file mode 100644
index 0000000..ab96af9
--- /dev/null
+++ b/tests/__aeabi_read_tp_test.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2019 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 <gtest/gtest.h>
+
+#include "private/__get_tls.h"
+
+#if defined(__arm__)
+extern "C" void* __aeabi_read_tp();
+TEST(aeabi, read_tp) {
+  ASSERT_EQ(__aeabi_read_tp(), static_cast<void*>(__get_tls()));
+}
+#endif
diff --git a/tests/grp_pwd_file_test.cpp b/tests/grp_pwd_file_test.cpp
index 2cbad62..66866fb 100644
--- a/tests/grp_pwd_file_test.cpp
+++ b/tests/grp_pwd_file_test.cpp
@@ -26,7 +26,7 @@
 template <typename T>
 class FileUnmapper {
  public:
-  FileUnmapper(T& file) : file_(file) {
+  explicit FileUnmapper(T& file) : file_(file) {
   }
   ~FileUnmapper() {
     file_.Unmap();
diff --git a/tests/libs/thread_local_dtor.cpp b/tests/libs/thread_local_dtor.cpp
index cefff7a..90fd418 100644
--- a/tests/libs/thread_local_dtor.cpp
+++ b/tests/libs/thread_local_dtor.cpp
@@ -30,7 +30,7 @@
 
 class TestClass {
  public:
-  TestClass(bool* flag) : flag_(flag) {}
+  explicit TestClass(bool* flag) : flag_(flag) {}
   ~TestClass() {
     *flag_ = true;
   }
diff --git a/tests/libs/thread_local_dtor2.cpp b/tests/libs/thread_local_dtor2.cpp
index 9b2b164..177c91b 100644
--- a/tests/libs/thread_local_dtor2.cpp
+++ b/tests/libs/thread_local_dtor2.cpp
@@ -30,7 +30,7 @@
 
 class TestClass {
  public:
-  TestClass(bool* flag) : flag_(flag) {}
+  explicit TestClass(bool* flag) : flag_(flag) {}
   ~TestClass() {
     *flag_ = true;
   }
diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp
index 84ce531..1c57264 100644
--- a/tests/pthread_test.cpp
+++ b/tests/pthread_test.cpp
@@ -2582,9 +2582,9 @@
     ASSERT_EQ(0, munmap(pages[i], kPageSize));
   }
 
-  // Creating a thread uses at least six VMAs: the stack, the TLS, and a guard each side of both.
-  // So we should have seen at least six failures.
-  ASSERT_GE(EAGAIN_count, 6U);
+  // Creating a thread uses at least three VMAs: the combined stack and TLS, and a guard on each
+  // side. So we should have seen at least three failures.
+  ASSERT_GE(EAGAIN_count, 3U);
 
   for (; i < pages.size(); ++i) {
     ASSERT_EQ(0, munmap(pages[i], kPageSize));
diff --git a/tests/stack_protector_test_helper.cpp b/tests/stack_protector_test_helper.cpp
index 3f15a12..2db4ef1 100644
--- a/tests/stack_protector_test_helper.cpp
+++ b/tests/stack_protector_test_helper.cpp
@@ -21,6 +21,6 @@
   // the line of defense *after* that.
   // Without volatile, the generic x86/x86-64 targets don't write to the stack.
   volatile char* p = buf;
-  int size = static_cast<int>(sizeof(buf) + 1);
+  int size = static_cast<int>(sizeof(buf) + sizeof(void*));
   while ((p - buf) < size) *p++ = '\0';
 }
diff --git a/tests/stdlib_test.cpp b/tests/stdlib_test.cpp
index 00850f6..a249b75 100644
--- a/tests/stdlib_test.cpp
+++ b/tests/stdlib_test.cpp
@@ -876,16 +876,18 @@
   ASSERT_EQ(3, getloadavg(load, INT_MAX));
 
   // Read /proc/loadavg and check that it's "close enough".
-  load[0] = nan("");
   double expected[3];
   std::unique_ptr<FILE, decltype(&fclose)> fp{fopen("/proc/loadavg", "re"), fclose};
   ASSERT_EQ(3, fscanf(fp.get(), "%lf %lf %lf", &expected[0], &expected[1], &expected[2]));
+  load[0] = load[1] = load[2] = nan("");
   ASSERT_EQ(3, getloadavg(load, 3));
 
-  // It's probably too flaky if we look at the 1-minute average, so we just place a NaN there
-  // and check that it's overwritten with _something_.
+  // Check that getloadavg(3) at least overwrote the NaNs.
   ASSERT_FALSE(isnan(load[0]));
-  // For the others, rounding to an integer is pessimistic but at least gives us a sanity check.
-  ASSERT_DOUBLE_EQ(rint(expected[1]), rint(load[1]));
-  ASSERT_DOUBLE_EQ(rint(expected[2]), rint(load[2]));
+  ASSERT_FALSE(isnan(load[1]));
+  ASSERT_FALSE(isnan(load[2]));
+  // And that the difference between /proc/loadavg and getloadavg(3) is "small".
+  ASSERT_TRUE(fabs(expected[0] - load[0]) < 0.5) << expected[0] << ' ' << load[0];
+  ASSERT_TRUE(fabs(expected[1] - load[1]) < 0.5) << expected[1] << ' ' << load[1];
+  ASSERT_TRUE(fabs(expected[2] - load[2]) < 0.5) << expected[2] << ' ' << load[2];
 }
diff --git a/tests/sys_prctl_test.cpp b/tests/sys_prctl_test.cpp
index 7afa626..cd23c0a 100644
--- a/tests/sys_prctl_test.cpp
+++ b/tests/sys_prctl_test.cpp
@@ -20,6 +20,7 @@
 #include <sys/capability.h>
 #include <sys/mman.h>
 #include <sys/prctl.h>
+#include <sys/utsname.h>
 #include <unistd.h>
 
 #include <string>
@@ -75,10 +76,14 @@
       "https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/"
       "?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3";
 
+  utsname u = {};
+  ASSERT_EQ(0, uname(&u));
+
+  errno = 0;
   auto err = prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_CLEAR_ALL, 0, 0, 0);
   EXPECT_EQ(0, err);
   // EINVAL -> unrecognized prctl option
-  ASSERT_NE(EINVAL, errno) << "kernel missing required commits:\n"
+  ASSERT_NE(EINVAL, errno) << "kernel (" << u.release << ") missing required commits:\n"
                            << caps_sha << "\n"
                            << caps_typo_sha << "\n";
 
diff --git a/tests/sys_time_test.cpp b/tests/sys_time_test.cpp
index 16187eb..d033364 100644
--- a/tests/sys_time_test.cpp
+++ b/tests/sys_time_test.cpp
@@ -147,7 +147,7 @@
     tv2.tv_usec += 1000000;
   }
 
-  // Should be less than (a very generous, to try to avoid flakiness) 2ms (2000us).
+  // Should be less than (a very generous, to try to avoid flakiness) 5ms (5000us).
   ASSERT_EQ(0, tv2.tv_sec);
-  ASSERT_LT(tv2.tv_usec, 2000);
+  ASSERT_LT(tv2.tv_usec, 5000);
 }
diff --git a/tools/Android.bp b/tools/Android.bp
index b44c296..c540c3c 100644
--- a/tools/Android.bp
+++ b/tools/Android.bp
@@ -1 +1,6 @@
 subdirs = ["*"]
+
+filegroup {
+    name: "bionic-generate-version-script",
+    srcs: ["generate-version-script.py"],
+}
diff --git a/tools/generate-version-script.py b/tools/generate-version-script.py
new file mode 100755
index 0000000..acfe218
--- /dev/null
+++ b/tools/generate-version-script.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+
+# This tool is used to generate the version scripts for libc, libm, libdl,
+# and libstdc++ for every architecture.
+
+# usage: generate-version-script.py ARCH INPUT OUTPUT
+
+import sys
+
+def has_arch_tags(tags):
+  for arch in ["arm", "arm64", "x86", "x86_64"]:
+    if arch in tags:
+      return True
+  return False
+
+def GenerateVersionScript(arch, in_filename, out_filename):
+  with open(out_filename, "w") as fout:
+    with open(in_filename, "r") as fin:
+      for line in fin:
+        index = line.find("#")
+        if index != -1:
+          tags = line[index+1:].split()
+          if arch not in tags and has_arch_tags(tags):
+            continue
+        fout.write(line)
+
+arch = sys.argv[1]
+in_filename = sys.argv[2]
+out_filename = sys.argv[3]
+GenerateVersionScript(arch, in_filename, out_filename)