Merge "SYSCALLS.TXT: improve the docs." into main
diff --git a/libc/Android.bp b/libc/Android.bp
index 7b902dc..b5ff680 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -2703,6 +2703,7 @@
     },
 }
 
+// TODO: add this directly to musl like libexecinfo and libb64?
 cc_library_host_static {
     name: "libfts",
     srcs: [
@@ -2715,6 +2716,7 @@
         "upstream-openbsd/android/include",
     ],
     cflags: [
+        "-std=gnu99",
         "-include openbsd-compat.h",
         "-Wno-unused-parameter",
     ],
@@ -2754,6 +2756,7 @@
         "upstream-openbsd/android/include",
     ],
     cflags: [
+        "-std=gnu99",
         "-include openbsd-compat.h",
     ],
     enabled: false,
diff --git a/linker/Android.bp b/linker/Android.bp
index 8300f01..ea4e699 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -76,14 +76,6 @@
 // Configuration for the linker binary and any of its static libraries.
 cc_defaults {
     name: "linker_defaults",
-    arch: {
-        arm: {
-            cflags: ["-D__work_around_b_24465209__"],
-        },
-        x86: {
-            cflags: ["-D__work_around_b_24465209__"],
-        },
-    },
 
     cflags: linker_common_flags,
     asflags: linker_common_flags,
diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp
index f811d6d..fc95903 100644
--- a/linker/dlfcn.cpp
+++ b/linker/dlfcn.cpp
@@ -345,7 +345,7 @@
     __libdl_info->soname_ = linker_si.soname_;
     __libdl_info->target_sdk_version_ = __ANDROID_API__;
     __libdl_info->generate_handle();
-#if defined(__work_around_b_24465209__)
+#if !defined(__LP64__)
     strlcpy(__libdl_info->old_name_, __libdl_info->soname_.c_str(),
             sizeof(__libdl_info->old_name_));
 #endif
diff --git a/linker/linker_soinfo.cpp b/linker/linker_soinfo.cpp
index b626313..27a5237 100644
--- a/linker/linker_soinfo.cpp
+++ b/linker/linker_soinfo.cpp
@@ -629,47 +629,47 @@
 }
 
 void soinfo::set_realpath(const char* path) {
-#if defined(__work_around_b_24465209__)
+#if defined(__LP64__)
+  realpath_ = path;
+#else
   if (has_min_version(2)) {
     realpath_ = path;
   }
-#else
-  realpath_ = path;
 #endif
 }
 
 const char* soinfo::get_realpath() const {
-#if defined(__work_around_b_24465209__)
+#if defined(__LP64__)
+  return realpath_.c_str();
+#else
   if (has_min_version(2)) {
     return realpath_.c_str();
   } else {
     return old_name_;
   }
-#else
-  return realpath_.c_str();
 #endif
 }
 
 void soinfo::set_soname(const char* soname) {
-#if defined(__work_around_b_24465209__)
+#if defined(__LP64__)
+  soname_ = soname;
+#else
   if (has_min_version(2)) {
     soname_ = soname;
   }
   strlcpy(old_name_, soname_.c_str(), sizeof(old_name_));
-#else
-  soname_ = soname;
 #endif
 }
 
 const char* soinfo::get_soname() const {
-#if defined(__work_around_b_24465209__)
+#if defined(__LP64__)
+  return soname_.c_str();
+#else
   if (has_min_version(2)) {
     return soname_.c_str();
   } else {
     return old_name_;
   }
-#else
-  return soname_.c_str();
 #endif
 }
 
diff --git a/linker/linker_soinfo.h b/linker/linker_soinfo.h
index 37cee50..3416221 100644
--- a/linker/linker_soinfo.h
+++ b/linker/linker_soinfo.h
@@ -154,31 +154,31 @@
   size_t module_id = kTlsUninitializedModuleId;
 };
 
-#if defined(__work_around_b_24465209__)
+#if !defined(__LP64__)
 #define SOINFO_NAME_LEN 128
 #endif
 
 struct soinfo {
-#if defined(__work_around_b_24465209__)
+#if !defined(__LP64__)
  private:
   char old_name_[SOINFO_NAME_LEN];
 #endif
  public:
   const ElfW(Phdr)* phdr;
   size_t phnum;
-#if defined(__work_around_b_24465209__)
+#if !defined(__LP64__)
   ElfW(Addr) unused0; // DO NOT USE, maintained for compatibility.
 #endif
   ElfW(Addr) base;
   size_t size;
 
-#if defined(__work_around_b_24465209__)
+#if !defined(__LP64__)
   uint32_t unused1;  // DO NOT USE, maintained for compatibility.
 #endif
 
   ElfW(Dyn)* dynamic;
 
-#if defined(__work_around_b_24465209__)
+#if !defined(__LP64__)
   uint32_t unused2; // DO NOT USE, maintained for compatibility
   uint32_t unused3; // DO NOT USE, maintained for compatibility
 #endif
@@ -294,14 +294,12 @@
   bool can_unload() const;
   bool is_gnu_hash() const;
 
+  // TODO: rename this to make it clearer it's always true for LP64.
   bool inline has_min_version(uint32_t min_version __unused) const {
-#if defined(__work_around_b_24465209__)
-    return (flags_ & FLAG_NEW_SOINFO) != 0 && version_ >= min_version;
-#else
-    // If you make this return non-true in the case where
-    // __work_around_b_24465209__ is not defined, you will have to change
-    // memtag_dynamic_entries() and vma_names().
+#if defined(__LP64__)
     return true;
+#else
+    return (flags_ & FLAG_NEW_SOINFO) != 0 && version_ >= min_version;
 #endif
   }
 
@@ -362,13 +360,11 @@
   size_t get_gap_size() const;
 
   const memtag_dynamic_entries_t* memtag_dynamic_entries() const {
-#ifdef __aarch64__
-#ifdef __work_around_b_24465209__
-#error "Assuming aarch64 does not use versioned soinfo."
-#endif
+#if defined(__aarch64__)
     return &memtag_dynamic_entries_;
-#endif
+#else
     return nullptr;
+#endif
   }
   void* memtag_globals() const {
     const memtag_dynamic_entries_t* entries = memtag_dynamic_entries();
@@ -403,13 +399,11 @@
     return !is_linker() && memtag_globals() && memtag_globalssz() > 0 && __libc_mte_enabled();
   }
   std::list<std::string>* vma_names() {
-#ifdef __aarch64__
-#ifdef __work_around_b_24465209__
-#error "Assuming aarch64 does not use versioned soinfo."
-#endif
+#if defined(__aarch64__)
     return &vma_names_;
-#endif
+#else
     return nullptr;
+#endif
 };
 
   void set_should_use_16kib_app_compat(bool should_use_16kib_app_compat) {