aboutsummaryrefslogtreecommitdiffstats
path: root/libcorkscrew
diff options
context:
space:
mode:
authorJing Yu <jingyu@google.com>2011-11-08 21:16:25 -0800
committerJing Yu <jingyu@google.com>2011-11-09 20:47:14 -0800
commit1a5a497795d3d9a3d9278ca9c23668ab9dc11587 (patch)
tree7eea34d551781f75d50788e2b874625179201f89 /libcorkscrew
parent1e339a710e0993c18c8b96f9224ebd3aa29cf8cd (diff)
downloadsystem_core-1a5a497795d3d9a3d9278ca9c23668ab9dc11587.zip
system_core-1a5a497795d3d9a3d9278ca9c23668ab9dc11587.tar.gz
system_core-1a5a497795d3d9a3d9278ca9c23668ab9dc11587.tar.bz2
Link with libgccdemangle.so for name demangling.
1. X86 target will also have name demangling feature. 2. Remove dependency on libiberty.so, since it will not come with prebuilt toolchain in gcc-4.6 and after. Change-Id: Iefbb021c5c3171b9467954eafa54046ad6805753
Diffstat (limited to 'libcorkscrew')
-rw-r--r--libcorkscrew/Android.mk5
-rw-r--r--libcorkscrew/demangle.c13
2 files changed, 6 insertions, 12 deletions
diff --git a/libcorkscrew/Android.mk b/libcorkscrew/Android.mk
index df019c3..433f93c 100644
--- a/libcorkscrew/Android.mk
+++ b/libcorkscrew/Android.mk
@@ -28,8 +28,7 @@ ifeq ($(TARGET_ARCH),arm)
LOCAL_SRC_FILES += \
arch-arm/backtrace-arm.c \
arch-arm/ptrace-arm.c
-LOCAL_CFLAGS += -DCORKSCREW_HAVE_ARCH -DCORKSCREW_HAVE_LIBIBERTY
-LOCAL_LDFLAGS += -liberty
+LOCAL_CFLAGS += -DCORKSCREW_HAVE_ARCH
endif
ifeq ($(TARGET_ARCH),x86)
LOCAL_SRC_FILES += \
@@ -38,7 +37,7 @@ LOCAL_SRC_FILES += \
LOCAL_CFLAGS += -DCORKSCREW_HAVE_ARCH
endif
-LOCAL_SHARED_LIBRARIES += libdl libcutils
+LOCAL_SHARED_LIBRARIES += libdl libcutils libgccdemangle
LOCAL_CFLAGS += -std=gnu99 -Werror
LOCAL_MODULE := libcorkscrew
diff --git a/libcorkscrew/demangle.c b/libcorkscrew/demangle.c
index ecb2c98..54247cb 100644
--- a/libcorkscrew/demangle.c
+++ b/libcorkscrew/demangle.c
@@ -21,15 +21,10 @@
#include <cutils/log.h>
-#ifdef CORKSCREW_HAVE_LIBIBERTY
-// Defined in libiberty.a
-extern char *cplus_demangle(const char *mangled, int options);
-#endif
+extern char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
+ int *status);
char* demangle_symbol_name(const char* name) {
-#ifdef CORKSCREW_HAVE_LIBIBERTY
- return name ? cplus_demangle(name, 0) : NULL;
-#else
- return NULL;
-#endif
+ // __cxa_demangle handles NULL by returning NULL
+ return __cxa_demangle(name, 0, 0, 0);
}