diff -urp ltrace-0.5/configure.ac ltrace-0.5-pm/configure.ac
--- ltrace-0.5/configure.ac 2006-06-14 06:55:21.000000000 +0200
+++ ltrace-0.5-pm/configure.ac 2010-09-08 14:56:29.000000000 +0200
@@ -82,6 +82,14 @@ AC_CHECK_LIB([supc++], [__cxa_demangle],
AC_SUBST(libsupcxx_LIBS)
+# HAVE_LIBSTDC__
+AC_CHECK_LIB([stdc++], [__cxa_demangle], [
+ AC_DEFINE([HAVE_LIBSTDC__], [1], [we have libstdc++])
+ libstdcxx_LIBS="-lstdc++"], [
+ libstdcxx_LIBS=""])
+AC_SUBST(libstdcxx_LIBS)
+
+
# HAVE_LIBUNWIND
AC_ARG_WITH(libunwind,
AS_HELP_STRING([--with-libunwind], [Use libunwind frame unwinding support]),
diff -up ltrace-0.5/demangle.c\~ ltrace-0.5/demangle.c
--- ltrace-0.5/demangle.c~ 2006-02-20 22:48:07.000000000 +0100
+++ ltrace-0.5/demangle.c 2010-09-08 15:21:44.000000000 +0200
@@ -28,9 +28,8 @@ static void my_demangle_dict_clear(void)
const char *
my_demangle(const char *function_name) {
const char *tmp, *fn_copy;
-#if !defined HAVE_LIBIBERTY && defined HAVE_LIBSUPC__
+#ifdef USE_CXA_DEMANGLE
extern char *__cxa_demangle(const char *, char *, size_t *, int *);
- int status = 0;
#endif
debug(DEBUG_FUNCTION, "my_demangle(name=%s)", function_name);
@@ -42,7 +42,8 @@ const char *my_demangle(const char *func
fn_copy = strdup(function_name);
#ifdef HAVE_LIBIBERTY
tmp = cplus_demangle(function_name, DMGL_ANSI | DMGL_PARAMS);
-#elif defined HAVE_LIBSUPC__
+#elif defined USE_CXA_DEMANGLE
+ int status = 0;
tmp = __cxa_demangle(function_name, NULL, NULL, &status);
#endif
if (!tmp)
diff --git a/testsuite/ltrace.minor/demangle.exp b/testsuite/ltrace.minor/demangle.exp
index c2d3aeb..9dd7694 100644
--- a/testsuite/ltrace.minor/demangle.exp
+++ b/testsuite/ltrace.minor/demangle.exp
@@ -32,6 +32,9 @@ if [regexp {ELF from incompatible architecture} $exec_output] {
} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
fail "Couldn't get .hash data!"
return
+} elseif [ regexp {invalid option} $exec_output ] {
+ unsupported "Demangle support not compiled in."
+ return
}
# read function declarations from demangle.cpp and verify them in demangle.ltrace.
diff -up ltrace-0.6.0/common.h\~ ltrace-0.6.0/common.h
--- ltrace-0.6.0/common.h~ 2011-02-14 16:48:25.000000000 +0100
+++ ltrace-0.6.0/common.h 2012-06-01 18:12:55.119200197 +0200
@@ -14,7 +14,10 @@
#include "ltrace-elf.h"
#include "read_config_file.h"
-#if defined HAVE_LIBIBERTY || defined HAVE_LIBSUPC__
+#if defined HAVE_LIBSUPC__ || defined HAVE_LIBSTDC__
+# define USE_CXA_DEMANGLE
+#endif
+#if defined HAVE_LIBIBERTY || defined USE_CXA_DEMANGLE
# define USE_DEMANGLE
#endif
diff -urp ltrace-0.6.0-pm/config.h.in ltrace-0.6.0/config.h.in
--- ltrace-0.6.0-pm/config.h.in 2012-06-01 18:22:23.885160252 +0200
+++ ltrace-0.6.0/config.h.in 2012-06-01 18:23:01.000000000 +0200
@@ -48,6 +48,9 @@
/* we have libiberty */
#undef HAVE_LIBIBERTY
+/* we have libstdc++ */
+#undef HAVE_LIBSTDC__
+
/* we have libsupc++ */
#undef HAVE_LIBSUPC__
diff -urp ltrace-0.6.0-pm/configure ltrace-0.6.0/configure
--- ltrace-0.6.0-pm/configure 2012-06-01 18:22:23.882160233 +0200
+++ ltrace-0.6.0/configure 2012-06-01 18:23:01.657397968 +0200
@@ -616,6 +624,7 @@ LIBOBJS
libunwind_arch_LIBS
libunwind_ptrace_LIBS
libunwind_LIBS
+libstdcxx_LIBS
libsupcxx_LIBS
liberty_LIBS
MAINT
@@ -11029,6 +11690,57 @@ fi
+# HAVE_LIBSTDC__
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cxa_demangle in -lstdc++" >&5
+$as_echo_n "checking for __cxa_demangle in -lstdc++... " >&6; }
+if ${ac_cv_lib_stdcpp___cxa_demangle+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lstdc++ $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char __cxa_demangle ();
+int
+main ()
+{
+return __cxa_demangle ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_stdcpp___cxa_demangle=yes
+else
+ ac_cv_lib_stdcpp___cxa_demangle=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_stdcpp___cxa_demangle" >&5
+$as_echo "$ac_cv_lib_stdcpp___cxa_demangle" >&6; }
+if test "x$ac_cv_lib_stdcpp___cxa_demangle" = xyes; then :
+
+
+$as_echo "#define HAVE_LIBSTDC__ 1" >>confdefs.h
+
+ libstdcxx_LIBS="-lstdc++"
+else
+
+ libstdcxx_LIBS=""
+fi
+
+
+
+
# HAVE_LIBUNWIND
# Check whether --with-libunwind was given.
diff -urp ltrace-0.6.0-pm/Makefile.in ltrace-0.6.0/Makefile.in
--- ltrace-0.6.0-pm/Makefile.in 2011-02-14 17:01:20.000000000 +0100
+++ ltrace-0.6.0/Makefile.in 2012-06-01 18:23:03.130407239 +0200
@@ -267,6 +270,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
@@ -318,6 +318,7 @@ libltrace_la_LIBADD = \
$(libelf_LIBS) \
$(liberty_LIBS) \
$(libsupcxx_LIBS) \
+ $(libstdcxx_LIBS) \
$(libunwind_LIBS) \
$(libunwind_ptrace_LIBS) \
$(libunwind_arch_LIBS) \
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/alpha/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/alpha/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/alpha/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/alpha/Makefile.in 2012-06-01 18:23:02.547403569 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/arm/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/arm/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/arm/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/arm/Makefile.in 2012-06-01 18:23:02.594403865 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/i386/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/i386/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/i386/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/i386/Makefile.in 2012-06-01 18:23:02.637404136 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/ia64/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/ia64/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/ia64/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/ia64/Makefile.in 2012-06-01 18:23:02.680404406 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/m68k/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/m68k/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/m68k/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/m68k/Makefile.in 2012-06-01 18:23:02.721404665 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/Makefile.in 2012-06-01 18:23:02.505403305 +0200
@@ -208,6 +211,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/mipsel/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/mipsel/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/mipsel/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/mipsel/Makefile.in 2012-06-01 18:23:02.764404935 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/ppc/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/ppc/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/ppc/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/ppc/Makefile.in 2012-06-01 18:23:02.808405212 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/s390/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/s390/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/s390/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/s390/Makefile.in 2012-06-01 18:23:02.850405476 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/sparc/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/sparc/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/sparc/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/sparc/Makefile.in 2012-06-01 18:23:02.891405735 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/linux-gnu/x86_64/Makefile.in ltrace-0.6.0/sysdeps/linux-gnu/x86_64/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/linux-gnu/x86_64/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/linux-gnu/x86_64/Makefile.in 2012-06-01 18:23:02.934406004 +0200
@@ -171,6 +174,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/sysdeps/Makefile.in ltrace-0.6.0/sysdeps/Makefile.in
--- ltrace-0.6.0-pm/sysdeps/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/sysdeps/Makefile.in 2012-06-01 18:23:02.457403003 +0200
@@ -189,6 +192,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/testsuite/ltrace.main/Makefile.in ltrace-0.6.0/testsuite/ltrace.main/Makefile.in
--- ltrace-0.6.0-pm/testsuite/ltrace.main/Makefile.in 2011-02-14 17:01:20.000000000 +0100
+++ ltrace-0.6.0/testsuite/ltrace.main/Makefile.in 2012-06-01 18:23:03.005406452 +0200
@@ -164,6 +167,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/testsuite/ltrace.minor/Makefile.in ltrace-0.6.0/testsuite/ltrace.minor/Makefile.in
--- ltrace-0.6.0-pm/testsuite/ltrace.minor/Makefile.in 2011-02-14 17:01:20.000000000 +0100
+++ ltrace-0.6.0/testsuite/ltrace.minor/Makefile.in 2012-06-01 18:23:03.035406642 +0200
@@ -164,6 +167,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/testsuite/ltrace.torture/Makefile.in ltrace-0.6.0/testsuite/ltrace.torture/Makefile.in
--- ltrace-0.6.0-pm/testsuite/ltrace.torture/Makefile.in 2011-02-14 17:01:20.000000000 +0100
+++ ltrace-0.6.0/testsuite/ltrace.torture/Makefile.in 2012-06-01 18:23:03.066406835 +0200
@@ -164,6 +167,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@
diff -urp ltrace-0.6.0-pm/testsuite/Makefile.in ltrace-0.6.0/testsuite/Makefile.in
--- ltrace-0.6.0-pm/testsuite/Makefile.in 2011-02-14 17:01:19.000000000 +0100
+++ ltrace-0.6.0/testsuite/Makefile.in 2012-06-01 18:23:02.974406256 +0200
@@ -207,6 +210,7 @@ libdir = @libdir@
libelf_LD_LIBRARY_PATH = @libelf_LD_LIBRARY_PATH@
liberty_LIBS = @liberty_LIBS@
libexecdir = @libexecdir@
+libstdcxx_LIBS = @libstdcxx_LIBS@
libsupcxx_LIBS = @libsupcxx_LIBS@
libunwind_LD_LIBRARY_PATH = @libunwind_LD_LIBRARY_PATH@
libunwind_LIBS = @libunwind_LIBS@