diff options
| author | Jan Kratochvil <[email protected]> | 2014-01-15 21:16:57 +0100 |
|---|---|---|
| committer | Jan Kratochvil <[email protected]> | 2014-01-15 21:16:57 +0100 |
| commit | 7c6e785e6eca774080a64801f950bd61785c469e (patch) | |
| tree | 4429967bfda9c63803a4180d5e52f91a731fb6f4 /tests/testfile-backtrace-demangle.cc | |
| parent | e922ec4e3bcd7c164a9ce424accac4394e7d5afd (diff) | |
Fix corruption of non-C++ symbols by the demangler.
Signed-off-by: Jan Kratochvil <[email protected]>
Diffstat (limited to 'tests/testfile-backtrace-demangle.cc')
| -rw-r--r-- | tests/testfile-backtrace-demangle.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/testfile-backtrace-demangle.cc b/tests/testfile-backtrace-demangle.cc new file mode 100644 index 00000000..6daa4297 --- /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(); +} |
