| # Copyright (C) 1993, 1994, 1997 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: |
| # bug-dejagnu@prep.ai.mit.edu |
| |
| # This file was written by Rob Savoye <rob@cygnus.com> |
| # and extended by Ian Lance Taylor <ian@cygnus.com> |
| |
| proc binutil_version { prog } { |
| if ![is_remote host] { |
| set path [which $prog]; |
| if {$path == 0} then { |
| perror "$prog can't be run, file not found." |
| return "" |
| } |
| } else { |
| set path $prog |
| } |
| set state [remote_exec host $prog --version]; |
| set tmp "[lindex $state 1]\n"; |
| # Should find a way to discard constant parts, keep whatever's |
| # left, so the version string could be almost anything at all... |
| regexp "\[^\n\]* (cygnus-|)(\[-0-9.a-zA-Z-\]+)\[\r\n\].*" "$tmp" version cyg number |
| if ![info exists number] then { |
| return "$path (no version number)\n" |
| } |
| return "$path $number\n" |
| } |
| |
| # |
| # default_binutils_run |
| # run a program, returning the output |
| # sets binutils_run_failed if the program does not exist |
| # |
| proc default_binutils_run { prog progargs } { |
| global binutils_run_failed |
| global host_triplet |
| |
| set binutils_run_failed 0 |
| |
| if ![is_remote host] { |
| if {[which $prog] == 0} then { |
| perror "$prog does not exist" |
| set binutils_run_failed 1 |
| return "" |
| } |
| } |
| |
| send_log "$prog $progargs\n" |
| verbose "$prog $progargs" |
| |
| # Gotta quote dollar-signs because they get mangled by the |
| # shell otherwise. |
| regsub -all "\\$" "$progargs" "\\$" progargs |
| |
| set state [remote_exec host $prog $progargs] |
| set exec_output [prune_warnings [lindex $state 1]]; |
| if {![string match "" $exec_output]} then { |
| send_log "$exec_output\n" |
| verbose "$exec_output" |
| } |
| return $exec_output |
| } |
| |
| # |
| # default_binutils_assemble |
| # assemble a file |
| # |
| proc default_binutils_assemble { source object } { |
| global srcdir |
| global host_triplet |
| |
| # The HPPA assembler syntax is a little different than most, to make |
| # the test source file assemble we need to run it through sed. |
| # |
| # This is a hack in that it won't scale well if other targets need |
| # similar transformations to assemble. We'll generalize the hack |
| # if/when other targets need similar handling. |
| if { [istarget "hppa*-*-*"] && ![istarget "*-*-linux*" ] } then { |
| set sed_file $srcdir/config/hppa.sed |
| send_log "sed -f $sed_file < $source > asm.s\n" |
| verbose "sed -f $sed_file < $source > asm.s" |
| catch "exec sed -f $sed_file < $source > asm.s"; |
| set source asm.s |
| } |
| |
| set exec_output [target_assemble $source $object ""]; |
| set exec_output [prune_warnings $exec_output] |
| |
| if [string match "" $exec_output] { |
| return 1 |
| } else { |
| send_log "$exec_output\n" |
| verbose "$exec_output" |
| perror "$source: assembly failed" |
| return 0 |
| } |
| } |
| |
| if ![info exists target_assemble] { |
| # |
| # Stolen from dejagnu/lib/target.exp--please remove after 1/1/98. |
| # |
| uplevel #0 { |
| proc target_assemble { source destfile flags } { |
| return [default_target_assemble $source $destfile $flags]; |
| } |
| |
| proc default_target_assemble { source destfile flags } { |
| global AS_FOR_TARGET; |
| global ASFLAGS_FOR_TARGET; |
| |
| if [info exists AS_FOR_TARGET] { |
| set AS "$AS_FOR_TARGET"; |
| } else { |
| if ![board_info target exists assembler] { |
| set AS [find_gas]; |
| } else { |
| set AS [board_info target assembler]; |
| } |
| } |
| |
| if [info exists ASFLAGS_FOR_TARGET] { |
| append flags " $ASFLAGS_FOR_TARGET"; |
| } |
| |
| if [is_remote host] { |
| set source [remote_download host $source]; |
| set dest "a.out" |
| } else { |
| set dest $destfile |
| } |
| set status [remote_exec host "$AS $source $flags -o $dest"] |
| if [is_remote host] { |
| remote_upload host $dest $destfile |
| } |
| |
| set comp_output [prune_warnings [lindex $status 1]]; |
| if { [lindex $status 0] != 0 } { |
| verbose -log "assembler exited with status [lindex $status 0]"; |
| } |
| if { [lindex $status 1] != "" } { |
| verbose -log "assembler output is:\n[lindex $status 1]" 2; |
| } |
| return ${comp_output}; |
| } |
| } |
| } |