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 3/3] tests: readelf --elf-section, dwfl_module_addrsym and dwfl_module_getsym.


Various tests for the new minisymtab support.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
---
 tests/ChangeLog                |    9 ++
 tests/Makefile.am              |   10 ++-
 tests/dwflsyms.c               |  124 +++++++++++++++++++
 tests/run-dwflsyms.sh          |  193 ++++++++++++++++++++++++++++++
 tests/run-readelf-s.sh         |  256 ++++++++++++++++++++++++++++++++++++++++
 tests/testfilebazdbg.bz2       |  Bin 0 -> 2185 bytes
 tests/testfilebazdbg.debug.bz2 |  Bin 0 -> 2187 bytes
 tests/testfilebazdyn.bz2       |  Bin 0 -> 2164 bytes
 tests/testfilebazmdb.bz2       |  Bin 0 -> 3259 bytes
 tests/testfilebazmin.bz2       |  Bin 0 -> 3194 bytes
 tests/testfilebaztab.bz2       |  Bin 0 -> 3418 bytes
 11 files changed, 590 insertions(+), 2 deletions(-)
 create mode 100644 tests/dwflsyms.c
 create mode 100755 tests/run-dwflsyms.sh
 create mode 100755 tests/run-readelf-s.sh
 create mode 100755 tests/testfilebazdbg.bz2
 create mode 100755 tests/testfilebazdbg.debug.bz2
 create mode 100755 tests/testfilebazdyn.bz2
 create mode 100755 tests/testfilebazmdb.bz2
 create mode 100755 tests/testfilebazmin.bz2
 create mode 100755 tests/testfilebaztab.bz2

diff --git a/tests/ChangeLog b/tests/ChangeLog
index 21569eb..feb9f69 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,12 @@
+2013-01-16  Mark Wielaard  <mjw@redhat.com>
+
+	* Makefile.am (check_PROGRAMS): Add dwflsyms.
+	(TESTS): Add run-readelf-s.sh and run-dwflsyms.sh.
+	(EXTRA_DIST): Add run-readelf-s.sh, testfilebazdbg.bz2,
+	testfilebazdyn.bz2, testfilebazmin.bz2, testfilebazdbg.debug.bz2,
+	testfilebazmdb.bz2, testfilebaztab.bz2 and run-dwflsyms.sh.
+	(dwflsyms_LDADD): New variable.
+
 2013-01-07  Roland McGrath  <roland@hack.frob.com>
 
 	* run-prelink-addr-test.sh: Use ln -snf.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8b7b751..b46c4c2 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-2012 Red Hat, Inc.
+## Copyright (C) 1996-2013 Red Hat, Inc.
 ## This file is part of elfutils.
 ##
 ## This file is free software; you can redistribute it and/or modify
@@ -51,7 +51,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \
 		  dwfl-bug-getmodules dwarf-getmacros addrcfi \
 		  test-flag-nobits dwarf-getstring rerequest_tag \
 		  alldts md5-sha1-test typeiter low_high_pc \
-		  test-elf_cntl_gelf_getshdr
+		  test-elf_cntl_gelf_getshdr dwflsyms
 asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
 	    asm-tst6 asm-tst7 asm-tst8 asm-tst9
 
@@ -83,6 +83,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
 	run-test-flag-nobits.sh run-prelink-addr-test.sh \
 	run-dwarf-getstring.sh run-rerequest_tag.sh run-typeiter.sh \
 	run-readelf-d.sh run-readelf-gdb_index.sh run-unstrip-n.sh \
+	run-readelf-s.sh run-dwflsyms.sh \
 	run-low_high_pc.sh run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \
 	run-test-archive64.sh run-readelf-vmcoreinfo.sh \
 	run-readelf-mixed-corenote.sh
@@ -172,6 +173,10 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
 	     run-readelf-d.sh testlib_dynseg.so.bz2 \
 	     run-readelf-gdb_index.sh testfilegdbindex5.bz2 \
 	     testfilegdbindex7.bz2 \
+	     run-readelf-s.sh testfilebazdbg.bz2 testfilebazdyn.bz2 \
+	     testfilebazmin.bz2 testfilebazdbg.debug.bz2 testfilebazmdb.bz2 \
+	     testfilebaztab.bz2 \
+	     run-dwflsyms.sh \
 	     run-unstrip-n.sh testcore-rtlib.bz2 testcore-rtlib-ppc.bz2 \
 	     run-low_high_pc.sh testfile_low_high_pc.bz2 \
 	     run-macro-test.sh testfile-macinfo.bz2 testfile-macros.bz2 \
@@ -288,6 +293,7 @@ md5_sha1_test_LDADD = $(libeu)
 typeiter_LDADD = $(libdw) $(libelf) $(libmudflap)
 low_high_pc_LDADD = $(libdw) $(libelf) $(libmudflap)
 test_elf_cntl_gelf_getshdr_LDADD = $(libelf) $(libmudflap)
+dwflsyms_LDADD = $(libdw) $(libelf) $(libmudflap)
 
 if GCOV
 check: check-am coverage
diff --git a/tests/dwflsyms.c b/tests/dwflsyms.c
new file mode 100644
index 0000000..cae3fbe
--- /dev/null
+++ b/tests/dwflsyms.c
@@ -0,0 +1,124 @@
+/* Test program for libdwfl symbol resolving
+   Copyright (C) 2013 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 <config.h>
+#include <assert.h>
+#include <inttypes.h>
+#include ELFUTILS_HEADER(dwfl)
+#include <elf.h>
+#include <dwarf.h>
+#include <argp.h>
+#include <stdio.h>
+#include <stdio_ext.h>
+#include <stdlib.h>
+#include <error.h>
+#include <string.h>
+
+static const char *
+gelf_type (GElf_Sym *sym)
+{
+  switch (GELF_ST_TYPE (sym->st_info))
+    {
+    case STT_NOTYPE:
+      return "NOTYPE";
+    case STT_OBJECT:
+      return "OBJECT";
+    case STT_FUNC:
+      return "FUNC";
+    case STT_SECTION:
+      return "SECTION";
+    case STT_FILE:
+      return "FILE";
+    case STT_COMMON:
+      return "COMMON";
+    case STT_TLS:
+      return "TLS";
+    default:
+      return "UNKNOWN";
+    }
+}
+
+static const char *
+gelf_bind (GElf_Sym *sym)
+{
+  switch (GELF_ST_BIND (sym->st_info))
+    {
+    case STB_LOCAL:
+      return "LOCAL";
+    case STB_GLOBAL:
+      return "GLOBAL";
+    case STB_WEAK:
+      return "WEAK";
+    default:
+      return "UNKNOWN";
+    }
+}
+
+static int
+list_syms (struct Dwfl_Module *mod,
+	   void **user __attribute__ ((unused)),
+	   const char *mod_name __attribute__ ((unused)),
+	   Dwarf_Addr low_addr __attribute__ ((unused)),
+	   void *arg __attribute__ ((unused)))
+{
+  int syms = dwfl_module_getsymtab (mod);
+  assert (syms >= 0);
+
+  for (int ndx = 0; ndx < syms; ndx++)
+    {
+      GElf_Sym sym;
+      GElf_Word shndxp;
+      const char *name = dwfl_module_getsym (mod, ndx, &sym, &shndxp);
+      printf("%4d: %s\t%s\t%s (%" PRIu64 ") %#" PRIx64 "\n",
+	     ndx, gelf_type (&sym), gelf_bind (&sym), name,
+	     sym.st_size, sym.st_value);
+
+      /* And the reverse, which works for function symbols at least.
+	 Note this only works because the st.value is adjusted by
+	 dwfl_module_getsym ().  */
+      if (GELF_ST_TYPE (sym.st_info) == STT_FUNC && shndxp != SHN_UNDEF)
+	{
+	  GElf_Addr addr = sym.st_value;
+	  GElf_Sym asym;
+	  GElf_Word ashndxp;
+	  const char *aname = dwfl_module_addrsym (mod, addr, &asym, &ashndxp);
+	  assert (strcmp (name, aname) == 0);
+	}
+    }
+
+  return DWARF_CB_OK;
+}
+
+int
+main (int argc, char *argv[])
+{
+  int remaining;
+  Dwfl *dwfl;
+  error_t res;
+
+  res = argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining, &dwfl);
+  assert (res == 0 && dwfl != NULL);
+
+  ptrdiff_t off = 0;
+  do
+    off = dwfl_getmodules (dwfl, list_syms, NULL, off);
+  while (off > 0);
+
+  dwfl_end (dwfl);
+
+  return off;
+}
diff --git a/tests/run-dwflsyms.sh b/tests/run-dwflsyms.sh
new file mode 100755
index 0000000..60f857e
--- /dev/null
+++ b/tests/run-dwflsyms.sh
@@ -0,0 +1,193 @@
+#! /bin/sh
+# Copyright (C) 2013 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
+
+# Tests dwfl_module_addrsym and dwfl_module_getsym.
+# See run-readelf-s.sh for how to generate test binaries.
+
+testfiles testfilebaztab
+testfiles testfilebazdbg testfilebazdbg.debug
+testfiles testfilebazdyn
+testfiles testfilebazmdb
+testfiles testfilebazmin
+
+tempfiles testfile.dynsym.in testfile.symtab.in testfile.minsym.in
+
+cat > testfile.symtab.in <<\EOF
+   0: NOTYPE	LOCAL	 (0) 0
+   1: SECTION	LOCAL	 (0) 0x238
+   2: SECTION	LOCAL	 (0) 0x254
+   3: SECTION	LOCAL	 (0) 0x274
+   4: SECTION	LOCAL	 (0) 0x298
+   5: SECTION	LOCAL	 (0) 0x2d8
+   6: SECTION	LOCAL	 (0) 0x428
+   7: SECTION	LOCAL	 (0) 0x4f2
+   8: SECTION	LOCAL	 (0) 0x510
+   9: SECTION	LOCAL	 (0) 0x530
+  10: SECTION	LOCAL	 (0) 0x638
+  11: SECTION	LOCAL	 (0) 0x680
+  12: SECTION	LOCAL	 (0) 0x6a0
+  13: SECTION	LOCAL	 (0) 0x6e0
+  14: SECTION	LOCAL	 (0) 0x8f4
+  15: SECTION	LOCAL	 (0) 0x900
+  16: SECTION	LOCAL	 (0) 0x904
+  17: SECTION	LOCAL	 (0) 0x948
+  18: SECTION	LOCAL	 (0) 0x200dd0
+  19: SECTION	LOCAL	 (0) 0x200dd8
+  20: SECTION	LOCAL	 (0) 0x200de0
+  21: SECTION	LOCAL	 (0) 0x200de8
+  22: SECTION	LOCAL	 (0) 0x200df0
+  23: SECTION	LOCAL	 (0) 0x200fc0
+  24: SECTION	LOCAL	 (0) 0x201000
+  25: SECTION	LOCAL	 (0) 0x201030
+  26: SECTION	LOCAL	 (0) 0x20103c
+  27: SECTION	LOCAL	 (0) 0
+  28: SECTION	LOCAL	 (0) 0
+  29: SECTION	LOCAL	 (0) 0
+  30: SECTION	LOCAL	 (0) 0
+  31: SECTION	LOCAL	 (0) 0
+  32: SECTION	LOCAL	 (0) 0
+  33: FILE	LOCAL	crtstuff.c (0) 0
+  34: OBJECT	LOCAL	__JCR_LIST__ (0) 0x200de0
+  35: FUNC	LOCAL	deregister_tm_clones (0) 0x710
+  36: FUNC	LOCAL	register_tm_clones (0) 0x740
+  37: FUNC	LOCAL	__do_global_dtors_aux (0) 0x780
+  38: OBJECT	LOCAL	completed.6137 (1) 0x20103c
+  39: OBJECT	LOCAL	__do_global_dtors_aux_fini_array_entry (0) 0x200dd8
+  40: FUNC	LOCAL	frame_dummy (0) 0x7c0
+  41: OBJECT	LOCAL	__frame_dummy_init_array_entry (0) 0x200dd0
+  42: FILE	LOCAL	foo.c (0) 0
+  43: FILE	LOCAL	bar.c (0) 0
+  44: OBJECT	LOCAL	b1 (4) 0x201034
+  45: FUNC	LOCAL	foo (20) 0x814
+  46: FILE	LOCAL	crtstuff.c (0) 0
+  47: OBJECT	LOCAL	__FRAME_END__ (0) 0xa58
+  48: OBJECT	LOCAL	__JCR_END__ (0) 0x200de0
+  49: FILE	LOCAL	 (0) 0
+  50: NOTYPE	LOCAL	__init_array_end (0) 0x200dd8
+  51: OBJECT	LOCAL	_DYNAMIC (0) 0x200df0
+  52: NOTYPE	LOCAL	__init_array_start (0) 0x200dd0
+  53: OBJECT	LOCAL	_GLOBAL_OFFSET_TABLE_ (0) 0x201000
+  54: FUNC	GLOBAL	__libc_csu_fini (2) 0x8f0
+  55: NOTYPE	WEAK	_ITM_deregisterTMCloneTable (0) 0
+  56: NOTYPE	WEAK	data_start (0) 0x201030
+  57: NOTYPE	GLOBAL	_edata (0) 0x20103c
+  58: FUNC	GLOBAL	bar (44) 0x828
+  59: FUNC	GLOBAL	_fini (0) 0x8f4
+  60: FUNC	GLOBAL	__libc_start_main@@GLIBC_2.2.5 (0) 0
+  61: NOTYPE	GLOBAL	__data_start (0) 0x201030
+  62: NOTYPE	WEAK	__gmon_start__ (0) 0
+  63: OBJECT	GLOBAL	__dso_handle (0) 0x200de8
+  64: OBJECT	GLOBAL	_IO_stdin_used (4) 0x900
+  65: OBJECT	GLOBAL	b2 (4) 0x201038
+  66: FUNC	GLOBAL	__libc_csu_init (137) 0x860
+  67: NOTYPE	GLOBAL	_end (0) 0x201040
+  68: FUNC	GLOBAL	_start (0) 0x6e0
+  69: NOTYPE	GLOBAL	__bss_start (0) 0x20103c
+  70: FUNC	GLOBAL	main (35) 0x7f0
+  71: NOTYPE	WEAK	_Jv_RegisterClasses (0) 0
+  72: OBJECT	GLOBAL	__TMC_END__ (0) 0x201040
+  73: NOTYPE	WEAK	_ITM_registerTMCloneTable (0) 0
+  74: FUNC	WEAK	__cxa_finalize@@GLIBC_2.2.5 (0) 0
+  75: FUNC	GLOBAL	_init (0) 0x680
+EOF
+
+cat > testfile.dynsym.in <<\EOF
+   0: NOTYPE	LOCAL	 (0) 0
+   1: SECTION	LOCAL	 (0) 0x238
+   2: NOTYPE	WEAK	_ITM_deregisterTMCloneTable (0) 0
+   3: FUNC	GLOBAL	__libc_start_main (0) 0
+   4: NOTYPE	WEAK	__gmon_start__ (0) 0
+   5: NOTYPE	WEAK	_Jv_RegisterClasses (0) 0
+   6: NOTYPE	WEAK	_ITM_registerTMCloneTable (0) 0
+   7: FUNC	WEAK	__cxa_finalize (0) 0
+   8: NOTYPE	GLOBAL	_edata (0) 0x20103c
+   9: NOTYPE	GLOBAL	_end (0) 0x201040
+  10: FUNC	GLOBAL	__libc_csu_init (137) 0x860
+  11: NOTYPE	GLOBAL	__bss_start (0) 0x20103c
+  12: FUNC	GLOBAL	main (35) 0x7f0
+  13: FUNC	GLOBAL	__libc_csu_fini (2) 0x8f0
+EOF
+
+cat > testfile.minsym.in <<\EOF
+   0: NOTYPE	LOCAL	 (0) 0
+   1: SECTION	LOCAL	 (0) 0x238
+   2: FUNC	LOCAL	call_gmon_start (0) 0x4003bc
+   3: FUNC	LOCAL	__do_global_dtors_aux (0) 0x4003e0
+   4: FUNC	LOCAL	frame_dummy (0) 0x400450
+   5: FUNC	LOCAL	__do_global_ctors_aux (0) 0x400580
+   6: FUNC	LOCAL	foo (18) 0x400498
+   7: SECTION	LOCAL	 (0) 0x400200
+   8: SECTION	LOCAL	 (0) 0x40021c
+   9: SECTION	LOCAL	 (0) 0x40023c
+  10: SECTION	LOCAL	 (0) 0x400260
+  11: SECTION	LOCAL	 (0) 0x400280
+  12: SECTION	LOCAL	 (0) 0x4002c8
+  13: SECTION	LOCAL	 (0) 0x400300
+  14: SECTION	LOCAL	 (0) 0x400308
+  15: SECTION	LOCAL	 (0) 0x400328
+  16: SECTION	LOCAL	 (0) 0x400340
+  17: SECTION	LOCAL	 (0) 0x400358
+  18: SECTION	LOCAL	 (0) 0x400370
+  19: SECTION	LOCAL	 (0) 0x400390
+  20: SECTION	LOCAL	 (0) 0x4005b8
+  21: SECTION	LOCAL	 (0) 0x4005c8
+  22: SECTION	LOCAL	 (0) 0x4005d8
+  23: SECTION	LOCAL	 (0) 0x400610
+  24: SECTION	LOCAL	 (0) 0x6006d0
+  25: SECTION	LOCAL	 (0) 0x6006e0
+  26: SECTION	LOCAL	 (0) 0x6006f0
+  27: SECTION	LOCAL	 (0) 0x6006f8
+  28: SECTION	LOCAL	 (0) 0x600888
+  29: SECTION	LOCAL	 (0) 0x600890
+  30: SECTION	LOCAL	 (0) 0x6008b0
+  31: SECTION	LOCAL	 (0) 0x6008c0
+  32: FUNC	GLOBAL	_start (0) 0x400390
+  33: FUNC	GLOBAL	bar (44) 0x4004aa
+  34: FUNC	GLOBAL	_fini (0) 0x4005b8
+  35: FUNC	GLOBAL	_init (0) 0x400358
+  36: NOTYPE	WEAK	_ITM_deregisterTMCloneTable (0) 0
+  37: FUNC	GLOBAL	__libc_start_main (0) 0
+  38: NOTYPE	WEAK	__gmon_start__ (0) 0
+  39: NOTYPE	WEAK	_Jv_RegisterClasses (0) 0
+  40: NOTYPE	WEAK	_ITM_registerTMCloneTable (0) 0
+  41: FUNC	WEAK	__cxa_finalize (0) 0
+  42: NOTYPE	GLOBAL	_edata (0) 0x20103c
+  43: NOTYPE	GLOBAL	_end (0) 0x201040
+  44: FUNC	GLOBAL	__libc_csu_init (137) 0x860
+  45: NOTYPE	GLOBAL	__bss_start (0) 0x20103c
+  46: FUNC	GLOBAL	main (35) 0x7f0
+  47: FUNC	GLOBAL	__libc_csu_fini (2) 0x8f0
+EOF
+
+cat testfile.symtab.in \
+  | testrun_compare ./dwflsyms -e testfilebaztab
+
+cat testfile.symtab.in \
+  | testrun_compare ./dwflsyms -e testfilebazdbg
+
+cat testfile.dynsym.in \
+  | testrun_compare ./dwflsyms -e testfilebazdyn
+
+cat testfile.symtab.in \
+  | testrun_compare ./dwflsyms -e testfilebazmdb
+
+cat testfile.minsym.in \
+  | testrun_compare ./dwflsyms -e testfilebazmin
+
+exit 0
diff --git a/tests/run-readelf-s.sh b/tests/run-readelf-s.sh
new file mode 100755
index 0000000..f14b305
--- /dev/null
+++ b/tests/run-readelf-s.sh
@@ -0,0 +1,256 @@
+#! /bin/sh
+# Copyright (C) 2013 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
+
+# Tests readelf -s and readelf --elf-section -s
+# See also run-dwflsyms.sh
+#
+# - bar.c
+#
+# static int b1 = 1;
+# int b2 = 1;
+#
+# static int
+# foo (int a)
+# {
+#   return a + b2;
+# }
+#
+# int bar (int b)
+# {
+#   return b - foo (b - b1);
+# }
+#
+# - foo.c
+#
+# extern int bar (int b);
+# extern int b2;
+#
+# int
+# main (int argc, char ** argv)
+# {
+#   return bar (argc + b2);
+# }
+#
+# gcc -pie -g -c foo.c
+# gcc -pie -g -c bar.c
+# gcc -pie -g -o baz foo.o bar.o
+#
+# - testfilebaztab (dynsym + symtab)
+# cp baz testfilebaztab
+#
+# - testfilebazdbg (dynsym + .debug file)
+# eu-strip --remove-comment -f testfilebazdbg.debug baz
+# cp baz testfilebazdbg
+#
+#-  testfilebazdyn (dynsym only)
+# objcopy --remove-section=.gnu_debuglink baz testfilebazdyn
+#
+# - testfilebazmdb (dynsym + gnu_debugdata + .debug)
+#   This is how rpmbuild does it:
+# nm -D baz --format=posix --defined-only | awk '{ print $1 }' | sort > dynsyms
+# nm baz.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 baz.debug mini_debuginfo
+# rm -f mini_debuginfo.xz
+# xz mini_debuginfo
+# objcopy --add-section .gnu_debugdata=mini_debuginfo.xz baz
+# cp baz testfilebazmdb
+#
+# - testfilebazmin (dynsym + gnu_debugdata)
+# objcopy --remove-section=.gnu_debuglink baz testfilebazmin
+
+testfiles testfilebaztab
+testfiles testfilebazdbg testfilebazdbg.debug
+testfiles testfilebazdyn
+testfiles testfilebazmdb
+testfiles testfilebazmin
+
+tempfiles testfile.dynsym.in testfile.symtab.in testfile.minsym.in
+
+cat > testfile.dynsym.in <<\EOF
+
+Symbol table [ 5] '.dynsym' contains 14 entries:
+ 2 local symbols  String table: [ 6] '.dynstr'
+  Num:            Value   Size Type    Bind   Vis          Ndx Name
+    0: 0000000000000000      0 NOTYPE  LOCAL  DEFAULT    UNDEF 
+    1: 0000000000000238      0 SECTION LOCAL  DEFAULT        1 
+    2: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _ITM_deregisterTMCloneTable
+    3: 0000000000000000      0 FUNC    GLOBAL DEFAULT    UNDEF __libc_start_main(a)GLIBC_2.2.5 (2)
+    4: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF __gmon_start__
+    5: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _Jv_RegisterClasses
+    6: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _ITM_registerTMCloneTable
+    7: 0000000000000000      0 FUNC    WEAK   DEFAULT    UNDEF __cxa_finalize(a)GLIBC_2.2.5 (2)
+    8: 000000000020103c      0 NOTYPE  GLOBAL DEFAULT       25 _edata
+    9: 0000000000201040      0 NOTYPE  GLOBAL DEFAULT       26 _end
+   10: 0000000000000860    137 FUNC    GLOBAL DEFAULT       13 __libc_csu_init
+   11: 000000000020103c      0 NOTYPE  GLOBAL DEFAULT       26 __bss_start
+   12: 00000000000007f0     35 FUNC    GLOBAL DEFAULT       13 main
+   13: 00000000000008f0      2 FUNC    GLOBAL DEFAULT       13 __libc_csu_fini
+EOF
+
+cat > testfile.symtab.in <<\EOF
+
+Symbol table [34] '.symtab' contains 76 entries:
+ 54 local symbols  String table: [35] '.strtab'
+  Num:            Value   Size Type    Bind   Vis          Ndx Name
+    0: 0000000000000000      0 NOTYPE  LOCAL  DEFAULT    UNDEF 
+    1: 0000000000000238      0 SECTION LOCAL  DEFAULT        1 
+    2: 0000000000000254      0 SECTION LOCAL  DEFAULT        2 
+    3: 0000000000000274      0 SECTION LOCAL  DEFAULT        3 
+    4: 0000000000000298      0 SECTION LOCAL  DEFAULT        4 
+    5: 00000000000002d8      0 SECTION LOCAL  DEFAULT        5 
+    6: 0000000000000428      0 SECTION LOCAL  DEFAULT        6 
+    7: 00000000000004f2      0 SECTION LOCAL  DEFAULT        7 
+    8: 0000000000000510      0 SECTION LOCAL  DEFAULT        8 
+    9: 0000000000000530      0 SECTION LOCAL  DEFAULT        9 
+   10: 0000000000000638      0 SECTION LOCAL  DEFAULT       10 
+   11: 0000000000000680      0 SECTION LOCAL  DEFAULT       11 
+   12: 00000000000006a0      0 SECTION LOCAL  DEFAULT       12 
+   13: 00000000000006e0      0 SECTION LOCAL  DEFAULT       13 
+   14: 00000000000008f4      0 SECTION LOCAL  DEFAULT       14 
+   15: 0000000000000900      0 SECTION LOCAL  DEFAULT       15 
+   16: 0000000000000904      0 SECTION LOCAL  DEFAULT       16 
+   17: 0000000000000948      0 SECTION LOCAL  DEFAULT       17 
+   18: 0000000000200dd0      0 SECTION LOCAL  DEFAULT       18 
+   19: 0000000000200dd8      0 SECTION LOCAL  DEFAULT       19 
+   20: 0000000000200de0      0 SECTION LOCAL  DEFAULT       20 
+   21: 0000000000200de8      0 SECTION LOCAL  DEFAULT       21 
+   22: 0000000000200df0      0 SECTION LOCAL  DEFAULT       22 
+   23: 0000000000200fc0      0 SECTION LOCAL  DEFAULT       23 
+   24: 0000000000201000      0 SECTION LOCAL  DEFAULT       24 
+   25: 0000000000201030      0 SECTION LOCAL  DEFAULT       25 
+   26: 000000000020103c      0 SECTION LOCAL  DEFAULT       26 
+   27: 0000000000000000      0 SECTION LOCAL  DEFAULT       27 
+   28: 0000000000000000      0 SECTION LOCAL  DEFAULT       28 
+   29: 0000000000000000      0 SECTION LOCAL  DEFAULT       29 
+   30: 0000000000000000      0 SECTION LOCAL  DEFAULT       30 
+   31: 0000000000000000      0 SECTION LOCAL  DEFAULT       31 
+   32: 0000000000000000      0 SECTION LOCAL  DEFAULT       32 
+   33: 0000000000000000      0 FILE    LOCAL  DEFAULT      ABS crtstuff.c
+   34: 0000000000200de0      0 OBJECT  LOCAL  DEFAULT       20 __JCR_LIST__
+   35: 0000000000000710      0 FUNC    LOCAL  DEFAULT       13 deregister_tm_clones
+   36: 0000000000000740      0 FUNC    LOCAL  DEFAULT       13 register_tm_clones
+   37: 0000000000000780      0 FUNC    LOCAL  DEFAULT       13 __do_global_dtors_aux
+   38: 000000000020103c      1 OBJECT  LOCAL  DEFAULT       26 completed.6137
+   39: 0000000000200dd8      0 OBJECT  LOCAL  DEFAULT       19 __do_global_dtors_aux_fini_array_entry
+   40: 00000000000007c0      0 FUNC    LOCAL  DEFAULT       13 frame_dummy
+   41: 0000000000200dd0      0 OBJECT  LOCAL  DEFAULT       18 __frame_dummy_init_array_entry
+   42: 0000000000000000      0 FILE    LOCAL  DEFAULT      ABS foo.c
+   43: 0000000000000000      0 FILE    LOCAL  DEFAULT      ABS bar.c
+   44: 0000000000201034      4 OBJECT  LOCAL  DEFAULT       25 b1
+   45: 0000000000000814     20 FUNC    LOCAL  DEFAULT       13 foo
+   46: 0000000000000000      0 FILE    LOCAL  DEFAULT      ABS crtstuff.c
+   47: 0000000000000a58      0 OBJECT  LOCAL  DEFAULT       17 __FRAME_END__
+   48: 0000000000200de0      0 OBJECT  LOCAL  DEFAULT       20 __JCR_END__
+   49: 0000000000000000      0 FILE    LOCAL  DEFAULT      ABS 
+   50: 0000000000200dd8      0 NOTYPE  LOCAL  DEFAULT       18 __init_array_end
+   51: 0000000000200df0      0 OBJECT  LOCAL  DEFAULT       22 _DYNAMIC
+   52: 0000000000200dd0      0 NOTYPE  LOCAL  DEFAULT       18 __init_array_start
+   53: 0000000000201000      0 OBJECT  LOCAL  DEFAULT       24 _GLOBAL_OFFSET_TABLE_
+   54: 00000000000008f0      2 FUNC    GLOBAL DEFAULT       13 __libc_csu_fini
+   55: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _ITM_deregisterTMCloneTable
+   56: 0000000000201030      0 NOTYPE  WEAK   DEFAULT       25 data_start
+   57: 000000000020103c      0 NOTYPE  GLOBAL DEFAULT       25 _edata
+   58: 0000000000000828     44 FUNC    GLOBAL DEFAULT       13 bar
+   59: 00000000000008f4      0 FUNC    GLOBAL DEFAULT       14 _fini
+   60: 0000000000000000      0 FUNC    GLOBAL DEFAULT    UNDEF __libc_start_main@@GLIBC_2.2.5
+   61: 0000000000201030      0 NOTYPE  GLOBAL DEFAULT       25 __data_start
+   62: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF __gmon_start__
+   63: 0000000000200de8      0 OBJECT  GLOBAL HIDDEN        21 __dso_handle
+   64: 0000000000000900      4 OBJECT  GLOBAL DEFAULT       15 _IO_stdin_used
+   65: 0000000000201038      4 OBJECT  GLOBAL DEFAULT       25 b2
+   66: 0000000000000860    137 FUNC    GLOBAL DEFAULT       13 __libc_csu_init
+   67: 0000000000201040      0 NOTYPE  GLOBAL DEFAULT       26 _end
+   68: 00000000000006e0      0 FUNC    GLOBAL DEFAULT       13 _start
+   69: 000000000020103c      0 NOTYPE  GLOBAL DEFAULT       26 __bss_start
+   70: 00000000000007f0     35 FUNC    GLOBAL DEFAULT       13 main
+   71: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _Jv_RegisterClasses
+   72: 0000000000201040      0 OBJECT  GLOBAL HIDDEN        25 __TMC_END__
+   73: 0000000000000000      0 NOTYPE  WEAK   DEFAULT    UNDEF _ITM_registerTMCloneTable
+   74: 0000000000000000      0 FUNC    WEAK   DEFAULT    UNDEF __cxa_finalize@@GLIBC_2.2.5
+   75: 0000000000000680      0 FUNC    GLOBAL DEFAULT       11 _init
+EOF
+
+cat > testfile.minsym.in <<\EOF
+
+Symbol table [27] '.symtab' contains 35 entries:
+ 31 local symbols  String table: [28] '.strtab'
+  Num:            Value   Size Type    Bind   Vis          Ndx Name
+    0: 0000000000000000      0 NOTYPE  LOCAL  DEFAULT    UNDEF 
+    1: 00000000004003bc      0 FUNC    LOCAL  DEFAULT       13 call_gmon_start
+    2: 00000000004003e0      0 FUNC    LOCAL  DEFAULT       13 __do_global_dtors_aux
+    3: 0000000000400450      0 FUNC    LOCAL  DEFAULT       13 frame_dummy
+    4: 0000000000400580      0 FUNC    LOCAL  DEFAULT       13 __do_global_ctors_aux
+    5: 0000000000400498     18 FUNC    LOCAL  DEFAULT       13 foo
+    6: 0000000000400200      0 SECTION LOCAL  DEFAULT        1 
+    7: 000000000040021c      0 SECTION LOCAL  DEFAULT        2 
+    8: 000000000040023c      0 SECTION LOCAL  DEFAULT        3 
+    9: 0000000000400260      0 SECTION LOCAL  DEFAULT        4 
+   10: 0000000000400280      0 SECTION LOCAL  DEFAULT        5 
+   11: 00000000004002c8      0 SECTION LOCAL  DEFAULT        6 
+   12: 0000000000400300      0 SECTION LOCAL  DEFAULT        7 
+   13: 0000000000400308      0 SECTION LOCAL  DEFAULT        8 
+   14: 0000000000400328      0 SECTION LOCAL  DEFAULT        9 
+   15: 0000000000400340      0 SECTION LOCAL  DEFAULT       10 
+   16: 0000000000400358      0 SECTION LOCAL  DEFAULT       11 
+   17: 0000000000400370      0 SECTION LOCAL  DEFAULT       12 
+   18: 0000000000400390      0 SECTION LOCAL  DEFAULT       13 
+   19: 00000000004005b8      0 SECTION LOCAL  DEFAULT       14 
+   20: 00000000004005c8      0 SECTION LOCAL  DEFAULT       15 
+   21: 00000000004005d8      0 SECTION LOCAL  DEFAULT       16 
+   22: 0000000000400610      0 SECTION LOCAL  DEFAULT       17 
+   23: 00000000006006d0      0 SECTION LOCAL  DEFAULT       18 
+   24: 00000000006006e0      0 SECTION LOCAL  DEFAULT       19 
+   25: 00000000006006f0      0 SECTION LOCAL  DEFAULT       20 
+   26: 00000000006006f8      0 SECTION LOCAL  DEFAULT       21 
+   27: 0000000000600888      0 SECTION LOCAL  DEFAULT       22 
+   28: 0000000000600890      0 SECTION LOCAL  DEFAULT       23 
+   29: 00000000006008b0      0 SECTION LOCAL  DEFAULT       24 
+   30: 00000000006008c0      0 SECTION LOCAL  DEFAULT       25 
+   31: 0000000000400390      0 FUNC    GLOBAL DEFAULT       13 _start
+   32: 00000000004004aa     44 FUNC    GLOBAL DEFAULT       13 bar
+   33: 00000000004005b8      0 FUNC    GLOBAL DEFAULT       14 _fini
+   34: 0000000000400358      0 FUNC    GLOBAL DEFAULT       11 _init
+EOF
+
+cat testfile.dynsym.in testfile.symtab.in \
+  | testrun_compare ../src/readelf -s testfilebaztab
+
+cat testfile.dynsym.in \
+  | testrun_compare ../src/readelf -s testfilebazdbg
+
+cat testfile.symtab.in \
+  | testrun_compare ../src/readelf -s testfilebazdbg.debug
+
+cat testfile.dynsym.in \
+  | testrun_compare ../src/readelf -s testfilebazdyn
+
+cat testfile.dynsym.in \
+  | testrun_compare ../src/readelf -s testfilebazmdb
+
+cat testfile.minsym.in \
+  | testrun_compare ../src/readelf --elf-section -s testfilebazmdb
+
+cat testfile.dynsym.in \
+  | testrun_compare ../src/readelf -s testfilebazmin
+
+cat testfile.minsym.in \
+  | testrun_compare ../src/readelf --elf-section -s testfilebazmin
+
+exit 0
diff --git a/tests/testfilebazdbg.bz2 b/tests/testfilebazdbg.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..8e58636188d83a6e0b1587f0d78cb090e31ee2a9
GIT binary patch
literal 2185
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
LoG3^{UataxD+1sV

literal 0
HcmV?d00001

diff --git a/tests/testfilebazdbg.debug.bz2 b/tests/testfilebazdbg.debug.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..3b011763f57677e5bc9c8408a9b85da86bf92f52
GIT binary patch
literal 2187
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
N7ji{7P>`YV#=Jj>>$3m=

literal 0
HcmV?d00001

diff --git a/tests/testfilebazdyn.bz2 b/tests/testfilebazdyn.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..bb623bb0af53759ba4dda30280333b15a87a69a8
GIT binary patch
literal 2164
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%0AXew3RSAEE3BT_<34
zBMsAFB<vzYEmyBuNa`uia+ZU=yByYEtPvkLAa*(&h(0CB$4Qp!QI9|KE6fOjTWrlF
z10Vgr2$L>T9D~nF(G{dZmVA0ym(Gh!;!BJARmIX6!69(a)ttZQnm3}3ZDxNL11%_k*@
z*b)2+f>FmNz(a)W>d(k8hd4^mSC@?2#Y<>WOT1R_Aqbf(a)GW=o`J0i%a)lPvXiZj8nbj
zX+)e?Yf%v6MPuCj2Idd`+5?o9ol;`UkoFJ`(NAm|JSDk6`^&A5U0P0fr5tSsGld~;
z9%+$yX}pkYQ|bJn_*5iJb~4>Dy6E)UV4>Qepo0o0*RgqW`A0R4E9-E7<6P7ohRxAe
z<GY&YA8s1k)^~iMC{Ea6`-#;g<y?v1_bkdcBnbQd#Qrda_C-FSdsTu|+G<S%A@%t8
z)~74Uf^K3H3jsx<{-4ga?Jcv2A#uiAxd!2@&Un9W1WS)VajyU;jkOE5{e6Pvr13FO
n=i69$AFEKvsQxaow!yBfc(ru*?xX#*CdCKpR#s%>wS(a)lwf#lMD

literal 0
HcmV?d00001

diff --git a/tests/testfilebazmdb.bz2 b/tests/testfilebazmdb.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..c486365c29897620500da97b570df091d009daf4
GIT binary patch
literal 3259
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

literal 0
HcmV?d00001

diff --git a/tests/testfilebazmin.bz2 b/tests/testfilebazmin.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..f7286d62cab8a93864e421f9994c168875940f8b
GIT binary patch
literal 3194
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
YFHEmee7v9kN$r3XDOkj%4=Mou10XZjod5s;

literal 0
HcmV?d00001

diff --git a/tests/testfilebaztab.bz2 b/tests/testfilebaztab.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..a99b739416861f452f9370e8b211c23b6e899500
GIT binary patch
literal 3418
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

literal 0
HcmV?d00001

-- 
1.7.1


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