| # Copyright (C) 1993-2021 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 this program; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 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 load_common_lib { name } { |
| load_lib $name |
| } |
| |
| load_common_lib binutils-common.exp |
| |
| 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 |
| # sets binutils_run_status to the exit status of the program |
| # |
| proc default_binutils_run { prog progargs } { |
| global binutils_run_failed |
| global binutils_run_status |
| global host_triplet |
| |
| set binutils_run_failed 0 |
| if [info exists binutils_run_status] { |
| unset binutils_run_status |
| } |
| |
| if ![is_remote host] { |
| if {[which $prog] == 0} then { |
| perror "$prog does not exist" |
| set binutils_run_failed 1 |
| return "" |
| } |
| } |
| |
| # For objdump, automatically translate standard section |
| # names to the targets one, if they are different. |
| set sect_names [get_standard_section_names] |
| if { $sect_names != "" && [string match "*objdump" $prog] } { |
| regsub -- "-j \\.text" $progargs "-j [lindex $sect_names 0]" progargs |
| regsub -- "-j \\.data" $progargs "-j [lindex $sect_names 1]" progargs |
| regsub -- "-j \\.bss" $progargs "-j [lindex $sect_names 2]" progargs |
| } |
| |
| # Gotta quote dollar-signs because they get mangled by the |
| # shell otherwise. Since get_standard_section_names returns |
| # quoted section names, we first remove the original quote |
| # and then requote. |
| regsub -all {\\\$} "$progargs" {$} progargs |
| regsub -all {\$} "$progargs" {\$} progargs |
| |
| send_log "$prog $progargs\n" |
| verbose "$prog $progargs" |
| |
| set state [remote_exec host $prog $progargs] |
| set binutils_run_status [lindex $state 0] |
| set exec_output [prune_warnings [lindex $state 1]] |
| if {![string match "" $exec_output]} then { |
| send_log "$exec_output\n" |
| verbose "$exec_output" |
| } else { |
| if { [lindex $state 0] != 0 } { |
| set exec_output "$prog exited with status [lindex $state 0]" |
| send_log "$exec_output\n" |
| verbose "$exec_output" |
| } |
| } |
| return $exec_output |
| } |
| |
| # |
| # default_binutils_assemble_flags |
| # assemble a file |
| # |
| proc default_binutils_assemble_flags { source object asflags } { |
| 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*"] \ |
| && ![istarget "*-*-netbsd*" ] } { |
| 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 $asflags] |
| set exec_output [prune_warnings $exec_output] |
| |
| if [string match "" $exec_output] { |
| return 1 |
| } else { |
| send_log "$exec_output\n" |
| verbose "$exec_output" |
| return 0 |
| } |
| } |
| |
| # |
| # exe_ext |
| # Returns target executable extension, if any. |
| # |
| proc exe_ext {} { |
| if { [istarget *-*-mingw*] || [istarget *-*-cygwin*] } { |
| return ".exe" |
| } else { |
| return "" |
| } |
| } |
| |
| proc verbose_eval { expr { level 1 } } { |
| global verbose |
| if $verbose>$level then { eval verbose "$expr" $level } |
| } |