Merge "locale.cpp: remove dead libandroid_support support." into main
diff --git a/libc/Android.bp b/libc/Android.bp
index 018b7c0..5063364 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -128,7 +128,7 @@
android_x86: {
pack_relocations: false,
ldflags: ["-Wl,--hash-style=both"],
- }
+ },
},
}
@@ -1585,14 +1585,6 @@
// Do not pack libc.so relocations; see http://b/20645321 for details.
pack_relocations: false,
- // WARNING: The only libraries libc.so should depend on are libdl.so and ld-android.so!
- // If you add other libraries, make sure to add -Wl,--exclude-libs=libgcc.a to the
- // LOCAL_LDFLAGS for those libraries. This ensures that symbols that are pulled into
- // those new libraries from libgcc.a are not declared external; if that were the case,
- // then libc would not pull those symbols from libgcc.a as it should, instead relying
- // on the external symbols from the dependent libraries. That would create a "cloaked"
- // dependency on libgcc.a in libc though the libraries, which is not what you wanted!
-
shared_libs: [
"ld-android",
"libdl",
diff --git a/libc/include/math.h b/libc/include/math.h
index fc6c228..3e80083 100644
--- a/libc/include/math.h
+++ b/libc/include/math.h
@@ -308,20 +308,6 @@
#define islessgreater(x, y) __builtin_islessgreater((x), (y))
#define isunordered(x, y) __builtin_isunordered((x), (y))
-/*
- * https://code.google.com/p/android/issues/detail?id=271629
- * To be fully compliant with C++, we need to not define these (C doesn't
- * specify them either). Exposing these means that isinf and isnan will have a
- * return type of int in C++ rather than bool like they're supposed to be.
- *
- * GNU libstdc++ 4.9 isn't able to handle a standard compliant C library. Its
- * <cmath> will `#undef isnan` from math.h and only adds the function overloads
- * to the std namespace, making it impossible to use both <cmath> (which gets
- * included by a lot of other standard headers) and ::isnan.
- */
-int (isinf)(double __x) __attribute_const__;
-int (isnan)(double __x) __attribute_const__;
-
/* POSIX extensions. */
extern int signgam;
@@ -362,6 +348,7 @@
double scalb(double __x, double __exponent);
double drem(double __x, double __y);
int finite(double __x) __attribute_const__;
+int isinff(float __x) __attribute_const__;
int isnanf(float __x) __attribute_const__;
double gamma_r(double __x, int* _Nonnull __sign);
double lgamma_r(double __x, int* _Nonnull __sign);
@@ -402,6 +389,8 @@
#define M_2_SQRTPIl 1.128379167095512573896158903121545172L /* 2/sqrt(pi) */
#define M_SQRT2l 1.414213562373095048801688724209698079L /* sqrt(2) */
#define M_SQRT1_2l 0.707106781186547524400844362104849039L /* 1/sqrt(2) */
+int isinfl(long double __x) __attribute_const__;
+int isnanl(long double __x) __attribute_const__;
#endif
__END_DECLS
diff --git a/libdl/Android.bp b/libdl/Android.bp
index f53d2d1..1bbd902 100644
--- a/libdl/Android.bp
+++ b/libdl/Android.bp
@@ -65,24 +65,6 @@
"bug_24465209_workaround",
],
- // NOTE: --exclude-libs=libgcc.a makes sure that any symbols libdl.so pulls from
- // libgcc.a are made static to libdl.so. This in turn ensures that libraries that
- // a) pull symbols from libgcc.a and b) depend on libdl.so will not rely on libdl.so
- // to provide those symbols, but will instead pull them from libgcc.a. Specifically,
- // we use this property to make sure libc.so has its own copy of the code from
- // libgcc.a it uses.
- //
- // DO NOT REMOVE --exclude-libs!
- ldflags: [
- "-Wl,--exclude-libs=libgcc.a",
- "-Wl,--exclude-libs=libgcc_stripped.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-riscv64-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
- ],
-
arch: {
arm: {
version_script: ":libdl.arm.map",
@@ -94,13 +76,9 @@
version_script: ":libdl.riscv64.map",
},
x86: {
- // Exclude libgcc_eh.a for the same reasons as above
- ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
version_script: ":libdl.x86.map",
},
x86_64: {
- // Exclude libgcc_eh.a for the same reasons as above
- ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
version_script: ":libdl.x86_64.map",
},
},
@@ -159,37 +137,6 @@
recovery_available: true,
native_bridge_supported: true,
- // NOTE: --exclude-libs=libgcc.a makes sure that any symbols libdl.so pulls from
- // libgcc.a are made static to libdl.so. This in turn ensures that libraries that
- // a) pull symbols from libgcc.a and b) depend on libdl.so will not rely on libdl.so
- // to provide those symbols, but will instead pull them from libgcc.a. Specifically,
- // we use this property to make sure libc.so has its own copy of the code from
- // libgcc.a it uses.
- //
- // DO NOT REMOVE --exclude-libs!
-
- ldflags: [
- "-Wl,--exclude-libs=libgcc.a",
- "-Wl,--exclude-libs=libgcc_stripped.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-riscv64-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
- ],
-
- // for x86, exclude libgcc_eh.a for the same reasons as above
- arch: {
- x86: {
- ldflags: [
- "-Wl,--exclude-libs=libgcc_eh.a",
- ],
- },
- x86_64: {
- ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
- },
- },
-
srcs: ["libdl_android.cpp"],
version_script: "libdl_android.map.txt",
diff --git a/linker/Android.bp b/linker/Android.bp
index ce5eff9..143dbd5 100644
--- a/linker/Android.bp
+++ b/linker/Android.bp
@@ -1,14 +1,3 @@
-// ========================================================
-// linker_wrapper - Linux Bionic (on the host)
-// ========================================================
-
-// This is used for bionic on (host) Linux to bootstrap our linker embedded into
-// a binary.
-//
-// Host bionic binaries do not have a PT_INTERP section, instead this gets
-// embedded as the entry point, and the linker is embedded as ELF sections in
-// each binary. There's a linker script that sets all of that up (generated by
-// extract_linker), and defines the extern symbols used in this file.
package {
default_team: "trendy_team_native_tools_libraries",
default_applicable_licenses: ["bionic_linker_license"],
@@ -25,6 +14,17 @@
],
}
+// ========================================================
+// linker_wrapper - Linux Bionic (on the host)
+// ========================================================
+
+// This is used for bionic on (host) Linux to bootstrap our linker embedded into
+// a binary.
+//
+// Host bionic binaries do not have a PT_INTERP section, instead this gets
+// embedded as the entry point, and the linker is embedded as ELF sections in
+// each binary. There's a linker script that sets all of that up (generated by
+// extract_linker), and defines the extern symbols used in this file.
cc_object {
name: "linker_wrapper",
host_supported: true,
@@ -327,8 +327,10 @@
},
},
+ static_executable: true,
+
// -shared is used to overwrite the -Bstatic and -static flags triggered by enabling
- // static_executable. This dynamic linker is actually a shared object linked with static
+ // static_executable. The dynamic linker is actually a shared object linked with static
// libraries.
ldflags: [
"-shared",
@@ -344,18 +346,14 @@
"-Wl,--pack-dyn-relocs=relr",
],
- // we are going to link libc++_static manually because
- // when stl is not set to "none" build system adds libdl
- // to the list of static libraries which needs to be
- // avoided in the case of building loader.
+ // We link libc++_static manually because otherwise the build system will
+ // automatically add libdl to the list of static libraries.
stl: "none",
- // we don't want crtbegin.o (because we have begin.o), so unset it
- // just for this module
+ // We don't want crtbegin.o (because we have our own arch/*/begin.o),
+ // so unset it just for this module.
nocrt: true,
- static_executable: true,
-
// Insert an extra objcopy step to add prefix to symbols. This is needed to prevent gdb
// looking up symbols in the linker by mistake.
prefix_symbols: "__dl_",
@@ -369,26 +367,17 @@
"liblinker_main",
"liblinker_malloc",
- // Use a version of libc++ built without exceptions, because accessing EH globals uses
- // ELF TLS, which is not supported in the loader.
+ // We use a version of libc++ built without exceptions,
+ // because accessing EH globals uses ELF TLS,
+ // which is not supported in the loader.
"libc++_static_noexcept",
+
"libc_nomalloc",
"libc_dynamic_dispatch",
"libm",
"libunwind",
],
- // Ensure that if the linker needs __gnu_Unwind_Find_exidx, then the linker will have a
- // definition of the symbol. The linker links against libgcc.a, whose arm32 unwinder has a weak
- // reference to __gnu_Unwind_Find_exidx, which isn't sufficient to pull in the strong definition
- // of __gnu_Unwind_Find_exidx from libc. An unresolved weak reference would create a
- // non-relative dynamic relocation in the linker binary, which complicates linker startup.
- //
- // This line should be unnecessary because the linker's dependency on libunwind_llvm.a should
- // override libgcc.a, but this line provides a simpler guarantee. It can be removed once the
- // linker stops linking against libgcc.a's arm32 unwinder.
- whole_static_libs: ["libc_unwind_static"],
-
system_shared_libs: [],
// Opt out of native_coverage when opting out of system_shared_libs
@@ -475,35 +464,6 @@
}
cc_library {
- // NOTE: --exclude-libs=libgcc.a makes sure that any symbols ld-android.so pulls from
- // libgcc.a are made static to ld-android.so. This in turn ensures that libraries that
- // a) pull symbols from libgcc.a and b) depend on ld-android.so will not rely on ld-android.so
- // to provide those symbols, but will instead pull them from libgcc.a. Specifically,
- // we use this property to make sure libc.so has its own copy of the code from
- // libgcc.a it uses.
- //
- // DO NOT REMOVE --exclude-libs!
-
- ldflags: [
- "-Wl,--exclude-libs=libgcc.a",
- "-Wl,--exclude-libs=libgcc_stripped.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-riscv64-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-i686-android.a",
- "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a",
- ],
-
- // for x86, exclude libgcc_eh.a for the same reasons as above
- arch: {
- x86: {
- ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
- },
- x86_64: {
- ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"],
- },
- },
-
srcs: ["ld_android.cpp"],
cflags: [
"-Wall",
diff --git a/tests/math_test.cpp b/tests/math_test.cpp
index 493f3af..7ca0e75 100644
--- a/tests/math_test.cpp
+++ b/tests/math_test.cpp
@@ -309,9 +309,7 @@
// Historical BSD cruft that isn't exposed in <math.h> any more.
extern "C" int __isinf(double);
extern "C" int __isinff(float);
-extern "C" int isinff(float);
extern "C" int __isinfl(long double);
-extern "C" int isinfl(long double);
TEST(math_h, __isinf) {
#if defined(ANDROID_HOST_MUSL)
@@ -367,9 +365,7 @@
// Historical BSD cruft that isn't exposed in <math.h> any more.
extern "C" int __isnan(double);
extern "C" int __isnanf(float);
-extern "C" int isnanf(float);
extern "C" int __isnanl(long double);
-extern "C" int isnanl(long double);
TEST(math_h, __isnan) {
#if defined(ANDROID_HOST_MUSL)