aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2015-10-30 16:02:01 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-10-30 16:02:01 +0000
commite75453d5dd8b373f6e7ef61ec22a6a3074d51e02 (patch)
treefa4eb5a723f697521a7cc9b411dce1aba855738d
parent50e92795890c0d8b4bf54c535f66f3b2edf7bd59 (diff)
parent9978a9a82e3b883b32a7a0bcd5cac18f31e7a68d (diff)
downloadbionic-e75453d5dd8b373f6e7ef61ec22a6a3074d51e02.tar.gz
Merge "Move __set_errno to ndk_cruft.cpp."
-rw-r--r--libc/bionic/__set_errno.cpp15
-rw-r--r--libc/bionic/ndk_cruft.cpp6
2 files changed, 10 insertions, 11 deletions
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 <errno.h> 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 <errno.h> 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.