This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
[PATCH] libdwfl: test dwflsyms on ET_EXEC with minisymtab
- From: Josh Stone <jistone at redhat dot com>
- To: elfutils-devel at lists dot fedorahosted dot org
- Date: Tue, 11 Mar 2014 18:29:33 -0700
- Subject: [PATCH] libdwfl: test dwflsyms on ET_EXEC with minisymtab
This adds testfilebaxmin, an ET_EXEC binary with .gnu_debugdata that
doesn't match the load address of the main file. A previous bug made
this trigger a kernel heuristic that forces the module to act like
ET_DYN, which makes things like dwfl_module_relocate_address report
relative addresses rather than proper absolute addresses.
For example, before the fix dwflsyms would print:
deregister_tm_clones (0) 0x400430, rel: 0x430 (.text)
Now it properly prints:
deregister_tm_clones (0) 0x400430, rel: 0x400430 (.text)
These new test additions confirm that it's fixed.
Signed-off-by: Josh Stone <jistone@redhat.com>
---
tests/ChangeLog | 7 +++++
tests/Makefile.am | 2 +-
tests/run-dwflsyms.sh | 48 +++++++++++++++++++++++++++++
tests/run-readelf-s.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++++
tests/testfilebaxmin.bz2 | Bin 0 -> 2987 bytes
5 files changed, 133 insertions(+), 1 deletion(-)
create mode 100755 tests/testfilebaxmin.bz2
diff --git a/tests/ChangeLog b/tests/ChangeLog
index a279982c94a0..9b0e7aceb551 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,10 @@
+2014-03-11 Josh Stone <jistone@redhat.com>
+
+ * testfilebaxmin.bz2: New testfile.
+ * Makefile.am (EXTRA_DIST): Add testfilebaxmin.bz2.
+ * run-readelf-s.sh: Test testfilebaxmin.
+ * run-dwflsyms.sh: Likewise.
+
2014-01-26 Mark Wielaard <mjw@redhat.com>
* backtrace-subr.sh (check_unsupported): Special case arm*.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index c75e7969fb11..5e640955a1fe 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -215,7 +215,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
testfilegdbindex7.bz2 \
run-readelf-s.sh testfilebazdbg.bz2 testfilebazdyn.bz2 \
testfilebazmin.bz2 testfilebazdbg.debug.bz2 testfilebazmdb.bz2 \
- testfilebaztab.bz2 testfilebasmin.bz2 \
+ testfilebaztab.bz2 testfilebasmin.bz2 testfilebaxmin.bz2 \
testfilebazdbg_pl.bz2 testfilebazmin_pl.bz2 \
testfilebazdbg_plr.bz2 testfilebazmin_plr.bz2 \
testfilebazdbgppc64.bz2 testfilebazdbgppc64.debug.bz2 \
diff --git a/tests/run-dwflsyms.sh b/tests/run-dwflsyms.sh
index 452b9617233e..9726bcf19d77 100755
--- a/tests/run-dwflsyms.sh
+++ b/tests/run-dwflsyms.sh
@@ -32,6 +32,7 @@ testfiles testfilebazmin
testfiles testfilebazmin_pl
testfiles testfilebazmin_plr
testfiles testfilebasmin
+testfiles testfilebaxmin
tempfiles testfile.dynsym.in testfile.symtab.in testfile.minsym.in dwflsyms.out
tempfiles testfile.symtab_pl.in testfile.minsym_pl.in
@@ -362,6 +363,53 @@ testrun_compare ${abs_builddir}/dwflsyms -e testfilebasmin <<\EOF
8: FUNC GLOBAL bar (44) 0x40017a, rel: 0x40017a (.text)
EOF
+testrun_compare ${abs_builddir}/dwflsyms -e testfilebaxmin <<\EOF
+ 0: NOTYPE LOCAL (0) 0
+ 1: FUNC LOCAL deregister_tm_clones (0) 0x400430, rel: 0x400430 (.text)
+ 2: FUNC LOCAL register_tm_clones (0) 0x400460, rel: 0x400460 (.text)
+ 3: FUNC LOCAL __do_global_dtors_aux (0) 0x4004a0, rel: 0x4004a0 (.text)
+ 4: OBJECT LOCAL __do_global_dtors_aux_fini_array_entry (0) 0x600e18
+ 5: FUNC LOCAL frame_dummy (0) 0x4004c0, rel: 0x4004c0 (.text)
+ 6: OBJECT LOCAL __frame_dummy_init_array_entry (0) 0x600e10
+ 7: FUNC LOCAL foo (20) 0x4004f0, rel: 0x4004f0 (.text)
+ 8: NOTYPE LOCAL __init_array_end (0) 0x600e18
+ 9: NOTYPE LOCAL __init_array_start (0) 0x600e10
+ 10: SECTION LOCAL (0) 0x400238
+ 11: SECTION LOCAL (0) 0x400254
+ 12: SECTION LOCAL (0) 0x400274
+ 13: SECTION LOCAL (0) 0x400298
+ 14: SECTION LOCAL (0) 0x4002b8
+ 15: SECTION LOCAL (0) 0x400300
+ 16: SECTION LOCAL (0) 0x400338
+ 17: SECTION LOCAL (0) 0x400340
+ 18: SECTION LOCAL (0) 0x400360
+ 19: SECTION LOCAL (0) 0x400378
+ 20: SECTION LOCAL (0) 0x4003a8
+ 21: SECTION LOCAL (0) 0x4003d0
+ 22: SECTION LOCAL (0) 0x400400
+ 23: SECTION LOCAL (0) 0x4005c4
+ 24: SECTION LOCAL (0) 0x4005d0
+ 25: SECTION LOCAL (0) 0x4005e0
+ 26: SECTION LOCAL (0) 0x400628
+ 27: SECTION LOCAL (0) 0x600e10
+ 28: SECTION LOCAL (0) 0x600e18
+ 29: SECTION LOCAL (0) 0x600e20
+ 30: SECTION LOCAL (0) 0x600e28
+ 31: SECTION LOCAL (0) 0x600ff8
+ 32: SECTION LOCAL (0) 0x601000
+ 33: SECTION LOCAL (0) 0x601028
+ 34: SECTION LOCAL (0) 0x601034
+ 35: FUNC GLOBAL __libc_start_main (0) 0
+ 36: NOTYPE WEAK __gmon_start__ (0) 0
+ 37: FUNC GLOBAL __libc_csu_fini (2) 0x4005c0, rel: 0x4005c0 (.text)
+ 38: FUNC GLOBAL bar (40) 0x400504, rel: 0x400504 (.text)
+ 39: FUNC GLOBAL _fini (0) 0x4005c4, rel: 0x4005c4 (.fini)
+ 40: FUNC GLOBAL __libc_csu_init (101) 0x400550, rel: 0x400550 (.text)
+ 41: FUNC GLOBAL _start (0) 0x400400, rel: 0x400400 (.text)
+ 42: FUNC GLOBAL main (35) 0x40052c, rel: 0x40052c (.text)
+ 43: FUNC GLOBAL _init (0) 0x4003a8, rel: 0x4003a8 (.init)
+EOF
+
testfiles testfile66
testrun_compare ${abs_builddir}/dwflsyms -e testfile66 <<\EOF
0: NOTYPE LOCAL (0) 0
diff --git a/tests/run-readelf-s.sh b/tests/run-readelf-s.sh
index 931516da1d25..59407d14de51 100755
--- a/tests/run-readelf-s.sh
+++ b/tests/run-readelf-s.sh
@@ -93,6 +93,23 @@
# objcopy --add-section .gnu_debugdata=mini_debuginfo.xz bas
# rm bas.debug
# mv bas testfilebasmin
+#
+#
+# Make sure that find_aux_sym doesn't corrupt relocations, avoiding a kernel
+# heuristic that forces ET_EXEC->ET_DYN. NB: ld.gold doesn't seem to produce
+# the mismatched load addrs between the main file and the mini_debuginfo, so
+# this is forcing ld.bfd.
+#
+# gcc -g -o bax foo.c bar.c -fuse-ld=bfd
+# eu-strip --remove-comment -f bax.debug bax
+# nm -D bax --format=posix --defined-only | awk '{ print $1 }' | sort > dynsyms
+# nm bax.debug --format=posix --defined-only | awk '{ if ($2 == "T" || $2 == "t") print $1 }' | sort > funcsyms
+# comm -13 dynsyms funcsyms > keep_symbols
+# objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols=keep_symbols bax.debug mini_debuginfo
+# rm -f mini_debuginfo.xz
+# xz mini_debuginfo
+# objcopy --add-section .gnu_debugdata=mini_debuginfo.xz bax
+# objcopy --remove-section=.gnu_debuglink bax testfilebaxmin
testfiles testfilebaztab
@@ -101,6 +118,7 @@ testfiles testfilebazdyn
testfiles testfilebazmdb
testfiles testfilebazmin
testfiles testfilebasmin
+testfiles testfilebaxmin
tempfiles testfile.dynsym.in testfile.symtab.in testfile.minsym.in
@@ -298,4 +316,63 @@ Symbol table [ 6] '.symtab' contains 9 entries:
8: 000000000040017a 44 FUNC GLOBAL DEFAULT 2 bar
EOF
+testrun_compare ${abs_top_builddir}/src/readelf -s testfilebaxmin <<EOF
+
+Symbol table [ 5] '.dynsym' contains 3 entries:
+ 1 local symbol String table: [ 6] '.dynstr'
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UNDEF
+ 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF __libc_start_main(a)GLIBC_2.2.5 (2)
+ 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UNDEF __gmon_start__
+EOF
+
+testrun_compare ${abs_top_builddir}/src/readelf --elf-section -s testfilebaxmin <<\EOF
+
+Symbol table [27] '.symtab' contains 42 entries:
+ 35 local symbols String table: [28] '.strtab'
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UNDEF
+ 1: 0000000000400430 0 FUNC LOCAL DEFAULT 13 deregister_tm_clones
+ 2: 0000000000400460 0 FUNC LOCAL DEFAULT 13 register_tm_clones
+ 3: 00000000004004a0 0 FUNC LOCAL DEFAULT 13 __do_global_dtors_aux
+ 4: 0000000000600e18 0 OBJECT LOCAL DEFAULT 19 __do_global_dtors_aux_fini_array_entry
+ 5: 00000000004004c0 0 FUNC LOCAL DEFAULT 13 frame_dummy
+ 6: 0000000000600e10 0 OBJECT LOCAL DEFAULT 18 __frame_dummy_init_array_entry
+ 7: 00000000004004f0 20 FUNC LOCAL DEFAULT 13 foo
+ 8: 0000000000600e18 0 NOTYPE LOCAL DEFAULT 18 __init_array_end
+ 9: 0000000000600e10 0 NOTYPE LOCAL DEFAULT 18 __init_array_start
+ 10: 0000000000400238 0 SECTION LOCAL DEFAULT 1
+ 11: 0000000000400254 0 SECTION LOCAL DEFAULT 2
+ 12: 0000000000400274 0 SECTION LOCAL DEFAULT 3
+ 13: 0000000000400298 0 SECTION LOCAL DEFAULT 4
+ 14: 00000000004002b8 0 SECTION LOCAL DEFAULT 5
+ 15: 0000000000400300 0 SECTION LOCAL DEFAULT 6
+ 16: 0000000000400338 0 SECTION LOCAL DEFAULT 7
+ 17: 0000000000400340 0 SECTION LOCAL DEFAULT 8
+ 18: 0000000000400360 0 SECTION LOCAL DEFAULT 9
+ 19: 0000000000400378 0 SECTION LOCAL DEFAULT 10
+ 20: 00000000004003a8 0 SECTION LOCAL DEFAULT 11
+ 21: 00000000004003d0 0 SECTION LOCAL DEFAULT 12
+ 22: 0000000000400400 0 SECTION LOCAL DEFAULT 13
+ 23: 00000000004005c4 0 SECTION LOCAL DEFAULT 14
+ 24: 00000000004005d0 0 SECTION LOCAL DEFAULT 15
+ 25: 00000000004005e0 0 SECTION LOCAL DEFAULT 16
+ 26: 0000000000400628 0 SECTION LOCAL DEFAULT 17
+ 27: 0000000000600e10 0 SECTION LOCAL DEFAULT 18
+ 28: 0000000000600e18 0 SECTION LOCAL DEFAULT 19
+ 29: 0000000000600e20 0 SECTION LOCAL DEFAULT 20
+ 30: 0000000000600e28 0 SECTION LOCAL DEFAULT 21
+ 31: 0000000000600ff8 0 SECTION LOCAL DEFAULT 22
+ 32: 0000000000601000 0 SECTION LOCAL DEFAULT 23
+ 33: 0000000000601028 0 SECTION LOCAL DEFAULT 24
+ 34: 0000000000601034 0 SECTION LOCAL DEFAULT 25
+ 35: 00000000004005c0 2 FUNC GLOBAL DEFAULT 13 __libc_csu_fini
+ 36: 0000000000400504 40 FUNC GLOBAL DEFAULT 13 bar
+ 37: 00000000004005c4 0 FUNC GLOBAL DEFAULT 14 _fini
+ 38: 0000000000400550 101 FUNC GLOBAL DEFAULT 13 __libc_csu_init
+ 39: 0000000000400400 0 FUNC GLOBAL DEFAULT 13 _start
+ 40: 000000000040052c 35 FUNC GLOBAL DEFAULT 13 main
+ 41: 00000000004003a8 0 FUNC GLOBAL DEFAULT 11 _init
+EOF
+
exit 0
diff --git a/tests/testfilebaxmin.bz2 b/tests/testfilebaxmin.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..c450cc824b6c685fbf8da4793abf53e4ff743abb
GIT binary patch
literal 2987
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
Y3i!`PM^h6J+VffqX<-#`coo_Be^H}l?*IS*
literal 0
HcmV?d00001
--
1.8.5.3