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