summaryrefslogtreecommitdiff
path: root/tests/run-addr2line-i-lex-test.sh
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2014-12-11 17:19:23 -0800
committerJosh Stone <jistone@redhat.com>2014-12-13 13:31:09 -0800
commit080fa4e368cb8d0e7d06cf5c47ad4efe67e87684 (patch)
tree409cb8cf21e2a264dd068905218de86cd2105fde /tests/run-addr2line-i-lex-test.sh
parent7d9b5ac63fdca2c632e6fb6ac01f931d7f5ddfb7 (diff)
downloadelfutils-080fa4e368cb8d0e7d06cf5c47ad4efe67e87684.tar.gz
tests: Test addr2line -i with lexical blocks present
This test is for the fix in commit aecdf2670c02, but it was hampered by unlucky sorting of line records. With the new stable sort, the test now gets the desired line numbers. Signed-off-by: Josh Stone <jistone@redhat.com>
Diffstat (limited to 'tests/run-addr2line-i-lex-test.sh')
-rwxr-xr-xtests/run-addr2line-i-lex-test.sh71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/run-addr2line-i-lex-test.sh b/tests/run-addr2line-i-lex-test.sh
new file mode 100755
index 00000000..c391fd99
--- /dev/null
+++ b/tests/run-addr2line-i-lex-test.sh
@@ -0,0 +1,71 @@
+#! /bin/sh
+# 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/>.
+
+. $srcdir/test-subr.sh
+
+# // g++ x.cpp -g -fPIC -olibx.so -shared -O3 -fvisibility=hidden
+#
+# void foobar()
+# {
+# __asm__ ( "nop" ::: );
+# }
+#
+# void foo()
+# {
+# {
+# void (*bar) () = foobar;
+# bar();
+# }
+# }
+
+testfiles testfile-lex-inlines
+
+testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000680 <<\EOF
+/tmp/x.cpp:5
+EOF
+
+testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000681 <<\EOF
+/tmp/x.cpp:5
+EOF
+
+testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000690 <<\EOF
+/tmp/x.cpp:5
+/tmp/x.cpp:12
+EOF
+
+testrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-lex-inlines 0x0000000000000691 <<\EOF
+/tmp/x.cpp:5
+/tmp/x.cpp:12
+EOF
+
+# All together now (plus function names).
+testrun_compare ${abs_top_builddir}/src/addr2line -f -i -e testfile-lex-inlines 0x0000000000000680 0x0000000000000681 0x0000000000000690 0x0000000000000691 <<\EOF
+_Z6foobarv
+/tmp/x.cpp:5
+_Z6foobarv
+/tmp/x.cpp:5
+foobar inlined at /tmp/x.cpp:12 in _Z3foov
+/tmp/x.cpp:5
+_Z3foov
+/tmp/x.cpp:12
+foobar inlined at /tmp/x.cpp:12 in _Z3foov
+/tmp/x.cpp:5
+_Z3foov
+/tmp/x.cpp:12
+EOF
+
+exit 0