Add support for the ARM EHABI unwinder.
Only use the LLVM unwinder for ARM.
The LLVM unwinder now supports ARM EHABI, so we can finally use that for
exception handling on ARM. The unwinder doesn't work for other
architectures though (aside from on Darwin), so use libunwind for now.
Change-Id: Ife8b0b33dbfe96c10eab102cd36d30149d68ace9
diff --git a/Android.mk b/Android.mk
index b4723f2..debdbc9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -38,13 +38,15 @@
src/private_typeinfo.cpp \
src/stdexcept.cpp \
src/typeinfo.cpp \
+
+LLVM_UNWIND_SRC_FILES := \
src/Unwind/libunwind.cpp \
+ src/Unwind/Unwind-EHABI.cpp \
src/Unwind/Unwind-sjlj.c \
src/Unwind/UnwindLevel1-gcc-ext.c \
src/Unwind/UnwindLevel1.c \
src/Unwind/UnwindRegistersSave.S \
-
-LIBCXXABI_SRC_FILES_IA := src/Unwind/UnwindRegistersRestore.S
+ src/Unwind/UnwindRegistersRestore.S \
LIBCXXABI_CFLAGS := \
-I$(LOCAL_PATH)/include/ \
@@ -59,40 +61,35 @@
LOCAL_MODULE := libc++abi
LOCAL_CLANG := true
LOCAL_SRC_FILES := $(LIBCXXABI_SRC_FILES)
-LOCAL_SRC_FILES_x86 := $(LIBCXXABI_SRC_FILES_IA)
-LOCAL_SRC_FILES_x86_64 := $(LIBCXXABI_SRC_FILES_IA)
-
+LOCAL_SRC_FILES_arm := $(LLVM_UNWIND_SRC_FILES)
LOCAL_CFLAGS := $(LIBCXXABI_CFLAGS)
LOCAL_CPPFLAGS := $(LIBCXXABI_CPPFLAGS)
LOCAL_RTTI_FLAG := $(LIBCXXABI_RTTI_FLAG)
-
-LOCAL_SHARED_LIBRARIES_arm := libdl
-
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+LOCAL_WHOLE_STATIC_LIBRARIES_arm64 := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_mips := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_mips64 := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_x86 := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 := libunwind
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libc++abi
LOCAL_CLANG := true
-
LOCAL_SRC_FILES := $(LIBCXXABI_SRC_FILES)
-
-LOCAL_SRC_FILES += $(LIBCXXABI_SRC_FILES_IA)
-
LOCAL_CFLAGS := $(LIBCXXABI_CFLAGS)
LOCAL_CPPFLAGS := $(LIBCXXABI_CPPFLAGS)
ifeq ($(HOST_OS),darwin)
-LOCAL_SRC_FILES += src/Unwind/Unwind_AppleExtras.cpp
+LOCAL_SRC_FILES += $(LLVM_UNWIND_SRC_FILES) src/Unwind/Unwind_AppleExtras.cpp
# libcxxabi really doesn't like the non-LLVM assembler on Darwin
LOCAL_ASFLAGS += -integrated-as
LOCAL_CFLAGS += -integrated-as
LOCAL_CPPFLAGS += -integrated-as
+else
+LOCAL_WHOLE_STATIC_LIBRARIES := libunwindbacktrace
endif
-LOCAL_LDFLAGS := -nostdlib
-LOCAL_LDLIBS := -lpthread -lc -ldl
LOCAL_RTTI_FLAG := $(LIBCXXABI_RTTI_FLAG)
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
LOCAL_MULTILIB := both
diff --git a/src/Unwind/config.h b/src/Unwind/config.h
index f6bff33..848d020 100644
--- a/src/Unwind/config.h
+++ b/src/Unwind/config.h
@@ -57,34 +57,6 @@
#define _LIBUNWIND_SUPPORT_DWARF_INDEX 0
#endif
-#elif defined(__BIONIC__)
- #define _LIBUNWIND_BUILD_ZERO_COST_APIS (__i386__ || __x86_64__ || __arm64__ || __arm__)
- #define _LIBUNWIND_BUILD_SJLJ_APIS 0
- #define _LIBUNWIND_SUPPORT_FRAME_APIS (__i386__ || __x86_64__)
- #define _LIBUNWIND_EXPORT __attribute__((visibility("default")))
- #define _LIBUNWIND_HIDDEN __attribute__((visibility("hidden")))
- #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, "libunwind: " msg, __VA_ARGS__)
- #define _LIBUNWIND_ABORT(msg) __assert2(__FILE__, __LINE__, __func__, msg)
-
- #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1
- #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1
- #define _LIBUNWIND_SUPPORT_DWARF_INDEX 0
-#elif defined(__GLIBC__)
- #define _LIBUNWIND_BUILD_ZERO_COST_APIS (__i386__ || __x86_64__ || __arm64__ || __arm__)
- #define _LIBUNWIND_BUILD_SJLJ_APIS 0
- #define _LIBUNWIND_SUPPORT_FRAME_APIS (__i386__ || __x86_64__)
- #define _LIBUNWIND_EXPORT __attribute__((visibility("default")))
- #define _LIBUNWIND_HIDDEN __attribute__((visibility("hidden")))
- #define _LIBUNWIND_LOG(msg, ...) fprintf(stderr, "libunwind: " msg, __VA_ARGS__)
-#ifndef NDEBUG
- #define _LIBUNWIND_ABORT(msg) __assert_fail(msg, __FILE__, __LINE__, __func__)
-#else
- #define _LIBUNWIND_ABORT(msg) abort()
-#endif
-
- #define _LIBUNWIND_SUPPORT_COMPACT_UNWIND 1
- #define _LIBUNWIND_SUPPORT_DWARF_UNWIND 1
- #define _LIBUNWIND_SUPPORT_DWARF_INDEX 0
#else
#include <stdlib.h>