diff options
| author | Mark Wielaard <[email protected]> | 2020-06-07 01:02:52 +0200 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2020-06-07 01:02:52 +0200 |
| commit | 76ff94dce7ee8dd88c502bc0bbfc8dea15efea5b (patch) | |
| tree | fe02b805e3a9e7b65e4fb66ce4932b0235fb7cdf /tests/run-nm-syms.sh | |
| parent | 39f22a7687dd190a3e6d26a728ff2ed5129aba5a (diff) | |
nm: Explicitly print weak 'V' or 'T' and common 'C' symbols.
Mimic binutils nm for bsd and posix formats which uses 'V' for weak
symbols, 'C' for common symbols and 'T' for weak functions. Also fix
some formatting issues. Don't print undefined addresses as zeros, but
make sure there is enough padding instead. Just print UNIQUE for
GNU_UNIQUE to make it fit 6 chars, like other binding names in sysv
format.
https://sourceware.org/bugzilla/show_bug.cgi?id=25227
Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'tests/run-nm-syms.sh')
| -rwxr-xr-x | tests/run-nm-syms.sh | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/tests/run-nm-syms.sh b/tests/run-nm-syms.sh new file mode 100755 index 00000000..ddf09222 --- /dev/null +++ b/tests/run-nm-syms.sh @@ -0,0 +1,166 @@ +#! /bin/sh +# Copyright (C) 2020 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 + +# void *SYM1; +# void *SYM2 = 0; +# extern void *SYM3; +# static void *SYM4; +# +# void *SYM6 = &SYM3; +# static void *SYM7 = &SYM3; +# +# void *SYM8 __attribute__((__weak__)); +# +# void FUN1 (void) { } +# static void FUN2 (void) { } +# extern void FUN3 (void); +# +# void *FREF = FUN3; +# +# void __attribute__((__weak__)) FUN4 (void) { }; +# +# int NUM0 = 0; __asm__(".type NUM0,%gnu_unique_object"); +# int __thread NUM1 = 1; +# +# gcc -m64 -c syms.c -o testfilesyms64 +# gcc -m32 -c syms.c -o testfilesyms32 + +testfiles testfilesyms32 testfilesyms64 + +testrun_compare ${abs_top_builddir}/src/nm --format=bsd testfilesyms32 <<\EOF +00000008 D FREF +00000000 T FUN1 +00000010 t FUN2 + U FUN3 +00000020 W FUN4 +00000008 u NUM0 +00000000 D NUM1 +00000004 C SYM1 +00000000 B SYM2 + U SYM3 +0000000c b SYM4 +00000000 D SYM6 +00000004 d SYM7 +00000004 V SYM8 + U _GLOBAL_OFFSET_TABLE_ +00000000 T __x86.get_pc_thunk.ax +EOF + +testrun_compare ${abs_top_builddir}/src/nm --format=posix testfilesyms32 <<\EOF +FREF D 00000008 00000004 +FUN1 T 00000000 00000010 +FUN2 t 00000010 00000010 +FUN3 U +FUN4 W 00000020 00000010 +NUM0 u 00000008 00000004 +NUM1 D 00000000 00000004 +SYM1 C 00000004 00000004 +SYM2 B 00000000 00000004 +SYM3 U +SYM4 b 0000000c 00000004 +SYM6 D 00000000 00000004 +SYM7 d 00000004 00000004 +SYM8 V 00000004 00000004 +_GLOBAL_OFFSET_TABLE_ U +__x86.get_pc_thunk.ax T 00000000 00000000 +EOF + +testrun_compare ${abs_top_builddir}/src/nm --format=sysv testfilesyms32 <<\EOF + + +Symbols from testfilesyms32: + +Name Value Class Type Size Line Section + +FREF |00000008|GLOBAL|OBJECT |00000004| |.data.rel +FUN1 |00000000|GLOBAL|FUNC |00000010| |.text +FUN2 |00000010|LOCAL |FUNC |00000010| |.text +FUN3 | |GLOBAL|NOTYPE | | |UNDEF +FUN4 |00000020|WEAK |FUNC |00000010| |.text +NUM0 |00000008|UNIQUE|OBJECT |00000004| |.bss +NUM1 |00000000|GLOBAL|TLS |00000004| |.tdata +SYM1 |00000004|GLOBAL|OBJECT |00000004| |COMMON +SYM2 |00000000|GLOBAL|OBJECT |00000004| |.bss +SYM3 | |GLOBAL|NOTYPE | | |UNDEF +SYM4 |0000000c|LOCAL |OBJECT |00000004| |.bss +SYM6 |00000000|GLOBAL|OBJECT |00000004| |.data.rel +SYM7 |00000004|LOCAL |OBJECT |00000004| |.data.rel +SYM8 |00000004|WEAK |OBJECT |00000004| |.bss +_GLOBAL_OFFSET_TABLE_| |GLOBAL|NOTYPE | | |UNDEF +__x86.get_pc_thunk.ax|00000000|GLOBAL|FUNC |00000000| |.text.__x86.get_pc_thunk.ax +EOF + +testrun_compare ${abs_top_builddir}/src/nm --format=bsd testfilesyms64 <<\EOF +0000000000000010 D FREF +0000000000000000 T FUN1 +0000000000000007 t FUN2 + U FUN3 +000000000000000e W FUN4 +0000000000000010 u NUM0 +0000000000000000 D NUM1 +0000000000000008 C SYM1 +0000000000000000 B SYM2 + U SYM3 +0000000000000018 b SYM4 +0000000000000000 D SYM6 +0000000000000008 d SYM7 +0000000000000008 V SYM8 +EOF + +testrun_compare ${abs_top_builddir}/src/nm --format=posix testfilesyms64 <<\EOF +FREF D 0000000000000010 0000000000000008 +FUN1 T 0000000000000000 0000000000000007 +FUN2 t 0000000000000007 0000000000000007 +FUN3 U +FUN4 W 000000000000000e 0000000000000007 +NUM0 u 0000000000000010 0000000000000004 +NUM1 D 0000000000000000 0000000000000004 +SYM1 C 0000000000000008 0000000000000008 +SYM2 B 0000000000000000 0000000000000008 +SYM3 U +SYM4 b 0000000000000018 0000000000000008 +SYM6 D 0000000000000000 0000000000000008 +SYM7 d 0000000000000008 0000000000000008 +SYM8 V 0000000000000008 0000000000000008 +EOF + +testrun_compare ${abs_top_builddir}/src/nm --format=sysv testfilesyms64 <<\EOF + + +Symbols from testfilesyms64: + +Name Value Class Type Size Line Section + +FREF |0000000000000010|GLOBAL|OBJECT |0000000000000008| |.data.rel +FUN1 |0000000000000000|GLOBAL|FUNC |0000000000000007| |.text +FUN2 |0000000000000007|LOCAL |FUNC |0000000000000007| |.text +FUN3 | |GLOBAL|NOTYPE | | |UNDEF +FUN4 |000000000000000e|WEAK |FUNC |0000000000000007| |.text +NUM0 |0000000000000010|UNIQUE|OBJECT |0000000000000004| |.bss +NUM1 |0000000000000000|GLOBAL|TLS |0000000000000004| |.tdata +SYM1 |0000000000000008|GLOBAL|OBJECT |0000000000000008| |COMMON +SYM2 |0000000000000000|GLOBAL|OBJECT |0000000000000008| |.bss +SYM3 | |GLOBAL|NOTYPE | | |UNDEF +SYM4 |0000000000000018|LOCAL |OBJECT |0000000000000008| |.bss +SYM6 |0000000000000000|GLOBAL|OBJECT |0000000000000008| |.data.rel +SYM7 |0000000000000008|LOCAL |OBJECT |0000000000000008| |.data.rel +SYM8 |0000000000000008|WEAK |OBJECT |0000000000000008| |.bss +EOF + +exit 0 |
