From 68ce4fc85bbf95441e96fedd76c8bd78f76d8da2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 16 Nov 2013 00:11:38 +0100 Subject: [PATCH] tests: Fix broken dwflsyms tests, extend test and add prelink tests. The two test files that contains minisymtab tables and the expected test output were wrongly generated. Also prelink tests were missing to check that a prelinked main ELF file with separate debug or minisyms generated correctly adjusted symbol values. The dwflsyms test was also extended to check print and check the result of dwfl_module_relocate_address. Reported-by: Josh Stone Signed-off-by: Mark Wielaard --- tests/ChangeLog | 12 ++ tests/Makefile.am | 1 + tests/dwflsyms.c | 7 +- tests/run-dwflsyms.sh | 281 +++++++++++++++++++++++++++--------- tests/run-readelf-s.sh | 77 +++++----- tests/testfilebazdbg_pl.bz2 | Bin 0 -> 2589 bytes tests/testfilebazmdb.bz2 | Bin 3259 -> 3313 bytes tests/testfilebazmin.bz2 | Bin 3194 -> 3323 bytes tests/testfilebazmin_pl.bz2 | Bin 0 -> 3749 bytes 9 files changed, 275 insertions(+), 103 deletions(-) create mode 100755 tests/testfilebazdbg_pl.bz2 create mode 100755 tests/testfilebazmin_pl.bz2 diff --git a/tests/ChangeLog b/tests/ChangeLog index 5ebc1bd45..9461287a7 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,15 @@ +2013-11-15 Mark Wielaard + + * testfilebazmdb.bz2: Regenerated. + * testfilebazmin.bz2: Likewise. + * testfilebazdbg_pl.bz2: New testfile. + * testfilebazmin_pl.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add testfilebazdbg_pl.bz2 and + testfilebazmin_pl.bz2. + * dwflsyms.c (list_syms): Call dwfl_module_relocate_address and + print relative address of function symbols. + * run-dwflsyms.sh: Add prelink tests and adjust expected output. + 2013-11-01 Michael Forney * Makefile.am (TESTS_ENVIRONMENT): Use and export NM. diff --git a/tests/Makefile.am b/tests/Makefile.am index bc97523b8..e9cf950c1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -189,6 +189,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-readelf-s.sh testfilebazdbg.bz2 testfilebazdyn.bz2 \ testfilebazmin.bz2 testfilebazdbg.debug.bz2 testfilebazmdb.bz2 \ testfilebaztab.bz2 testfilebasmin.bz2 \ + testfilebazdbg_pl.bz2 testfilebazmin_pl.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 \ diff --git a/tests/dwflsyms.c b/tests/dwflsyms.c index cae3fbeac..55f2653c6 100644 --- a/tests/dwflsyms.c +++ b/tests/dwflsyms.c @@ -83,7 +83,7 @@ list_syms (struct Dwfl_Module *mod, 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", + printf("%4d: %s\t%s\t%s (%" PRIu64 ") %#" PRIx64, ndx, gelf_type (&sym), gelf_bind (&sym), name, sym.st_size, sym.st_value); @@ -97,7 +97,12 @@ list_syms (struct Dwfl_Module *mod, GElf_Word ashndxp; const char *aname = dwfl_module_addrsym (mod, addr, &asym, &ashndxp); assert (strcmp (name, aname) == 0); + + int res = dwfl_module_relocate_address (mod, &addr); + assert (res != -1); + printf(", rel: %#" PRIx64 "", addr); } + printf ("\n"); } return DWARF_CB_OK; diff --git a/tests/run-dwflsyms.sh b/tests/run-dwflsyms.sh index c440bf738..a425277cf 100755 --- a/tests/run-dwflsyms.sh +++ b/tests/run-dwflsyms.sh @@ -17,17 +17,20 @@ . $srcdir/test-subr.sh -# Tests dwfl_module_addrsym and dwfl_module_getsym. +# Tests dwfl_module_{addrsym,getsym,relocate_address} # See run-readelf-s.sh for how to generate test binaries. testfiles testfilebaztab testfiles testfilebazdbg testfilebazdbg.debug +testfiles testfilebazdbg_pl testfiles testfilebazdyn testfiles testfilebazmdb testfiles testfilebazmin +testfiles testfilebazmin_pl testfiles testfilebasmin tempfiles testfile.dynsym.in testfile.symtab.in testfile.minsym.in dwflsyms.out +tempfiles testfile.symtab_pl.in testfile.minsym_pl.in cat > testfile.symtab.in <<\EOF 0: NOTYPE LOCAL (0) 0 @@ -65,17 +68,17 @@ cat > testfile.symtab.in <<\EOF 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 + 35: FUNC LOCAL deregister_tm_clones (0) 0x710, rel: 0x710 + 36: FUNC LOCAL register_tm_clones (0) 0x740, rel: 0x740 + 37: FUNC LOCAL __do_global_dtors_aux (0) 0x780, rel: 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 + 40: FUNC LOCAL frame_dummy (0) 0x7c0, rel: 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 + 45: FUNC LOCAL foo (20) 0x814, rel: 0x814 46: FILE LOCAL crtstuff.c (0) 0 47: OBJECT LOCAL __FRAME_END__ (0) 0xa58 48: OBJECT LOCAL __JCR_END__ (0) 0x200de0 @@ -84,28 +87,107 @@ cat > testfile.symtab.in <<\EOF 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 + 54: FUNC GLOBAL __libc_csu_fini (2) 0x8f0, rel: 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 + 58: FUNC GLOBAL bar (44) 0x828, rel: 0x828 + 59: FUNC GLOBAL _fini (0) 0x8f4, rel: 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 + 66: FUNC GLOBAL __libc_csu_init (137) 0x860, rel: 0x860 67: NOTYPE GLOBAL _end (0) 0x201040 - 68: FUNC GLOBAL _start (0) 0x6e0 + 68: FUNC GLOBAL _start (0) 0x6e0, rel: 0x6e0 69: NOTYPE GLOBAL __bss_start (0) 0x20103c - 70: FUNC GLOBAL main (35) 0x7f0 + 70: FUNC GLOBAL main (35) 0x7f0, rel: 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 + 75: FUNC GLOBAL _init (0) 0x680, rel: 0x680 +EOF + +cat > testfile.symtab_pl.in <<\EOF + 0: NOTYPE LOCAL (0) 0 + 1: SECTION LOCAL (0) 0x3000000238 + 2: SECTION LOCAL (0) 0x3000000254 + 3: SECTION LOCAL (0) 0x3000000274 + 4: SECTION LOCAL (0) 0x3000000298 + 5: SECTION LOCAL (0) 0x30000002d8 + 6: SECTION LOCAL (0) 0x3000000428 + 7: SECTION LOCAL (0) 0x30000004f2 + 8: SECTION LOCAL (0) 0x3000000510 + 9: SECTION LOCAL (0) 0x3000000530 + 10: SECTION LOCAL (0) 0x3000000638 + 11: SECTION LOCAL (0) 0x3000000680 + 12: SECTION LOCAL (0) 0x30000006a0 + 13: SECTION LOCAL (0) 0x30000006e0 + 14: SECTION LOCAL (0) 0x30000008f4 + 15: SECTION LOCAL (0) 0x3000000900 + 16: SECTION LOCAL (0) 0x3000000904 + 17: SECTION LOCAL (0) 0x3000000948 + 18: SECTION LOCAL (0) 0x3000200dd0 + 19: SECTION LOCAL (0) 0x3000200dd8 + 20: SECTION LOCAL (0) 0x3000200de0 + 21: SECTION LOCAL (0) 0x3000200de8 + 22: SECTION LOCAL (0) 0x3000200df0 + 23: SECTION LOCAL (0) 0x3000200fc0 + 24: SECTION LOCAL (0) 0x3000201000 + 25: SECTION LOCAL (0) 0x3000201030 + 26: SECTION LOCAL (0) 0x300020103c + 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) 0x3000200de0 + 35: FUNC LOCAL deregister_tm_clones (0) 0x3000000710, rel: 0x710 + 36: FUNC LOCAL register_tm_clones (0) 0x3000000740, rel: 0x740 + 37: FUNC LOCAL __do_global_dtors_aux (0) 0x3000000780, rel: 0x780 + 38: OBJECT LOCAL completed.6137 (1) 0x300020103c + 39: OBJECT LOCAL __do_global_dtors_aux_fini_array_entry (0) 0x3000200dd8 + 40: FUNC LOCAL frame_dummy (0) 0x30000007c0, rel: 0x7c0 + 41: OBJECT LOCAL __frame_dummy_init_array_entry (0) 0x3000200dd0 + 42: FILE LOCAL foo.c (0) 0 + 43: FILE LOCAL bar.c (0) 0 + 44: OBJECT LOCAL b1 (4) 0x3000201034 + 45: FUNC LOCAL foo (20) 0x3000000814, rel: 0x814 + 46: FILE LOCAL crtstuff.c (0) 0 + 47: OBJECT LOCAL __FRAME_END__ (0) 0x3000000a58 + 48: OBJECT LOCAL __JCR_END__ (0) 0x3000200de0 + 49: FILE LOCAL (0) 0 + 50: NOTYPE LOCAL __init_array_end (0) 0x3000200dd8 + 51: OBJECT LOCAL _DYNAMIC (0) 0x3000200df0 + 52: NOTYPE LOCAL __init_array_start (0) 0x3000200dd0 + 53: OBJECT LOCAL _GLOBAL_OFFSET_TABLE_ (0) 0x3000201000 + 54: FUNC GLOBAL __libc_csu_fini (2) 0x30000008f0, rel: 0x8f0 + 55: NOTYPE WEAK _ITM_deregisterTMCloneTable (0) 0 + 56: NOTYPE WEAK data_start (0) 0x3000201030 + 57: NOTYPE GLOBAL _edata (0) 0x300020103c + 58: FUNC GLOBAL bar (44) 0x3000000828, rel: 0x828 + 59: FUNC GLOBAL _fini (0) 0x30000008f4, rel: 0x8f4 + 60: FUNC GLOBAL __libc_start_main@@GLIBC_2.2.5 (0) 0 + 61: NOTYPE GLOBAL __data_start (0) 0x3000201030 + 62: NOTYPE WEAK __gmon_start__ (0) 0 + 63: OBJECT GLOBAL __dso_handle (0) 0x3000200de8 + 64: OBJECT GLOBAL _IO_stdin_used (4) 0x3000000900 + 65: OBJECT GLOBAL b2 (4) 0x3000201038 + 66: FUNC GLOBAL __libc_csu_init (137) 0x3000000860, rel: 0x860 + 67: NOTYPE GLOBAL _end (0) 0x3000201040 + 68: FUNC GLOBAL _start (0) 0x30000006e0, rel: 0x6e0 + 69: NOTYPE GLOBAL __bss_start (0) 0x300020103c + 70: FUNC GLOBAL main (35) 0x30000007f0, rel: 0x7f0 + 71: NOTYPE WEAK _Jv_RegisterClasses (0) 0 + 72: OBJECT GLOBAL __TMC_END__ (0) 0x3000201040 + 73: NOTYPE WEAK _ITM_registerTMCloneTable (0) 0 + 74: FUNC WEAK __cxa_finalize@@GLIBC_2.2.5 (0) 0 + 75: FUNC GLOBAL _init (0) 0x3000000680, rel: 0x680 EOF cat > testfile.dynsym.in <<\EOF @@ -119,61 +201,122 @@ cat > testfile.dynsym.in <<\EOF 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 + 10: FUNC GLOBAL __libc_csu_init (137) 0x860, rel: 0x860 11: NOTYPE GLOBAL __bss_start (0) 0x20103c - 12: FUNC GLOBAL main (35) 0x7f0 - 13: FUNC GLOBAL __libc_csu_fini (2) 0x8f0 + 12: FUNC GLOBAL main (35) 0x7f0, rel: 0x7f0 + 13: FUNC GLOBAL __libc_csu_fini (2) 0x8f0, rel: 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 + 2: FUNC LOCAL deregister_tm_clones (0) 0x710, rel: 0x710 + 3: FUNC LOCAL register_tm_clones (0) 0x740, rel: 0x740 + 4: FUNC LOCAL __do_global_dtors_aux (0) 0x780, rel: 0x780 + 5: OBJECT LOCAL __do_global_dtors_aux_fini_array_entry (0) 0x200dd8 + 6: FUNC LOCAL frame_dummy (0) 0x7c0, rel: 0x7c0 + 7: OBJECT LOCAL __frame_dummy_init_array_entry (0) 0x200dd0 + 8: FUNC LOCAL foo (20) 0x814, rel: 0x814 + 9: NOTYPE LOCAL __init_array_end (0) 0x200dd8 + 10: NOTYPE LOCAL __init_array_start (0) 0x200dd0 + 11: SECTION LOCAL (0) 0x238 + 12: SECTION LOCAL (0) 0x254 + 13: SECTION LOCAL (0) 0x274 + 14: SECTION LOCAL (0) 0x298 + 15: SECTION LOCAL (0) 0x2d8 + 16: SECTION LOCAL (0) 0x428 + 17: SECTION LOCAL (0) 0x4f2 + 18: SECTION LOCAL (0) 0x510 + 19: SECTION LOCAL (0) 0x530 + 20: SECTION LOCAL (0) 0x638 + 21: SECTION LOCAL (0) 0x680 + 22: SECTION LOCAL (0) 0x6a0 + 23: SECTION LOCAL (0) 0x6e0 + 24: SECTION LOCAL (0) 0x8f4 + 25: SECTION LOCAL (0) 0x900 + 26: SECTION LOCAL (0) 0x904 + 27: SECTION LOCAL (0) 0x948 + 28: SECTION LOCAL (0) 0x200dd0 + 29: SECTION LOCAL (0) 0x200dd8 + 30: SECTION LOCAL (0) 0x200de0 + 31: SECTION LOCAL (0) 0x200de8 + 32: SECTION LOCAL (0) 0x200df0 + 33: SECTION LOCAL (0) 0x200fc0 + 34: SECTION LOCAL (0) 0x201000 + 35: SECTION LOCAL (0) 0x201030 + 36: SECTION LOCAL (0) 0x20103c + 37: NOTYPE WEAK _ITM_deregisterTMCloneTable (0) 0 + 38: FUNC GLOBAL __libc_start_main (0) 0 + 39: NOTYPE WEAK __gmon_start__ (0) 0 + 40: NOTYPE WEAK _Jv_RegisterClasses (0) 0 + 41: NOTYPE WEAK _ITM_registerTMCloneTable (0) 0 + 42: FUNC WEAK __cxa_finalize (0) 0 + 43: NOTYPE GLOBAL _edata (0) 0x20103c + 44: NOTYPE GLOBAL _end (0) 0x201040 + 45: FUNC GLOBAL __libc_csu_init (137) 0x860, rel: 0x860 + 46: NOTYPE GLOBAL __bss_start (0) 0x20103c + 47: FUNC GLOBAL main (35) 0x7f0, rel: 0x7f0 + 48: FUNC GLOBAL __libc_csu_fini (2) 0x8f0, rel: 0x8f0 + 49: FUNC GLOBAL bar (44) 0x828, rel: 0x828 + 50: FUNC GLOBAL _fini (0) 0x8f4, rel: 0x8f4 + 51: FUNC GLOBAL _start (0) 0x6e0, rel: 0x6e0 + 52: FUNC GLOBAL _init (0) 0x680, rel: 0x680 +EOF + +cat > testfile.minsym_pl.in <<\EOF + 0: NOTYPE LOCAL (0) 0 + 1: SECTION LOCAL (0) 0x3000000238 + 2: FUNC LOCAL deregister_tm_clones (0) 0x3000000710, rel: 0x710 + 3: FUNC LOCAL register_tm_clones (0) 0x3000000740, rel: 0x740 + 4: FUNC LOCAL __do_global_dtors_aux (0) 0x3000000780, rel: 0x780 + 5: OBJECT LOCAL __do_global_dtors_aux_fini_array_entry (0) 0x3000200dd8 + 6: FUNC LOCAL frame_dummy (0) 0x30000007c0, rel: 0x7c0 + 7: OBJECT LOCAL __frame_dummy_init_array_entry (0) 0x3000200dd0 + 8: FUNC LOCAL foo (20) 0x3000000814, rel: 0x814 + 9: NOTYPE LOCAL __init_array_end (0) 0x3000200dd8 + 10: NOTYPE LOCAL __init_array_start (0) 0x3000200dd0 + 11: SECTION LOCAL (0) 0x3000000238 + 12: SECTION LOCAL (0) 0x3000000254 + 13: SECTION LOCAL (0) 0x3000000274 + 14: SECTION LOCAL (0) 0x3000000298 + 15: SECTION LOCAL (0) 0x30000002d8 + 16: SECTION LOCAL (0) 0x3000000428 + 17: SECTION LOCAL (0) 0x30000004f2 + 18: SECTION LOCAL (0) 0x3000000510 + 19: SECTION LOCAL (0) 0x3000000530 + 20: SECTION LOCAL (0) 0x3000000638 + 21: SECTION LOCAL (0) 0x3000000680 + 22: SECTION LOCAL (0) 0x30000006a0 + 23: SECTION LOCAL (0) 0x30000006e0 + 24: SECTION LOCAL (0) 0x30000008f4 + 25: SECTION LOCAL (0) 0x3000000900 + 26: SECTION LOCAL (0) 0x3000000904 + 27: SECTION LOCAL (0) 0x3000000948 + 28: SECTION LOCAL (0) 0x3000200dd0 + 29: SECTION LOCAL (0) 0x3000200dd8 + 30: SECTION LOCAL (0) 0x3000200de0 + 31: SECTION LOCAL (0) 0x3000200de8 + 32: SECTION LOCAL (0) 0x3000200df0 + 33: SECTION LOCAL (0) 0x3000200fc0 + 34: SECTION LOCAL (0) 0x3000201000 + 35: SECTION LOCAL (0) 0x3000201030 + 36: SECTION LOCAL (0) 0x300020103c + 37: NOTYPE WEAK _ITM_deregisterTMCloneTable (0) 0 + 38: FUNC GLOBAL __libc_start_main (0) 0 + 39: NOTYPE WEAK __gmon_start__ (0) 0 + 40: NOTYPE WEAK _Jv_RegisterClasses (0) 0 + 41: NOTYPE WEAK _ITM_registerTMCloneTable (0) 0 + 42: FUNC WEAK __cxa_finalize (0) 0 + 43: NOTYPE GLOBAL _edata (0) 0x300020103c + 44: NOTYPE GLOBAL _end (0) 0x3000201040 + 45: FUNC GLOBAL __libc_csu_init (137) 0x3000000860, rel: 0x860 + 46: NOTYPE GLOBAL __bss_start (0) 0x300020103c + 47: FUNC GLOBAL main (35) 0x30000007f0, rel: 0x7f0 + 48: FUNC GLOBAL __libc_csu_fini (2) 0x30000008f0, rel: 0x8f0 + 49: FUNC GLOBAL bar (44) 0x3000000828, rel: 0x828 + 50: FUNC GLOBAL _fini (0) 0x30000008f4, rel: 0x8f4 + 51: FUNC GLOBAL _start (0) 0x30000006e0, rel: 0x6e0 + 52: FUNC GLOBAL _init (0) 0x3000000680, rel: 0x680 EOF cat testfile.symtab.in \ @@ -182,6 +325,9 @@ cat testfile.symtab.in \ cat testfile.symtab.in \ | testrun_compare ${abs_builddir}/dwflsyms -e testfilebazdbg +cat testfile.symtab_pl.in \ + | testrun_compare ${abs_builddir}/dwflsyms -e testfilebazdbg_pl + cat testfile.dynsym.in \ | testrun_compare ${abs_builddir}/dwflsyms -e testfilebazdyn @@ -191,16 +337,19 @@ cat testfile.symtab.in \ cat testfile.minsym.in \ | testrun_compare ${abs_builddir}/dwflsyms -e testfilebazmin +cat testfile.minsym_pl.in \ + | testrun_compare ${abs_builddir}/dwflsyms -e testfilebazmin_pl + testrun_compare ${abs_builddir}/dwflsyms -e testfilebasmin <<\EOF 0: NOTYPE LOCAL (0) 0 - 1: FUNC LOCAL foo (18) 0x400168 + 1: FUNC LOCAL foo (18) 0x400168, rel: 0x400168 2: SECTION LOCAL (0) 0x400120 3: SECTION LOCAL (0) 0x400144 4: SECTION LOCAL (0) 0x4001c0 5: SECTION LOCAL (0) 0x600258 - 6: FUNC GLOBAL _start (21) 0x4001a8 - 7: FUNC GLOBAL main (33) 0x400144 - 8: FUNC GLOBAL bar (44) 0x40017a + 6: FUNC GLOBAL _start (21) 0x4001a8, rel: 0x4001a8 + 7: FUNC GLOBAL main (33) 0x400144, rel: 0x400144 + 8: FUNC GLOBAL bar (44) 0x40017a, rel: 0x40017a EOF exit 0 diff --git a/tests/run-readelf-s.sh b/tests/run-readelf-s.sh index 4373b5f00..931516da1 100755 --- a/tests/run-readelf-s.sh +++ b/tests/run-readelf-s.sh @@ -210,44 +210,49 @@ EOF cat > testfile.minsym.in <<\EOF -Symbol table [27] '.symtab' contains 35 entries: - 31 local symbols String table: [28] '.strtab' +Symbol table [28] '.symtab' contains 40 entries: + 36 local symbols String table: [29] '.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 + 1: 0000000000000710 0 FUNC LOCAL DEFAULT 13 deregister_tm_clones + 2: 0000000000000740 0 FUNC LOCAL DEFAULT 13 register_tm_clones + 3: 0000000000000780 0 FUNC LOCAL DEFAULT 13 __do_global_dtors_aux + 4: 0000000000200dd8 0 OBJECT LOCAL DEFAULT 19 __do_global_dtors_aux_fini_array_entry + 5: 00000000000007c0 0 FUNC LOCAL DEFAULT 13 frame_dummy + 6: 0000000000200dd0 0 OBJECT LOCAL DEFAULT 18 __frame_dummy_init_array_entry + 7: 0000000000000814 20 FUNC LOCAL DEFAULT 13 foo + 8: 0000000000200dd8 0 NOTYPE LOCAL DEFAULT 18 __init_array_end + 9: 0000000000200dd0 0 NOTYPE LOCAL DEFAULT 18 __init_array_start + 10: 0000000000000238 0 SECTION LOCAL DEFAULT 1 + 11: 0000000000000254 0 SECTION LOCAL DEFAULT 2 + 12: 0000000000000274 0 SECTION LOCAL DEFAULT 3 + 13: 0000000000000298 0 SECTION LOCAL DEFAULT 4 + 14: 00000000000002d8 0 SECTION LOCAL DEFAULT 5 + 15: 0000000000000428 0 SECTION LOCAL DEFAULT 6 + 16: 00000000000004f2 0 SECTION LOCAL DEFAULT 7 + 17: 0000000000000510 0 SECTION LOCAL DEFAULT 8 + 18: 0000000000000530 0 SECTION LOCAL DEFAULT 9 + 19: 0000000000000638 0 SECTION LOCAL DEFAULT 10 + 20: 0000000000000680 0 SECTION LOCAL DEFAULT 11 + 21: 00000000000006a0 0 SECTION LOCAL DEFAULT 12 + 22: 00000000000006e0 0 SECTION LOCAL DEFAULT 13 + 23: 00000000000008f4 0 SECTION LOCAL DEFAULT 14 + 24: 0000000000000900 0 SECTION LOCAL DEFAULT 15 + 25: 0000000000000904 0 SECTION LOCAL DEFAULT 16 + 26: 0000000000000948 0 SECTION LOCAL DEFAULT 17 + 27: 0000000000200dd0 0 SECTION LOCAL DEFAULT 18 + 28: 0000000000200dd8 0 SECTION LOCAL DEFAULT 19 + 29: 0000000000200de0 0 SECTION LOCAL DEFAULT 20 + 30: 0000000000200de8 0 SECTION LOCAL DEFAULT 21 + 31: 0000000000200df0 0 SECTION LOCAL DEFAULT 22 + 32: 0000000000200fc0 0 SECTION LOCAL DEFAULT 23 + 33: 0000000000201000 0 SECTION LOCAL DEFAULT 24 + 34: 0000000000201030 0 SECTION LOCAL DEFAULT 25 + 35: 000000000020103c 0 SECTION LOCAL DEFAULT 26 + 36: 0000000000000828 44 FUNC GLOBAL DEFAULT 13 bar + 37: 00000000000008f4 0 FUNC GLOBAL DEFAULT 14 _fini + 38: 00000000000006e0 0 FUNC GLOBAL DEFAULT 13 _start + 39: 0000000000000680 0 FUNC GLOBAL DEFAULT 11 _init EOF cat testfile.dynsym.in testfile.symtab.in \ diff --git a/tests/testfilebazdbg_pl.bz2 b/tests/testfilebazdbg_pl.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..9e06a806be86f6f942569dd48b5834c67a7721f6 GIT binary patch literal 2589 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 IXw5I~ziSnh5&!@I literal 0 Hc-jL100001 diff --git a/tests/testfilebazmdb.bz2 b/tests/testfilebazmdb.bz2 index c486365c29897620500da97b570df091d009daf4..561eca117439a8f6a88afdbfc74c026639fc9645 100755 GIT binary patch literal 3313 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 literal 3259 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 PPyZKkML1B9$EUv*yQ|o7 literal 0 Hc-jL100001 -- 2.47.2