From fd5ee9aebc0a43c7f36a0778c7f416b39ddb870e Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Fri, 15 Aug 2014 14:20:04 -0700 Subject: [PATCH] Hide C++ stuff in libc. Put it back in libstdc++. Bug: 17062445 Change-Id: I027b186719654c2865b08c3fa83f90fa00c1e838 --- libc/Android.mk | 60 +++++++++++++++++++++++++++++-- libc/tools/check-symbols-glibc.py | 21 +---------- libstdc++/Android.mk | 15 -------- libstdc++/src/libstdc++.cpp | 1 - 4 files changed, 58 insertions(+), 39 deletions(-) delete mode 100644 libstdc++/Android.mk delete mode 100644 libstdc++/src/libstdc++.cpp diff --git a/libc/Android.mk b/libc/Android.mk index 72ea6edce..ca22bbcf6 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -103,8 +103,6 @@ libc_bionic_src_files := \ bionic/__cmsg_nxthdr.cpp \ bionic/connect.cpp \ bionic/ctype.cpp \ - bionic/__cxa_guard.cpp \ - bionic/__cxa_pure_virtual.cpp \ bionic/dirent.cpp \ bionic/dup2.cpp \ bionic/epoll_create.cpp \ @@ -143,7 +141,6 @@ libc_bionic_src_files := \ bionic/mknod.cpp \ bionic/mntent.cpp \ bionic/NetdClientDispatch.cpp \ - bionic/new.cpp \ bionic/open.cpp \ bionic/pause.cpp \ bionic/pipe.cpp \ @@ -231,6 +228,11 @@ libc_bionic_src_files := \ bionic/wchar.cpp \ bionic/wctype.cpp \ +libc_cxa_src_files := \ + bionic/__cxa_guard.cpp \ + bionic/__cxa_pure_virtual.cpp \ + bionic/new.cpp \ + libc_upstream_freebsd_src_files := \ upstream-freebsd/lib/libc/gen/ldexp.c \ upstream-freebsd/lib/libc/gen/sleep.c \ @@ -806,6 +808,27 @@ $(eval $(call patch-up-arch-specific-flags,LOCAL_SRC_FILES,libc_bionic_src_files include $(BUILD_STATIC_LIBRARY) +# ======================================================== +# libc_cxa.a - Things traditionally in libstdc++ +# ======================================================== + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(libc_cxa_src_files) +LOCAL_CFLAGS := $(libc_common_cflags) \ + -fvisibility=hidden \ + +LOCAL_CONLYFLAGS := $(libc_common_conlyflags) +LOCAL_CPPFLAGS := $(libc_common_cppflags) +LOCAL_C_INCLUDES := $(libc_common_c_includes) +LOCAL_MODULE := libc_cxa +LOCAL_CLANG := true # GCC refuses to hide new/delete +LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) +LOCAL_SYSTEM_SHARED_LIBRARIES := + +include $(BUILD_STATIC_LIBRARY) + + # ======================================================== # libc_syscalls.a # ======================================================== @@ -858,6 +881,7 @@ LOCAL_CLANG := $(use_clang) LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies) LOCAL_WHOLE_STATIC_LIBRARIES := \ libc_bionic \ + libc_cxa \ libc_dns \ libc_freebsd \ libc_gdtoa \ @@ -1105,6 +1129,36 @@ include $(BUILD_SHARED_LIBRARY) endif #!user +# ======================================================== +# libstdc++.so +# ======================================================== +libstdcxx_common_src_files := \ + bionic/__cxa_guard.cpp \ + bionic/__cxa_pure_virtual.cpp \ + bionic/new.cpp \ + bionic/libc_logging.cpp \ + +include $(CLEAR_VARS) +LOCAL_C_INCLUDES := $(libc_common_c_includes) +LOCAL_CFLAGS := $(libc_common_cflags) +LOCAL_SRC_FILES := $(libstdcxx_common_src_files) +LOCAL_MODULE:= libstdc++ +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_SYSTEM_SHARED_LIBRARIES := libc +include $(BUILD_SHARED_LIBRARY) + +# ======================================================== +# libstdc++.a +# ======================================================== +include $(CLEAR_VARS) +LOCAL_C_INCLUDES := $(libc_common_c_includes) +LOCAL_CFLAGS := $(libc_common_cflags) +LOCAL_SRC_FILES := $(libstdcxx_common_src_files) +LOCAL_MODULE:= libstdc++ +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk +LOCAL_SYSTEM_SHARED_LIBRARIES := libc +include $(BUILD_STATIC_LIBRARY) + # ======================================================== include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/libc/tools/check-symbols-glibc.py b/libc/tools/check-symbols-glibc.py index ffff9649d..83267303c 100755 --- a/libc/tools/check-symbols-glibc.py +++ b/libc/tools/check-symbols-glibc.py @@ -172,24 +172,6 @@ libresolv_stuff = set([ 'dn_expand', 'nsdispatch', ]) -# libstdc++ stuff we took over. -libstdcxx_stuff = set([ - # new, delete, nothrow - '_ZSt7nothrow', - '_ZdaPv', - '_ZdaPvRKSt9nothrow_t', - '_ZdlPv', - '_ZdlPvRKSt9nothrow_t', - '_Znam', - '_ZnamRKSt9nothrow_t', - '_Znwm', - '_ZnwmRKSt9nothrow_t', - - '__cxa_guard_abort', - '__cxa_guard_acquire', - '__cxa_guard_release', - '__cxa_pure_virtual', -]) # Implementation details we know we export (and can't get away from). known = set([ '_ctype_', @@ -210,8 +192,7 @@ if not only_unwanted: print 'in bionic but not glibc:' allowed_stuff = (bsd_stuff | FORTIFY_stuff | linux_stuff | macro_stuff | - std_stuff | weird_stuff | libresolv_stuff | libstdcxx_stuff | - known) + std_stuff | weird_stuff | libresolv_stuff | known) for symbol in sorted((bionic - allowed_stuff).difference(glibc)): if symbol in ndk_ignored: symbol += '*' diff --git a/libstdc++/Android.mk b/libstdc++/Android.mk deleted file mode 100644 index ff9609aca..000000000 --- a/libstdc++/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH:= $(call my-dir) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES := src/libstdc++.cpp -LOCAL_MODULE:= libstdc++ -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk -LOCAL_SYSTEM_SHARED_LIBRARIES := libc -include $(BUILD_SHARED_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_SRC_FILES:= src/libstdc++.cpp -LOCAL_MODULE:= libstdc++ -LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk -LOCAL_SYSTEM_SHARED_LIBRARIES := libc -include $(BUILD_STATIC_LIBRARY) diff --git a/libstdc++/src/libstdc++.cpp b/libstdc++/src/libstdc++.cpp deleted file mode 100644 index 3676aa19f..000000000 --- a/libstdc++/src/libstdc++.cpp +++ /dev/null @@ -1 +0,0 @@ -extern "C" void __this_library_is_now_part_of_libc() {}