Switch to gdtoa.
This gives us a real strtold for LP64 and fixes various LP64
bugs.
Bug: 13563801
Change-Id: I277858d718ee746e136b6b6308a495ba50dfa488
diff --git a/libc/Android.mk b/libc/Android.mk
index b94e573..fd14232 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -85,7 +85,6 @@
stdlib/getenv.c \
stdlib/putenv.c \
stdlib/setenv.c \
- stdlib/strtod.c \
unistd/syslog.c \
# Fortify implementations of libc functions.
@@ -208,7 +207,6 @@
bionic/strerror.cpp \
bionic/strerror_r.cpp \
bionic/strsignal.cpp \
- bionic/strtof.cpp \
bionic/strtold.cpp \
bionic/stubs.cpp \
bionic/symlink.cpp \
@@ -311,6 +309,33 @@
upstream-netbsd/lib/libc/thread-stub/__isthreaded.c \
upstream-netbsd/lib/libc/unistd/killpg.c \
+libc_upstream_openbsd_gdtoa_src_files := \
+ upstream-openbsd/gdtoa_support.cpp \
+ upstream-openbsd/lib/libc/gdtoa/dmisc.c \
+ upstream-openbsd/lib/libc/gdtoa/dtoa.c \
+ upstream-openbsd/lib/libc/gdtoa/gdtoa.c \
+ upstream-openbsd/lib/libc/gdtoa/gethex.c \
+ upstream-openbsd/lib/libc/gdtoa/gmisc.c \
+ upstream-openbsd/lib/libc/gdtoa/hd_init.c \
+ upstream-openbsd/lib/libc/gdtoa/hdtoa.c \
+ upstream-openbsd/lib/libc/gdtoa/hexnan.c \
+ upstream-openbsd/lib/libc/gdtoa/ldtoa.c \
+ upstream-openbsd/lib/libc/gdtoa/misc.c \
+ upstream-openbsd/lib/libc/gdtoa/smisc.c \
+ upstream-openbsd/lib/libc/gdtoa/strtod.c \
+ upstream-openbsd/lib/libc/gdtoa/strtodg.c \
+ upstream-openbsd/lib/libc/gdtoa/strtof.c \
+ upstream-openbsd/lib/libc/gdtoa/strtord.c \
+ upstream-openbsd/lib/libc/gdtoa/sum.c \
+ upstream-openbsd/lib/libc/gdtoa/ulp.c \
+
+libc_upstream_openbsd_gdtoa_src_files_32 := \
+ $(libc_upstream_openbsd_gdtoa_src_files) \
+
+libc_upstream_openbsd_gdtoa_src_files_64 := \
+ $(libc_upstream_openbsd_gdtoa_src_files) \
+ upstream-openbsd/lib/libc/gdtoa/strtorQ.c \
+
libc_upstream_openbsd_src_files := \
upstream-openbsd/lib/libc/gen/alarm.c \
upstream-openbsd/lib/libc/gen/exec.c \
@@ -615,6 +640,34 @@
# ========================================================
+# libc_gdtoa.a - upstream OpenBSD C library gdtoa code
+# ========================================================
+#
+# These files are built with the openbsd-compat.h header file
+# automatically included.
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES_32 := $(libc_upstream_openbsd_gdtoa_src_files_32)
+LOCAL_SRC_FILES_64 := $(libc_upstream_openbsd_gdtoa_src_files_64)
+LOCAL_CFLAGS := \
+ $(libc_common_cflags) \
+ -I$(LOCAL_PATH)/upstream-openbsd \
+ -I$(LOCAL_PATH)/upstream-openbsd/lib/libc/include \
+ -include upstream-openbsd/openbsd-compat.h \
+
+LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
+LOCAL_CPPFLAGS := $(libc_common_cppflags)
+LOCAL_C_INCLUDES := $(libc_common_c_includes)
+LOCAL_MODULE := libc_gdtoa
+LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
+LOCAL_SYSTEM_SHARED_LIBRARIES :=
+
+$(eval $(call patch-up-arch-specific-flags,LOCAL_CFLAGS,libc_common_cflags))
+include $(BUILD_STATIC_LIBRARY)
+
+
+# ========================================================
# libc_bionic.a - home-grown C library code
# ========================================================
@@ -670,12 +723,14 @@
LOCAL_CONLYFLAGS := $(libc_common_conlyflags)
LOCAL_CPPFLAGS := $(libc_common_cppflags)
LOCAL_C_INCLUDES := $(libc_common_c_includes)
+LOCAL_ARM_MODE := arm # Work around arm linker bug http://b/14090368.
LOCAL_MODULE := libc_common
LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
LOCAL_WHOLE_STATIC_LIBRARIES := \
libc_bionic \
libc_dns \
libc_freebsd \
+ libc_gdtoa \
libc_netbsd \
libc_openbsd \
libc_stack_protector \
@@ -773,7 +828,7 @@
bionic/pthread_debug.cpp \
bionic/libc_init_dynamic.cpp \
-LOCAL_MODULE:= libc
+LOCAL_MODULE := libc
LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
LOCAL_REQUIRED_MODULES := tzdata
@@ -786,7 +841,7 @@
# 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 an "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
+# create a "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
# you wanted!
LOCAL_SHARED_LIBRARIES := libdl
@@ -834,7 +889,7 @@
bionic/malloc_debug_leak.cpp \
bionic/malloc_debug_check.cpp \
-LOCAL_MODULE:= libc_malloc_debug_leak
+LOCAL_MODULE := libc_malloc_debug_leak
LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
LOCAL_SHARED_LIBRARIES := libc libdl
@@ -865,7 +920,7 @@
LOCAL_SRC_FILES := \
bionic/malloc_debug_qemu.cpp
-LOCAL_MODULE:= libc_malloc_debug_qemu
+LOCAL_MODULE := libc_malloc_debug_qemu
LOCAL_ADDITIONAL_DEPENDENCIES := $(libc_common_additional_dependencies)
LOCAL_SHARED_LIBRARIES := libc libdl