Commit | Line | Data |
---|---|---|
c1711530 DK |
1 | # Expect script for complex PE tests that require a C compiler |
2 | # in addition to the just-built binutils. | |
82704155 | 3 | # Copyright (C) 2009-2019 Free Software Foundation, Inc. |
09e2aba4 DK |
4 | # |
5 | # This file is part of the GNU Binutils. | |
6 | # | |
7 | # This program is free software; you can redistribute it and/or modify | |
8 | # it under the terms of the GNU General Public License as published by | |
9 | # the Free Software Foundation; either version 3 of the License, or | |
10 | # (at your option) any later version. | |
11 | # | |
12 | # This program is distributed in the hope that it will be useful, | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | # GNU General Public License for more details. | |
16 | # | |
17 | # You should have received a copy of the GNU General Public License | |
18 | # along with this program; if not, write to the Free Software | |
19 | # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | |
20 | # MA 02110-1301, USA. | |
21 | # | |
22 | ||
c1711530 | 23 | # These tests can only be run on PE/COFF platforms. |
09e2aba4 DK |
24 | if {![is_pecoff_format]} { |
25 | return | |
26 | } | |
27 | ||
28 | # No compiler, no test. | |
44ed8092 | 29 | if { ![check_compiler_available] } { |
09e2aba4 | 30 | untested "PE version scripts" |
c1711530 DK |
31 | untested "aligned common tests" |
32 | # Add more "untested" directives here when adding more tests below. | |
09e2aba4 DK |
33 | return |
34 | } | |
35 | ||
1e972e65 KT |
36 | proc build_basefile1_o {} { |
37 | global CC | |
38 | global CFLAGS | |
39 | global srcdir | |
40 | global subdir | |
41 | ||
42 | # Compile the object file. | |
43 | if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/basefile1.s tmpdir/basefile1.o] { | |
44 | fail "compiling basefile1 object" | |
45 | } | |
46 | } | |
47 | ||
48 | proc run_basefile_test { testname } { | |
49 | global LD | |
50 | global DLLTOOL | |
51 | global srcdir | |
52 | global subdir | |
53 | global verbose | |
54 | ||
d9816402 | 55 | if ![ld_link "$LD -e start \ |
1e972e65 KT |
56 | --base-file=tmpdir/$testname.base \ |
57 | --export-all-symbols" tmpdir/$testname.dll \ | |
58 | "tmpdir/basefile1.o"] { | |
59 | fail "linking DLL" | |
60 | return | |
61 | } | |
62 | ||
63 | if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.base]" 3 } | |
64 | ||
65 | catch "exec wc -c tmpdir/$testname.base" err | |
66 | ||
77aabdd2 | 67 | if ![string match "0 tmpdir/$testname.base" [string trim $err]] then { |
1e972e65 KT |
68 | send_log "$err\n" |
69 | if { $verbose == 2 } then { verbose "$err" 2 } | |
70 | fail $testname | |
71 | return | |
72 | } | |
73 | ||
74 | pass "$testname" | |
75 | } | |
76 | ||
09e2aba4 DK |
77 | proc build_vers_script_dll_o {} { |
78 | global CC | |
79 | global CFLAGS | |
80 | global srcdir | |
81 | global subdir | |
c1711530 | 82 | |
09e2aba4 DK |
83 | # Compile the object file. |
84 | if ![ld_compile "$CC $CFLAGS -shared" $srcdir/$subdir/vers-script-dll.c tmpdir/vers-script-dll.o] { | |
85 | fail "compiling shared lib object" | |
86 | } | |
87 | } | |
88 | ||
89 | proc run_ver_script_test { testname } { | |
90 | global CC | |
91 | global srcdir | |
92 | global subdir | |
93 | global verbose | |
94 | ||
d9816402 | 95 | if ![ld_link "$CC -shared \ |
09e2aba4 DK |
96 | -Wl,--version-script,$srcdir/$subdir/$testname.ver \ |
97 | -Wl,--output-def,tmpdir/$testname.def" tmpdir/$testname.dll \ | |
98 | "tmpdir/vers-script-dll.o"] { | |
99 | fail "linking DLL" | |
100 | } | |
101 | ||
102 | if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 3 } | |
103 | if { [regexp_diff tmpdir/$testname.def $srcdir/$subdir/$testname.d] } then { | |
104 | fail $testname | |
105 | if { $verbose == 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 2 } | |
106 | return | |
107 | } | |
108 | ||
109 | pass "$testname" | |
110 | } | |
111 | ||
112 | ||
113 | build_vers_script_dll_o | |
114 | ||
115 | run_ver_script_test "vers-script-1" | |
116 | run_ver_script_test "vers-script-2" | |
117 | run_ver_script_test "vers-script-3" | |
118 | run_ver_script_test "vers-script-4" | |
119 | ||
1e972e65 KT |
120 | if {[istarget i*86-*-cygwin*] |
121 | || [istarget i*86-*-pe] | |
122 | || [istarget i*86-*-mingw*] | |
123 | || [istarget x86_64-*-mingw*] } { | |
124 | ||
125 | build_basefile1_o | |
126 | run_basefile_test "basefile-secrel" | |
127 | } else { | |
128 | untested "PE basefile test" | |
129 | } | |
130 | ||
c1711530 | 131 | set align_tests { |
897aea50 | 132 | {"aligned common 1" "" "" "" {aligncomm-1.c} |
c1711530 | 133 | {{nm -C aligncomm.d}} "aligncomm-1.x"} |
897aea50 | 134 | {"aligned common 2" "" "" "" {aligncomm-2.c} |
c1711530 | 135 | {{nm -C aligncomm.d}} "aligncomm-2.x"} |
897aea50 | 136 | {"aligned common 3" "" "" "" {aligncomm-3.c} |
c1711530 | 137 | {{nm -C aligncomm.d}} "aligncomm-3.x"} |
897aea50 | 138 | {"aligned common 4" "" "" "" {aligncomm-4.c} |
c1711530 DK |
139 | {{nm -C aligncomm.d}} "aligncomm-4.x"} |
140 | } | |
141 | ||
142 | run_ld_link_tests $align_tests |