diff options
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 |