Merge "linker_note_gnu_property_test: clarify naming." into main
diff --git a/libc/bionic/libc_init_common.cpp b/libc/bionic/libc_init_common.cpp
index 8c7a49b..94ba7e4 100644
--- a/libc/bionic/libc_init_common.cpp
+++ b/libc/bionic/libc_init_common.cpp
@@ -210,9 +210,9 @@
 
 extern "C" void scudo_malloc_set_add_large_allocation_slack(int add_slack);
 
-__BIONIC_WEAK_FOR_NATIVE_BRIDGE void __libc_set_target_sdk_version(int target __unused) {
+__BIONIC_WEAK_FOR_NATIVE_BRIDGE void __libc_set_target_sdk_version(int target_api_level __unused) {
 #if defined(USE_SCUDO) && !__has_feature(hwaddress_sanitizer)
-  scudo_malloc_set_add_large_allocation_slack(target < __ANDROID_API_S__);
+  scudo_malloc_set_add_large_allocation_slack(target_api_level < 31);
 #endif
 }
 
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index a8d09eb..ba20c51 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -118,12 +118,15 @@
 
 static void __init_shadow_call_stack(pthread_internal_t* thread __unused) {
 #if defined(__aarch64__) || defined(__riscv)
-  // Allocate the stack and the guard region.
+  // Allocate the shadow call stack and its guard region.
   char* scs_guard_region = reinterpret_cast<char*>(
-      mmap(nullptr, SCS_GUARD_REGION_SIZE, 0, MAP_PRIVATE | MAP_ANON, -1, 0));
+      mmap(nullptr, SCS_GUARD_REGION_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0));
+  if (scs_guard_region == MAP_FAILED) {
+    async_safe_fatal("failed to allocate shadow stack: %m");
+  }
   thread->shadow_call_stack_guard_region = scs_guard_region;
 
-  // The address is aligned to SCS_SIZE so that we only need to store the lower log2(SCS_SIZE) bits
+  // Align the address to SCS_SIZE so that we only need to store the lower log2(SCS_SIZE) bits
   // in jmp_buf. See the SCS commentary in pthread_internal.h for more detail.
   char* scs_aligned_guard_region =
       reinterpret_cast<char*>(align_up(reinterpret_cast<uintptr_t>(scs_guard_region), SCS_SIZE));
@@ -349,7 +352,7 @@
 extern "C" int __rt_sigprocmask(int, const sigset64_t*, sigset64_t*, size_t);
 
 __attribute__((no_sanitize("hwaddress")))
-#ifdef __aarch64__
+#if defined(__aarch64__)
 // This function doesn't return, but it does appear in stack traces. Avoid using return PAC in this
 // function because we may end up resetting IA, which may confuse unwinders due to mismatching keys.
 __attribute__((target("branch-protection=bti")))
@@ -368,13 +371,13 @@
   __set_stack_and_tls_vma_name(false);
   __init_additional_stacks(thread);
   __rt_sigprocmask(SIG_SETMASK, &thread->start_mask, nullptr, sizeof(thread->start_mask));
-#ifdef __aarch64__
+#if defined(__aarch64__)
   // Chrome's sandbox prevents this prctl, so only reset IA if the target SDK level is high enough.
   // Furthermore, processes loaded from vendor partitions may have their own sandboxes that would
-  // reject the prctl. Because no devices launched with PAC enabled before S, we can avoid issues on
-  // upgrading devices by checking for PAC support before issuing the prctl.
+  // reject the prctl. Because no devices launched with PAC enabled before API level 31, we can
+  // avoid issues on upgrading devices by checking for PAC support before issuing the prctl.
   static const bool pac_supported = getauxval(AT_HWCAP) & HWCAP_PACA;
-  if (pac_supported && android_get_application_target_sdk_version() >= __ANDROID_API_S__) {
+  if (pac_supported && android_get_application_target_sdk_version() >= 31) {
     prctl(PR_PAC_RESET_KEYS, PR_PAC_APIAKEY, 0, 0, 0);
   }
 #endif
diff --git a/libc/include/sys/_system_properties.h b/libc/include/sys/_system_properties.h
index 078e857..05612b3 100644
--- a/libc/include/sys/_system_properties.h
+++ b/libc/include/sys/_system_properties.h
@@ -26,8 +26,7 @@
  * SUCH DAMAGE.
  */
 
-#ifndef _INCLUDE_SYS__SYSTEM_PROPERTIES_H
-#define _INCLUDE_SYS__SYSTEM_PROPERTIES_H
+#pragma once
 
 #include <sys/cdefs.h>
 #include <stdint.h>
@@ -40,13 +39,67 @@
 
 __BEGIN_DECLS
 
+/**
+ * Reads the global serial number of the system properties _area_.
+ *
+ * Called to predict if a series of cached __system_property_find()
+ * objects will have seen __system_property_serial() values change.
+ * Also aids the converse, as changes in the global serial can
+ * also be used to predict if a failed __system_property_find()
+ * could in turn now find a new object; thus preventing the
+ * cycles of effort to poll __system_property_find().
+ *
+ * Typically called at beginning of a cache cycle to signal if _any_ possible
+ * changes have occurred since last. If there is, one may check each individual
+ * __system_property_serial() to confirm dirty, or __system_property_find()
+ * to check if the property now exists. If a call to __system_property_add()
+ * or __system_property_update() has completed between two calls to
+ * __system_property_area_serial() then the second call will return a larger
+ * value than the first call. Beware of race conditions as changes to the
+ * properties are not atomic, the main value of this call is to determine
+ * whether the expensive __system_property_find() is worth retrying to see if
+ * a property now exists.
+ *
+ * Returns the serial number on success, -1 on error.
+ */
+uint32_t __system_property_area_serial(void);
+
+/**
+ * Reads the serial number of a specific system property previously returned by
+ * __system_property_find(). This is a cheap way to check whether a system
+ * property has changed or not.
+ *
+ * Returns the serial number on success, -1 on error.
+ */
+uint32_t __system_property_serial(const prop_info* _Nonnull __pi);
+
+//
+// libc implementation detail.
+//
+
+/**
+ * Initializes the system properties area in read-only mode.
+ *
+ * This is called automatically during libc initialization,
+ * so user code should never need to call this.
+ *
+ * Returns 0 on success, -1 otherwise.
+ */
+int __system_properties_init(void);
+
+//
+// init implementation details.
+//
+
 #define PROP_SERVICE_NAME "property_service"
 #define PROP_SERVICE_FOR_SYSTEM_NAME "property_service_for_system"
 #define PROP_DIRNAME "/dev/__properties__"
 
+// Messages sent to init.
 #define PROP_MSG_SETPROP 1
 #define PROP_MSG_SETPROP2 0x00020001
 
+// Status codes returned by init (but not passed from libc to the caller).
 #define PROP_SUCCESS 0
 #define PROP_ERROR_READ_CMD 0x0004
 #define PROP_ERROR_READ_DATA 0x0008
@@ -58,93 +111,62 @@
 #define PROP_ERROR_HANDLE_CONTROL_MESSAGE 0x0020
 #define PROP_ERROR_SET_FAILED 0x0024
 
-/*
-** This was previously for testing, but now that SystemProperties is its own testable class,
-** there is never a reason to call this function and its implementation simply returns -1.
-*/
-int __system_property_set_filename(const char* __unused __filename);
-
-/*
-** Initialize the area to be used to store properties.  Can
-** only be done by a single process that has write access to
-** the property area.
-*/
+/**
+ * Initializes the area to be used to store properties.
+ *
+ * Can only be done by the process that has write access to the property area,
+ * typically init.
+ *
+ * See __system_properties_init() for the equivalent for all other processes.
+ */
 int __system_property_area_init(void);
 
-/* Read the global serial number of the system properties
-**
-** Called to predict if a series of cached __system_property_find
-** objects will have seen __system_property_serial values change.
-** But also aids the converse, as changes in the global serial can
-** also be used to predict if a failed __system_property_find
-** could in-turn now find a new object; thus preventing the
-** cycles of effort to poll __system_property_find.
-**
-** Typically called at beginning of a cache cycle to signal if _any_ possible
-** changes have occurred since last. If there is, one may check each individual
-** __system_property_serial to confirm dirty, or __system_property_find
-** to check if the property now exists. If a call to __system_property_add
-** or __system_property_update has completed between two calls to
-** __system_property_area_serial then the second call will return a larger
-** value than the first call. Beware of race conditions as changes to the
-** properties are not atomic, the main value of this call is to determine
-** whether the expensive __system_property_find is worth retrying to see if
-** a property now exists.
-**
-** Returns the serial number on success, -1 on error.
-*/
-uint32_t __system_property_area_serial(void);
-
-/* Add a new system property.  Can only be done by a single
-** process that has write access to the property area, and
-** that process must handle sequencing to ensure the property
-** does not already exist and that only one property is added
-** or updated at a time.
-**
-** Returns 0 on success, -1 if the property area is full.
-*/
+/**
+ * Adds a new system property.
+ * Can only be done by the process that has write access to the property area --
+ * typically init -- which must handle sequencing to ensure that only one property is
+ * updated at a time.
+ *
+ * Returns 0 on success, -1 if the property area is full.
+ */
 int __system_property_add(const char* _Nonnull __name, unsigned int __name_length, const char* _Nonnull __value, unsigned int __value_length);
 
-/* Update the value of a system property returned by
-** __system_property_find.  Can only be done by a single process
-** that has write access to the property area, and that process
-** must handle sequencing to ensure that only one property is
-** updated at a time.
-**
-** Returns 0 on success, -1 if the parameters are incorrect.
-*/
+/**
+ * Updates the value of a system property returned by __system_property_find().
+ * Can only be done by the process that has write access to the property area --
+ * typically init -- which must handle sequencing to ensure that only one property is
+ * updated at a time.
+ *
+ * Returns 0 on success, -1 if the parameters are incorrect.
+ */
 int __system_property_update(prop_info* _Nonnull __pi, const char* _Nonnull __value, unsigned int __value_length);
 
-/* Read the serial number of a system property returned by
-** __system_property_find.
-**
-** Returns the serial number on success, -1 on error.
-*/
-uint32_t __system_property_serial(const prop_info* _Nonnull __pi);
-
-/* Initialize the system properties area in read only mode.
- * Should be done by all processes that need to read system
- * properties.
+/**
+ * Reloads the system properties from disk.
+ * Not intended for use by any apps except the Zygote.
+ * Should only be called from the main thread.
+ *
+ * Pointers received from functions such as __system_property_find()
+ * may be invalidated by calls to this function.
  *
  * Returns 0 on success, -1 otherwise.
- */
-int __system_properties_init(void);
-
-/*
- * Reloads the system properties from disk.
- * Not intended for use by any apps except the Zygote. Should only be called from the main thread.
  *
- * NOTE: Any pointers received from methods such as __system_property_find should be assumed to be
- * invalid after this method is called.
- *
- * Returns 0 on success, -1 if the system properties failed to re-initialize (same conditions as
- * __system properties_init)
+ * Available since API level 35.
  */
-int __system_properties_zygote_reload(void) __INTRODUCED_IN(__ANDROID_API_V__);
+int __system_properties_zygote_reload(void) __INTRODUCED_IN(35);
 
-/* Deprecated: use __system_property_wait instead. */
+//
+// Deprecated functions.
+//
+
+/** Deprecated: use __system_property_wait instead. */
 uint32_t __system_property_wait_any(uint32_t __old_serial);
 
-__END_DECLS
+/**
+ * Deprecated: previously for testing, but now that SystemProperties is its own
+ * testable class, there is never a reason to call this function and its
+ * implementation simply returns -1.
+ */
+int __system_property_set_filename(const char* __unused __filename);
 
-#endif
+__END_DECLS
diff --git a/libc/include/sys/select.h b/libc/include/sys/select.h
index 84c2621..437a234 100644
--- a/libc/include/sys/select.h
+++ b/libc/include/sys/select.h
@@ -44,7 +44,7 @@
 typedef unsigned long fd_mask;
 
 /**
- * The limit on the largest fd that can be used with this API.
+ * The limit on the largest fd that can be used with fd_set.
  * Use <poll.h> instead.
  */
 #define FD_SETSIZE 1024
@@ -52,6 +52,9 @@
 
 /**
  * The type of a file descriptor set. Limited to 1024 fds.
+ * The underlying system calls do not have this limit,
+ * and callers can allocate their own sets with calloc().
+ *
  * Use <poll.h> instead.
  */
 typedef struct {
@@ -60,30 +63,27 @@
 
 #define __FDELT(fd) ((fd) / NFDBITS)
 #define __FDMASK(fd) (1UL << ((fd) % NFDBITS))
-#define __FDS_BITS(type,set) (__BIONIC_CAST(static_cast, type, set)->fds_bits)
-
-/* Inline loop so we don't have to declare memset. */
-#define FD_ZERO(set) \
-  do { \
-    size_t __i; \
-    for (__i = 0; __i < sizeof(fd_set)/sizeof(fd_mask); ++__i) { \
-      (set)->fds_bits[__i] = 0; \
-    } \
-  } while (0)
+#define __FDS_BITS(type, set) (__BIONIC_CAST(static_cast, type, set)->fds_bits)
 
 void __FD_CLR_chk(int, fd_set* _Nonnull , size_t);
 void __FD_SET_chk(int, fd_set* _Nonnull, size_t);
 int __FD_ISSET_chk(int, const fd_set* _Nonnull, size_t);
 
-#define __FD_CLR(fd, set) (__FDS_BITS(fd_set*,set)[__FDELT(fd)] &= ~__FDMASK(fd))
-#define __FD_SET(fd, set) (__FDS_BITS(fd_set*,set)[__FDELT(fd)] |= __FDMASK(fd))
-#define __FD_ISSET(fd, set) ((__FDS_BITS(const fd_set*,set)[__FDELT(fd)] & __FDMASK(fd)) != 0)
+/** FD_CLR() with no bounds checking for users that allocated their own set. */
+#define __FD_CLR(fd, set) (__FDS_BITS(fd_set*, set)[__FDELT(fd)] &= ~__FDMASK(fd))
+/** FD_SET() with no bounds checking for users that allocated their own set. */
+#define __FD_SET(fd, set) (__FDS_BITS(fd_set*, set)[__FDELT(fd)] |= __FDMASK(fd))
+/** FD_ISSET() with no bounds checking for users that allocated their own set. */
+#define __FD_ISSET(fd, set) ((__FDS_BITS(const fd_set*, set)[__FDELT(fd)] & __FDMASK(fd)) != 0)
 
-/** Removes `fd` from the given set. Use <poll.h> instead. */
+/** Removes all 1024 fds from the given set. Use <poll.h> instead. */
+#define FD_ZERO(set) __builtin_memset(set, 0, sizeof(*__BIONIC_CAST(static_cast, const fd_set*, set)))
+
+/** Removes `fd` from the given set. Limited to fds under 1024. Use <poll.h> instead. */
 #define FD_CLR(fd, set) __FD_CLR_chk(fd, set, __bos(set))
-/** Adds `fd` to the given set. Use <poll.h> instead. */
+/** Adds `fd` to the given set. Limited to fds under 1024. Use <poll.h> instead. */
 #define FD_SET(fd, set) __FD_SET_chk(fd, set, __bos(set))
-/** Tests whether `fd` is in the given set. Use <poll.h> instead. */
+/** Tests whether `fd` is in the given set. Limited to fds under 1024. Use <poll.h> instead. */
 #define FD_ISSET(fd, set) __FD_ISSET_chk(fd, set, __bos(set))
 
 /**
diff --git a/libc/libc.map.txt b/libc/libc.map.txt
index f56a791..cc2701b 100644
--- a/libc/libc.map.txt
+++ b/libc/libc.map.txt
@@ -8,29 +8,29 @@
     __atomic_swap; # arm
     __b64_ntop;
     __b64_pton;
-    __cmsg_nxthdr; # introduced=21
-    __connect; # arm x86 introduced=21
-    __ctype_get_mb_cur_max; # introduced=21
+    __cmsg_nxthdr;
+    __connect; # arm x86
+    __ctype_get_mb_cur_max;
     __cxa_atexit;
     __cxa_finalize;
     __cxa_thread_atexit_impl; # introduced=23
     __dn_comp;
     __dn_count_labels;
     __dn_skipname;
-    __epoll_pwait; # arm x86 introduced=21
+    __epoll_pwait; # arm x86
     __errno;
-    __exit; # arm x86 introduced=21
-    __fadvise64; # x86 introduced=21
+    __exit; # arm x86
+    __fadvise64; # x86
     __fbufsize; # introduced=23
     __fcntl64; # arm x86
-    __FD_CLR_chk; # introduced=21
-    __FD_ISSET_chk; # introduced=21
-    __FD_SET_chk; # introduced=21
-    __fgets_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __FD_CLR_chk;
+    __FD_ISSET_chk;
+    __FD_SET_chk;
+    __fgets_chk;
     __flbf; # introduced=23
     __fp_nquery;
     __fp_query;
-    __fpclassify; # introduced=21
+    __fpclassify;
     __fpclassifyd;
     __fpclassifyf;
     __fpclassifyl;
@@ -41,9 +41,9 @@
     __fstatfs64; # arm x86
     __fwritable; # introduced=23
     __get_h_errno;
-    __getcpu; # arm x86 introduced-arm=12 introduced-x86=12
+    __getcpu; # arm x86
     __getcwd; # arm x86
-    __getpid; # arm x86 introduced=21
+    __getpid; # arm x86
     __getpriority; # arm x86
     __gnu_basename; # introduced=23
     __gnu_strerror_r; # introduced=23
@@ -55,24 +55,24 @@
     __isinf;
     __isinff;
     __isinfl;
-    __isnan; # introduced=21
-    __isnanf; # introduced=21
+    __isnan;
+    __isnanf;
     __isnanl;
     __isnormal;
     __isnormalf;
     __isnormall;
     __isthreaded; # arm x86 var
-    __libc_current_sigrtmax; # introduced=21
-    __libc_current_sigrtmin; # introduced=21
+    __libc_current_sigrtmax;
+    __libc_current_sigrtmin;
     __libc_init;
     __llseek; # arm x86
     __loc_aton;
     __loc_ntoa;
     __memchr_chk; # introduced=23
-    __memcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __memmove_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __memcpy_chk;
+    __memmove_chk;
     __memrchr_chk; # introduced=23
-    __memset_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __memset_chk;
     __mmap2; # arm x86
     __ns_format_ttl; # arm x86 introduced=22
     __ns_get16; # arm x86 introduced=22
@@ -96,9 +96,9 @@
     __ns_skiprr; # arm x86 introduced=22
     __ns_sprintrr; # arm x86 introduced=22
     __ns_sprintrrf; # arm x86 introduced=22
-    __open_2; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __open_2;
     __openat; # arm x86
-    __openat_2; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __openat_2;
     __p_cdname;
     __p_cdnname;
     __p_class;
@@ -113,23 +113,23 @@
     __p_type;
     __p_type_syms; # var
     __poll_chk; # introduced=23
-    __ppoll; # arm x86 introduced=21
+    __ppoll; # arm x86
     __ppoll_chk; # introduced=23
     __ppoll64_chk; # introduced=28
     __pread64_chk; # introduced=23
     __pread_chk; # introduced=23
     __progname; # var
-    __pselect6; # arm x86 introduced=21
+    __pselect6; # arm x86
     __pthread_cleanup_pop;
     __pthread_cleanup_push;
     __ptrace; # arm x86
     __putlong;
     __putshort;
-    __read_chk; # introduced=21
+    __read_chk;
     __readlink_chk; # introduced=23
     __readlinkat_chk; # introduced=23
     __reboot; # arm x86
-    __recvfrom_chk; # introduced=21
+    __recvfrom_chk;
     __register_atfork; # introduced=23
     __res_close;
     __res_dnok;
@@ -152,83 +152,83 @@
     __res_send_setqhook;
     __res_send_setrhook;
     __rt_sigaction; # arm x86
-    __rt_sigpending; # arm x86 introduced=21
+    __rt_sigpending; # arm x86
     __rt_sigprocmask; # arm x86
-    __rt_sigsuspend; # arm x86 introduced=21
+    __rt_sigsuspend; # arm x86
     __rt_sigtimedwait; # arm x86
-    __sched_cpualloc; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpucount; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_cpufree; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    __sched_getaffinity; # arm x86 introduced=12
+    __sched_cpualloc;
+    __sched_cpucount;
+    __sched_cpufree;
+    __sched_getaffinity; # arm x86
     __set_thread_area; # x86
-    __set_tid_address; # arm x86 introduced=21
+    __set_tid_address; # arm x86
     __set_tls; # arm
     __sF; # var
-    __sigaction; # arm x86 introduced=21
-    __snprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __socket; # arm x86 introduced=21
-    __sprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __sigaction; # arm x86
+    __snprintf_chk;
+    __socket; # arm x86
+    __sprintf_chk;
     __stack_chk_fail;
     __stack_chk_guard; # var
     __statfs64; # arm x86
-    __stpcpy_chk; # introduced=21
-    __stpncpy_chk; # introduced=21
-    __stpncpy_chk2; # introduced=21
-    __strcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
-    __strcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcat_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strlcpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strlen_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strncat_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __strncpy_chk2; # introduced=21
-    __strrchr_chk; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    __stpcpy_chk;
+    __stpncpy_chk;
+    __stpncpy_chk2;
+    __strcat_chk;
+    __strchr_chk;
+    __strcpy_chk;
+    __strlcat_chk;
+    __strlcpy_chk;
+    __strlen_chk;
+    __strncat_chk;
+    __strncpy_chk;
+    __strncpy_chk2;
+    __strrchr_chk;
     __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-x86=19 introduced-x86_64=21
+    __system_property_foreach;
     __system_property_get;
     __system_property_read;
-    __system_property_serial; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    __system_property_set; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    __system_property_serial;
+    __system_property_set;
     __timer_create; # arm x86
     __timer_delete; # arm x86
     __timer_getoverrun; # arm x86
     __timer_gettime; # arm x86
     __timer_settime; # arm x86
-    __umask_chk; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
-    __vsnprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    __vsprintf_chk; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    __umask_chk;
+    __vsnprintf_chk;
+    __vsprintf_chk;
     __waitid; # arm x86
     _ctype_; # var
-    _Exit; # introduced=21
+    _Exit;
     _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
+    _resolv_delete_cache_for_net;
+    _resolv_flush_cache_for_net;
+    _resolv_set_nameservers_for_net;
     _setjmp;
-    _tolower; # introduced=21
+    _tolower;
     _tolower_tab_; # arm x86 var
-    _toupper; # introduced=21
+    _toupper;
     _toupper_tab_; # arm x86 var
     abort;
-    abs; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    abs;
     accept;
-    accept4; # introduced=21
+    accept4;
     access;
     acct;
     alarm;
     alphasort;
-    alphasort64; # introduced=21
-    android_set_abort_message; # introduced=21
+    alphasort64;
+    android_set_abort_message;
     arc4random;
     arc4random_buf;
     arc4random_uniform;
@@ -237,8 +237,8 @@
     asctime64_r; # arm x86
     asctime_r;
     asprintf;
-    at_quick_exit; # introduced=21
-    atof; # introduced=21
+    at_quick_exit;
+    atof;
     atoi;
     atol;
     atoll;
@@ -249,18 +249,18 @@
     brk;
     bsearch;
     btowc;
-    c16rtomb; # introduced=21
-    c32rtomb; # introduced=21
+    c16rtomb;
+    c32rtomb;
     cacheflush; # arm
     calloc;
     capget;
     capset;
-    cfgetispeed; # introduced=21
-    cfgetospeed; # introduced=21
-    cfmakeraw; # introduced=21
-    cfsetispeed; # introduced=21
-    cfsetospeed; # introduced=21
-    cfsetspeed; # introduced=21
+    cfgetispeed;
+    cfgetospeed;
+    cfmakeraw;
+    cfsetispeed;
+    cfsetospeed;
+    cfsetspeed;
     chdir;
     chmod;
     chown;
@@ -274,13 +274,13 @@
     clock_gettime;
     clock_nanosleep;
     clock_settime;
-    clone; # introduced-arm=9 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    clone;
     close;
     closedir;
     closelog;
     connect;
     creat;
-    creat64; # introduced=21
+    creat64;
     ctime;
     ctime64; # arm x86
     ctime64_r; # arm x86
@@ -294,20 +294,20 @@
     dirname_r; # arm x86
     div;
     dn_expand;
-    dprintf; # introduced=21
+    dprintf;
     drand48;
     dup;
     dup2;
-    dup3; # introduced=21
-    duplocale; # introduced=21
-    endmntent; # introduced=21
+    dup3;
+    duplocale;
+    endmntent;
     endservent;
     endutent;
     environ; # var
     epoll_create;
-    epoll_create1; # introduced=21
+    epoll_create1;
     epoll_ctl;
-    epoll_pwait; # introduced=21
+    epoll_pwait;
     epoll_wait;
     erand48;
     err;
@@ -317,10 +317,10 @@
     error_one_per_line; # var introduced=23
     error_print_progname; # var introduced=23
     errx;
-    ether_aton; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    ether_aton_r; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    ether_ntoa_r; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    ether_aton;
+    ether_aton_r;
+    ether_ntoa;
+    ether_ntoa_r;
     eventfd;
     eventfd_read;
     eventfd_write;
@@ -330,11 +330,11 @@
     execv;
     execve;
     execvp;
-    execvpe; # introduced=21
+    execvpe;
     exit;
     faccessat;
-    fallocate; # introduced=21
-    fallocate64; # introduced=21
+    fallocate;
+    fallocate64;
     fchdir;
     fchmod;
     fchmodat;
@@ -351,7 +351,7 @@
     ferror;
     ferror_unlocked; # introduced=23
     fflush;
-    ffs; # introduced-arm=9 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    ffs;
     fgetc;
     fgetln;
     fgetpos;
@@ -378,7 +378,7 @@
     fread;
     free;
     freeaddrinfo;
-    freelocale; # introduced=21
+    freelocale;
     fremovexattr;
     freopen;
     fscanf;
@@ -387,30 +387,30 @@
     fsetpos;
     fsetxattr;
     fstat;
-    fstat64; # introduced=21
+    fstat64;
     fstatat;
-    fstatat64; # introduced=21
+    fstatat64;
     fstatfs;
-    fstatfs64; # introduced=21
-    fstatvfs; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    fstatvfs64; # introduced=21
+    fstatfs64;
+    fstatvfs;
+    fstatvfs64;
     fsync;
     ftell;
     ftello;
     ftok;
     ftruncate;
-    ftruncate64; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    ftruncate64;
     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-x86=17 introduced-x86_64=21
-    ftw64; # introduced=21
+    fts_children;
+    fts_close;
+    fts_open;
+    fts_read;
+    fts_set;
+    ftw;
+    ftw64;
     funlockfile;
     funopen;
-    futimens; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    futimens;
     fwide;
     fwprintf;
     fwrite;
@@ -421,13 +421,13 @@
     get_nprocs_conf; # introduced=23
     get_phys_pages; # introduced=23
     getaddrinfo;
-    getauxval; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    getauxval;
     getc;
     getc_unlocked;
     getchar;
     getchar_unlocked;
     getcwd;
-    getdelim; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    getdelim;
     getegid;
     getenv;
     geteuid;
@@ -445,41 +445,41 @@
     gethostent;
     gethostname;
     getitimer;
-    getline; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    getline;
     getlogin;
     getmntent;
-    getmntent_r; # introduced=21
+    getmntent_r;
     getnameinfo;
     getnetbyaddr;
     getnetbyname;
     getopt;
     getopt_long;
     getopt_long_only;
-    getpagesize; # introduced=21
+    getpagesize;
     getpeername;
     getpgid;
     getpgrp;
     getpid;
     getppid;
     getpriority;
-    getprogname; # introduced=21
+    getprogname;
     getprotobyname;
     getprotobynumber;
     getpt;
     getpwnam;
-    getpwnam_r; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    getpwnam_r;
     getpwuid;
-    getpwuid_r; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    getpwuid_r;
     getresgid;
     getresuid;
     getrlimit;
-    getrlimit64; # introduced=21
+    getrlimit64;
     getrusage;
     gets;
     getservbyname;
     getservbyport;
     getservent;
-    getsid; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    getsid;
     getsockname;
     getsockopt;
     gettid;
@@ -493,21 +493,21 @@
     gmtime64; # arm x86
     gmtime64_r; # arm x86
     gmtime_r;
-    grantpt; # introduced=21
+    grantpt;
     herror;
     hstrerror;
-    htonl; # introduced=21
-    htons; # introduced=21
+    htonl;
+    htons;
     if_indextoname;
     if_nametoindex;
-    imaxabs; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    imaxdiv; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    imaxabs;
+    imaxdiv;
     inet_addr;
     inet_aton;
-    inet_lnaof; # introduced=21
-    inet_makeaddr; # introduced=21
-    inet_netof; # introduced=21
-    inet_network; # introduced=21
+    inet_lnaof;
+    inet_makeaddr;
+    inet_netof;
+    inet_network;
     inet_nsap_addr;
     inet_nsap_ntoa;
     inet_ntoa;
@@ -515,96 +515,96 @@
     inet_pton;
     init_module;
     initgroups;
-    initstate; # introduced=21
+    initstate;
     inotify_add_watch;
     inotify_init;
-    inotify_init1; # introduced=21
+    inotify_init1;
     inotify_rm_watch;
-    insque; # introduced=21
+    insque;
     ioctl;
     isalnum;
-    isalnum_l; # introduced=21
+    isalnum_l;
     isalpha;
-    isalpha_l; # introduced=21
+    isalpha_l;
     isascii;
     isatty;
     isblank;
-    isblank_l; # introduced=21
+    isblank_l;
     iscntrl;
-    iscntrl_l; # introduced=21
+    iscntrl_l;
     isdigit;
-    isdigit_l; # introduced=21
-    isfinite; # introduced=21
-    isfinitef; # introduced=21
-    isfinitel; # introduced=21
+    isdigit_l;
+    isfinite;
+    isfinitef;
+    isfinitel;
     isgraph;
-    isgraph_l; # introduced=21
-    isinf; # introduced=21
-    isinff; # introduced=21
-    isinfl; # introduced=21
+    isgraph_l;
+    isinf;
+    isinff;
+    isinfl;
     islower;
-    islower_l; # introduced=21
+    islower_l;
     isnan;
     isnanf;
-    isnanl; # introduced=21
-    isnormal; # introduced=21
-    isnormalf; # introduced=21
-    isnormall; # introduced=21
+    isnanl;
+    isnormal;
+    isnormalf;
+    isnormall;
     isprint;
-    isprint_l; # introduced=21
+    isprint_l;
     ispunct;
-    ispunct_l; # introduced=21
+    ispunct_l;
     isspace;
-    isspace_l; # introduced=21
+    isspace_l;
     isupper;
-    isupper_l; # introduced=21
+    isupper_l;
     iswalnum;
-    iswalnum_l; # introduced=21
+    iswalnum_l;
     iswalpha;
-    iswalpha_l; # introduced=21
-    iswblank; # introduced=21
-    iswblank_l; # introduced=21
+    iswalpha_l;
+    iswblank;
+    iswblank_l;
     iswcntrl;
-    iswcntrl_l; # introduced=21
+    iswcntrl_l;
     iswctype;
-    iswctype_l; # introduced=21
+    iswctype_l;
     iswdigit;
-    iswdigit_l; # introduced=21
+    iswdigit_l;
     iswgraph;
-    iswgraph_l; # introduced=21
+    iswgraph_l;
     iswlower;
-    iswlower_l; # introduced=21
+    iswlower_l;
     iswprint;
-    iswprint_l; # introduced=21
+    iswprint_l;
     iswpunct;
-    iswpunct_l; # introduced=21
+    iswpunct_l;
     iswspace;
-    iswspace_l; # introduced=21
+    iswspace_l;
     iswupper;
-    iswupper_l; # introduced=21
+    iswupper_l;
     iswxdigit;
-    iswxdigit_l; # introduced=21
+    iswxdigit_l;
     isxdigit;
-    isxdigit_l; # introduced=21
+    isxdigit_l;
     jrand48;
     kill;
     killpg;
     klogctl;
-    labs; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    labs;
     lchown;
     lcong48; # introduced=23
     ldexp;
     ldiv;
-    lfind; # introduced=21
+    lfind;
     lgetxattr;
     link;
-    linkat; # introduced=21
+    linkat;
     listen;
     listxattr;
-    llabs; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    llabs;
     lldiv;
     llistxattr;
-    localeconv; # introduced=21
+    localeconv;
     localtime;
     localtime64; # arm x86
     localtime64_r; # arm x86
@@ -613,26 +613,26 @@
     longjmp;
     lrand48;
     lremovexattr;
-    lsearch; # introduced=21
+    lsearch;
     lseek;
     lseek64;
     lsetxattr;
     lstat;
-    lstat64; # introduced=21
+    lstat64;
     madvise;
     mallinfo;
     malloc;
     malloc_info; # introduced=23
-    malloc_usable_size; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    malloc_usable_size;
     mbrlen;
-    mbrtoc16; # introduced=21
-    mbrtoc32; # introduced=21
+    mbrtoc16;
+    mbrtoc32;
     mbrtowc;
     mbsinit;
-    mbsnrtowcs; # introduced=21
+    mbsnrtowcs;
     mbsrtowcs;
-    mbstowcs; # introduced=21
-    mbtowc; # introduced=21
+    mbstowcs;
+    mbtowc;
     memalign;
     memccpy;
     memchr;
@@ -647,37 +647,37 @@
     mkdir;
     mkdirat;
     mkdtemp;
-    mkfifo; # introduced=21
+    mkfifo;
     mkfifoat; # introduced=23
     mknod;
-    mknodat; # introduced=21
+    mknodat;
     mkostemp; # introduced=23
     mkostemp64; # introduced=23
     mkostemps; # introduced=23
     mkostemps64; # introduced=23
     mkstemp;
-    mkstemp64; # introduced=21
+    mkstemp64;
     mkstemps;
     mkstemps64; # introduced=23
     mktemp;
     mktime;
     mktime64; # arm x86
     mlock;
-    mlockall; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    mlockall;
     mmap;
-    mmap64; # introduced=21
+    mmap64;
     mount;
     mprotect;
     mrand48;
     mremap;
     msync;
     munlock;
-    munlockall; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
+    munlockall;
     munmap;
     nanosleep;
-    newlocale; # introduced=21
-    nftw; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    nftw64; # introduced=21
+    newlocale;
+    nftw;
+    nftw64;
     nice;
     nrand48;
     ns_format_ttl; # arm64 x86_64 riscv64 introduced=22
@@ -703,14 +703,14 @@
     ns_sprintrr; # arm64 x86_64 riscv64 introduced=22
     ns_sprintrrf; # arm64 x86_64 riscv64 introduced=22
     nsdispatch;
-    ntohl; # introduced=21
-    ntohs; # introduced=21
+    ntohl;
+    ntohs;
     open;
-    open64; # introduced=21
+    open64;
     open_memstream; # introduced=23
     open_wmemstream; # introduced=23
     openat;
-    openat64; # introduced=21
+    openat64;
     opendir;
     openlog;
     openpty; # introduced=23
@@ -728,26 +728,26 @@
     pipe2;
     poll;
     popen;
-    posix_fadvise; # introduced=21
-    posix_fadvise64; # introduced=21
-    posix_fallocate; # introduced=21
-    posix_fallocate64; # introduced=21
+    posix_fadvise;
+    posix_fadvise64;
+    posix_fallocate;
+    posix_fallocate64;
     posix_madvise; # introduced=23
-    posix_memalign; # introduced=17
-    posix_openpt; # introduced=21
-    ppoll; # introduced=21
+    posix_memalign;
+    posix_openpt;
+    ppoll;
     prctl;
     pread;
-    pread64; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    pread64;
     printf;
     prlimit; # arm64 x86_64 riscv64
-    prlimit64; # introduced=21
+    prlimit64;
     process_vm_readv; # introduced=23
     process_vm_writev; # introduced=23
     pselect;
-    psiginfo; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    psignal; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    pthread_atfork; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    psiginfo;
+    psignal;
+    pthread_atfork;
     pthread_attr_destroy;
     pthread_attr_getdetachstate;
     pthread_attr_getguardsize;
@@ -770,15 +770,15 @@
     pthread_cond_signal;
     pthread_cond_timedwait;
     pthread_cond_timedwait_monotonic; # arm x86
-    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-arm64=28 introduced-x64_64=28
+    pthread_cond_timedwait_monotonic_np; # introduced-arm=9 introduced-x86=9 introduced-arm64=28 introduced-x64_64=28 introduced-riscv64=28
     pthread_cond_timedwait_relative_np; # arm x86
     pthread_cond_timeout_np; # arm x86
     pthread_cond_wait;
     pthread_condattr_destroy;
-    pthread_condattr_getclock; # introduced=21
+    pthread_condattr_getclock;
     pthread_condattr_getpshared;
     pthread_condattr_init;
-    pthread_condattr_setclock; # introduced=21
+    pthread_condattr_setclock;
     pthread_condattr_setpshared;
     pthread_create;
     pthread_detach;
@@ -788,7 +788,7 @@
     pthread_getcpuclockid;
     pthread_getschedparam;
     pthread_getspecific;
-    pthread_gettid_np; # introduced=21
+    pthread_gettid_np;
     pthread_join;
     pthread_key_create;
     pthread_key_delete;
@@ -797,7 +797,7 @@
     pthread_mutex_init;
     pthread_mutex_lock;
     pthread_mutex_lock_timeout_np; # arm x86
-    pthread_mutex_timedlock; # introduced=21
+    pthread_mutex_timedlock;
     pthread_mutex_trylock;
     pthread_mutex_unlock;
     pthread_mutexattr_destroy;
@@ -840,30 +840,30 @@
     putw; # arm x86
     putwc;
     putwchar;
-    pvalloc; # arm x86 introduced=17
+    pvalloc; # arm x86
     pwrite;
-    pwrite64; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    pwrite64;
     qsort;
-    quick_exit; # introduced=21
+    quick_exit;
     raise;
-    rand; # introduced=21
-    rand_r; # introduced=21
-    random; # introduced=21
+    rand;
+    rand_r;
+    random;
     read;
     readahead;
     readdir;
-    readdir64; # introduced=21
-    readdir64_r; # introduced=21
+    readdir64;
+    readdir64_r;
     readdir_r;
     readlink;
-    readlinkat; # introduced=21
+    readlinkat;
     readv;
     realloc;
     realpath;
     reboot;
     recv;
     recvfrom;
-    recvmmsg; # introduced=21
+    recvmmsg;
     recvmsg;
     regcomp;
     regerror;
@@ -871,7 +871,7 @@
     regfree;
     remove;
     removexattr;
-    remque; # introduced=21
+    remque;
     rename;
     renameat;
     res_init;
@@ -883,16 +883,16 @@
     rmdir;
     sbrk;
     scandir;
-    scandir64; # introduced=21
+    scandir64;
     scanf;
     sched_get_priority_max;
     sched_get_priority_min;
-    sched_getaffinity; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    sched_getcpu; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    sched_getaffinity;
+    sched_getcpu;
     sched_getparam;
     sched_getscheduler;
     sched_rr_get_interval;
-    sched_setaffinity; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    sched_setaffinity;
     sched_setparam;
     sched_setscheduler;
     sched_yield;
@@ -911,8 +911,8 @@
     sem_wait;
     send;
     sendfile;
-    sendfile64; # introduced=21
-    sendmmsg; # introduced=21
+    sendfile64;
+    sendmmsg;
     sendmsg;
     sendto;
     setbuf;
@@ -920,8 +920,8 @@
     setegid;
     setenv;
     seteuid;
-    setfsgid; # introduced=21
-    setfsuid; # introduced=21
+    setfsgid;
+    setfsuid;
     setgid;
     setgroups;
     sethostname; # introduced=23
@@ -930,22 +930,22 @@
     setlinebuf;
     setlocale;
     setlogmask;
-    setmntent; # introduced=21
-    setns; # introduced=21
+    setmntent;
+    setns;
     setpgid;
     setpgrp;
     setpriority;
-    setprogname; # introduced=21
+    setprogname;
     setregid;
     setresgid;
     setresuid;
     setreuid;
     setrlimit;
-    setrlimit64; # introduced=21
+    setrlimit64;
     setservent;
     setsid;
     setsockopt;
-    setstate; # introduced=21
+    setstate;
     settimeofday;
     setuid;
     setutent;
@@ -953,21 +953,21 @@
     setxattr;
     shutdown;
     sigaction;
-    sigaddset; # introduced=21
+    sigaddset;
     sigaltstack;
     sigblock; # arm x86 arm64 x86_64
-    sigdelset; # introduced=21
-    sigemptyset; # introduced=21
-    sigfillset; # introduced=21
+    sigdelset;
+    sigemptyset;
+    sigfillset;
     siginterrupt;
-    sigismember; # introduced=21
-    siglongjmp; # introduced-arm=9 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
-    signal; # introduced=21
-    signalfd; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    sigismember;
+    siglongjmp;
+    signal;
+    signalfd;
     sigpending;
     sigprocmask;
     sigqueue; # introduced=23
-    sigsetjmp; # introduced-arm=9 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    sigsetjmp;
     sigsetmask; # arm x86 arm64 x86_64
     sigsuspend;
     sigtimedwait; # introduced=23
@@ -977,23 +977,23 @@
     snprintf;
     socket;
     socketpair;
-    splice; # introduced=21
+    splice;
     sprintf;
-    srand; # introduced=21
+    srand;
     srand48;
-    srandom; # introduced=21
+    srandom;
     sscanf;
     stat;
-    stat64; # introduced=21
+    stat64;
     statfs;
-    statfs64; # introduced=21
-    statvfs; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    statvfs64; # introduced=21
+    statfs64;
+    statvfs;
+    statvfs64;
     stderr; # var introduced=23
     stdin; # var introduced=23
     stdout; # var introduced=23
-    stpcpy; # introduced=21
-    stpncpy; # introduced=21
+    stpcpy;
+    stpncpy;
     strcasecmp;
     strcasecmp_l; # introduced=23
     strcasestr;
@@ -1001,7 +1001,7 @@
     strchr;
     strcmp;
     strcoll;
-    strcoll_l; # introduced=21
+    strcoll_l;
     strcpy;
     strcspn;
     strdup;
@@ -1009,7 +1009,7 @@
     strerror_l; # introduced=23
     strerror_r;
     strftime;
-    strftime_l; # introduced=21
+    strftime_l;
     strlcat;
     strlcpy;
     strlen;
@@ -1028,27 +1028,27 @@
     strspn;
     strstr;
     strtod;
-    strtof; # introduced=21
+    strtof;
     strtoimax;
     strtok;
     strtok_r;
     strtol;
-    strtold; # introduced=21
-    strtold_l; # introduced=21
+    strtold;
+    strtold_l;
     strtoll;
-    strtoll_l; # introduced=21
+    strtoll_l;
     strtoul;
     strtoull;
-    strtoull_l; # introduced=21
+    strtoull_l;
     strtoumax;
     strxfrm;
-    strxfrm_l; # introduced=21
-    swapoff; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    swapon; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    strxfrm_l;
+    swapoff;
+    swapon;
     swprintf;
     swscanf;
     symlink;
-    symlinkat; # introduced=21
+    symlinkat;
     sync;
     sys_siglist; # var
     sys_signame; # var
@@ -1057,54 +1057,54 @@
     sysinfo;
     syslog;
     system;
-    tcdrain; # introduced=21
-    tcflow; # introduced=21
-    tcflush; # introduced=21
-    tcgetattr; # introduced=21
+    tcdrain;
+    tcflow;
+    tcflush;
+    tcgetattr;
     tcgetpgrp;
-    tcgetsid; # introduced=21
-    tcsendbreak; # introduced=21
-    tcsetattr; # introduced=21
+    tcgetsid;
+    tcsendbreak;
+    tcsetattr;
     tcsetpgrp;
     tdelete;
     tdestroy;
-    tee; # introduced=21
+    tee;
     telldir; # introduced=23
     tempnam;
     tfind;
     tgkill;
     time;
-    timegm; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    timegm;
     timegm64; # arm x86
-    timelocal; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    timelocal;
     timelocal64; # arm x86
     timer_create;
     timer_delete;
     timer_getoverrun;
     timer_gettime;
     timer_settime;
-    timerfd_create; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_gettime; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
-    timerfd_settime; # introduced-arm=19 introduced-arm64=21 introduced-x86=19 introduced-x86_64=21
+    timerfd_create;
+    timerfd_gettime;
+    timerfd_settime;
     times;
     timezone; # var
     tmpfile;
     tmpnam;
     toascii;
     tolower;
-    tolower_l; # introduced=21
+    tolower_l;
     toupper;
-    toupper_l; # introduced=21
+    toupper_l;
     towlower;
-    towlower_l; # introduced=21
+    towlower_l;
     towupper;
-    towupper_l; # introduced=21
+    towupper_l;
     truncate;
-    truncate64; # introduced=21
+    truncate64;
     tsearch;
     ttyname;
     ttyname_r;
-    twalk; # introduced=21
+    twalk;
     tzname; # var
     tzset;
     umask;
@@ -1117,16 +1117,16 @@
     unlinkat;
     unlockpt;
     unsetenv;
-    unshare; # introduced-arm=17 introduced-arm64=21 introduced-x86=17 introduced-x86_64=21
-    uselocale; # introduced=21
+    unshare;
+    uselocale;
     usleep;
     utime;
-    utimensat; # introduced-arm=12 introduced-arm64=21 introduced-x86=12 introduced-x86_64=21
+    utimensat;
     utimes;
     utmpname;
     valloc; # arm x86
     vasprintf;
-    vdprintf; # introduced=21
+    vdprintf;
     verr;
     verrx;
     vfdprintf; # arm x86 versioned=28
@@ -1134,22 +1134,22 @@
     vfprintf;
     vfscanf;
     vfwprintf;
-    vfwscanf; # introduced=21
-    vmsplice; # introduced=21
+    vfwscanf;
+    vmsplice;
     vprintf;
     vscanf;
     vsnprintf;
     vsprintf;
     vsscanf;
     vswprintf;
-    vswscanf; # introduced=21
+    vswscanf;
     vsyslog;
     vwarn;
     vwarnx;
     vwprintf;
-    vwscanf; # introduced=21
+    vwscanf;
     wait;
-    wait4; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    wait4;
     waitid;
     waitpid;
     warn;
@@ -1163,7 +1163,7 @@
     wcschr;
     wcscmp;
     wcscoll;
-    wcscoll_l; # introduced=21
+    wcscoll_l;
     wcscpy;
     wcscspn;
     wcsdup;
@@ -1177,33 +1177,33 @@
     wcsncmp;
     wcsncpy;
     wcsnlen;
-    wcsnrtombs; # introduced=21
+    wcsnrtombs;
     wcspbrk;
     wcsrchr;
     wcsrtombs;
     wcsspn;
     wcsstr;
     wcstod;
-    wcstof; # introduced=21
-    wcstoimax; # introduced=21
+    wcstof;
+    wcstoimax;
     wcstok;
     wcstol;
-    wcstold; # introduced=21
-    wcstold_l; # introduced=21
-    wcstoll; # introduced=21
-    wcstoll_l; # introduced=21
-    wcstombs; # introduced=21
+    wcstold;
+    wcstold_l;
+    wcstoll;
+    wcstoll_l;
+    wcstombs;
     wcstoul;
-    wcstoull; # introduced=21
-    wcstoull_l; # introduced=21
-    wcstoumax; # introduced=21
+    wcstoull;
+    wcstoull_l;
+    wcstoumax;
     wcswidth;
     wcsxfrm;
-    wcsxfrm_l; # introduced=21
+    wcsxfrm_l;
     wctob;
-    wctomb; # introduced=21
+    wctomb;
     wctype;
-    wctype_l; # introduced=21
+    wctype_l;
     wcwidth;
     wmemchr;
     wmemcmp;
diff --git a/libm/libm.map.txt b/libm/libm.map.txt
index f1732f8..b9a0db2 100644
--- a/libm/libm.map.txt
+++ b/libm/libm.map.txt
@@ -8,23 +8,23 @@
     acosf;
     acosh;
     acoshf;
-    acoshl; # introduced=21
-    acosl; # introduced=21
+    acoshl;
+    acosl;
     asin;
     asinf;
     asinh;
     asinhf;
-    asinhl; # introduced=21
-    asinl; # introduced=21
+    asinhl;
+    asinl;
     atan;
     atan2;
     atan2f;
-    atan2l; # introduced=21
+    atan2l;
     atanf;
     atanh;
     atanhf;
-    atanhl; # introduced=21
-    atanl; # introduced=21
+    atanhl;
+    atanl;
     cabs; # introduced=23
     cabsf; # introduced=23
     cabsl; # introduced-arm=21 introduced-arm64=23 introduced-x86=21 introduced-x86_64=23
@@ -45,7 +45,7 @@
     catanhf; # introduced=23
     cbrt;
     cbrtf;
-    cbrtl; # introduced=21
+    cbrtl;
     ccos; # introduced=23
     ccosf; # introduced=23
     ccosh; # introduced=23
@@ -68,8 +68,8 @@
     cosf;
     cosh;
     coshf;
-    coshl; # introduced=21
-    cosl; # introduced=21
+    coshl;
+    cosl;
     cproj; # introduced=23
     cprojf; # introduced=23
     cprojl; # introduced-arm=21 introduced-arm64=23 introduced-x86=21 introduced-x86_64=23
@@ -92,38 +92,38 @@
     erf;
     erfc;
     erfcf;
-    erfcl; # introduced=21
+    erfcl;
     erff;
-    erfl; # introduced=21
+    erfl;
     exp;
     exp2;
     exp2f;
-    exp2l; # introduced=21
+    exp2l;
     expf;
-    expl; # introduced=21
+    expl;
     expm1;
     expm1f;
-    expm1l; # introduced=21
+    expm1l;
     fabs;
     fabsf;
     fabsl;
     fdim;
     fdimf;
     fdiml;
-    feclearexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fedisableexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    feenableexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fegetenv; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fegetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fegetround; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    feholdexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    feraiseexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fesetenv; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fesetexceptflag; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fesetround; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    fetestexcept; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    feupdateenv; # introduced-arm=21 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
+    feclearexcept;
+    fedisableexcept;
+    feenableexcept;
+    fegetenv;
+    fegetexcept;
+    fegetexceptflag;
+    fegetround;
+    feholdexcept;
+    feraiseexcept;
+    fesetenv;
+    fesetexceptflag;
+    fesetround;
+    fetestexcept;
+    feupdateenv;
     finite;
     finitef;
     floor;
@@ -131,7 +131,7 @@
     floorl;
     fma;
     fmaf;
-    fmal; # introduced=21
+    fmal;
     fmax;
     fmaxf;
     fmaxl;
@@ -140,17 +140,17 @@
     fminl;
     fmod;
     fmodf;
-    fmodl; # introduced=21
+    fmodl;
     frexp;
     frexpf;
-    frexpl; # introduced=21
+    frexpl;
     gamma;
     gamma_r;
     gammaf;
     gammaf_r;
     hypot;
     hypotf;
-    hypotl; # introduced=21
+    hypotl;
     ilogb;
     ilogbf;
     ilogbl;
@@ -166,77 +166,77 @@
     lgamma_r;
     lgammaf;
     lgammaf_r;
-    lgammal; # introduced=21
+    lgammal;
     lgammal_r; # introduced=23
     llrint;
     llrintf;
-    llrintl; # introduced=21
+    llrintl;
     llround;
     llroundf;
     llroundl;
     log;
     log10;
     log10f;
-    log10l; # introduced=21
+    log10l;
     log1p;
     log1pf;
-    log1pl; # introduced=21
-    log2; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
-    log2f; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
-    log2l; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    log1pl;
+    log2;
+    log2f;
+    log2l;
     logb;
     logbf;
-    logbl; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    logbl;
     logf;
-    logl; # introduced=21
+    logl;
     lrint;
     lrintf;
-    lrintl; # introduced=21
+    lrintl;
     lround;
     lroundf;
     lroundl;
     modf;
     modff;
-    modfl; # introduced=21
-    nan; # introduced-arm=13 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    nanf; # introduced-arm=13 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    nanl; # introduced-arm=13 introduced-arm64=21 introduced-x86=13 introduced-x86_64=21
+    modfl;
+    nan;
+    nanf;
+    nanl;
     nearbyint;
     nearbyintf;
-    nearbyintl; # introduced=21
+    nearbyintl;
     nextafter;
     nextafterf;
-    nextafterl; # introduced=21
-    nexttoward; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    nextafterl;
+    nexttoward;
     nexttowardf;
-    nexttowardl; # introduced-arm=18 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    nexttowardl;
     pow;
     powf;
-    powl; # introduced=21
+    powl;
     remainder;
     remainderf;
-    remainderl; # introduced=21
+    remainderl;
     remquo;
     remquof;
-    remquol; # introduced=21
+    remquol;
     rint;
     rintf;
-    rintl; # introduced=21
+    rintl;
     round;
     roundf;
     roundl;
     scalb;
     scalbf;
-    scalbln; # introduced-arm=9 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnf; # introduced-arm=9 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
-    scalblnl; # introduced-arm=9 introduced-arm64=21 introduced-x86=18 introduced-x86_64=21
+    scalbln;
+    scalblnf;
+    scalblnl;
     scalbn;
     scalbnf;
     scalbnl;
     signgam; # var
     significand;
     significandf;
-    significandl; # introduced=21
+    significandl;
     sin;
     sincos;
     sincosf;
@@ -244,20 +244,20 @@
     sinf;
     sinh;
     sinhf;
-    sinhl; # introduced=21
-    sinl; # introduced=21
+    sinhl;
+    sinl;
     sqrt;
     sqrtf;
-    sqrtl; # introduced=21
+    sqrtl;
     tan;
     tanf;
     tanh;
     tanhf;
-    tanhl; # introduced=21
-    tanl; # introduced=21
+    tanhl;
+    tanl;
     tgamma;
-    tgammaf; # introduced-arm=13 introduced-arm64=21 introduced-x86=9 introduced-x86_64=21
-    tgammal; # introduced=21
+    tgammaf;
+    tgammal;
     trunc;
     truncf;
     truncl;
diff --git a/linker/linker_phdr.cpp b/linker/linker_phdr.cpp
index 1b51fcd..ad60efd 100644
--- a/linker/linker_phdr.cpp
+++ b/linker/linker_phdr.cpp
@@ -228,10 +228,8 @@
     return false;
   }
 
-#if !defined(__LP64__)
   // Map at most 1MiB which should cover most cases
   map_size = std::min(map_size, static_cast<size_t>(1 * 1024 * 1024));
-#endif
 
   if (!file_fragment_.Map(fd_, file_offset_, 0, map_size)) {
     DL_ERR("\"%s\" header mmap failed: %m", name_.c_str());