summaryrefslogtreecommitdiffstats
path: root/tests/run-nm-syms.sh
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2020-06-07 01:02:52 +0200
committerMark Wielaard <[email protected]>2020-06-07 01:02:52 +0200
commit76ff94dce7ee8dd88c502bc0bbfc8dea15efea5b (patch)
treefe02b805e3a9e7b65e4fb66ce4932b0235fb7cdf /tests/run-nm-syms.sh
parent39f22a7687dd190a3e6d26a728ff2ed5129aba5a (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-xtests/run-nm-syms.sh166
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