# Copyright (C) 1999 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 2 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 this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Please email any bugs, comments, and/or additions to this file to: # jlarmour@cygnus.co.uk # This file was written by Jonathan Larmour (jlarmour@cygnus.co.uk). # GCC testsuite that uses the `dg.exp' driver. # Load support procs. load_lib gcc-dg.exp ################################### # proc gcc_target_object_format { } ################################### proc gcc_target_object_format { } { global gcc_target_object_format_saved if [info exists gcc_target_object_format_saved] { verbose "gcc_target_object_format returning saved $gcc_target_object_format_saved" 2 return $gcc_target_object_format_saved } else { set objdump_name [find_binutils_prog objdump] set open_file [open objfmtst.c w] puts $open_file "void foo(void) { }" close $open_file gcc_target_compile objfmtst.c objfmtst.o object "" set output [exec $objdump_name --file-headers objfmtst.o ] file delete objfmtst.o if ![ regexp "file format (.*)arch" $output dummy objformat ] { verbose "Could not parse objdump output" 2 set gcc_target_object_format_saved unknown } else { switch -regexp $objformat { elf { verbose "gcc_target_object_format returning elf" 2 set gcc_target_object_format_saved elf } ecoff { verbose "gcc_target_object_format returning ecoff" 2 set gcc_target_object_format_saved ecoff } coff { verbose "gcc_target_object_format returning coff" 2 set gcc_target_object_format_saved coff } a\.out { verbose "gcc_target_object_format returning a.out" 2 set gcc_target_object_format_saved a.out } default { verbose "gcc_target_object_format returning unknown" 2 set gcc_target_object_format_saved unknown } } } return $gcc_target_object_format_saved } } ############################### # proc check_weak_available { } ############################### # weak symbols are only supported in some configs/object formats # this proc returns 1 if they're support, 0 if they're not, or -1 if unsure proc check_weak_available { } { global target_cpu # All mips targets should support it if { [ string first "mips" $target_cpu ] >= 0 } { return 1 } # ELF and ECOFF support it. a.out does with gas/gld but may also with # other linkers, so we should try it set objformat [gcc_target_object_format] switch $objformat { elf { return 1 } ecoff { return 1 } a.out { return 1 } unknown { return -1 } default { return 0 } } } ########## # weak-1.c ########## if { [ check_weak_available ] == 1 } { dg-init set lines [gcc_target_compile "$srcdir/$subdir/weak-1a.c" "weak-1a.o" object ""] if ![string match "" $lines] then { fail "weak-1a.o" } else { dg-runtest "$srcdir/$subdir/weak-1.c" "weak-1a.o" "" file delete weak-1a.o } dg-finish } elseif { [ check_weak_available ] == 0 } { unsupported "weak-1.c" } else { unresolved "weak-1.c" } ########## # weak-2.c ########## if { [ check_weak_available ] == 1 } { dg-init set lines [gcc_target_compile "$srcdir/$subdir/weak-2a.c" "weak-2a.o" object ""] if ![string match "" $lines] then { fail "weak-2a.o" } else { set lines [gcc_target_compile "$srcdir/$subdir/weak-2b.c" "weak-2b.o" object ""] if ![string match "" $lines] then { fail "weak-2b.o" } else { dg-runtest "$srcdir/$subdir/weak-2.c" "weak-2a.o weak-2b.o" "" file delete weak-2a.o weak-2b.o } } dg-finish } elseif { [ check_weak_available ] == 0 } { unsupported "weak-2.c" } else { unresolved "weak-2.c" } ########### # alias-1.c ########### dg-init dg-runtest "$srcdir/$subdir/alias-1.c" "" "" dg-finish ########### # wkali-1.c ########### dg-init dg-runtest "$srcdir/$subdir/wkali-1.c" "" "" dg-finish ########### # wkali-2.c ########### if { [ check_weak_available ] == 1 } { dg-init set lines [gcc_target_compile "$srcdir/$subdir/wkali-2a.c" "wkali-2a.o" object ""] if ![string match "" $lines] then { fail "wkali-2a.o" } else { set lines [gcc_target_compile "$srcdir/$subdir/wkali-2b.c" "wkali-2b.o" object ""] if ![string match "" $lines] then { fail "wkali-2b.o" } else { dg-runtest "$srcdir/$subdir/wkali-2.c" "wkali-2a.o wkali-2b.o" "" file delete wkali-2a.o wkali-2b.o } } dg-finish } elseif { [ check_weak_available ] == 0 } { unsupported "wkali-2.c" } else { unresolved "wkali-2.c" } ########### # gcsec-1.c ########### set ld_output [ exec [ find_ld ] --help ] if { [ string first "--gc-sections" $ld_output ] >= 0 } { dg-init dg-runtest "$srcdir/$subdir/gcsec-1.c" "-ffunction-sections -fdata-sections -Wl,--gc-sections" "" dg-finish } else { unsupported "gcsec-1.c" } ### EOF ecos.exp