This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]