]>
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. | |
d87bef3a | 3 | # Copyright (C) 2009-2023 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 | 36 | proc build_basefile1_o {} { |
ad77db1c | 37 | global CC_FOR_TARGET |
1e972e65 KT |
38 | global srcdir |
39 | global subdir | |
40 | ||
41 | # Compile the object file. | |
669d5115 | 42 | if ![ld_compile $CC_FOR_TARGET $srcdir/$subdir/basefile1.s tmpdir/basefile1.o] { |
1e972e65 KT |
43 | fail "compiling basefile1 object" |
44 | } | |
45 | } | |
46 | ||
47 | proc run_basefile_test { testname } { | |
48 | global LD | |
49 | global DLLTOOL | |
50 | global srcdir | |
51 | global subdir | |
52 | global verbose | |
53 | ||
d9816402 | 54 | if ![ld_link "$LD -e start \ |
1e972e65 KT |
55 | --base-file=tmpdir/$testname.base \ |
56 | --export-all-symbols" tmpdir/$testname.dll \ | |
57 | "tmpdir/basefile1.o"] { | |
58 | fail "linking DLL" | |
59 | return | |
60 | } | |
61 | ||
62 | if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.base]" 3 } | |
63 | ||
64 | catch "exec wc -c tmpdir/$testname.base" err | |
65 | ||
77aabdd2 | 66 | if ![string match "0 tmpdir/$testname.base" [string trim $err]] then { |
1e972e65 KT |
67 | send_log "$err\n" |
68 | if { $verbose == 2 } then { verbose "$err" 2 } | |
69 | fail $testname | |
70 | return | |
71 | } | |
72 | ||
73 | pass "$testname" | |
74 | } | |
75 | ||
09e2aba4 | 76 | proc build_vers_script_dll_o {} { |
ad77db1c | 77 | global CC_FOR_TARGET |
09e2aba4 DK |
78 | global srcdir |
79 | global subdir | |
c1711530 | 80 | |
09e2aba4 | 81 | # Compile the object file. |
669d5115 | 82 | if ![ld_compile "$CC_FOR_TARGET -shared" $srcdir/$subdir/vers-script-dll.c tmpdir/vers-script-dll.o] { |
09e2aba4 DK |
83 | fail "compiling shared lib object" |
84 | } | |
85 | } | |
86 | ||
87 | proc run_ver_script_test { testname } { | |
ad77db1c | 88 | global CC_FOR_TARGET |
09e2aba4 DK |
89 | global srcdir |
90 | global subdir | |
91 | global verbose | |
92 | ||
ad77db1c | 93 | if ![ld_link "$CC_FOR_TARGET -shared \ |
09e2aba4 DK |
94 | -Wl,--version-script,$srcdir/$subdir/$testname.ver \ |
95 | -Wl,--output-def,tmpdir/$testname.def" tmpdir/$testname.dll \ | |
96 | "tmpdir/vers-script-dll.o"] { | |
97 | fail "linking DLL" | |
98 | } | |
99 | ||
100 | if { $verbose > 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 3 } | |
101 | if { [regexp_diff tmpdir/$testname.def $srcdir/$subdir/$testname.d] } then { | |
102 | fail $testname | |
103 | if { $verbose == 2 } then { verbose "output is [file_contents tmpdir/$testname.def]" 2 } | |
104 | return | |
105 | } | |
106 | ||
107 | pass "$testname" | |
108 | } | |
109 | ||
110 | ||
111 | build_vers_script_dll_o | |
112 | ||
113 | run_ver_script_test "vers-script-1" | |
114 | run_ver_script_test "vers-script-2" | |
115 | run_ver_script_test "vers-script-3" | |
116 | run_ver_script_test "vers-script-4" | |
117 | ||
1e972e65 KT |
118 | if {[istarget i*86-*-cygwin*] |
119 | || [istarget i*86-*-pe] | |
120 | || [istarget i*86-*-mingw*] | |
121 | || [istarget x86_64-*-mingw*] } { | |
122 | ||
123 | build_basefile1_o | |
124 | run_basefile_test "basefile-secrel" | |
125 | } else { | |
126 | untested "PE basefile test" | |
127 | } | |
128 | ||
c1711530 | 129 | set align_tests { |
897aea50 | 130 | {"aligned common 1" "" "" "" {aligncomm-1.c} |
c1711530 | 131 | {{nm -C aligncomm.d}} "aligncomm-1.x"} |
897aea50 | 132 | {"aligned common 2" "" "" "" {aligncomm-2.c} |
c1711530 | 133 | {{nm -C aligncomm.d}} "aligncomm-2.x"} |
897aea50 | 134 | {"aligned common 3" "" "" "" {aligncomm-3.c} |
c1711530 | 135 | {{nm -C aligncomm.d}} "aligncomm-3.x"} |
897aea50 | 136 | {"aligned common 4" "" "" "" {aligncomm-4.c} |
c1711530 DK |
137 | {{nm -C aligncomm.d}} "aligncomm-4.x"} |
138 | } | |
139 | ||
140 | run_ld_link_tests $align_tests |