URL
https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk
Subversion Repositories open8_urisc
[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [ld/] [testsuite/] [ld-pe/] [pe-run2.exp] - Rev 92
Compare with Previous | Blame | View Log
# Expect script for complex PE tests that require a C compiler and the ability# to run target executables natively, in addition to the just-built binutils.# Copyright 2006, 2007, 2009# Free Software Foundation, Inc.## This file is part of the GNU Binutils.## 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.## Based on the script pe-run.exp written by Pedro Alves.# Written by Kai Tietz <kai.tietz@onevision.com>## Note:## This test checks the "direct linking to a dll" functionality with stdcall# and fastcall fixup.## The test has 7 stages:## 1. compile and link a test dll with ".dll" extension.## 2. compile and link a test dll with ".sl" (i.e. != ".dll") extension.## 3. compile and link a client application linking directly to the ".dll" dll built in 1.# This should produce no errors.## 4. compile and link a client application linking directly to the ".sl" dll built in 2.# This should produce no errors.## 5. compile and link a client application linking directly to a symlink into# the ".dll" dll built in 1.# This should produce no errors.## 6. compile and link a client application linking directly to a symlink into# the ".sl" dll built in 1.# This should produce no errors.## 7. run the produced executables# This test can only be run on PE/COFF platforms.if {![is_pecoff_format]} {return}# No compiler, no test.if { [which $CC] == 0 } {untested "Direct linking to dll fastcall/stdcall test"return}set tmpdir tmpdirproc test_direct2_link_dll {} {global CCglobal CFLAGSglobal srcdirglobal subdirglobal tmpdir# Compile the dll.if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct2_dll.c $tmpdir/direct2_dll.o ] {fail "compiling shared lib fastcall/stdcall"} elseif ![ld_simple_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.dll "$tmpdir/direct2_dll.o" ] {fail "linking shared lib (.dll) fastcall/stdcall"} elseif ![ld_simple_link "$CC -shared -Wl,--enable-stdcall-fixup -Wl,--kill-at " $tmpdir/direct2_dll.sl "$tmpdir/direct2_dll.o" ] {fail "linking shared lib (.sl) fastcall/stdcall"} else {# Compile and link the client program.if ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/direct2_client.c $tmpdir/direct2_client.o ] {fail "compiling client fastcall/stdcall"} else {# Check linking directly to direct2_dll.dll.set msg "linking client (.dll) fastcall/stdcall"if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_dll.exe \"$tmpdir/direct2_client.o $tmpdir/direct2_dll.dll" ] {pass $msg} else {fail $msg}# Check linking directly to direct2_dll.sl.set msg "linking client (.sl) fastcall/stdcall"if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_sl.exe \"$tmpdir/direct2_client.o $tmpdir/direct2_dll.sl" ] {pass $msg} else {fail $msg}# Check dll direct linking through symlink to .dll.# Create symbolic link.catch "exec ln -fs direct2_dll.dll $tmpdir/libdirect2_dll.dll.a" ln_catchset msg "linking client (symlink -> .dll) fastcall/stdcall"if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_dll.exe \"$tmpdir/direct2_client.o $tmpdir/libdirect2_dll.dll.a" ] {pass $msg} else {fail $msg}# Check dll direct linking through symlink to .sl.# Create symbolic link.catch "exec ln -fs direct2_dll.sl $tmpdir/libdirect2_sl.dll.a" ln_catchset msg "linking client (symlink -> .sl) fastcall/stdcall"if [ld_simple_link "$CC -Wl,--enable-stdcall-fixup -Wl,--enable-auto-import" $tmpdir/direct2_client_symlink_sl.exe \"$tmpdir/direct2_client.o $tmpdir/libdirect2_sl.dll.a" ] {pass $msg} else {fail $msg}}}}proc directdll_execute {exe msg} {set expected ""catch "exec $exe" prog_outputif [string match $expected $prog_output] then {pass $msg} else {verbose $prog_outputfail $msg}}test_direct2_link_dll# This is as far as we can go with a cross-compilerif ![isnative] then {verbose "Not running natively, so cannot execute binaries"return}directdll_execute "$tmpdir/direct2_client_dll.exe" "running direct linked dll (.dll) fastcall/stdcall"directdll_execute "$tmpdir/direct2_client_sl.exe" "running direct linked dll (.sl) fastcall/stdcall"directdll_execute "$tmpdir/direct2_client_symlink_sl.exe" "running direct linked dll (symlink -> .sl) fastcall/stdcall"directdll_execute "$tmpdir/direct2_client_symlink_dll.exe" "running direct linked dll (symlink -> .dll) fastcall/stdcall"
