I never got any replies about this proposed baseboard. Any comments? I could rename it to something more specific to mips or qemu if people wanted, that is what I am using it for though there is nothing in it that should be specific to MIPS or Qemu. It is specific to GCC since it uses the -print-sysroot and -print-file-name options.
Steve Ellcey sell...@mips.com ________________________________________ From: dejagnu-bounces+sellcey=mips....@gnu.org [dejagnu-bounces+sellcey=mips....@gnu.org] on behalf of Steve Ellcey [sell...@mips.com] Sent: Wednesday, July 24, 2013 3:26 PM To: dejagnu@gnu.org Subject: New baseboard for multilib simulator testing A while back I added a generic-sim.exp baseboard that I use for qemu testing of MIPS targets. It works well but one of the things I don't like about it is that you need set the rpath and dynamic linker options with the DEJAGNU_SIM_LINK_FLAG option if you want to use shared libararies. Then if you want to test a different version (soft-float vs. hard-float or big-endian vs. little-endian) you need to change the rpath that you put into DEJAGNU_SIM_LINK_FLAG before rerunning. I wanted to avoid this and also to be able to kick off the GCC testsuite once and tell it to run multiple options in one test run. This baseboard is my way of doing that, it sets rpath and dynamic-linker options using the GCC --print-sysroot and --print-file-name options. This works for testing installed compilers, but for testing a built, but not installed, compiler I had to hardcode some paths into the search. I don't like that but I couldn't find any other way to do it. So with the generic-sim.exp baseboard I would test GCC with something like: export DEJAGNU_SIM_LINK_FLAGS="-Wl,--dynamic-linker=/local/home/sellcey/nightly/install-mips-mti-linux-gnu/sysroot-mips-mti-linux-gnu/usr/lib/ld-2.17.90.so -Wl,-rpath=/local/home/sellcey/nightly/install-mips-mti-linux-gnu/sysroot-mips-mti-linux-gnu/usr/lib:/local/home/sellcey/nightly/install-mips-mti-linux-gnu/mips-mti-linux-gnu/lib" make check RUNTESTFLAGS="--target_board=generic-sim" With multi-sim.exp I can skip the export and just do: make check RUNTESTFLAGS="--target_board=multi-sim" And I can also do this now: make check RUNTESTFLAGS="--target_board=multi-sim\{-EB,-EL\}\{-mhard-float,-msoft-float\}" What do people think? Can we add this baseboard to dejagnu? Steve Ellcey sell...@mips.com 2013-07-24 Steve Ellcey <sell...@mips.com> * Makefile.am (baseboard_SCRIPTS): Add multi-sim.exp baseboard. * Makefile.in: Regenerate. * baseboards/multi-sim.exp: New. diff --git a/Makefile.am b/Makefile.am index aeaccc6..495c75d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -170,6 +170,7 @@ baseboard_SCRIPTS = \ baseboards/mn10300-sim.exp \ baseboards/msparc-cygmon.exp \ baseboards/mt-sid.exp \ + baseboards/multi-sim.exp \ baseboards/op50n.exp \ baseboards/powerpc-bug.exp \ baseboards/powerpc-bug1.exp \ diff --git a/baseboards/multi-sim.exp b/baseboards/multi-sim.exp new file mode 100644 index 0000000..c61da21 --- /dev/null +++ b/baseboards/multi-sim.exp @@ -0,0 +1,121 @@ +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# This file is part of DejaGnu. +# +# DejaGnu 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. +# +# DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +# Contributed by Steve Ellcey <sell...@mips.com>. + +# Use env to check env. variables and modify the simulator. +global env +global SIM + +# Load the generic configuration for this board. This will define a basic +# set of routines needed by the tool to communicate with the board. +load_generic_config "sim" + +# basic-sim.exp is a basic description for the standard Cygnus simulator. +load_base_board_description "basic-sim" + +proc dynamic_linker_flag { args } { + global board + set compiler "[board_info $board compiler]" + set mflags "[board_info $board multilib_flags]" + set result [remote_exec host "$compiler $mflags --print-sysroot"] + set output [lindex $result 1] + set toutput [string trimright $output] + set dynlinkerdir "$toutput/usr/lib" + set dynlinker [glob -directory $dynlinkerdir ld-*.so] + verbose "dynamic_linker_flag: -Wl,--dynamic-linker=$dynlinker" + return "-Wl,--dynamic-linker=$dynlinker" +} +proc rpath_flags { args } { + global board + set compiler "[board_info $board compiler]" + set mflags "[board_info $board multilib_flags] [libgloss_include_flags] [newlib_include_flags] [libgloss_link_flags] [libgloss_link_flags]" + set rpathflags "" + set gccpath [get_multilibs] + foreach i {libgcc_s.so libstdc++.so libgfortran.so libc.so} { + set result [remote_exec host "$compiler $mflags --print-file-name=$i"] + set output [lindex $result 1] + set rpathdir [file dirname $output] + # If testing an installed compiler, --print-file-name will find the + # libraries, if testing a built but not installed compiler it will not + # find libraries like libstdc++.so or libgfortran.so so we add the + # extra hack/search so it can work. + if [string match "." $rpathdir] { + if [string match $i "libstdc++.so"] { + if [file exists "$gccpath/libstdc++-v3/src/.libs/libstdc++.so"] { + set rpathflags "$rpathflags -Wl,-rpath=$gccpath/libstdc++-v3/src/.libs" + } + } + if [string match $i "libgfortran.so"] { + if [file exists "$gccpath/libgfortran/.libs/libgfortran.so"] { + set rpathflags "$rpathflags -Wl,-rpath=$gccpath/libgfortran/.libs" + } + } + } else { + set rpathflags "$rpathflags -Wl,-rpath=$rpathdir" + } + } + verbose "rpath_flags: $rpathflags" + return $rpathflags +} + +# The TCL SIM variable takes precedence over the DEJAGNU_SIM env. variable +if {[info exists env(DEJAGNU_SIM)] && ![info exists SIM]} { + set SIM $env(DEJAGNU_SIM) +} + +# This tells it which directory to look in for the simulator. +setup_sim sim + +# No multilib flags are set by default. +if {[info exists env(DEJAGNU_SIM_MULTILIB_OPTIONS)]} { + process_multilib_options "$env(DEJAGNU_SIM_MULTILIB_OPTIONS)" +} else { + process_multilib_options "" +} + +# The compiler used to build for this board. This has *nothing* to do +# with what compiler is tested if we're testing gcc. +if {[info exists env(DEJAGNU_SIM_GCC)]} { + set_board_info compiler "$env(DEJAGNU_SIM_GCC)" +} else { + set_board_info compiler "[find_gcc]" +} + +if {[info exists env(DEJAGNU_SIM_INCLUDE_FLAGS)]} { + set_board_info cflags "[libgloss_include_flags] [newlib_include_flags] $env(DEJAGNU_SIM_INCLUDE_FLAGS)" +} else { + set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" +} +if {[info exists env(DEJAGNU_SIM_LINK_FLAGS)]} { + set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [dynamic_linker_flag] [rpath_flags] $env(DEJAGNU_SIM_LINK_FLAGS)" +} else { + set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [dynamic_linker_flag] [rpath_flags]" +} +if {[info exists env(DEJAGNU_SIM_LDSCRIPT)]} { + set_board_info ldscript "$env(DEJAGNU_SIM_LDSCRIPT)" +} +if {[info exists env(DEJAGNU_SIM_OPTIONS)]} { + set_board_info sim,options "$env(DEJAGNU_SIM_OPTIONS)" +} + +if {[info exists env(DEJAGNU_SIM_BOARD_INFO)]} { + foreach e $env(DEJAGNU_SIM_BOARD_INFO) { + set_board_info [lindex $e 0] [lindex $e 1] + } +} _______________________________________________ DejaGnu mailing list DejaGnu@gnu.org https://lists.gnu.org/mailman/listinfo/dejagnu _______________________________________________ DejaGnu mailing list DejaGnu@gnu.org https://lists.gnu.org/mailman/listinfo/dejagnu