OSDN Git Service

dc54df6eea1731daee854edb425c6700bd36ba9d
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / special / ecos.exp
1 #   Copyright (C) 1999 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
16
17 # Please email any bugs, comments, and/or additions to this file to:
18 # jlarmour@cygnus.co.uk
19
20 # This file was written by Jonathan Larmour (jlarmour@cygnus.co.uk).
21
22 # GCC testsuite that uses the `dg.exp' driver.
23
24 # Load support procs.
25 load_lib gcc-dg.exp
26
27 ###################################
28 # proc gcc_target_object_format { }
29 ###################################
30
31 proc gcc_target_object_format { } { 
32     global gcc_target_object_format_saved
33
34     if [info exists gcc_target_object_format_saved] {
35         verbose "gcc_target_object_format returning saved $gcc_target_object_format_saved" 2
36         return $gcc_target_object_format_saved
37     } else {
38
39         set objdump_name [find_binutils_prog objdump]
40         set open_file [open objfmtst.c w]
41         puts $open_file "void foo(void) { }"
42         close $open_file
43         
44         gcc_target_compile objfmtst.c objfmtst.o object ""
45         
46         set output [exec $objdump_name --file-headers objfmtst.o ]
47         
48         file delete objfmtst.o
49         
50         if ![ regexp "file format (.*)arch" $output dummy objformat ]  {
51             verbose "Could not parse objdump output" 2
52             set gcc_target_object_format_saved unknown
53         } else {
54             switch -regexp $objformat {
55                 elf          {
56                     verbose "gcc_target_object_format returning elf" 2
57                     set gcc_target_object_format_saved elf
58                 } 
59                 ecoff        {
60                     verbose "gcc_target_object_format returning ecoff" 2
61                     set gcc_target_object_format_saved ecoff
62                 }
63                 coff         {
64                     verbose "gcc_target_object_format returning coff" 2
65                     set gcc_target_object_format_saved coff
66                 }
67                 a\.out       {
68                     verbose "gcc_target_object_format returning a.out" 2
69                     set gcc_target_object_format_saved a.out
70                 }
71                 default      {
72                     verbose "gcc_target_object_format returning unknown" 2
73                     set gcc_target_object_format_saved unknown
74                 }
75             }
76         }
77         return $gcc_target_object_format_saved
78     }
79 }
80
81 ###############################
82 # proc check_weak_available { }
83 ###############################
84
85 # weak symbols are only supported in some configs/object formats
86 # this proc returns 1 if they're support, 0 if they're not, or -1 if unsure
87
88 proc check_weak_available { } {
89     global target_cpu
90
91     # All mips targets should support it
92     
93     if { [ string first "mips" $target_cpu ] >= 0 } {
94         return 1
95     }
96
97     # ELF and ECOFF support it. a.out does with gas/gld but may also with
98     # other linkers, so we should try it
99
100     set objformat [gcc_target_object_format]
101
102     switch $objformat {
103         elf      { return 1 }
104         ecoff    { return 1 }
105         a.out    { return 1 }
106         unknown  { return -1 }
107         default  { return 0 }
108     }
109 }
110
111 ##########
112 # weak-1.c
113 ##########
114
115 if { [ check_weak_available ] == 1 } {
116     dg-init
117
118     set lines [gcc_target_compile "$srcdir/$subdir/weak-1a.c" "weak-1a.o" object ""]
119     if ![string match "" $lines] then {
120         fail "weak-1a.o"
121     } else {
122         dg-runtest "$srcdir/$subdir/weak-1.c" "weak-1a.o" "" 
123         file delete weak-1a.o
124     }
125     dg-finish
126 } elseif { [ check_weak_available ] == 0 } {
127     unsupported "weak-1.c"
128 } else {
129     unresolved "weak-1.c"
130 }
131
132 ##########
133 # weak-2.c
134 ##########
135
136 if { [ check_weak_available ] == 1 } {
137     dg-init
138     
139     set lines [gcc_target_compile "$srcdir/$subdir/weak-2a.c" "weak-2a.o" object ""]
140     if ![string match "" $lines] then {
141         fail "weak-2a.o"
142     } else {
143         set lines [gcc_target_compile "$srcdir/$subdir/weak-2b.c" "weak-2b.o" object ""]
144         if ![string match "" $lines] then {
145             fail "weak-2b.o"
146         } else {
147             dg-runtest "$srcdir/$subdir/weak-2.c" "weak-2a.o weak-2b.o" "" 
148             file delete weak-2a.o weak-2b.o
149         }
150     }
151     dg-finish
152 } elseif { [ check_weak_available ] == 0 } {
153     unsupported "weak-2.c"
154 } else {
155     unresolved "weak-2.c"
156 }
157
158 ###########
159 # alias-1.c
160 ###########
161
162 dg-init
163 dg-runtest "$srcdir/$subdir/alias-1.c" "" ""
164 dg-finish
165
166 ###########
167 # wkali-1.c
168 ###########
169
170 dg-init
171 dg-runtest "$srcdir/$subdir/wkali-1.c" "" ""
172 dg-finish
173
174 ###########
175 # wkali-2.c
176 ###########
177
178 if { [ check_weak_available ] == 1 } {
179     dg-init
180     set lines [gcc_target_compile "$srcdir/$subdir/wkali-2a.c" "wkali-2a.o" object ""]
181     if ![string match "" $lines] then {
182         fail "wkali-2a.o"
183     } else {
184         set lines [gcc_target_compile "$srcdir/$subdir/wkali-2b.c" "wkali-2b.o" object ""]
185         if ![string match "" $lines] then {
186             fail "wkali-2b.o"
187         } else {
188             dg-runtest "$srcdir/$subdir/wkali-2.c" "wkali-2a.o wkali-2b.o" ""
189             file delete wkali-2a.o wkali-2b.o
190         }
191     }
192     dg-finish
193 } elseif { [ check_weak_available ] == 0 } {
194     unsupported "wkali-2.c"
195 } else {
196     unresolved "wkali-2.c"
197 }
198
199 ###########
200 # gcsec-1.c
201 ###########
202
203 set ld_output [ exec [ find_ld ] --help ]
204
205 if { [ string first "--gc-sections" $ld_output ] >= 0 } {
206
207     dg-init
208     dg-runtest "$srcdir/$subdir/gcsec-1.c" "-ffunction-sections -fdata-sections -Wl,--gc-sections" ""
209     dg-finish
210 } else {
211     unsupported "gcsec-1.c"
212 }
213
214 ### EOF ecos.exp