1# Copyright (C) 1988-2018 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 GCC; see the file COPYING3.  If not see
15# <http://www.gnu.org/licenses/>.
16
17# This file used to be gcc.c-torture/special/special.exp, which
18# was written by Rob Savoye. (rob@cygnus.com)
19# All the other tests driven by that file have since been moved elsewhere.
20
21load_lib gcc-defs.exp
22
23# These tests don't run runtest_file_p consistently if it
24# doesn't return the same values, so disable parallelization
25# of this *.exp file.  The first parallel runtest to reach
26# this will run all the tests serially.
27if ![gcc_parallel_test_run_p linkage] {
28    return
29}
30gcc_parallel_test_enable 0
31
32if { [isnative] && ![is_remote host] } then {
33    set lines [gcc_target_compile "$srcdir/$subdir/linkage-x.c" "linkage-x.o" object {additional_flags="-w"}]
34    if ![string match "" $lines] then {
35	fail "$subdir/linkage.c compile"
36    } else {
37	# This is a completely bogus test. Sorry.
38
39	# Need to ensure ABI for native compiler matches gcc
40	set native_cflags ""
41	if  [istarget "sparc*-sun-solaris2*"] {
42	    set file_string [exec file "linkage-x.o"]
43	    if [ string match "*64*" $file_string ] {
44		set native_cflags "-xarch=v9"
45	    }
46	}
47	if  {[istarget "i?86*-*-solaris2*"] || [istarget "x86_64-*-solaris2.1\[0-9\]*"]} {
48	    set file_string [exec file "linkage-x.o"]
49	    if [ string match "*64*" $file_string ] {
50		set native_cflags "-xarch=amd64"
51	    }
52	}
53	if [istarget "s390*-*-linux*"] {
54	    set file_string [exec file "linkage-x.o"]
55	    if [ string match "*32-bit*" $file_string ] {
56		set native_cflags "-m31"
57	    }
58	    if [ string match "*64-bit*" $file_string ] {
59		set native_cflags "-m64"
60	    }
61	} elseif {[istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"]
62		  || [istarget "i?86-*-gnu*"] || [istarget "x86_64-*-gnu*"] } then {
63	    set file_string [exec file "linkage-x.o"]
64	    if [ string match "*32-bit*" $file_string ] {
65		set native_cflags "-m32"
66	    }
67	    if [ string match "*64-bit*" $file_string ] {
68		set native_cflags "-m64"
69	    }
70	} elseif [istarget "*-hp-hpux*"] {
71	    set file_string [exec file "linkage-x.o"]
72	    if [ string match "*ELF-64*" $file_string ] {
73		set native_cflags "+DD64"
74	    }
75	} elseif [istarget "powerpc*-*-linux*"] {
76	    set file_string [exec file "linkage-x.o"]
77	    if [ string match "*64-bit*" $file_string ] {
78		set native_cflags "-m64"
79	    } elseif [ string match "*32-bit*" $file_string ] {
80		set native_cflags "-m32"
81	    }
82        } elseif [istarget "powerpc*-*-darwin*"] {
83            set file_string [exec file "linkage-x.o"]
84            if [ string match "*ppc64" $file_string ] {
85                set native_cflags "-m64"
86            } elseif [ string match "*ppc" $file_string ] {
87                set native_cflags "-m32"
88            }
89        } elseif [istarget "tilegx-*-linux*"] {
90	    set file_string [exec file "linkage-x.o"]
91	    if [ string match "*64-bit*" $file_string ] {
92		set native_cflags "-m64"
93	    } elseif [ string match "*32-bit*" $file_string ] {
94		set native_cflags "-m32"
95	    }
96        } elseif [istarget "*86*-*-darwin*"] {
97	   set file_string [exec file "linkage-x.o"]
98	   if [ string match "*64*" $file_string ] {
99		set native_cflags "-m64"
100	   } elseif [ string match "*i386" $file_string ] {
101		set native_cflags "-m32"
102	   }
103	}
104
105	if [file exists "linkage-y.o"] then {
106	    file delete "linkage-y.o"
107	}
108	send_log "cc -c $native_cflags $srcdir/$subdir/linkage-y.c >&/dev/null\n"
109	catch { exec cc -c $native_cflags "$srcdir/$subdir/linkage-y.c" >&/dev/null }
110	if ![file exists "linkage-y.o"] then {
111	    send_log "c89 -c $native_cflags $srcdir/$subdir/linkage-y.c >&/dev/null\n"
112	    catch { exec c89 -c $native_cflags "$srcdir/$subdir/linkage-y.c" >&/dev/null }
113	}
114	if [file exists "linkage-y.o"] then {
115	    set lines [gcc_target_compile "linkage-y.o linkage-x.o" "linkage.exe" executable ""]
116	    if [string match "" $lines] then {
117		pass "$subdir/linkage.c link"
118		file delete "linkage.exe"
119	    } else {
120		fail "$subdir/linkage.c link"
121	    }
122	    file delete "linkage-y.o"
123	} else {
124	    unsupported "$subdir/linkage.c native compile failed"
125	}
126	file delete "linkage-x.o"
127    }
128}
129
130gcc_parallel_test_enable 1
131