From 9a91fb2279fc9365b44f4526623ff0851c84f23d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 16 Jan 2013 15:19:40 +0100 Subject: [PATCH] tests: readelf --elf-section, dwfl_module_addrsym and dwfl_module_getsym. Various tests for the new minisymtab support. Signed-off-by: Mark Wielaard --- 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 21569ebc8..feb9f6995 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,12 @@ +2013-01-16 Mark Wielaard + + * 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 * run-prelink-addr-test.sh: Use ln -snf. diff --git a/tests/Makefile.am b/tests/Makefile.am index 8b7b751fe..b46c4c23d 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 000000000..cae3fbeac --- /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 . */ + +#include +#include +#include +#include ELFUTILS_HEADER(dwfl) +#include +#include +#include +#include +#include +#include +#include +#include + +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 000000000..570881ade --- /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 . + +. $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 dwflsyms.out + +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: NOTYPE WEAK _ITM_deregisterTMCloneTable (0) 0 + 33: FUNC GLOBAL __libc_start_main (0) 0 + 34: NOTYPE WEAK __gmon_start__ (0) 0 + 35: NOTYPE WEAK _Jv_RegisterClasses (0) 0 + 36: NOTYPE WEAK _ITM_registerTMCloneTable (0) 0 + 37: FUNC WEAK __cxa_finalize (0) 0 + 38: NOTYPE GLOBAL _edata (0) 0x20103c + 39: NOTYPE GLOBAL _end (0) 0x201040 + 40: FUNC GLOBAL __libc_csu_init (137) 0x860 + 41: NOTYPE GLOBAL __bss_start (0) 0x20103c + 42: FUNC GLOBAL main (35) 0x7f0 + 43: FUNC GLOBAL __libc_csu_fini (2) 0x8f0 + 44: FUNC GLOBAL _start (0) 0x400390 + 45: FUNC GLOBAL bar (44) 0x4004aa + 46: FUNC GLOBAL _fini (0) 0x4005b8 + 47: FUNC GLOBAL _init (0) 0x400358 +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 000000000..f14b3054e --- /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 . + +. $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@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@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 Hc-jL100001 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 Hc-jL100001 diff --git a/tests/testfilebazdyn.bz2 b/tests/testfilebazdyn.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..bb623bb0af53759ba4dda30280333b15a87a69a8 GIT binary patch literal 2164 zc-oDQ`9IT-1IORn49PJ$nmO9slpM|VK`qf}4k53zdeby&M> zoq~*HGX&)LJ$Z*>j6CoA_syQ&cPsbMIac^ZD5!QfU=mwblro(pFaV?j{zX|C{^pn3-+uH zG{7N3>_JN+2U`dR04 zD)^5W}*Vx1DCg06XhM@^uF@~_YFbry@n;EL|9%jc-vVy#%*0l zTVVB7W)*uC9jPr>Ya93JYT}+*XlIjtsP_8O@)IEIrR2>NZ}4roO@^k7mxn>j-52b; zc6@*aO;^gHZy_-m zQMCo#(kB$n&4k$rPZp}{rJ&uVVO|}e2GRIpUVQ~z_97DF=01CTPEU*45>GfckW(=d z@OgVBO$GY6BA>goYz=jVu3fCmtO~eAF(kLlMc_%j8(W=n5KwIQ4^V`va38?bU{Xa&p=at z;xM>jX7V?-cR@7QD*QrHeln&P=j*9krvn!fNCb>im7P}O|LLfiew`E)Ml#}oe4IoT z6H?fkGQ@|Xa(VPJlavOS^`oHBec}31lWmQJvc8J#9QjX&zi( zp8a}#?617-V{c5O4SJOWQyAOekML9Z+A@AwXJlI^rwEWh}+O zx2}`OUq>rt*Augy-$wKh{S?dzd9}>dm>qn5>uyxkD)VaesN5X)Uw+f3^QE@ejZzOs zcpB@cJ&|4z7?T{K{&qEKhG9C7ZY^Uq)_=Ul@7Sgk%Bq|uF6s>V4xBex8CP?`svc5F zuEI%PaqpW=@2xryPr2O87gyFAqU#Se??OJLl_A~m!bo^PuOeMCy<7N%vpU|J{o3|D zD|f4F0Mj0wbDF4R72)Oa;ilV!fXA~N23Gf3=#A<95bg!SlHr##v$=xnz*)lsJ# z(>~s6dFe`wx%em9Hgig6=9Q)janLRH%mi!5q3mez->{#H?3UPqG(S$R!7`;sWo+{g zwPdBb(B#NVeNB5`i7EL@cc>B;#5sHCU!p?jHA**g?2eJ|VkP}Y&~2smw|C|qS$}!{ z`2|CBEE-!{ZYU553tWSVPaB4a`L^3Kzhku-NxwgiH=o}1?o1xOF)s#Jm|j6r!F`6Y zp$L_>KdQ)*{69N~2O;Brl)!*6hQVr&I%Pc@LF9Ye7%FJ~nZuIjw;?%1gF7O<#=H1u zUI&^&DPb$rmO#_lpHo$%>7C%wmZsM+6R?(&3@IICLML4W9GBZ!7p$KZVB@N_3s0C& zf6NUfi5aJ9x{(t>Wtu`zq?-j0CFrU5Krxxri9h$2Jd@eeIns}E6XPS49ii(4jBcc1 z8jOTpgsA1}H48~Shuy>ck`inK<0|&%ThXc{4B>6bWay{ztXMTklL2!$$nPlLj z{}*A>Wr}0)St+`LRLGJ~FYD5Ikx6`MQNOBK8Y4J_u7-6@t(D=cHVBukEu;CQ1Q9!e zUqLYH*aR4KnN->&_v1loN)b#LXiu z5-*Jxa&0P|KNO#egvm~(J4P3sUK=b_8x(X<;p93tPcHwcrg3E*?r)rny2G$J`f7Yv z^Zdh2W83k$kV;#vi6EpN|K9p^ zC0Wo-Y+@mxNYww+*|xo97BM8wcq`W+eAOB6*NtH55h(5z;H0s3!M49ou$(kL2I_np kEAL|!3K`YkCDu0Bl@+g+?%sX0pVp-KK;6oUjJ%fcAA#i3egFUf literal 0 Hc-jL100001 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 Hc-jL100001 -- 2.47.2