diff --git a/libc/bionic/__set_errno.cpp b/libc/bionic/__set_errno.cpp index 30df350ea..9ef0047cc 100644 --- a/libc/bionic/__set_errno.cpp +++ b/libc/bionic/__set_errno.cpp @@ -36,20 +36,13 @@ // system these are the same size, but on a 64-bit system they're not. // 'long' gives us 32-bit on 32-bit systems, 64-bit on 64-bit systems. -// __set_errno was mistakenly exposed in in the 32-bit NDK. -// We need the extra level of indirection so that the .hidden directives -// in the system call stubs don't cause __set_errno to be hidden, breaking -// old NDK apps. +// Since __set_errno was mistakenly exposed in in the 32-bit +// NDK, use a differently named internal function for the system call +// stubs. This avoids having the stubs .hidden directives accidentally +// hide __set_errno for old NDK apps. // This one is for internal use only and used by both LP32 and LP64 assembler. extern "C" __LIBC_HIDDEN__ long __set_errno_internal(int n) { errno = n; return -1; } - -// This one exists for the LP32 NDK and is not present at all in LP64. -#if !defined(__LP64__) -extern "C" long __set_errno(int n) { - return __set_errno_internal(n); -} -#endif diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp index 231cf106e..d6b8e8f02 100644 --- a/libc/bionic/ndk_cruft.cpp +++ b/libc/bionic/ndk_cruft.cpp @@ -357,6 +357,12 @@ extern "C" pthread_internal_t* __get_thread() { return __real_get_thread(); } +// This one exists only for the LP32 NDK and is not present anywhere else. +extern "C" long __set_errno_internal(int); +extern "C" long __set_errno(int n) { + return __set_errno_internal(n); +} + #endif // !defined(__LP64__) // This was never implemented in bionic, only needed for ABI compatibility with the NDK.