Count i386-moss as ELF
[external/binutils.git] / binutils / testsuite / binutils-all / nm.exp
1 #   Copyright (C) 1993-2019 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
16
17 # Please email any bugs, comments, and/or additions to this file to:
18 # bug-dejagnu@prep.ai.mit.edu
19
20 # This file was written by Rob Savoye <rob@cygnus.com>
21 # and rewritten by Ian Lance Taylor <ian@cygnus.com>
22
23 if ![is_remote host] {
24     if {[which $NM] == 0} then {
25         perror "$NM does not exist"
26         return
27     }
28 }
29
30 send_user "Version [binutil_version $NM]"
31
32
33 if {![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o]} then {
34     fail "nm (assembling)"
35 } else {
36
37     if [is_remote host] {
38         set tempfile [remote_download host tmpdir/bintest.o]
39     } else {
40         set tempfile tmpdir/bintest.o
41     }
42
43     # Test nm with no arguments.
44
45     # This test does not work correctly on ECOFF targets, because ECOFF
46     # stores most symbols twice, which messes up the nm output.
47     setup_xfail "alpha*-*-osf*"
48     setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
49     setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
50
51     # This test does not work correctly on XCOFF targets, because XCOFF
52     # does not enter static symbols in the symbol table.
53     setup_xfail "*-*-aix*"
54
55     set got [binutils_run $NM "$NMFLAGS $tempfile"]
56
57     if [info exists vars] then { unset vars }
58     while {[regexp "(\[a-zA-Z\]) (\[a-z_\]*_symbol)(.*)" $got all type symbol rest]} {
59         set vars($symbol) $type
60         set got $rest
61     }
62
63     if {![info exists vars(text_symbol)] \
64             || $vars(text_symbol) != "T" \
65             || ![info exists vars(data_symbol)] \
66             || $vars(data_symbol) != "D" \
67             || ![info exists vars(common_symbol)] \
68             || $vars(common_symbol) != "C" \
69             || ![info exists vars(external_symbol)] \
70             || $vars(external_symbol) != "U" \
71             || ![info exists vars(static_text_symbol)] \
72             || $vars(static_text_symbol) != "t" \
73             || ![info exists vars(static_data_symbol)] \
74             || $vars(static_data_symbol) != "d"} {
75         fail "nm (no arguments)"
76     } else {
77         pass "nm (no arguments)"
78     }
79
80     # Test nm -g
81
82     set got [binutils_run $NM "$NMFLAGS -g $tempfile"]
83
84     if [info exists vars] then { unset vars }
85     while {[regexp "(\[a-z_\]*_symbol)(.*)" $got all symbol rest]} {
86         set vars($symbol) 1
87         set got $rest
88     }
89
90     if {![info exists vars(text_symbol)] \
91             || ![info exists vars(data_symbol)] \
92             || ![info exists vars(common_symbol)] \
93             || ![info exists vars(external_symbol)] \
94             || [info exists vars(static_text_symbol)] \
95             || [info exists vars(static_data_symbol)]} {
96         fail "nm -g"
97     } else {
98         pass "nm -g"
99     }
100
101     # Test nm -P
102
103     # This test does not work correctly on ECOFF targets, because ECOFF
104     # stores most symbols twice, which messes up the nm output.
105     setup_xfail "alpha*-*-osf*"
106     setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
107     setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
108
109     # This test does not work correctly on XCOFF targets, because XCOFF
110     # does not enter static symbols in the symbol table.
111     setup_xfail "*-*-aix*"
112
113     set got [binutils_run $NM "$NMFLAGS -P $tempfile"]
114
115     set want "common_symbol C \[0\]*4.*data_symbol D \[0-9a-fA-F\]*.*external_symbol U.*static_data_symbol d \[0-9a-fA-F\]*.*static_text_symbol t \[0-9a-fA-F\]*.*text_symbol T \[0-9a-fA-F\]*"
116
117     if [regexp $want $got] then {
118         pass "nm -P"
119     } else {
120         fail "nm -P"
121     }
122 }
123
124 # Test nm --size-sort
125
126 # The target exceptions here are intended for targets that have ELF as
127 # an intermediate format or otherwise require the ELF-variant syntax
128 # for proper size annotation.  It would be nice if is_elf_format found
129 # all the ELF variants, but adding the patterns here to that proc then
130 # introduces a whole slew of new regressions in the GAS and LD testsuites.
131 if {   [is_elf_format]
132     || [istarget *-*-beos]
133     || [istarget *-*-dragonfly*]
134     || [istarget *-*-*elf]
135     || [istarget *-*-freebsd*]
136     || [istarget *-*-lynxos*]
137     || [istarget *-*-moss*]
138     || [istarget "mmix-knuth-mmixware"]
139     || [istarget *-*-nto*]
140     || [istarget *-*-rdos*]
141     || [istarget *-*-tpf*]
142     || [istarget *-*-uclinux*]
143     || [istarget ia64-*-*vms*]
144     || [istarget *-*-vxworks*]
145     || [istarget wasm32-*-*] } {
146     set nm_1_src "nm-elf-1.s"
147 } else {
148     set nm_1_src "nm-1.s"
149 }
150
151 if {![binutils_assemble $srcdir/$subdir/$nm_1_src tmpdir/nm-1.o]} then {
152     fail "nm --size-sort (assembling)"
153 } else {
154
155     if [is_remote host] {
156         set tempfile [remote_download host tmpdir/nm-1.o]
157     } else {
158         set tempfile tmpdir/nm-1.o
159     }
160
161     # This test does not work correctly on ECOFF targets, because ECOFF
162     # stores most symbols twice, which messes up the nm output.
163     setup_xfail "alpha*-*-osf*"
164     setup_xfail "mips*-*-ultrix*" "mips*-*-ecoff*" "mips*-*-irix4*"
165     setup_xfail "mips*-*-riscos*" "mips*-*-sysv3*"
166
167     set got [binutils_run $NM "$NMFLAGS --size-sort $tempfile"]
168
169     set want "0*4 T text_symbol3.*0*8 T text_symbol2.*0*c T text_symbol1"
170
171     if [regexp $want $got] then {
172         pass "nm --size-sort"
173     } else {
174         fail "nm --size-sort"
175     }
176 }
177
178 if [is_elf_format] {
179     # PR binutils/12753
180     # Test nm -g on a unique global symbol.
181     if {![binutils_assemble $srcdir/$subdir/unique.s tmpdir/unique.o]} then {
182         unsupported "nm -g on unique symbols"
183     } else {
184         if [is_remote host] {
185             set tmpfile [remote_download host tmpdir/unique.o]
186         } else {
187             set tmpfile tmpdir/unique.o
188         }
189
190         set got [binutils_run $NM "$NMFLAGS -g $tmpfile"]
191
192         if [regexp "u foo" $got] then {
193             pass "nm -g on unique symbols"
194         } else {
195             fail "nm -g on unique symbols"
196         }
197
198         if { $verbose < 1 } {
199             remote_file host delete "tmpdir/unique.o"
200         }
201     }
202
203     # PR binutils/20751
204     # Test nm --with-symbol-versions
205
206     if {![binutils_assemble $srcdir/$subdir/nm-ver.s tmpdir/nm-ver.o]} then {
207         fail "nm --with-symbol-versions (assembling)"
208     } else {
209         if [is_remote host] {
210             set tmpfile [remote_download host tmpdir/nm-ver.o]
211         } else {
212             set tmpfile tmpdir/nm-ver.o
213         }
214         
215         set got [binutils_run $NM "$NMFLAGS --with-symbol-versions --format sysv $tmpfile"]
216
217         if {! [regexp "foo@VER_1" $got]} then {
218             fail "nm --with-symbol-versions (grep for @VER_1)"
219         } else {
220             if {! [regexp "foo@VER_1" $got]} then {
221                 fail "nm --with-symbol-versions (grep for @@VER_2)"
222             } else {
223                 pass "nm --with-symbol-versions"
224             }
225         }
226
227         if { $verbose < 1 } {
228             remote_file host delete "tmpdir/nm-ver.o"
229         }
230     }
231 }
232
233 # There are certainly other tests that could be run.