1# Copyright (C) 1999, 2001 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# gcc-patches@gcc.gnu.org 19 20# This file defines procs for determining features supported by the target. 21 22############################### 23# proc check_weak_available { } 24############################### 25 26# weak symbols are only supported in some configs/object formats 27# this proc returns 1 if they're supported, 0 if they're not, or -1 if unsure 28 29proc check_weak_available { } { 30 global target_triplet 31 global target_cpu 32 33 # All mips targets should support it 34 35 if { [ string first "mips" $target_cpu ] >= 0 } { 36 return 1 37 } 38 39 # All solaris2 targets should support it 40 41 if { [regexp ".*-solaris2.*" $target_triplet] } { 42 return 1 43 } 44 45 # DEC OSF/1/Digital UNIX/Tru64 UNIX supports it 46 47 if { [regexp "alpha.*osf.*" $target_triplet] } { 48 return 1 49 } 50 51 # ELF and ECOFF support it. a.out does with gas/gld but may also with 52 # other linkers, so we should try it 53 54 set objformat [gcc_target_object_format] 55 56 switch $objformat { 57 elf { return 1 } 58 ecoff { return 1 } 59 a.out { return 1 } 60 unknown { return -1 } 61 default { return 0 } 62 } 63} 64 65############################### 66# proc check_alias_available { } 67############################### 68 69# Determine if the target toolchain supports the alias attribute. 70# Parameter is the pathname of a file that can be used to test the alias support. 71# Returns yes if it does. 72# Returns no if it does not. 73# Returns dontknow if something went wrong 74# For an example of the use of this function, see gcc.dg/special/ecos.exp 75 76proc check_alias_available { testfile } { 77 global alias_available_saved 78 79 if [info exists alias_available_saved] { 80 verbose "check_alias_available returning saved $alias_available_saved" 2 81 } else { 82 verbose "check_alias_available compiling testfile $testfile" 2 83 set lines [gcc_target_compile $testfile "tmp.o" object ""] 84 85 if [string match "" $lines] then { 86 # No error messages, everything is OK. 87 set alias_available_saved yes 88 } else { 89 if [regexp "alias definitions not supported" $lines] { 90 verbose "check_alias_available target does not support aliases" 2 91 92 set objformat [gcc_target_object_format] 93 94 if { $objformat == "elf" } { 95 verbose "check_alias_available but target uses ELF format, so it ought to" 2 96 set alias_available_saved dontknow 97 } else { 98 set alias_available_saved no 99 } 100 } else { 101 if [regexp "only weak aliases are supported" $lines] { 102 verbose "check_alias_available target supports only weak aliases" 2 103 set alias_available_saved no 104 } else { 105 set alias_available_saved dontknow 106 } 107 } 108 } 109 110 verbose "check_alias_available returning $alias_available_saved" 2 111 } 112 113 return $alias_available_saved 114} 115