diff --git a/ltrace-0.6.0-abi.patch b/ltrace-0.6.0-abi.patch index ee9e813..17850bf 100644 --- a/ltrace-0.6.0-abi.patch +++ b/ltrace-0.6.0-abi.patch @@ -385,8 +385,8 @@ index 7fffa76..959715a 100644 #include "proc.h" +#include "forward.h" - #if defined HAVE_LIBIBERTY || defined HAVE_LIBSUPC__ - # define USE_DEMANGLE + #if defined HAVE_LIBSUPC__ || defined HAVE_LIBSTDC__ + # define USE_CXA_DEMANGLE @@ -24,93 +47,13 @@ extern char * command; extern int exiting; /* =1 if we have to exit ASAP */ diff --git a/ltrace-0.6.0-demangle.patch b/ltrace-0.6.0-demangle.patch new file mode 100644 index 0000000..20e414d --- /dev/null +++ b/ltrace-0.6.0-demangle.patch @@ -0,0 +1,86 @@ +diff --git a/Makefile.am b/Makefile.am +index 256c940..593e943 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -35,6 +35,7 @@ libltrace_la_LIBADD = \ + $(libelf_LIBS) \ + $(liberty_LIBS) \ + $(libsupcxx_LIBS) \ ++ $(libstdcxx_LIBS) \ + $(libunwind_LIBS) \ + $(libunwind_ptrace_LIBS) \ + $(libunwind_arch_LIBS) \ +diff --git a/common.h b/common.h +index 7fffa76..b84a5d1 100644 +--- a/common.h ++++ b/common.h +@@ -16,7 +16,10 @@ + #include "read_config_file.h" + #include "proc.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 --git a/configure.ac b/configure.ac +index 707f8c5..1ec7242 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -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) ++ ++ + dnl Check security_get_boolean_active availability. + AC_CHECK_HEADERS(selinux/selinux.h) + AC_CHECK_LIB(selinux, security_get_boolean_active) +diff --git a/demangle.c b/demangle.c +index 5825e28..26a5c7a 100644 +--- a/demangle.c ++++ b/demangle.c +@@ -15,9 +15,8 @@ static Dict *d = NULL; + 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); +@@ -30,7 +29,8 @@ my_demangle(const char *function_name) { + 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 --git a/ltrace.spec b/ltrace.spec index b4cd0d8..28b651e 100644 --- a/ltrace.spec +++ b/ltrace.spec @@ -1,7 +1,7 @@ Summary: Tracks runtime library calls from dynamically linked executables Name: ltrace Version: 0.6.0 -Release: 15%{?dist} +Release: 16%{?dist} URL: http://ltrace.alioth.debian.org/ License: GPLv2+ Group: Development/Debuggers @@ -33,8 +33,9 @@ Patch17: ltrace-0.6.0-ppc-lwarx.patch Patch18: ltrace-0.6.0-libs.patch Patch19: ltrace-0.6.0-libs-fixes-1.patch Patch20: ltrace-0.6.0-dash-n.patch -Patch21: ltrace-0.6.0-abi.patch -Patch22: ltrace-0.6.0-abi-s390.patch +Patch21: ltrace-0.6.0-demangle.patch +Patch22: ltrace-0.6.0-abi.patch +Patch23: ltrace-0.6.0-abi-s390.patch %description Ltrace is a debugging program which runs a specified command until the @@ -68,6 +69,7 @@ execution of processes. %patch20 -p1 %patch21 -p1 %patch22 -p1 +%patch23 -p1 %build # This ugly hack is necessary to build and link files for correct @@ -95,6 +97,12 @@ echo ====================TESTING END===================== %config(noreplace) %{_sysconfdir}/ltrace.conf %changelog +* Fri Jun 1 2012 Petr Machata - 0.6.0-16 +- Look for __cxa_demangle in libstdc++ as well +- Demangle test case should report it's unsupported if demangling + support isn't compiled in (ltrace-0.6.0-demangle.patch) +- Resolves: #827422 + * Thu May 31 2012 Petr Machata - 0.6.0-15 - Add upstream patches for parameter passing. Apart from a couple of fixes, this brings in s390 support (ltrace-0.6.0-abi-s390.patch)