| # Copyright (C) 1988-2022 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with GCC; see the file COPYING3. If not see |
| # <http://www.gnu.org/licenses/>. |
| |
| # This file used to be gcc.c-torture/special/special.exp, which |
| # was written by Rob Savoye. (rob@cygnus.com) |
| # All the other tests driven by that file have since been moved elsewhere. |
| |
| load_lib gcc-defs.exp |
| |
| # These tests don't run runtest_file_p consistently if it |
| # doesn't return the same values, so disable parallelization |
| # of this *.exp file. The first parallel runtest to reach |
| # this will run all the tests serially. |
| if ![gcc_parallel_test_run_p linkage] { |
| return |
| } |
| gcc_parallel_test_enable 0 |
| |
| if { [isnative] && ![is_remote host] } then { |
| set lines [gcc_target_compile "$srcdir/$subdir/linkage-x.c" "linkage-x.o" object {additional_flags="-w"}] |
| if ![string match "" $lines] then { |
| fail "$subdir/linkage.c compile" |
| } else { |
| # This is a completely bogus test. Sorry. |
| |
| # Need to ensure ABI for native compiler matches gcc |
| set native_cflags "" |
| if [istarget "mips*-linux*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*64*" $file_string ] { |
| set native_cflags "-mabi=64" |
| } |
| if [ string match "*ELF 32*" $file_string ] { |
| set native_cflags "-mabi=32" |
| } |
| if [ string match "*N32*" $file_string ] { |
| set native_cflags "-mabi=n32" |
| } |
| } |
| if [istarget "sparc*-sun-solaris2*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*64*" $file_string ] { |
| set native_cflags "-xarch=v9" |
| } |
| } |
| if {[istarget "i?86*-*-solaris2*"] || [istarget "x86_64-*-solaris2*"]} { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*64*" $file_string ] { |
| set native_cflags "-xarch=amd64" |
| } |
| } |
| if [istarget "s390*-*-linux*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*32-bit*" $file_string ] { |
| set native_cflags "-m31" |
| } |
| if [ string match "*64-bit*" $file_string ] { |
| set native_cflags "-m64" |
| } |
| } elseif {[istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"] |
| || [istarget "i?86-*-gnu*"] || [istarget "x86_64-*-gnu*"] } then { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*32-bit*" $file_string ] { |
| set native_cflags "-m32" |
| } |
| if [ string match "*64-bit*" $file_string ] { |
| set native_cflags "-m64" |
| } |
| } elseif [istarget "*-hp-hpux*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*ELF-64*" $file_string ] { |
| set native_cflags "+DD64" |
| } |
| } elseif [istarget "powerpc*-*-linux*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*64-bit*" $file_string ] { |
| set native_cflags "-m64" |
| } elseif [ string match "*32-bit*" $file_string ] { |
| set native_cflags "-m32" |
| } |
| } elseif [istarget "powerpc*-*-darwin*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*ppc64" $file_string ] { |
| set native_cflags "-m64" |
| } elseif [ string match "*ppc" $file_string ] { |
| set native_cflags "-m32" |
| } |
| } elseif [istarget "*86*-*-darwin*"] { |
| set file_string [exec file "linkage-x.o"] |
| if [ string match "*64*" $file_string ] { |
| set native_cflags "-m64" |
| } elseif [ string match "*i386" $file_string ] { |
| set native_cflags "-m32" |
| } |
| } |
| |
| if [file exists "linkage-y.o"] then { |
| file delete "linkage-y.o" |
| } |
| send_log "cc -c $native_cflags $srcdir/$subdir/linkage-y.c >&/dev/null\n" |
| catch { exec cc -c $native_cflags "$srcdir/$subdir/linkage-y.c" >&/dev/null } |
| if ![file exists "linkage-y.o"] then { |
| send_log "c89 -c $native_cflags $srcdir/$subdir/linkage-y.c >&/dev/null\n" |
| catch { exec c89 -c $native_cflags "$srcdir/$subdir/linkage-y.c" >&/dev/null } |
| } |
| if [file exists "linkage-y.o"] then { |
| set lines [gcc_target_compile "linkage-y.o linkage-x.o" "linkage.exe" executable ""] |
| if [string match "" $lines] then { |
| pass "$subdir/linkage.c link" |
| file delete "linkage.exe" |
| } else { |
| fail "$subdir/linkage.c link" |
| } |
| file delete "linkage-y.o" |
| } else { |
| unsupported "$subdir/linkage.c native compile failed" |
| } |
| file delete "linkage-x.o" |
| } |
| } |
| |
| gcc_parallel_test_enable 1 |