Merge "Work around missing _Exit in old API levels."
diff --git a/libc/include/string.h b/libc/include/string.h
index c178a3c..c15fe4a 100644
--- a/libc/include/string.h
+++ b/libc/include/string.h
@@ -67,8 +67,8 @@
 char* __strchr_chk(const char* _Nonnull, int, size_t) __INTRODUCED_IN(18);
 #if defined(__USE_GNU)
 #if defined(__cplusplus)
-extern "C++" char* strchrnul(char* _Nonnull, int) __RENAME(strchrnul) __attribute_pure__;
-extern "C++" const char* strchrnul(const char* _Nonnull, int) __RENAME(strchrnul) __attribute_pure__;
+extern "C++" char* strchrnul(char* _Nonnull, int) __RENAME(strchrnul) __attribute_pure__ __INTRODUCED_IN(24);
+extern "C++" const char* strchrnul(const char* _Nonnull, int) __RENAME(strchrnul) __attribute_pure__ __INTRODUCED_IN(24);
 #else
 char* strchrnul(const char* _Nonnull, int) __attribute_pure__ __INTRODUCED_IN(24);
 #endif
@@ -142,8 +142,8 @@
  * It doesn't modify its argument, and in C++ it's const-correct.
  */
 #if defined(__cplusplus)
-extern "C++" char* basename(char* _Nonnull) __RENAME(__gnu_basename);
-extern "C++" const char* basename(const char* _Nonnull) __RENAME(__gnu_basename);
+extern "C++" char* basename(char* _Nonnull) __RENAME(__gnu_basename) __INTRODUCED_IN(23);
+extern "C++" const char* basename(const char* _Nonnull) __RENAME(__gnu_basename) __INTRODUCED_IN(23);
 #else
 char* basename(const char* _Nonnull) __RENAME(__gnu_basename) __INTRODUCED_IN(23);
 #endif
diff --git a/libc/private/CFIShadow.h b/libc/private/CFIShadow.h
index 9f980f8..26351db 100644
--- a/libc/private/CFIShadow.h
+++ b/libc/private/CFIShadow.h
@@ -62,7 +62,7 @@
   static constexpr uintptr_t kCfiCheckAlign = 1UL << kCfiCheckGranularity;  // 4K
 
 #if defined(__aarch64__)
-  static constexpr uintptr_t kMaxTargetAddr = 0xffffffffffff;
+  static constexpr uintptr_t kMaxTargetAddr = 0x7fffffffff;
 #elif defined (__LP64__)
   static constexpr uintptr_t kMaxTargetAddr = 0x7fffffffffff;
 #else