* config/unix-ld.exp: Set ld using findfile.
* lib/ld.exp (default_ld_relocate): Return a value. Change format of log messages. (default_ld_compile): Likewise. (default_ld_link): Likewise. Also, don't include $BFDLIB and $LIBIBERTY in link. * ld.bootstrap/bootstrap.exp: Rewrite. * ld.cdtest/cdtest.exp: Rewrite. * ld.cdtest/cdtest-foo.cc: Update from top level ld directory. * ld.cdtest/cdtest-foo.h: Likewise. * ld.cdtest/cdtest-main.cc: Likewise.
This commit is contained in:
parent
50f01d6d2a
commit
5c680d3f29
@ -1,3 +1,22 @@
|
||||
Tue Sep 27 14:59:51 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
|
||||
|
||||
* config/unix-ld.exp: Set ld using findfile.
|
||||
* lib/ld.exp (default_ld_relocate): Return a value. Change format
|
||||
of log messages.
|
||||
(default_ld_compile): Likewise.
|
||||
(default_ld_link): Likewise. Also, don't include $BFDLIB and
|
||||
$LIBIBERTY in link.
|
||||
* ld.bootstrap/bootstrap.exp: Rewrite.
|
||||
* ld.cdtest/cdtest.exp: Rewrite.
|
||||
* ld.cdtest/cdtest-foo.cc: Update from top level ld directory.
|
||||
* ld.cdtest/cdtest-foo.h: Likewise.
|
||||
* ld.cdtest/cdtest-main.cc: Likewise.
|
||||
|
||||
Fri May 27 09:35:04 1994 Ken Raeburn (raeburn@cygnus.com)
|
||||
|
||||
* ld.cdtest/cdtest.exp: Don't look for $result before it's
|
||||
defined.
|
||||
|
||||
Tue May 17 15:06:49 1994 Bill Cox (bill@rtl.cygnus.com)
|
||||
|
||||
* ld.bootstrap/bootstrap.exp, lib/ld.exp: Replace error proc
|
||||
|
@ -21,7 +21,9 @@
|
||||
# Written by Jeffrey Wheat (cassidy@cygnus.com)
|
||||
#
|
||||
|
||||
set ld $objdir/ld.new
|
||||
if ![info exists ld] then {
|
||||
set ld [findfile $objdir/ld.new $objdir/ld.new [transform ld]]
|
||||
}
|
||||
|
||||
# load the utility procedures
|
||||
load_lib ld.exp
|
||||
|
@ -1,6 +1,5 @@
|
||||
#
|
||||
# Expect script for LD Bootstrap Tests
|
||||
# Copyright (C) 1993 Free Software Foundation
|
||||
# Copyright (C) 1993,1994 Free Software Foundation
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -16,84 +15,63 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Written by Jeffrey Wheat (cassidy@cygnus.com)
|
||||
# Rewritten by Ian Lance Taylor (ian@cygnus.com)
|
||||
#
|
||||
|
||||
if $tracelevel then {
|
||||
strace $tracelevel
|
||||
# Make sure that ld can bootstrap itself.
|
||||
|
||||
# This test can only be run if ld generates native executables.
|
||||
if ![isnative] {return}
|
||||
|
||||
# This test can only be run if we have the ld build directory, since
|
||||
# we need the object files.
|
||||
if {$ld != "$objdir/ld.new"} {return}
|
||||
|
||||
if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status}
|
||||
|
||||
# Bootstrap ld. First link the object files together using -r, in
|
||||
# order to test -r. Then link the result into an executable, ld1, to
|
||||
# really test -r. Use ld1 to link a fresh ld, ld2. Use ld2 to link a
|
||||
# new ld, ld3. ld2 and ld3 should be identical.
|
||||
|
||||
foreach flags {"" "--static" "--traditional-format" "--no-keep-memory"} {
|
||||
if {"$flags" != ""} {
|
||||
set testname "bootstrap with $flags"
|
||||
} else {
|
||||
set testname "bootstrap"
|
||||
}
|
||||
|
||||
if ![ld_relocate $ld tmpdir/ld-partial.o "$flags $OFILES"] {
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
if ![ld_link $ld tmpdir/ld1 "$flags tmpdir/ld-partial.o $BFDLIB $LIBIBERTY"] {
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
if ![ld_link tmpdir/ld1 tmpdir/ld2 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
|
||||
fail $testname
|
||||
return
|
||||
}
|
||||
|
||||
send_log "cmp tmpdir/ld2 tmpdir/ld3\n"
|
||||
verbose "cmp tmpdir/ld2 tmpdir/ld3"
|
||||
catch "exec cmp tmpdir/ld2 tmpdir/ld3" exec_output
|
||||
|
||||
if [string match "" $exec_output] then {
|
||||
pass $testname
|
||||
} else {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
|
||||
fail $testname
|
||||
}
|
||||
}
|
||||
|
||||
set tmpdir /tmp
|
||||
|
||||
set stage 0
|
||||
|
||||
#
|
||||
# link an object using relocation
|
||||
#
|
||||
|
||||
ld_relocate $objdir/ld.new $tmpdir/ld-partial.o $OFILES
|
||||
|
||||
ld_link $objdir/ld.new $tmpdir/ld.partial $tmpdir/ld-partial.o
|
||||
|
||||
ld_link $tmpdir/ld.partial $tmpdir/ld.full $OFILES
|
||||
|
||||
ld_link $tmpdir/ld.full $tmpdir/ld.$stage $OFILES
|
||||
|
||||
#
|
||||
# main test loop
|
||||
#
|
||||
for { set stage 0 } { $stage < 9 } { incr stage } {
|
||||
|
||||
global OFILES
|
||||
global BFDLIB
|
||||
global LIBIBERTY
|
||||
global HOSTING_EMU
|
||||
global HOSTING_CRT0
|
||||
global HOSTING_LIBS
|
||||
|
||||
set status -1
|
||||
|
||||
set tmpstage $stage
|
||||
set ld_old $tmpdir/ld.$stage
|
||||
set ld_new $tmpdir/ld.[incr tmpstage]
|
||||
|
||||
verbose "### Running test $target\n" 1
|
||||
verbose "### stage is now $stage\n" 1
|
||||
|
||||
# link the target with itself
|
||||
ld_link $ld_old $ld_new $OFILES
|
||||
|
||||
# load (compare) the target
|
||||
if ![file exists $ld_old] then {
|
||||
unresolved "$ld_old doesn't exist."
|
||||
}
|
||||
|
||||
if ![file exists $ld_new] then {
|
||||
unresolved "$ld_new doesn't exist."
|
||||
}
|
||||
|
||||
# compare the old and new targets
|
||||
set status [ eval ld_load "$ld_old $ld_new" ]
|
||||
case $status in {
|
||||
"0" {
|
||||
pass "$ld_old == $ld_new"
|
||||
}
|
||||
"1" {
|
||||
fail "$tmptarget aborted"
|
||||
}
|
||||
"-1" {
|
||||
perror "Couldn't load $tmptarget."
|
||||
}
|
||||
}
|
||||
|
||||
# remove generated targets
|
||||
verbose "### EXEC exec rm -f $ld_old"
|
||||
catch "exec rm -f $ld_old" result
|
||||
}
|
||||
|
||||
# remove last generated targets
|
||||
verbose "### EXEC rm -f $ld_old $ld_new"
|
||||
catch "exec rm -f $ld_old $ld_new" result
|
||||
ld_exit
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Class Foo
|
||||
//#pragma implementation
|
||||
#pragma implementation
|
||||
|
||||
|
||||
// We don't use header files, since we only want to see, whether the
|
||||
@ -18,8 +18,6 @@ extern "C" {
|
||||
|
||||
#include "cdtest-foo.h"
|
||||
|
||||
const Foo::len = FOO_MSG_LEN;
|
||||
|
||||
int Foo::foos = 0;
|
||||
|
||||
void Foo::init_foo ()
|
||||
@ -56,7 +54,7 @@ Foo::Foo (const Foo& foo)
|
||||
{
|
||||
i = ++foos;
|
||||
#ifdef WITH_ADDR
|
||||
printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n",
|
||||
printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n",
|
||||
i, foo.message, this, foo.i, &foo);
|
||||
#else
|
||||
printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i);
|
||||
@ -68,7 +66,7 @@ Foo::Foo (const Foo& foo)
|
||||
Foo& Foo::operator= (const Foo& foo)
|
||||
{
|
||||
#ifdef WITH_ADDR
|
||||
printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n",
|
||||
printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n",
|
||||
foo.i, foo.message, &foo, i, this);
|
||||
#else
|
||||
printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i);
|
||||
|
@ -11,8 +11,8 @@
|
||||
class Foo {
|
||||
static int foos;
|
||||
int i;
|
||||
static const int len;
|
||||
char message[FOO_MSG_LEN];
|
||||
const len = FOO_MSG_LEN;
|
||||
char message[len];
|
||||
public:
|
||||
static void init_foo ();
|
||||
static int nb_foos() { return foos; }
|
||||
|
@ -1,12 +1,14 @@
|
||||
// main program for Class Foo
|
||||
|
||||
extern "C" {
|
||||
// Some <assert.h> implementations (e.g. SUNOS 4.1) are broken,
|
||||
// in that they require <stdio.h>. But, if gcc/g++ is installed
|
||||
// correctly, you should get gcc's assert.h.
|
||||
// If the compile fails, it means the wrong include files are in use!
|
||||
#include <assert.h>
|
||||
};
|
||||
#include "cdtest-foo.h"
|
||||
|
||||
// If we're using "../gcc/xgcc -B../gcc/", we may not have fixed C++
|
||||
// header files to work with. So we can't use assert.h here.
|
||||
extern "C" void exit (int);
|
||||
#define assert(X) if (!(X)) exit(1)
|
||||
|
||||
extern "C" void __init_start();
|
||||
|
||||
extern Foo f(void);
|
||||
@ -14,24 +16,25 @@ extern void g(void);
|
||||
|
||||
/* This function should *not* be called by the environment. There is
|
||||
no way in C++ to ``run something after the initializers but before main()''.
|
||||
The library that depends on this (NIHCL) is broken. -- John Gilmore
|
||||
The library that depends on this (NIHCL) is broken. -- John Gilmore
|
||||
We leave this here to test that future changes to the compiler
|
||||
do not re-introduce this losing ``feature''. */
|
||||
void
|
||||
void
|
||||
__init_start()
|
||||
{
|
||||
Foo::init_foo();
|
||||
}
|
||||
|
||||
static Foo static_foo( "static_foo");
|
||||
static Foo static_foo( "static_foo");
|
||||
|
||||
main()
|
||||
{
|
||||
main()
|
||||
{
|
||||
assert (Foo::nb_foos() == 2);
|
||||
Foo automatic_foo( "automatic_foo");
|
||||
Foo bla_foo = f();
|
||||
assert (Foo::nb_foos() == 4);
|
||||
g();
|
||||
assert (Foo::nb_foos() == 4);
|
||||
// `automatic_foo' and `bla_foo' are destructed here
|
||||
}
|
||||
// `automatic_foo' and `bla_foo' are destructed here
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
#
|
||||
# Expect script for LD cdtest Tests
|
||||
# Copyright (C) 1993 Free Software Foundation
|
||||
# Copyright (C) 1993,1994 Free Software Foundation
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -17,71 +16,74 @@
|
||||
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#
|
||||
# Written by Jeffrey Wheat (cassidy@cygnus.com)
|
||||
# Rewritten by Ian Lance Taylor (ian@cygnus.com)
|
||||
#
|
||||
|
||||
#
|
||||
# Bugs:
|
||||
# + Assumes native toolchain, not cross.
|
||||
# + Doesn't detect compilation failures (including lack of C++ compiler)
|
||||
# cleanly.
|
||||
# + Shouldn't use fixed names in /tmp for temp files -- either use names
|
||||
# in current directory, or generate unique names.
|
||||
#
|
||||
# Make sure that constructors are handled correctly.
|
||||
|
||||
if $tracelevel then {
|
||||
strace $tracelevel
|
||||
# This test requires running the executable generated by ld.
|
||||
if ![isnative] {return}
|
||||
|
||||
if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status}
|
||||
|
||||
if ![ld_compile "$CXX $CXXFLAGS -fgnu-linker" $srcdir$subdir/cdtest-foo.cc tmpdir/cdtest-foo.o] {
|
||||
return
|
||||
}
|
||||
if ![ld_compile "$CXX $CXXFLAGS -fgnu-linker" $srcdir$subdir/cdtest-bar.cc tmpdir/cdtest-bar.o] {
|
||||
return
|
||||
}
|
||||
if ![ld_compile "$CXX $CXXFLAGS -fgnu-linker" $srcdir$subdir/cdtest-main.cc tmpdir/cdtest-main.o] {
|
||||
return
|
||||
}
|
||||
|
||||
set tmpdir /tmp
|
||||
set ld $objdir/ld.new
|
||||
|
||||
set objects "$tmpdir/cdtest-main.o $tmpdir/cdtest-bar.o $tmpdir/cdtest-foo.o"
|
||||
|
||||
# compile the dependant objects
|
||||
|
||||
verbose "### Compiling dependant objects\n"
|
||||
|
||||
ld_compile "$CXX $CXXFLAGS" $srcdir/$subdir/cdtest-foo.cc $tmpdir/cdtest-foo.o
|
||||
ld_compile "$CXX $CXXFLAGS" $srcdir/$subdir/cdtest-bar.cc $tmpdir/cdtest-bar.o
|
||||
ld_compile "$CXX $CXXFLAGS" $srcdir/$subdir/cdtest-main.cc $tmpdir/cdtest-main.o
|
||||
|
||||
#
|
||||
# main test loop
|
||||
#
|
||||
foreach test [glob -nocomplain $srcdir/$subdir/*.dat] {
|
||||
global target
|
||||
global status
|
||||
global result
|
||||
|
||||
set target "$srcdir/$subdir/[file tail [file rootname $test]]"
|
||||
set tmptarget "$tmpdir/[file tail [file rootname $test]]"
|
||||
|
||||
verbose "### Running test $target\n"
|
||||
|
||||
# link the target with objects and libraries
|
||||
ld_link $ld $tmptarget $objects
|
||||
|
||||
# load (execute) the target
|
||||
if ![file exists $tmptarget] then {
|
||||
unresolved "$tmptarget doesn't exist."
|
||||
if ![ld_link $ld tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
|
||||
fail cdtest
|
||||
} else {
|
||||
send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
|
||||
verbose "tmpdir/cdtest >tmpdir/cdtest.out"
|
||||
catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
|
||||
if ![string match "" $exec_output] then {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
fail cdtest
|
||||
} else {
|
||||
catch "exec $tmptarget > $tmptarget.out" exec_output
|
||||
|
||||
# diff the expected and actual outputs
|
||||
if [file exists $tmptarget.out] then {
|
||||
catch "simple_diff $target.dat $tmptarget.out" status
|
||||
send_log "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat\n"
|
||||
verbose "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat"
|
||||
catch "exec diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat" exec_output
|
||||
if [string match "" $exec_output] then {
|
||||
pass cdtest
|
||||
} else {
|
||||
fail "$tmptarget.out doesn't exist. error was $status"
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
fail cdtest
|
||||
}
|
||||
}
|
||||
# remove generated targets
|
||||
verbose "Exec exec rm -f $tmptarget.o $tmptarget.out $tmptarget $tmptarget.grt"
|
||||
catch "exec rm -f $tmptarget.o $tmptarget.out $tmptarget.grt $tmptarget" result
|
||||
}
|
||||
|
||||
# remove dependant objects
|
||||
verbose "Exec rm -f $objects"
|
||||
catch "exec rm -f $objects" result
|
||||
ld_exit
|
||||
|
||||
|
||||
if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
|
||||
fail "cdtest with -Ur"
|
||||
} else {
|
||||
if ![ld_link $ld tmpdir/cdtest tmpdir/cdtest.o] {
|
||||
fail "cdtest with -Ur"
|
||||
} else {
|
||||
send_log "tmpdir/cdtest >tmpdir/cdtest.out\n"
|
||||
verbose "tmpdir/cdtest >tmpdir/cdtest.out"
|
||||
catch "exec tmpdir/cdtest >tmpdir/cdtest.out" exec_output
|
||||
if ![string match "" $exec_output] then {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
fail "cdtest with -Ur"
|
||||
} else {
|
||||
send_log "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat\n"
|
||||
verbose "diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat"
|
||||
catch "exec diff tmpdir/cdtest.out $srcdir$subdir/cdtest.dat" exec_output
|
||||
if [string match "" $exec_output] then {
|
||||
pass "cdtest with -Ur"
|
||||
} else {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
fail "cdtest with -Ur"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
proc default_ld_version { ld } {
|
||||
if { [file exists $ld] == 0 } then {
|
||||
perror "$ld does not exist"
|
||||
perror "$ld does not exist"
|
||||
exit 1
|
||||
}
|
||||
|
||||
@ -25,17 +25,20 @@ proc default_ld_relocate { ld target objects } {
|
||||
global HOSTING_EMU
|
||||
|
||||
if { [file exists $ld] == 0 } then {
|
||||
perror "$ld does not exist"
|
||||
exit 1
|
||||
perror "$ld does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
send_log "### EXEC \"$ld $HOSTING_EMU -o $target -r $objects\"\n"
|
||||
verbose "### EXEC \"$ld $HOSTING_EMU -o $target -r $objects\""
|
||||
send_log "$ld $HOSTING_EMU -o $target -r $objects\n"
|
||||
verbose "$ld $HOSTING_EMU -o $target -r $objects"
|
||||
|
||||
catch "exec $ld $HOSTING_EMU -o $target -r $objects" exec_output
|
||||
if ![string match "" $exec_output] then {
|
||||
if [string match "" $exec_output] then {
|
||||
return 1
|
||||
} else {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -46,27 +49,28 @@ proc default_ld_relocate { ld target objects } {
|
||||
#
|
||||
proc default_ld_link { ld target objects } {
|
||||
|
||||
global BFDLIB
|
||||
global LIBIBERTY
|
||||
global HOSTING_EMU
|
||||
global HOSTING_CRT0
|
||||
global HOSTING_LIBS
|
||||
|
||||
set objs "$HOSTING_CRT0 $objects"
|
||||
set libs "$BFDLIB $LIBIBERTY $HOSTING_LIBS"
|
||||
set libs "$HOSTING_LIBS"
|
||||
|
||||
if { [file exists $ld] == 0 } then {
|
||||
perror "$ld does not exist"
|
||||
exit 1
|
||||
perror "$ld does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
send_log "### EXEC \"$ld $HOSTING_EMU -o $target $objs $libs\"\n"
|
||||
verbose "### EXEC \"$ld $HOSTING_EMU -o $target $objs $libs\""
|
||||
send_log "$ld $HOSTING_EMU -o $target $objs $libs\n"
|
||||
verbose "$ld $HOSTING_EMU -o $target $objs $libs"
|
||||
|
||||
catch "exec $ld $HOSTING_EMU -o $target $objs $libs" exec_output
|
||||
if ![string match "" $exec_output] then {
|
||||
if [string match "" $exec_output] then {
|
||||
return 1
|
||||
} else {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,17 +84,21 @@ proc default_ld_compile { cc source object } {
|
||||
global subdir
|
||||
|
||||
if {[which $cc] == 0} then {
|
||||
perror "$cc does not exist"
|
||||
exit 1
|
||||
perror "$cc does not exist"
|
||||
return 0
|
||||
}
|
||||
|
||||
send_log "$cc $CFLAGS -I$srcdir/$subdir -c $source -o $object\n"
|
||||
verbose "### EXEC \"$cc $CFLAGS -I$srcdir/$subdir -c $source -o $object\""
|
||||
|
||||
catch "exec $cc $CFLAGS -I$srcdir/$subdir -c $source -o $object" exec_output
|
||||
if ![string match "" $exec_output] then {
|
||||
|
||||
send_log "$cc -I$srcdir$subdir -c $CFLAGS $source -o $object\n"
|
||||
verbose "$cc -I$srcdir$subdir -c $CFLAGS $source -o $object"
|
||||
|
||||
catch "exec $cc -I$srcdir$subdir -c $CFLAGS $source -o $object" exec_output
|
||||
if [string match "" $exec_output] then {
|
||||
return 1
|
||||
} else {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output"
|
||||
perror "$source: compilation failed"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,7 +128,7 @@ proc simple_diff { file_1 file_2 } {
|
||||
return
|
||||
}
|
||||
|
||||
verbose "### Diff'ing: $file_1 $file_2\n" 2
|
||||
verbose "# Diff'ing: $file_1 $file_2\n" 2
|
||||
|
||||
while { [gets $file_a line] != $eof } {
|
||||
if [regexp "^#.*$" $line] then {
|
||||
|
Loading…
Reference in New Issue
Block a user