| # Copyright (C) 1999, 2001 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: |
| # gcc-patches@gcc.gnu.org |
| |
| # This file defines procs for determining features supported by the target. |
| |
| ############################### |
| # proc check_weak_available { } |
| ############################### |
| |
| # weak symbols are only supported in some configs/object formats |
| # this proc returns 1 if they're supported, 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 } |
| } |
| } |
| |
| ############################### |
| # proc check_alias_available { } |
| ############################### |
| |
| # Determine if the target toolchain supports the alias attribute. |
| # Parameter is the pathname of a file that can be used to test the alias support. |
| # Returns yes if it does. |
| # Returns no if it does not. |
| # Returns dontknow if something went wrong |
| # For an example of the use of this function, see gcc.dg/special/ecos.exp |
| |
| proc check_alias_available { testfile } { |
| global alias_available_saved |
| |
| if [info exists alias_available_saved] { |
| verbose "check_alias_available returning saved $alias_available_saved" 2 |
| } else { |
| verbose "check_alias_available compiling testfile $testfile" 2 |
| set lines [gcc_target_compile $testfile "tmp.o" object ""] |
| |
| if [string match "" $lines] then { |
| # No error messages, everything is OK. |
| set alias_available_saved yes |
| } else { |
| if [regexp "alias definitions not supported" $lines] { |
| verbose "check_alias_available target does not support aliases" 2 |
| |
| set objformat [gcc_target_object_format] |
| |
| if { $objformat == "elf" } { |
| verbose "check_alias_available but target uses ELF format, so it ought to" 2 |
| set alias_available_saved dontknow |
| } else { |
| set alias_available_saved no |
| } |
| } else { |
| if [regexp "only weak aliases are supported" $lines] { |
| verbose "check_alias_available target supports only weak aliases" 2 |
| set alias_available_saved no |
| } else { |
| set alias_available_saved dontknow |
| } |
| } |
| } |
| |
| verbose "check_alias_available returning $alias_available_saved" 2 |
| } |
| |
| return $alias_available_saved |
| } |