Hi,
jankratochvil/demangle
for example currently plain symbol "f" (for function f()) gets printed in the backtrace as "float" (as for a function float()).
libiberty/cp-demangle.c contains:
d_demangle_callback() if (mangled[0] == '_' && mangled[1] == 'Z') type = DCT_MANGLED; else if (strncmp (mangled, "_GLOBAL_", 8) == 0 && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$') && (mangled[9] == 'D' || mangled[9] == 'I') && mangled[10] == '_') type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS; else { if ((options & DMGL_TYPES) == 0) return 0; type = DCT_TYPE; }
I am not completely sure about DCT_GLOBAL_CTORS and DCT_GLOBAL_DTORS but I could not find a compliant symbol without leading _Z for it.
DCT_TYPE is apparently inappropriate for the unwinder.
Thanks, Jan
commit e1b6b9d3131f32ef54932388c814adc02ca6a329 Author: Jan Kratochvil jan.kratochvil@redhat.com Date: Mon Jan 13 23:04:03 2014 +0100
Fix corruption of non-C++ symbols by the demangler.
./ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
* configure.ac: Add AC_PROG_CXX.
src/ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
* stack.c (print_frames) <USE_DEMANGLE>: Check for _Z.
tests/ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
* Makefile.am (check_PROGRAMS): Add backtrace-demangle. (TESTS): Add run-backtrace-demangle.sh. <!DEMANGLE>: Add ELFUTILS_DISABLE_DEMANGLE export. (EXTRA_DIST): Add run-backtrace-demangle.sh (backtrace_demangle_SOURCES): New. * backtrace-demangle.cc: New file. * run-backtrace-demangle.sh: New file.
Signed-off-by: Jan Kratochvil jan.kratochvil@redhat.com
diff --git a/configure.ac b/configure.ac index 7bfa1da..0e4e0ba 100644 --- a/configure.ac +++ b/configure.ac @@ -81,6 +81,7 @@ AS_IF([test "$enable_dwz" = no -a -d /usr/lib/debug/.dwz], AH_TEMPLATE([ENABLE_DWZ], [Defined if libdw should support GNU ref_alt FORM, dwz multi files.])
AC_PROG_CC +AC_PROG_CXX AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX diff --git a/src/stack.c b/src/stack.c index fdf4b07..275be08 100644 --- a/src/stack.c +++ b/src/stack.c @@ -1,5 +1,5 @@ /* Unwinding of frames like gstack/pstack. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013-2014 Red Hat, Inc. This file is part of elfutils.
This file is free software; you can redistribute it and/or modify @@ -220,7 +220,8 @@ print_frames (struct frames *frames, pid_t tid, int dwflerr, const char *what) if (symname != NULL) { #ifdef USE_DEMANGLE - if (! show_raw) + // Require GNU v3 ABI by the "_Z" prefix. + if (! show_raw && symname[0] == '_' && symname[1] == 'Z') { int status = -1; char *dsymname = __cxa_demangle (symname, demangle_buffer, diff --git a/tests/Makefile.am b/tests/Makefile.am index eae64a8..f9fd18a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 1996-2013 Red Hat, Inc. +## Copyright (C) 1996-2014 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -53,7 +53,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ alldts md5-sha1-test typeiter typeiter2 low_high_pc \ test-elf_cntl_gelf_getshdr dwflsyms dwfllines \ dwfl-report-elf-align varlocs backtrace backtrace-child \ - backtrace-data backtrace-dwarf + backtrace-data backtrace-dwarf backtrace-demangle asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ asm-tst6 asm-tst7 asm-tst8 asm-tst9
@@ -107,12 +107,17 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-backtrace-native-biarch.sh run-backtrace-native-core.sh \ run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \ run-backtrace-core-i386.sh run-backtrace-core-ppc.sh \ - run-backtrace-core-s390x.sh run-backtrace-core-s390.sh + run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ + run-backtrace-demangle.sh
if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 endif
+if !DEMANGLE +export ELFUTILS_DISABLE_DEMANGLE = 1 +endif + if !STANDALONE check_PROGRAMS += msg_tst md5-sha1-test TESTS += msg_tst md5-sha1-test @@ -256,7 +261,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-backtrace-core-ppc.sh testfile66.bz2 testfile66.core.bz2 \ backtrace.s390x.core.bz2 backtrace.s390x.exec.bz2 \ backtrace.s390.core.bz2 backtrace.s390.exec.bz2 \ - run-backtrace-core-s390x.sh run-backtrace-core-s390.sh + run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ + run-backtrace-demangle.sh
if USE_VALGRIND valgrind_cmd='valgrind -q --error-exitcode=1 --run-libc-freeres=no' @@ -393,6 +399,7 @@ backtrace_child_biarch_SOURCES = backtrace-child.c backtrace_data_LDADD = $(libdw) $(libelf) $(libmudflap) backtrace_dwarf_CFLAGS = -Wno-unused-parameter backtrace_dwarf_LDADD = $(libdw) $(libelf) $(libmudflap) +backtrace_demangle_SOURCES = backtrace-demangle.cc
if GCOV check: check-am coverage diff --git a/tests/backtrace-demangle.cc b/tests/backtrace-demangle.cc new file mode 100644 index 0000000..5f9c075 --- /dev/null +++ b/tests/backtrace-demangle.cc @@ -0,0 +1,49 @@ +/* Test program for C++ demangled unwinding. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see http://www.gnu.org/licenses/. */ + +#include <unistd.h> + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +#define NOINLINE_NOCLONE __attribute__ ((noinline, noclone)) +#else +#define NOINLINE_NOCLONE __attribute__ ((noinline)) +#endif + +static void NOINLINE_NOCLONE +cxxfunc (int i) +{ + sleep (60); + // Avoid tail call optimization. + asm volatile (""); +} + +extern "C" +{ + static void NOINLINE_NOCLONE + f (void) + { + cxxfunc(1); + // Avoid tail call optimization. + asm volatile (""); + } +} + +int +main() +{ + f(); +} diff --git a/tests/run-backtrace-demangle.sh b/tests/run-backtrace-demangle.sh new file mode 100755 index 0000000..aeb4eeb --- /dev/null +++ b/tests/run-backtrace-demangle.sh @@ -0,0 +1,39 @@ +#! /bin/bash +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. + +if test -n "$ELFUTILS_DISABLE_DEMANGLE"; then + exit 77 +fi + +. $srcdir/backtrace-subr.sh + +child=backtrace-demangle +tempfiles $child.{bt,err} +${abs_builddir}/$child & pid=$! +sleep 1 +testrun ${abs_top_builddir}/src/stack -p $pid >$child.bt 2>$child.err +kill -9 $pid +cat $child.{bt,err} +check_unsupported $child.err $child +if ! grep -w f $child.bt; then + echo >&2 $2: no f + false +fi +if ! grep ' cxxfunc(int)' $child.bt; then + echo >&2 $2: no cxxfunc + false +fi
On Mon, 2014-01-13 at 23:17 +0100, Jan Kratochvil wrote:
for example currently plain symbol "f" (for function f()) gets printed in the backtrace as "float" (as for a function float()).
Nice catch.
I am not completely sure about DCT_GLOBAL_CTORS and DCT_GLOBAL_DTORS but I could not find a compliant symbol without leading _Z for it.
The __GLOBAL__.[ID]_xxx functions are wrappers generated when a module xxx contains constructors and destructors of static objects, which will call the actual static initialization and destruction functions for all globals in the module. Since they are "normal" functions they could potentially end up in a backtrace, but I am not sure "demangling" them provides any real benefit.
DCT_TYPE is apparently inappropriate for the unwinder.
Indeed. That is what gets demangled with c++filt --types (demangle type encodings). Which is not done normally by default in c++filt. I wasn't aware __cxa_demangle does do that by default. Just checking that the name starts with _Z is probably the right thing to do.
commit e1b6b9d3131f32ef54932388c814adc02ca6a329 Author: Jan Kratochvil jan.kratochvil@redhat.com Date: Mon Jan 13 23:04:03 2014 +0100
Fix corruption of non-C++ symbols by the demangler. ./ 2014-01-13 Jan Kratochvil <jan.kratochvil@redhat.com> * configure.ac: Add AC_PROG_CXX.
Till now we didn't require a C++ compiler explicitly. I am not against it, we will one day anyway. But it might be simpler to just add the generated exe and core as done with other tests. And just test with --executable --core. It makes sure we don't rely on any particular compiler version for the test data.
src/ 2014-01-13 Jan Kratochvil <jan.kratochvil@redhat.com> * stack.c (print_frames) <USE_DEMANGLE>: Check for _Z.
The other user of __cxa_demangle nm.c (show_symbols_sysv) probably needs the same check.
tests/ 2014-01-13 Jan Kratochvil <jan.kratochvil@redhat.com> * Makefile.am (check_PROGRAMS): Add backtrace-demangle. (TESTS): Add run-backtrace-demangle.sh. <!DEMANGLE>: Add ELFUTILS_DISABLE_DEMANGLE export. (EXTRA_DIST): Add run-backtrace-demangle.sh (backtrace_demangle_SOURCES): New. * backtrace-demangle.cc: New file. * run-backtrace-demangle.sh: New file.
+if !DEMANGLE +export ELFUTILS_DISABLE_DEMANGLE = 1 +endif
A slightly simpler way to handle this is to not unconditionally add backtrace-demangle to check_PROGRAMS and run-backtrace-demangle.sh to TESTS, but only if we have the demangler (which probably also indicates we actually have a C++ compiler, so we don't even try to compile it otherwise):
if DEMANGLE check_programs += backtrace-demangle TESTS += run-backtrace-demangle.sh endif
Thanks,
Mark
On Tue, 14 Jan 2014 10:00:59 +0100, Mark Wielaard wrote:
The __GLOBAL__.[ID]_xxx functions are wrappers generated when a module xxx contains constructors and destructors of static objects, which will call the actual static initialization and destruction functions for all globals in the module. Since they are "normal" functions they could potentially end up in a backtrace, but I am not sure "demangling" them provides any real benefit.
In such case I will add it, it should be there.
Till now we didn't require a C++ compiler explicitly. I am not against it, we will one day anyway. But it might be simpler to just add the generated exe and core as done with other tests. And just test with --executable --core. It makes sure we don't rely on any particular compiler version for the test data.
OK.
The other user of __cxa_demangle nm.c (show_symbols_sysv) probably needs the same check.
OK, will do.
A slightly simpler way to handle this is to not unconditionally add backtrace-demangle to check_PROGRAMS and run-backtrace-demangle.sh to TESTS, but only if we have the demangler (which probably also indicates we actually have a C++ compiler, so we don't even try to compile it otherwise):
if DEMANGLE check_programs += backtrace-demangle TESTS += run-backtrace-demangle.sh endif
This is the easy way but the problem with this approach is that the test is then completely missing from the results, instead of being SKIPped. This makes comparisons of multiple testsuite results weird, at last this happens with the GDB testsuite.
Thanks, Jan
On Tue, 2014-01-14 at 10:07 +0100, Jan Kratochvil wrote:
On Tue, 14 Jan 2014 10:00:59 +0100, Mark Wielaard wrote:
The __GLOBAL__.[ID]_xxx functions are wrappers generated when a module xxx contains constructors and destructors of static objects, which will call the actual static initialization and destruction functions for all globals in the module. Since they are "normal" functions they could potentially end up in a backtrace, but I am not sure "demangling" them provides any real benefit.
In such case I will add it, it should be there.
It probably doesn't hurt, but it also isn't a real/proper mangling scheme. Just an g++ convention. It "demangles" to 'global constructors keyed to xxx'. According to the documentation the only prefix you should check for is _Z: http://mentorembedded.github.io/cxx-abi/abi.html#demangler
If the user has a set of external names to demangle, they should check that the names are in fact mangled (that is, begin with "_Z") before passing them to __cxa_demangle.
Cheers,
Mark
On Tue, 14 Jan 2014 11:22:41 +0100, Mark Wielaard wrote:
On Tue, 2014-01-14 at 10:07 +0100, Jan Kratochvil wrote:
On Tue, 14 Jan 2014 10:00:59 +0100, Mark Wielaard wrote:
The __GLOBAL__.[ID]_xxx functions are wrappers generated when a module xxx contains constructors and destructors of static objects, which will call the actual static initialization and destruction functions for all globals in the module. Since they are "normal" functions they could potentially end up in a backtrace, but I am not sure "demangling" them provides any real benefit.
In such case I will add it, it should be there.
It probably doesn't hurt, but it also isn't a real/proper mangling scheme. Just an g++ convention. It "demangles" to 'global constructors keyed to xxx'. According to the documentation the only prefix you should check for is _Z: http://mentorembedded.github.io/cxx-abi/abi.html#demangler
elfutils already implements various non-upstream-standard extensions, like .gnu_debugdata for all so I do not find it a relevant argument here. So probably another disagreement if you did not agree with it by "doesn't hurt", not sure. It is not in the patch below.
Thanks, Jan
From 1f41f4fd5ee517cafaf60189fd41b40bc749219c Mon Sep 17 00:00:00 2001
From: Jan Kratochvil jan.kratochvil@redhat.com Date: Mon, 13 Jan 2014 23:04:03 +0100 Subject: [PATCH] Fix corruption of non-C++ symbols by the demangler.
src/ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
Fix corruption of non-C++ symbols by the demangler. * nm.c (show_symbols_sysv, show_symbols_bsd, show_symbols_posix) (show_symbols): Check for _Z. * stack.c (print_frames) <USE_DEMANGLE>: Check for _Z.
tests/ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
Fix corruption of non-C++ symbols by the demangler. * Makefile.am (TESTS): Add run-backtrace-demangle.sh. <!DEMANGLE>: Add ELFUTILS_DISABLE_DEMANGLE export. (EXTRA_DIST): Add run-backtrace-demangle.sh, testfile-backtrace-demangle.bz2, testfile-backtrace-demangle.cc, testfile-backtrace-demangle.core.bz2. * backtrace-demangle.cc: New file. * run-backtrace-demangle.sh: New file. * testfile-backtrace-demangle.bz2: New file. * testfile-backtrace-demangle.cc: New file. * testfile-backtrace-demangle.core.bz2: New file.
Signed-off-by: Jan Kratochvil jan.kratochvil@redhat.com --- src/nm.c | 16 +++++----- src/stack.c | 5 +-- tests/Makefile.am | 14 +++++++-- tests/run-backtrace-demangle.sh | 37 +++++++++++++++++++++++ tests/testfile-backtrace-demangle.bz2 | Bin 0 -> 2610 bytes tests/testfile-backtrace-demangle.cc | 47 +++++++++++++++++++++++++++++ tests/testfile-backtrace-demangle.core.bz2 | Bin 0 -> 40629 bytes 7 files changed, 106 insertions(+), 13 deletions(-) create mode 100755 tests/run-backtrace-demangle.sh create mode 100644 tests/testfile-backtrace-demangle.bz2 create mode 100644 tests/testfile-backtrace-demangle.cc create mode 100644 tests/testfile-backtrace-demangle.core.bz2
diff --git a/src/nm.c b/src/nm.c index d434f44..62efb2d 100644 --- a/src/nm.c +++ b/src/nm.c @@ -820,8 +820,8 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, symstrbuf, sizeof symstrbuf);
#ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, @@ -965,8 +965,8 @@ show_symbols_bsd (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, continue;
#ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, @@ -1076,8 +1076,8 @@ show_symbols_posix (Elf *elf, const GElf_Ehdr *ehdr, GElf_Word strndx, continue;
#ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, @@ -1244,8 +1244,8 @@ show_symbols (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, Elf_Scn *xndxscn, continue;
#ifdef USE_DEMANGLE - /* Demangle if necessary. */ - if (demangle) + /* Demangle if necessary. Require GNU v3 ABI by the "_Z" prefix. */ + if (demangle && symstr[0] == '_' && symstr[1] == 'Z') { int status = -1; char *dmsymstr = __cxa_demangle (symstr, demangle_buffer, diff --git a/src/stack.c b/src/stack.c index fdf4b07..275be08 100644 --- a/src/stack.c +++ b/src/stack.c @@ -1,5 +1,5 @@ /* Unwinding of frames like gstack/pstack. - Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2013-2014 Red Hat, Inc. This file is part of elfutils.
This file is free software; you can redistribute it and/or modify @@ -220,7 +220,8 @@ print_frames (struct frames *frames, pid_t tid, int dwflerr, const char *what) if (symname != NULL) { #ifdef USE_DEMANGLE - if (! show_raw) + // Require GNU v3 ABI by the "_Z" prefix. + if (! show_raw && symname[0] == '_' && symname[1] == 'Z') { int status = -1; char *dsymname = __cxa_demangle (symname, demangle_buffer, diff --git a/tests/Makefile.am b/tests/Makefile.am index eae64a8..1253574 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to create Makefile.in ## -## Copyright (C) 1996-2013 Red Hat, Inc. +## Copyright (C) 1996-2014 Red Hat, Inc. ## This file is part of elfutils. ## ## This file is free software; you can redistribute it and/or modify @@ -107,12 +107,17 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ run-backtrace-native-biarch.sh run-backtrace-native-core.sh \ run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \ run-backtrace-core-i386.sh run-backtrace-core-ppc.sh \ - run-backtrace-core-s390x.sh run-backtrace-core-s390.sh + run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ + run-backtrace-demangle.sh
if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 endif
+if !DEMANGLE +export ELFUTILS_DISABLE_DEMANGLE = 1 +endif + if !STANDALONE check_PROGRAMS += msg_tst md5-sha1-test TESTS += msg_tst md5-sha1-test @@ -256,7 +261,10 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-backtrace-core-ppc.sh testfile66.bz2 testfile66.core.bz2 \ backtrace.s390x.core.bz2 backtrace.s390x.exec.bz2 \ backtrace.s390.core.bz2 backtrace.s390.exec.bz2 \ - run-backtrace-core-s390x.sh run-backtrace-core-s390.sh + run-backtrace-core-s390x.sh run-backtrace-core-s390.sh \ + run-backtrace-demangle.sh testfile-backtrace-demangle.bz2 \ + testfile-backtrace-demangle.cc \ + testfile-backtrace-demangle.core.bz2
if USE_VALGRIND valgrind_cmd='valgrind -q --error-exitcode=1 --run-libc-freeres=no' diff --git a/tests/run-backtrace-demangle.sh b/tests/run-backtrace-demangle.sh new file mode 100755 index 0000000..b5bddeb --- /dev/null +++ b/tests/run-backtrace-demangle.sh @@ -0,0 +1,37 @@ +#! /bin/bash +# Copyright (C) 2014 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. + +if test -n "$ELFUTILS_DISABLE_DEMANGLE"; then + exit 77 +fi + +. $srcdir/backtrace-subr.sh +set -x + +child=testfile-backtrace-demangle +testfiles $child{,.core} +tempfiles $child.{bt,err} +testrun ${abs_top_builddir}/src/stack -e $child --core $child.core >$child.bt 2>$child.err +cat $child.{bt,err} +if ! grep -w f $child.bt; then + echo >&2 $2: no f + false +fi +if ! grep ' cxxfunc(int)' $child.bt; then + echo >&2 $2: no cxxfunc + false +fi diff --git a/tests/testfile-backtrace-demangle.bz2 b/tests/testfile-backtrace-demangle.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..c3156e89b0537bc89a828a54ba3aeb2a23864591 GIT binary patch literal 2610 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%0A;iB%^m1SmX2R)T|)mO_=OpfG$uwQ zZ2lre^T8<A%^9W>88(~qH8PdvXvv}=k7(O7N%G9X8_?HUTPtnb9=~0+sQN+!sVU~D z(QtD$%M#dBc4s7Uxa2F80@{Y;pnwfBf(ayoKsH#NZ4l?GBZ(}j8Z8Bk*xFDc7dR7N zigXdGbSB9XDvJGSb2Ov^PzSJm5b8!sN-(X|6^(&&_T7TVSh%k=P%NH6d^{-!6?BE@ zCs0zHp<u``2dzbBA{wKy3LGFjSeW5)AhZfGmZmB)a3Y>DR<m)T-rZ|Df#XW%z}Y)B zTD#h~R_y>vz#IwHjk1IuqXZBf53sO0WD}4UFleS?z(Ntm49M9Sya0rXZ_iE%rr1a) z8lk;>l@#Wwd}pPc0~t6EhXEj}Z#C_dQ0{Dnr;CDI5TZmOcA%UkP^lp~0=_3D6AS?{ zNUad09kG6J_>e3V!J`C0hdr}pV1gLkMa|uCCesDLqE1$Y3Ev9*fdmyx47t6KR-lb6 zt3<%aOJpoSKq1%wHjHLRAX>MHXBN6TP-aJ&RTSmadJ4WP&`=DD8H1<5L9R@wQvftn zUdKjSA@8zs#6PROyQqK%#k-J;vC#qjy+D{zpL$#nmQL-QN5n$iK?x3#I1j!hR_|({ z)rog>c#1|90hXGGFg(RuW_hd^R#mKQq=yAKAO$IvB`eLxQRm%Qt5XtchICFlH*PWn zh-Ct4<T5;BH6pfguU6-p>_H(`;ex|j9<J7@rWatw1%W(4h{s~H6{43y0|_c67EVQg z?0F=9)n(Yoh1J;#`}&;Nvv{WWJp2<@crgLu1rv^Bk?R|UbX>>b101kIgn{;2B+5WV zV<G#Zf{%8NvSpL96hMaZGP~M{1g4?`2V|Bfnz03PEQg;^ZmFQAij51MvYP_CQ3IJS zJ$cdQ>NYuew{~*3A)>#u#lyMAv#>}d>M$`}hN8xwv^X%#&w7Z}5DXO#Bc0AJEv#E# U>N+XBdf)MPBvXY60l*Y`5Iq`tpa1{>
literal 0 HcmV?d00001
diff --git a/tests/testfile-backtrace-demangle.cc b/tests/testfile-backtrace-demangle.cc new file mode 100644 index 0000000..6daa429 --- /dev/null +++ b/tests/testfile-backtrace-demangle.cc @@ -0,0 +1,47 @@ +/* Test program for C++ demangled unwinding. + Copyright (C) 2014 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see http://www.gnu.org/licenses/. */ + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +#define NOINLINE_NOCLONE __attribute__ ((noinline, noclone)) +#else +#define NOINLINE_NOCLONE __attribute__ ((noinline)) +#endif + +static void NOINLINE_NOCLONE +cxxfunc (int i) +{ + *(volatile int *)0=0; + // Avoid tail call optimization. + asm volatile (""); +} + +extern "C" +{ + static void NOINLINE_NOCLONE + f (void) + { + cxxfunc(1); + // Avoid tail call optimization. + asm volatile (""); + } +} + +int +main() +{ + f(); +} diff --git a/tests/testfile-backtrace-demangle.core.bz2 b/tests/testfile-backtrace-demangle.core.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..c68edce1fd41339a3968a960696c85a15fa4925e GIT binary patch literal 40629 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®v{f>*zSB#(&?HY)Mtdl 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 WnsP~Xq0hH1aSYvoehPg6ng0VF)?5Jq
literal 0 HcmV?d00001
On Wed, 2014-01-15 at 14:09 +0100, Jan Kratochvil wrote:
On Tue, 14 Jan 2014 11:22:41 +0100, Mark Wielaard wrote:
On Tue, 2014-01-14 at 10:07 +0100, Jan Kratochvil wrote:
On Tue, 14 Jan 2014 10:00:59 +0100, Mark Wielaard wrote:
The __GLOBAL__.[ID]_xxx functions are wrappers generated when a module xxx contains constructors and destructors of static objects, which will call the actual static initialization and destruction functions for all globals in the module. Since they are "normal" functions they could potentially end up in a backtrace, but I am not sure "demangling" them provides any real benefit.
In such case I will add it, it should be there.
It probably doesn't hurt, but it also isn't a real/proper mangling scheme. Just an g++ convention. It "demangles" to 'global constructors keyed to xxx'. According to the documentation the only prefix you should check for is _Z: http://mentorembedded.github.io/cxx-abi/abi.html#demangler
elfutils already implements various non-upstream-standard extensions, like .gnu_debugdata for all so I do not find it a relevant argument here. So probably another disagreement if you did not agree with it by "doesn't hurt", not sure. It is not in the patch below.
I just meant I wouldn't bother since it seems it is a somewhat fringe corner case with an internal gcc detail that gets translated/demangled into something that IMHO isn't that interesting to begin with. I am not opposed to do more than just simple demangling. But maybe we should add a helper function for it somewhere in that case since there are various places where we would use it.
src/ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
Fix corruption of non-C++ symbols by the demangler.
- nm.c (show_symbols_sysv, show_symbols_bsd, show_symbols_posix)
(show_symbols): Check for _Z.
- stack.c (print_frames) <USE_DEMANGLE>: Check for _Z.
tests/ 2014-01-13 Jan Kratochvil jan.kratochvil@redhat.com
Fix corruption of non-C++ symbols by the demangler.
- Makefile.am (TESTS): Add run-backtrace-demangle.sh.
<!DEMANGLE>: Add ELFUTILS_DISABLE_DEMANGLE export.
(EXTRA_DIST): Add run-backtrace-demangle.sh, testfile-backtrace-demangle.bz2, testfile-backtrace-demangle.cc, testfile-backtrace-demangle.core.bz2.
- backtrace-demangle.cc: New file.
- run-backtrace-demangle.sh: New file.
- testfile-backtrace-demangle.bz2: New file.
- testfile-backtrace-demangle.cc: New file.
- testfile-backtrace-demangle.core.bz2: New file.
Looks good.
Thanks,
Mark
elfutils-devel@lists.fedorahosted.org