| # Copyright (C) 1993-2023 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) | |
| load_lib utils-lib.exp | |
| if ![info exists AS] then { | |
| set AS [findfile $base_dir/../gas/as-new $base_dir/../gas/as-new [transform as]] | |
| } | |
| if ![info exists ASFLAGS] then { | |
| set ASFLAGS "" | |
| } | |
| if ![info exists LD] then { | |
| set LD [findfile $base_dir/../ld/ld-new $base_dir/../ld/ld-new [transform ld]] | |
| } | |
| if ![info exists LDFLAGS] then { | |
| set LDFLAGS "" | |
| } | |
| if ![info exists NM] then { | |
| set NM [findfile $base_dir/nm-new $base_dir/nm-new [transform nm]] | |
| } | |
| if ![info exists NMFLAGS] then { | |
| set NMFLAGS "" | |
| } | |
| if ![info exists ADDR2LINE] then { | |
| set ADDR2LINE [findfile $base_dir/addr2line] | |
| } | |
| if ![info exists ADDR2LINEFLAGS] then { | |
| set ADDR2LINEFLAGS "" | |
| } | |
| if ![info exists SIZE] then { | |
| set SIZE [findfile $base_dir/size] | |
| } | |
| if ![info exists SIZEFLAGS] then { | |
| set SIZEFLAGS "" | |
| } | |
| if ![info exists OBJDUMP] then { | |
| set OBJDUMP [findfile $base_dir/objdump] | |
| } | |
| if ![info exists OBJDUMPFLAGS] then { | |
| set OBJDUMPFLAGS "" | |
| } | |
| if ![info exists OBJCOPY] then { | |
| set OBJCOPY [findfile $base_dir/objcopy] | |
| } | |
| if ![info exists OBJCOPYFLAGS] then { | |
| set OBJCOPYFLAGS "" | |
| } | |
| if ![info exists AR] then { | |
| set AR [findfile $base_dir/ar] | |
| } | |
| if ![info exists STRINGS] then { | |
| set STRINGS [findfile $base_dir/strings] | |
| } | |
| if ![info exists STRINGSFLAGS] then { | |
| set STRINGSFLAGS "" | |
| } | |
| if ![info exists STRIP] then { | |
| set STRIP [findfile $base_dir/strip-new $base_dir/strip-new [transform strip]] | |
| } | |
| if ![info exists STRIPFLAGS] then { | |
| set STRIPFLAGS "" | |
| } | |
| if ![info exists READELF] then { | |
| set READELF [findfile $base_dir/readelf] | |
| } | |
| if ![info exists READELFFLAGS] then { | |
| set READELFFLAGS "" | |
| } | |
| if ![info exists ELFEDIT] then { | |
| set ELFEDIT [findfile $base_dir/elfedit] | |
| } | |
| if ![info exists ELFEDITFLAGS] then { | |
| set ELFEDITFLAGS "" | |
| } | |
| if ![info exists WINDRES] then { | |
| set WINDRES [findfile $base_dir/windres] | |
| } | |
| if ![info exists DLLTOOL] then { | |
| set DLLTOOL [findfile $base_dir/dlltool] | |
| } | |
| if ![info exists CXXFILT] then { | |
| set CXXFILT [findfile $base_dir/cxxfilt $base_dir/cxxfilt [which [transform cxxfilt]]] | |
| if {$CXXFILT == 0} then { | |
| set CXXFILT [transform c++filt] | |
| } | |
| } | |
| if ![info exists CXXFILTFLAGS] then { | |
| set CXXFILTFLAGS "" | |
| } | |
| if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status} | |
| # Make a copy from tmpdir/gas/as and tmpdir/gas/ld to the assembler | |
| # and linker in the build tree, so that we can use a -B option to gcc | |
| # to force it to use the newly built assembler/linker. | |
| if {![file isdirectory tmpdir/gas]} {catch "exec mkdir tmpdir/gas" status} | |
| proc link_or_copy { src dst } { | |
| if ![catch "exec ln -sf ../../../$src tmpdir/gas/$dst" status] then {return 0} | |
| if ![catch "exec ln -f ../$src tmpdir/gas/$dst" status] then {return 0} | |
| catch "exec cp -fpu ../$src tmpdir/gas/$dst" status | |
| } | |
| if {[file isfile gas/as-new[exe_ext]]} then { | |
| link_or_copy gas/as-new[exe_ext] as[exe_ext] | |
| } else { | |
| # For non-Windows hosts there may be an executable | |
| # without a .exe suffix, so try copying that instead. | |
| link_or_copy gas/as-new as[exe_ext] | |
| } | |
| # This may not be needed any more... | |
| if {[file isfile ld/ld-new[exe_ext]]} then { | |
| link_or_copy ld/ld-new[exe_ext] ld[exe_ext] | |
| } else { | |
| link_or_copy ld/ld-new ld[exe_ext] | |
| } | |
| if {[file isfile tmpdir/gas/as[exe_ext]]} then { | |
| set gcc_gas_flag "-B[pwd]/tmpdir/gas/" | |
| set dlltool_gas_flag "-S [pwd]/tmpdir/gas/as[exe_ext]" | |
| } else { | |
| # Testing an installed toolchain. | |
| set gcc_gas_flag "" | |
| set dlltool_gas_flag "" | |
| } | |
| # | |
| # 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 binutils_run { prog progargs } { | |
| default_binutils_run $prog $progargs | |
| } | |
| # | |
| # binutils_assemble | |
| # assemble a file | |
| # | |
| proc binutils_assemble { source object } { | |
| default_binutils_assemble_flags $source $object "" | |
| } | |
| # | |
| # binutils_assemble_flags | |
| # assemble a file | |
| # | |
| proc binutils_assemble_flags { source object asflags } { | |
| default_binutils_assemble_flags $source $object $asflags | |
| } |