URL
https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk
Subversion Repositories open8_urisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/open8_urisc/trunk
- from Rev 34 to Rev 35
- ↔ Reverse comparison
Rev 34 → Rev 35
/gnu/binutils/ld/testsuite/ld-auto-import/client.c
0,0 → 1,60
#include <stdio.h> |
|
extern int var; |
extern void (*func_ptr)(void); |
extern void print_var (void); |
extern void print_foo (void); |
extern int foo; |
extern int var2[2]; |
|
typedef struct |
{ |
int * var; |
void (* func_ptr)(void); |
int * var_with_offset; |
} |
TEST; |
|
TEST xyz = { & var, print_var, & var }; |
|
const TEST const_xyz = { & var, print_var, & var }; |
|
int |
main (void) |
{ |
print_var (); |
|
printf ("We see var = %d\n", var); |
printf ("Setting var = 456\n"); |
|
var = 456; |
|
print_var (); |
printf ("We see var = %d\n\n", var); |
|
var = 90; |
print_var (); |
printf ("We see var = %d\n\n", var); |
|
print_foo (); |
printf ("We see foo = %d\n", foo); |
printf ("Setting foo = 19\n"); |
foo = 19; |
print_foo (); |
printf ("We see foo = %d\n\n", foo); |
fflush (stdout); |
|
printf ("Calling dllimported function pointer\n"); |
func_ptr (); |
|
printf ("Calling functions using global structure\n"); |
xyz.func_ptr (); |
* xyz.var = 40; |
xyz.func_ptr (); |
|
printf ("We see var2[0] = %d\n\n", var2[0]); |
|
printf ("We see const xyz %x %x\n", const_xyz.var, const_xyz.var_with_offset); |
|
return 0; |
} |
/gnu/binutils/ld/testsuite/ld-auto-import/auto-import.exp
0,0 → 1,177
# Expect script for ld-auto-import tests |
# Copyright 2002, 2005, 2007, 2008, 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. |
# |
# Written by Ralf.Habacker@freenet.de |
# Based on ls-shared/shared.exp by Ian Lance Taylor (ian@cygnus.com) |
# |
|
# Note: |
# |
# This script tests some auto-import functionality: |
# |
# A. "auto importing direct from a dll" functionality, which dramatically reduces the |
# linking time for big libraries and applications by skipping creating/using |
# import libraries. Instead it links directly to the related dll or to a symlinked |
# dll for replacing regular import libraries. The test has 6 stages: |
# |
# 1. compile and link a test dll exporting some text and data symbols and a |
# standard import library |
# |
# 2. create a symbolic link to this dll to simulate a replaced import library. |
# |
# 3. compile and link a client application with the standard import library. |
# This should produce no errors. |
# |
# 4. compile and link a client application with the created dll. |
# This should also produce no errors. |
# |
# 5. compile and link a client application using the "import library". |
# This should also produce no errors. |
# |
# 6. compile and link a client application with auto-import disabled. |
# This should produce a linking error. |
# |
# B. runtime check if there are no segfaults when importing const data variables |
# |
|
# This test can only be run if ld generates native executables. |
if ![isnative] then {return} |
|
# This test can only be run on a couple of platforms. |
# Square bracket expressions seem to confuse istarget. |
if { ![istarget *-pc-cygwin] |
&& ![istarget *-pc-mingw*] } { |
return |
} |
|
if [istarget *-pc-mingw*] { |
# FIXME: Add support for this target. |
unsupported "mingw currently not supported" |
} |
|
# No compiler, no test. |
if { [which $CC] == 0 } { |
untested "Auto import test (compiler not found)" |
return |
} |
|
# ld_special_link |
# link a program using ld, without including any libraries |
# |
proc ld_special_link { ld target objects } { |
global host_triplet |
global link_output |
|
if { [which $ld] == 0 } then { |
perror "$ld does not exist" |
return 0 |
} |
|
if [is_endian_output_format $objects] then { |
set flags [big_or_little_endian] |
} else { |
set flags "" |
} |
|
verbose -log "$ld $flags -o $target $objects" |
|
catch "exec $ld $flags -o $target $objects" link_output |
set exec_output [prune_warnings $link_output] |
|
# We don't care if we get a warning about a non-existent start |
# symbol, since the default linker script might use ENTRY. |
regsub -all "(^|\n)(\[^\n\]*: warning: cannot find entry symbol\[^\n\]*\n?)" $exec_output "\\1" exec_output |
|
# We don't care if we get a message about creating a library file. |
regsub -all "(^|\n)(Creating library file\[^\n\]*\n?)" $exec_output "\\1" exec_output |
|
if [string match "" $exec_output] then { |
return 1 |
} |
|
verbose -log "$exec_output" |
return 0 |
} |
|
set tmpdir tmpdir |
set SHCFLAG "" |
|
if [istarget *-pc-cygwin] { |
# Set some libs needed for cygwin. |
set MYLIBS "-L/usr/lib -lcygwin -L/usr/lib/w32api -lkernel32" |
|
# Compile the dll. |
if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/dll.c $tmpdir/dll.o] { |
fail "compiling shared lib" |
} |
if ![ld_special_link "$ld -shared --enable-auto-import -e __cygwin_dll_entry@12 --out-implib=$tmpdir/libstandard.dll.a" $tmpdir/dll.dll "$tmpdir/dll.o $MYLIBS"] { |
fail "linking shared lib" |
} |
|
# Create symbolic link. |
catch "exec ln -fs dll.dll $tmpdir/libsymlinked_dll.dll.a" ln_catch |
|
# Compile and link the client program. |
if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/client.c $tmpdir/client.o] { |
fail "compiling client" |
} |
|
# Check linking with import library. |
set msg "linking auto-import client using a standard import library" |
if [ld_special_link $ld $tmpdir/client-linklib.exe "--enable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -lstandard $MYLIBS"] { |
pass $msg |
} else { |
fail $msg |
} |
|
# Check linking directly with dll. |
set msg "linking auto-import client using the dll" |
if [ld_special_link $ld $tmpdir/client-linkdll.exe "--enable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -ldll $MYLIBS"] { |
pass $msg |
} else { |
fail $msg |
} |
|
# Check linking with symlinked dll. |
set msg "linking auto-import client using symbolic linked dll" |
if [ld_special_link $ld $tmpdir/client-symlinkeddll.exe "--enable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -lsymlinked_dll $MYLIBS"] { |
pass $msg |
} else { |
fail $msg |
} |
|
# Check linking with disabled auto-import, this must produce linking error. |
set msg "linking with disabled auto-import" |
if ![ld_special_link $ld $tmpdir/client-failed.exe "--disable-auto-import --enable-runtime-pseudo-reloc /lib/crt0.o $tmpdir/client.o -L$tmpdir -ldll $MYLIBS"] { |
pass $msg |
} else { |
fail $msg |
} |
|
# Check that the app works - ie that there is output when the applications runs. |
set msg "application runtime segfault check" |
catch "exec $tmpdir/client-linklib.exe" exec_output |
if ![string match "" $exec_output] then { |
pass $msg |
} else { |
fail $msg |
} |
} |
/gnu/binutils/ld/testsuite/ld-auto-import/dll.c
0,0 → 1,20
int var = 123; |
int foo = 121; |
|
int var2[2]= { 123, 456 }; |
|
#include <stdio.h> |
|
void |
print_var (void) |
{ |
printf ("DLL sees var = %d\n", var); |
} |
|
void |
print_foo (void) |
{ |
printf ("DLL sees foo = %d\n", foo); |
} |
|
void (* func_ptr)(void) = print_foo; |