Merge changes from topic "update-clang-tools-6114689"
* changes:
versioner: Add __VERSIONER_FORTIFY_INLINE
versioner: Only enable annotation while running versioner
diff --git a/libc/Android.bp b/libc/Android.bp
index d418012..6d4b719 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -1808,6 +1808,7 @@
"//frameworks:__subpackages__",
"//external/perfetto:__subpackages__",
"//external/scudo:__subpackages__",
+ "//system/core/debuggerd:__subpackages__",
],
host_supported: true,
recovery_available: true,
diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT
index 21ebdbd..517d5f9 100644
--- a/libc/SYSCALLS.TXT
+++ b/libc/SYSCALLS.TXT
@@ -217,7 +217,7 @@
int nanosleep(const struct timespec*, struct timespec*) all
int clock_settime(clockid_t, const struct timespec*) all
int __clock_nanosleep:clock_nanosleep(clockid_t, int, const struct timespec*, struct timespec*) all
-int getitimer(int, const struct itimerval*) all
+int getitimer(int, struct itimerval*) all
int setitimer(int, const struct itimerval*, struct itimerval*) all
int __timer_create:timer_create(clockid_t clockid, struct sigevent* evp, __kernel_timer_t* timerid) all
int __timer_settime:timer_settime(__kernel_timer_t, int, const struct itimerspec*, struct itimerspec*) all
@@ -249,8 +249,8 @@
int __accept4:accept4(int, struct sockaddr*, socklen_t*, int) arm,arm64,mips,mips64,x86_64
int getsockname(int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
int getpeername(int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
-int __sendto:sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t) arm,arm64,mips,mips64,x86_64
-int recvfrom(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
+ssize_t __sendto:sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t) arm,arm64,mips,mips64,x86_64
+ssize_t recvfrom(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) arm,arm64,mips,mips64,x86_64
int shutdown(int, int) arm,arm64,mips,mips64,x86_64
int setsockopt(int, int, int, const void*, socklen_t) arm,arm64,mips,mips64,x86_64
int getsockopt(int, int, int, void*, socklen_t*) arm,arm64,mips,mips64,x86_64
@@ -267,8 +267,8 @@
int getsockname:socketcall:6(int, struct sockaddr*, socklen_t*) x86
int getpeername:socketcall:7(int, struct sockaddr*, socklen_t*) x86
int socketpair:socketcall:8(int, int, int, int*) x86
-int __sendto:socketcall:11(int, const void*, size_t, int, const struct sockaddr*, socklen_t) x86
-int recvfrom:socketcall:12(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) x86
+ssize_t __sendto:socketcall:11(int, const void*, size_t, int, const struct sockaddr*, socklen_t) x86
+ssize_t recvfrom:socketcall:12(int, void*, size_t, unsigned int, struct sockaddr*, socklen_t*) x86
int shutdown:socketcall:13(int, int) x86
int setsockopt:socketcall:14(int, int, int, const void*, socklen_t) x86
int getsockopt:socketcall:15(int, int, int, void*, socklen_t*) x86
@@ -340,7 +340,7 @@
int __sync_file_range2:sync_file_range2(int, unsigned int, off64_t, off64_t) arm
pid_t wait4(pid_t, int*, int, struct rusage*) all
-int __waitid:waitid(int, pid_t, struct siginfo_t*, int, void*) all
+int __waitid:waitid(int, pid_t, siginfo_t*, int, void*) all
# ARM-specific
int __set_tls:__ARM_NR_set_tls(void*) arm
@@ -355,8 +355,8 @@
# vdso stuff.
int __clock_getres:clock_getres(clockid_t, struct timespec*) all
-int __clock_gettime:clock_gettime(clockid_t, timespec*) all
-int __gettimeofday:gettimeofday(timeval*, timezone*) all
+int __clock_gettime:clock_gettime(clockid_t, struct timespec*) all
+int __gettimeofday:gettimeofday(struct timeval*, struct timezone*) all
# <sys/random.h>
ssize_t getrandom(void*, size_t, unsigned) all
diff --git a/libc/bionic/__libc_current_sigrtmin.cpp b/libc/bionic/__libc_current_sigrtmin.cpp
index d2ea75d..e6b3412 100644
--- a/libc/bionic/__libc_current_sigrtmin.cpp
+++ b/libc/bionic/__libc_current_sigrtmin.cpp
@@ -28,7 +28,7 @@
#include <signal.h>
-#include "private/sigrtmin.h"
+#include <platform/bionic/reserved_signals.h>
int __libc_current_sigrtmin() {
return __SIGRTMIN + __SIGRT_RESERVED;
diff --git a/libc/bionic/bionic_allocator.cpp b/libc/bionic/bionic_allocator.cpp
index 7fd7067..b6d6ba7 100644
--- a/libc/bionic/bionic_allocator.cpp
+++ b/libc/bionic/bionic_allocator.cpp
@@ -41,7 +41,7 @@
#include <async_safe/CHECK.h>
#include "platform/bionic/page.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
//
// BionicAllocator is a general purpose allocator designed to provide the same
diff --git a/libc/bionic/bionic_elf_tls.cpp b/libc/bionic/bionic_elf_tls.cpp
index 3fa5182..61d826c 100644
--- a/libc/bionic/bionic_elf_tls.cpp
+++ b/libc/bionic/bionic_elf_tls.cpp
@@ -36,7 +36,7 @@
#include "private/ScopedRWLock.h"
#include "private/ScopedSignalBlocker.h"
#include "private/bionic_globals.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/bionic_tls.h"
#include "pthread_internal.h"
diff --git a/libc/bionic/clone.cpp b/libc/bionic/clone.cpp
index 2a6ab41..622ca26 100644
--- a/libc/bionic/clone.cpp
+++ b/libc/bionic/clone.cpp
@@ -35,7 +35,7 @@
#include "pthread_internal.h"
#include "private/bionic_defs.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
extern "C" pid_t __bionic_clone(uint32_t flags, void* child_stack, int* parent_tid, void* tls, int* child_tid, int (*fn)(void*), void* arg);
extern "C" __noreturn void __exit(int status);
diff --git a/libc/bionic/fdsan.cpp b/libc/bionic/fdsan.cpp
index 4ebc796..d4ac71c 100644
--- a/libc/bionic/fdsan.cpp
+++ b/libc/bionic/fdsan.cpp
@@ -40,6 +40,7 @@
#include <unistd.h>
#include <async_safe/log.h>
+#include <platform/bionic/reserved_signals.h>
#include <sys/system_properties.h>
#include "private/bionic_globals.h"
@@ -168,8 +169,7 @@
ANDROID_FDSAN_ERROR_LEVEL_DISABLED);
__BIONIC_FALLTHROUGH;
case ANDROID_FDSAN_ERROR_LEVEL_WARN_ALWAYS:
- // DEBUGGER_SIGNAL
- inline_raise(__SIGRTMIN + 3, &abort_message);
+ inline_raise(BIONIC_SIGNAL_DEBUGGER, &abort_message);
break;
case ANDROID_FDSAN_ERROR_LEVEL_FATAL:
diff --git a/libc/bionic/grp_pwd.cpp b/libc/bionic/grp_pwd.cpp
index 6f8c07e..dd8df95 100644
--- a/libc/bionic/grp_pwd.cpp
+++ b/libc/bionic/grp_pwd.cpp
@@ -44,7 +44,7 @@
#include "private/ErrnoRestorer.h"
#include "private/android_filesystem_config.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
// Generated android_ids array
#include "generated_android_ids.h"
diff --git a/libc/bionic/grp_pwd_file.h b/libc/bionic/grp_pwd_file.h
index 9004c4e..69c771b 100644
--- a/libc/bionic/grp_pwd_file.h
+++ b/libc/bionic/grp_pwd_file.h
@@ -32,7 +32,7 @@
#include <pwd.h>
#include "private/bionic_lock.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/grp_pwd.h"
class MmapFile {
diff --git a/libc/bionic/libc_init_dynamic.cpp b/libc/bionic/libc_init_dynamic.cpp
index ca94652..aafefab 100644
--- a/libc/bionic/libc_init_dynamic.cpp
+++ b/libc/bionic/libc_init_dynamic.cpp
@@ -53,7 +53,7 @@
#include "private/bionic_elf_tls.h"
#include "private/bionic_globals.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/bionic_ssp.h"
#include "private/bionic_tls.h"
#include "private/KernelArgumentBlock.h"
diff --git a/libc/bionic/libc_init_static.cpp b/libc/bionic/libc_init_static.cpp
index d2a5334..1ac4750 100644
--- a/libc/bionic/libc_init_static.cpp
+++ b/libc/bionic/libc_init_static.cpp
@@ -43,7 +43,7 @@
#include "private/bionic_call_ifunc_resolver.h"
#include "private/bionic_elf_tls.h"
#include "private/bionic_globals.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/bionic_tls.h"
#include "private/KernelArgumentBlock.h"
diff --git a/libc/bionic/locale.cpp b/libc/bionic/locale.cpp
index 8358fb0..0b7037a 100644
--- a/libc/bionic/locale.cpp
+++ b/libc/bionic/locale.cpp
@@ -35,7 +35,7 @@
#include <time.h>
#include <wchar.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#if defined(__BIONIC_BUILD_FOR_ANDROID_SUPPORT)
#define USE_TLS_SLOT 0
diff --git a/libc/bionic/mmap.cpp b/libc/bionic/mmap.cpp
index 3503319..9aad0b3 100644
--- a/libc/bionic/mmap.cpp
+++ b/libc/bionic/mmap.cpp
@@ -31,7 +31,7 @@
#include <sys/mman.h>
#include <unistd.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/ErrnoRestorer.h"
// mmap2(2) is like mmap(2), but the offset is in 4096-byte blocks, not bytes.
diff --git a/libc/bionic/mremap.cpp b/libc/bionic/mremap.cpp
index a4e5323..d7c9353 100644
--- a/libc/bionic/mremap.cpp
+++ b/libc/bionic/mremap.cpp
@@ -32,7 +32,7 @@
#include <stdint.h>
#include <unistd.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
extern "C" void* __mremap(void*, size_t, size_t, int, void*);
diff --git a/libc/bionic/ndk_cruft.cpp b/libc/bionic/ndk_cruft.cpp
index c816830..e9a5b5b 100644
--- a/libc/bionic/ndk_cruft.cpp
+++ b/libc/bionic/ndk_cruft.cpp
@@ -45,7 +45,7 @@
#include <unistd.h>
#include <wchar.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
extern "C" {
diff --git a/libc/bionic/poll.cpp b/libc/bionic/poll.cpp
index 41b2657..3290315 100644
--- a/libc/bionic/poll.cpp
+++ b/libc/bionic/poll.cpp
@@ -30,8 +30,9 @@
#include <sys/poll.h>
#include <sys/select.h>
+#include <platform/bionic/reserved_signals.h>
+
#include "private/bionic_time_conversions.h"
-#include "private/sigrtmin.h"
#include "private/SigSetConverter.h"
extern "C" int __ppoll(pollfd*, unsigned int, timespec*, const sigset64_t*, size_t);
diff --git a/libc/bionic/pthread_atfork.cpp b/libc/bionic/pthread_atfork.cpp
index fb12a3b..0dcabdf 100644
--- a/libc/bionic/pthread_atfork.cpp
+++ b/libc/bionic/pthread_atfork.cpp
@@ -30,7 +30,7 @@
#include <pthread.h>
#include <stdlib.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
struct atfork_t {
atfork_t* next;
diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp
index 03af2d9..4f7ac2b 100644
--- a/libc/bionic/pthread_create.cpp
+++ b/libc/bionic/pthread_create.cpp
@@ -42,7 +42,7 @@
#include "private/bionic_constants.h"
#include "private/bionic_defs.h"
#include "private/bionic_globals.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/bionic_ssp.h"
#include "private/bionic_systrace.h"
#include "private/bionic_tls.h"
diff --git a/libc/bionic/scandir.cpp b/libc/bionic/scandir.cpp
index 0b39049..6a7e368 100644
--- a/libc/bionic/scandir.cpp
+++ b/libc/bionic/scandir.cpp
@@ -22,7 +22,7 @@
#include <string.h>
#include <unistd.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/ScopedReaddir.h"
// A smart pointer to the scandir dirent**.
diff --git a/libc/bionic/scudo/scudo.cpp b/libc/bionic/scudo/scudo.cpp
index fb09b92..2cd36b1 100644
--- a/libc/bionic/scudo/scudo.cpp
+++ b/libc/bionic/scudo/scudo.cpp
@@ -33,7 +33,7 @@
#include <sys/param.h>
#include <sys/prctl.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "scudo.h"
diff --git a/libc/bionic/sigaction.cpp b/libc/bionic/sigaction.cpp
index 96e6f3c..583bf32 100644
--- a/libc/bionic/sigaction.cpp
+++ b/libc/bionic/sigaction.cpp
@@ -29,7 +29,7 @@
#include <signal.h>
#include <string.h>
-#include "private/sigrtmin.h"
+#include <platform/bionic/reserved_signals.h>
extern "C" void __restore_rt(void);
extern "C" void __restore(void);
diff --git a/libc/bionic/signal.cpp b/libc/bionic/signal.cpp
index 8246cb4..b581b5a 100644
--- a/libc/bionic/signal.cpp
+++ b/libc/bionic/signal.cpp
@@ -36,9 +36,10 @@
#include <time.h>
#include <unistd.h>
+#include <platform/bionic/reserved_signals.h>
+
#include "private/ErrnoRestorer.h"
#include "private/SigSetConverter.h"
-#include "private/sigrtmin.h"
extern "C" int __rt_sigpending(const sigset64_t*, size_t);
extern "C" int __rt_sigqueueinfo(pid_t, int, siginfo_t*);
diff --git a/libc/bionic/sigprocmask.cpp b/libc/bionic/sigprocmask.cpp
index 5f70f32..8781c9b 100644
--- a/libc/bionic/sigprocmask.cpp
+++ b/libc/bionic/sigprocmask.cpp
@@ -29,7 +29,8 @@
#include <errno.h>
#include <signal.h>
-#include "private/sigrtmin.h"
+#include <platform/bionic/reserved_signals.h>
+
#include "private/SigSetConverter.h"
extern "C" int __rt_sigprocmask(int, const sigset64_t*, sigset64_t*, size_t);
diff --git a/libc/bionic/system_property_set.cpp b/libc/bionic/system_property_set.cpp
index e981a58..56822ac 100644
--- a/libc/bionic/system_property_set.cpp
+++ b/libc/bionic/system_property_set.cpp
@@ -45,7 +45,7 @@
#include <async_safe/CHECK.h>
#include "private/bionic_defs.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/ScopedFd.h"
static const char property_service_socket[] = "/dev/socket/" PROP_SERVICE_NAME;
diff --git a/libc/malloc_debug/Config.cpp b/libc/malloc_debug/Config.cpp
index dbd3eac..11887e2 100644
--- a/libc/malloc_debug/Config.cpp
+++ b/libc/malloc_debug/Config.cpp
@@ -38,7 +38,7 @@
#include <string>
#include <vector>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include "Config.h"
#include "debug_log.h"
diff --git a/libc/malloc_debug/DebugData.h b/libc/malloc_debug/DebugData.h
index 3a36299..13bba48 100644
--- a/libc/malloc_debug/DebugData.h
+++ b/libc/malloc_debug/DebugData.h
@@ -33,7 +33,7 @@
#include <memory>
#include <vector>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include "Config.h"
#include "GuardData.h"
diff --git a/libc/malloc_debug/GuardData.h b/libc/malloc_debug/GuardData.h
index b6ec889..58e33e9 100644
--- a/libc/malloc_debug/GuardData.h
+++ b/libc/malloc_debug/GuardData.h
@@ -33,7 +33,7 @@
#include <vector>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include "OptionData.h"
diff --git a/libc/malloc_debug/MapData.h b/libc/malloc_debug/MapData.h
index 5b08b90..f2b3c1c 100644
--- a/libc/malloc_debug/MapData.h
+++ b/libc/malloc_debug/MapData.h
@@ -34,7 +34,7 @@
#include <set>
#include <string>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
struct MapEntry {
MapEntry(uintptr_t start, uintptr_t end, uintptr_t offset, const char* name, size_t name_len, int flags)
diff --git a/libc/malloc_debug/PointerData.cpp b/libc/malloc_debug/PointerData.cpp
index b1e28b7..4f81ff7 100644
--- a/libc/malloc_debug/PointerData.cpp
+++ b/libc/malloc_debug/PointerData.cpp
@@ -43,7 +43,7 @@
#include <android-base/stringprintf.h>
#include <android-base/thread_annotations.h>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include "Config.h"
#include "DebugData.h"
diff --git a/libc/malloc_debug/PointerData.h b/libc/malloc_debug/PointerData.h
index 78f0ed8..37d87db 100644
--- a/libc/malloc_debug/PointerData.h
+++ b/libc/malloc_debug/PointerData.h
@@ -38,7 +38,7 @@
#include <unordered_map>
#include <vector>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include <unwindstack/LocalUnwinder.h>
#include "OptionData.h"
diff --git a/libc/malloc_debug/RecordData.h b/libc/malloc_debug/RecordData.h
index a015882..3d37529 100644
--- a/libc/malloc_debug/RecordData.h
+++ b/libc/malloc_debug/RecordData.h
@@ -36,7 +36,7 @@
#include <mutex>
#include <string>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
class RecordEntry {
public:
diff --git a/libc/malloc_debug/debug_disable.h b/libc/malloc_debug/debug_disable.h
index f9c3149..984bc25 100644
--- a/libc/malloc_debug/debug_disable.h
+++ b/libc/malloc_debug/debug_disable.h
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
// =============================================================================
// Used to disable the debug allocation calls.
diff --git a/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp b/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
index 70457b9..c405c7f 100644
--- a/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
+++ b/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
@@ -41,7 +41,7 @@
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include <private/bionic_malloc_dispatch.h>
#include "Config.h"
diff --git a/libc/private/bionic_macros.h b/libc/platform/bionic/macros.h
similarity index 100%
rename from libc/private/bionic_macros.h
rename to libc/platform/bionic/macros.h
diff --git a/libc/private/sigrtmin.h b/libc/platform/bionic/reserved_signals.h
similarity index 95%
rename from libc/private/sigrtmin.h
rename to libc/platform/bionic/reserved_signals.h
index 5de1a32..f062b1c 100644
--- a/libc/private/sigrtmin.h
+++ b/libc/platform/bionic/reserved_signals.h
@@ -32,13 +32,13 @@
#include <signal.h>
-#include "bionic_macros.h"
+#include "macros.h"
// Realtime signals reserved for internal use:
// 32 (__SIGRTMIN + 0) POSIX timers
// 33 (__SIGRTMIN + 1) libbacktrace
// 34 (__SIGRTMIN + 2) libcore
-// 35 (__SIGRTMIN + 3) debuggerd -b
+// 35 (__SIGRTMIN + 3) debuggerd
// 36 (__SIGRTMIN + 4) heapprofd native dumps
// 37 (__SIGRTMIN + 5) coverage (libprofile-extras)
// 38 (__SIGRTMIN + 6) heapprofd ART managed heap dumps
@@ -46,6 +46,8 @@
// If you change this, also change __ndk_legacy___libc_current_sigrtmin
// in <android/legacy_signal_inlines.h> to match.
+#define BIONIC_SIGNAL_DEBUGGER __SIGRTMIN + 3
+
#define __SIGRT_RESERVED 7
static inline __always_inline sigset64_t filter_reserved_signals(sigset64_t sigset, int how) {
int (*block)(sigset64_t*, int);
diff --git a/libc/private/CFIShadow.h b/libc/private/CFIShadow.h
index 84fbea5..ec87e3c 100644
--- a/libc/private/CFIShadow.h
+++ b/libc/private/CFIShadow.h
@@ -20,7 +20,7 @@
#include <stdint.h>
#include "platform/bionic/page.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
constexpr unsigned kLibraryAlignmentBits = 18;
constexpr size_t kLibraryAlignment = 1UL << kLibraryAlignmentBits;
diff --git a/libc/private/ErrnoRestorer.h b/libc/private/ErrnoRestorer.h
index 52e115a..cecf103 100644
--- a/libc/private/ErrnoRestorer.h
+++ b/libc/private/ErrnoRestorer.h
@@ -18,7 +18,7 @@
#include <errno.h>
-#include "bionic_macros.h"
+#include "platform/bionic/macros.h"
class ErrnoRestorer {
public:
diff --git a/libc/private/KernelArgumentBlock.h b/libc/private/KernelArgumentBlock.h
index c8ce841..ee28d69 100644
--- a/libc/private/KernelArgumentBlock.h
+++ b/libc/private/KernelArgumentBlock.h
@@ -21,7 +21,7 @@
#include <stdint.h>
#include <sys/auxv.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
// When the kernel starts the dynamic linker, it passes a pointer to a block
// of memory containing argc, the argv array, the environment variable array,
diff --git a/libc/private/MallocXmlElem.h b/libc/private/MallocXmlElem.h
index a367972..f8c72ab 100644
--- a/libc/private/MallocXmlElem.h
+++ b/libc/private/MallocXmlElem.h
@@ -20,7 +20,7 @@
#include <stdio.h>
#include <unistd.h>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
class MallocXmlElem {
public:
diff --git a/libc/private/ScopedFd.h b/libc/private/ScopedFd.h
index 1cec916..ea7f59e 100644
--- a/libc/private/ScopedFd.h
+++ b/libc/private/ScopedFd.h
@@ -30,7 +30,7 @@
#include <unistd.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "private/ErrnoRestorer.h"
class ScopedFd final {
diff --git a/libc/private/ScopedPthreadMutexLocker.h b/libc/private/ScopedPthreadMutexLocker.h
index 1c1e4a7..a87750c 100644
--- a/libc/private/ScopedPthreadMutexLocker.h
+++ b/libc/private/ScopedPthreadMutexLocker.h
@@ -18,7 +18,7 @@
#include <pthread.h>
-#include "bionic_macros.h"
+#include "platform/bionic/macros.h"
class ScopedPthreadMutexLocker {
public:
diff --git a/libc/private/ScopedRWLock.h b/libc/private/ScopedRWLock.h
index f034505..0af372b 100644
--- a/libc/private/ScopedRWLock.h
+++ b/libc/private/ScopedRWLock.h
@@ -30,7 +30,7 @@
#include <pthread.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
template <bool write> class ScopedRWLock {
public:
diff --git a/libc/private/ScopedReaddir.h b/libc/private/ScopedReaddir.h
index 9a20c09..7b07921 100644
--- a/libc/private/ScopedReaddir.h
+++ b/libc/private/ScopedReaddir.h
@@ -18,7 +18,7 @@
#include <dirent.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
class ScopedReaddir {
public:
diff --git a/libc/private/ScopedSignalBlocker.h b/libc/private/ScopedSignalBlocker.h
index 10aacb3..ce0ae64 100644
--- a/libc/private/ScopedSignalBlocker.h
+++ b/libc/private/ScopedSignalBlocker.h
@@ -18,7 +18,7 @@
#include <signal.h>
-#include "bionic_macros.h"
+#include "platform/bionic/macros.h"
class ScopedSignalBlocker {
public:
diff --git a/libc/private/WriteProtected.h b/libc/private/WriteProtected.h
index 26c239c..8f5b32d 100644
--- a/libc/private/WriteProtected.h
+++ b/libc/private/WriteProtected.h
@@ -24,7 +24,7 @@
#include <async_safe/log.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
template <typename T>
union WriteProtectedContents {
diff --git a/libc/private/bionic_lock.h b/libc/private/bionic_lock.h
index d70ba6c..8ed4939 100644
--- a/libc/private/bionic_lock.h
+++ b/libc/private/bionic_lock.h
@@ -30,7 +30,7 @@
#include <stdatomic.h>
#include "private/bionic_futex.h"
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
// Lock is used in places like pthread_rwlock_t, which can be initialized without calling
// an initialization function. So make sure Lock can be initialized by setting its memory to 0.
diff --git a/libc/private/bionic_systrace.h b/libc/private/bionic_systrace.h
index 86d2a08..dbe1739 100644
--- a/libc/private/bionic_systrace.h
+++ b/libc/private/bionic_systrace.h
@@ -16,7 +16,7 @@
#pragma once
-#include "bionic_macros.h"
+#include "platform/bionic/macros.h"
// Tracing class for bionic. To begin a trace at a specified point:
// ScopedTrace("Trace message");
diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h
index 9a80140..bb5c67b 100644
--- a/libc/private/bionic_tls.h
+++ b/libc/private/bionic_tls.h
@@ -36,7 +36,7 @@
#include <platform/bionic/tls.h>
-#include "bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "grp_pwd.h"
/** WARNING WARNING WARNING
diff --git a/libc/stdio/printf_common.h b/libc/stdio/printf_common.h
index ad4fe35..4dc5ca1 100644
--- a/libc/stdio/printf_common.h
+++ b/libc/stdio/printf_common.h
@@ -48,7 +48,7 @@
#include <unistd.h>
#include <wchar.h>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include "fvwrite.h"
#include "gdtoa.h"
diff --git a/libc/stdio/vfscanf.cpp b/libc/stdio/vfscanf.cpp
index 6fb49c9..ad20ba4 100644
--- a/libc/stdio/vfscanf.cpp
+++ b/libc/stdio/vfscanf.cpp
@@ -43,7 +43,7 @@
#include <private/bionic_ctype.h>
#include <private/bionic_fortify.h>
-#include <private/bionic_macros.h>
+#include <platform/bionic/macros.h>
#include <private/bionic_mbstate.h>
#define BUF 513 /* Maximum length of numeric string. */
diff --git a/libc/system_properties/include/system_properties/prop_area.h b/libc/system_properties/include/system_properties/prop_area.h
index 53b2745..e32a8d7 100644
--- a/libc/system_properties/include/system_properties/prop_area.h
+++ b/libc/system_properties/include/system_properties/prop_area.h
@@ -33,7 +33,7 @@
#include <string.h>
#include <sys/mman.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
#include "prop_info.h"
diff --git a/libc/system_properties/include/system_properties/prop_info.h b/libc/system_properties/include/system_properties/prop_info.h
index 27b29c8..3ebe7c5 100644
--- a/libc/system_properties/include/system_properties/prop_info.h
+++ b/libc/system_properties/include/system_properties/prop_info.h
@@ -32,7 +32,7 @@
#include <stdint.h>
#include <sys/system_properties.h>
-#include "private/bionic_macros.h"
+#include "platform/bionic/macros.h"
// The C11 standard doesn't allow atomic loads from const fields,
// though C++11 does. Fudge it until standards get straightened out.
diff --git a/libm/Android.bp b/libm/Android.bp
index bf05b17..801129a 100644
--- a/libm/Android.bp
+++ b/libm/Android.bp
@@ -9,7 +9,7 @@
recovery_available: true,
static_ndk_lib: true,
- whole_static_libs: ["libarm-optimized-routines"],
+ whole_static_libs: ["libarm-optimized-routines-math"],
srcs: [
"upstream-freebsd/lib/msun/bsdsrc/b_exp.c",
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 54e0703..8b0520a 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -4202,11 +4202,13 @@
// we also need vdso to be available for all namespaces (if present)
soinfo* vdso = solist_get_vdso();
for (auto it : namespaces) {
- it.second->add_soinfo(ld_android_so);
- if (vdso != nullptr) {
- it.second->add_soinfo(vdso);
+ if (it.second != &g_default_namespace) {
+ it.second->add_soinfo(ld_android_so);
+ if (vdso != nullptr) {
+ it.second->add_soinfo(vdso);
+ }
+ // somain and ld_preloads are added to these namespaces after LD_PRELOAD libs are linked
}
- // somain and ld_preloads are added to these namespaces after LD_PRELOAD libs are linked
}
set_application_target_sdk_version(config->target_sdk_version());
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index a0cda1b..75abbd2 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -853,6 +853,20 @@
ASSERT_EQ(ENOMEM, errno);
}
+// Inspired by https://github.com/landley/toybox/issues/163.
+TEST(STDIO_TEST, printf_NULL) {
+ char buf[128];
+ char* null = nullptr;
+ EXPECT_EQ(4, snprintf(buf, sizeof(buf), "<%*.*s>", 2, 2, null));
+ EXPECT_STREQ("<(n>", buf);
+ EXPECT_EQ(8, snprintf(buf, sizeof(buf), "<%*.*s>", 2, 8, null));
+ EXPECT_STREQ("<(null)>", buf);
+ EXPECT_EQ(10, snprintf(buf, sizeof(buf), "<%*.*s>", 8, 2, null));
+ EXPECT_STREQ("< (n>", buf);
+ EXPECT_EQ(10, snprintf(buf, sizeof(buf), "<%*.*s>", 8, 8, null));
+ EXPECT_STREQ("< (null)>", buf);
+}
+
TEST(STDIO_TEST, fprintf) {
TemporaryFile tf;