From 9de5523bb6f20557d5bc61697293be73233f8368 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 28 Sep 1994 00:06:27 +0000 Subject: [PATCH] * ld.scripts: New directory. * ld.scripts/defined.exp, ld.scripts/defined.s: New files. * ld.scripts/defined.t: New file. * lib/ld.exp (default_ld_simple_link): New function. (default_ld_assemble, default_ld_nm): New functions. * config/default.exp: Rename from unix-ld.exp. (ld_simple_link, ld_assemble, ld_nm): New functions. --- ld/testsuite/.Sanitize | 1 + ld/testsuite/ChangeLog | 8 ++ ld/testsuite/config/.Sanitize | 2 +- .../config/{unix-ld.exp => default.exp} | 24 +++++ ld/testsuite/ld.scripts/.Sanitize | 38 ++++++++ ld/testsuite/ld.scripts/defined.exp | 34 +++++++ ld/testsuite/ld.scripts/defined.s | 2 + ld/testsuite/ld.scripts/defined.t | 5 ++ ld/testsuite/lib/ld.exp | 90 +++++++++++++++++++ 9 files changed, 203 insertions(+), 1 deletion(-) rename ld/testsuite/config/{unix-ld.exp => default.exp} (85%) create mode 100644 ld/testsuite/ld.scripts/.Sanitize create mode 100644 ld/testsuite/ld.scripts/defined.exp create mode 100644 ld/testsuite/ld.scripts/defined.s create mode 100644 ld/testsuite/ld.scripts/defined.t diff --git a/ld/testsuite/.Sanitize b/ld/testsuite/.Sanitize index b3d3a71f8fc..19c4f45808d 100644 --- a/ld/testsuite/.Sanitize +++ b/ld/testsuite/.Sanitize @@ -28,6 +28,7 @@ config lib ld.bootstrap ld.cdtest +ld.scripts Things-to-lose: diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 12c192082e2..f2df1ea287f 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,13 @@ Tue Sep 27 14:59:51 1994 Ian Lance Taylor (ian@sanguine.cygnus.com) + * ld.scripts: New directory. + * ld.scripts/defined.exp, ld.scripts/defined.s: New files. + * ld.scripts/defined.t: New file. + * lib/ld.exp (default_ld_simple_link): New function. + (default_ld_assemble, default_ld_nm): New functions. + * config/default.exp: Rename from unix-ld.exp. + (ld_simple_link, ld_assemble, ld_nm): New functions. + * config/unix-ld.exp: Set ld using findfile. * lib/ld.exp (default_ld_relocate): Return a value. Change format of log messages. diff --git a/ld/testsuite/config/.Sanitize b/ld/testsuite/config/.Sanitize index 291f4a9a0cb..298cac8b1be 100644 --- a/ld/testsuite/config/.Sanitize +++ b/ld/testsuite/config/.Sanitize @@ -23,7 +23,7 @@ Do-first: Things-to-keep: -unix-ld.exp +default.exp Things-to-lose: diff --git a/ld/testsuite/config/unix-ld.exp b/ld/testsuite/config/default.exp similarity index 85% rename from ld/testsuite/config/unix-ld.exp rename to ld/testsuite/config/default.exp index 99ffb539251..bdf3b0872ce 100644 --- a/ld/testsuite/config/unix-ld.exp +++ b/ld/testsuite/config/default.exp @@ -92,6 +92,14 @@ proc ld_link { ld target objects } { default_ld_link $ld $target $objects } +# +# ld_simple_link +# link a program using ld, without including any libraries +# +proc ld_simple_link { ld target objects } { + default_ld_simple_link $ld $target $objects +} + # # ld_compile # compile an object using $cc @@ -100,6 +108,22 @@ proc ld_compile { cc source object } { default_ld_compile $cc $source $object } +# +# ld_assemble +# assemble a file +# +proc ld_assemble { as source object } { + default_ld_assemble $as $source $object +} + +# +# ld_nm +# run nm on a file +# +proc ld_nm { nm object } { + default_ld_nm $nm $object +} + # # ld_exec # execute ithe target diff --git a/ld/testsuite/ld.scripts/.Sanitize b/ld/testsuite/ld.scripts/.Sanitize new file mode 100644 index 00000000000..3f2a02ef44d --- /dev/null +++ b/ld/testsuite/ld.scripts/.Sanitize @@ -0,0 +1,38 @@ +# .Sanitize for ld dejagnu testsuites + +# Each directory to survive it's way into a release will need a file +# like this one called "./.Sanitize". All keyword lines must exist, +# and must exist in the order specified by this file. Each directory +# in the tree will be processed, top down, in the following order.. + +# Hash started lines like this one are comments and will be deleted +# before anything else is done. Blank lines will also be squashed +# out. + +# The lines between the "Do-first:" line and the "Things-to-keep:" +# line are executed as a /bin/sh shell script before anything else is +# done in this directory. + +Do-first: + +# All files listed between the "Things-to-keep:" line and the +# "Do-last:" line will be kept. All other files will be removed. +# Directories listed in this section will have their own Sanitize +# called. Directories not listed will be removed in their entirety +# with rm -rf. + +Things-to-keep: + +defined.exp +defined.s +defined.t + +Things-to-lose: + +# The lines between the "Do-last:" line and the end of the file +# are executed as a /bin/sh shell script after everything else is +# done. + +Do-last: + +#eof diff --git a/ld/testsuite/ld.scripts/defined.exp b/ld/testsuite/ld.scripts/defined.exp new file mode 100644 index 00000000000..d551f080000 --- /dev/null +++ b/ld/testsuite/ld.scripts/defined.exp @@ -0,0 +1,34 @@ +# Test DEFINED in a linker script. +# By Ian Lance Taylor, Cygnus Support. + +if ![file isdirectory tmpdir] {catch "exec mkdir tmpdir" status} + +set as [findfile $base_dir/../gas/as.new $base_dir/../gas/as.new [transform as]] +set nm [findfile $base_dir/../binutils/nm.new $base_dir/../binutils/nm.new [transform nm]] + +if ![ld_assemble $as $srcdir$subdir/defined.s tmpdir/def.o] { return } + +set prms_id 5699 + +if ![ld_simple_link $ld tmpdir/def "-T $srcdir$subdir/defined.t tmpdir/def.o"] { + fail DEFINED +} else { + if [ld_nm $nm tmpdir/def] { + if {![info exists nm_output(value1)] \ + || ![info exists nm_output(value2)]} { + perror "bad output from $nm" + } else { + if {$nm_output(value1) != 1} { + fail "DEFINED (value1 == $nm_output(value1))" + } else { + if {$nm_output(value2) != 2} { + fail "DEFINED (value2 == $nm_output(value2))" + } else { + pass DEFINED + } + } + } + } +} + +set prms_id 0 diff --git a/ld/testsuite/ld.scripts/defined.s b/ld/testsuite/ld.scripts/defined.s new file mode 100644 index 00000000000..a364bbbbe6c --- /dev/null +++ b/ld/testsuite/ld.scripts/defined.s @@ -0,0 +1,2 @@ + .globl defined + defined = 1 diff --git a/ld/testsuite/ld.scripts/defined.t b/ld/testsuite/ld.scripts/defined.t new file mode 100644 index 00000000000..d1e4748c0e1 --- /dev/null +++ b/ld/testsuite/ld.scripts/defined.t @@ -0,0 +1,5 @@ +SECTIONS { + .text : { *(.text) } +} +value1 = DEFINED (defined) ? 1 : 2; +value2 = DEFINED (undefined) ? 1 : 2; diff --git a/ld/testsuite/lib/ld.exp b/ld/testsuite/lib/ld.exp index ee395c27b49..039bee6175f 100644 --- a/ld/testsuite/lib/ld.exp +++ b/ld/testsuite/lib/ld.exp @@ -74,6 +74,30 @@ proc default_ld_link { ld target objects } { } } +# +# default_ld_simple_link +# link a program using ld, without including any libraries +# +proc default_ld_simple_link { ld target objects } { + + if { [file exists $ld] == 0 } then { + perror "$ld does not exist" + return 0 + } + + send_log "$ld -o $target $objects\n" + verbose "$ld -o $target $objects" + + catch "exec $ld -o $target $objects" exec_output + if [string match "" $exec_output] then { + return 1 + } else { + send_log "$exec_output\n" + verbose "$exec_output" + return 0 + } +} + # # default_ld_compile # compile an object using cc @@ -102,6 +126,72 @@ proc default_ld_compile { cc source object } { } } +# +# default_ld_assemble +# assemble a file +# +proc default_ld_assemble { as source object } { + global ASFLAGS + + if {[which $as] == 0} then { + perror "$as does not exist" + return 0 + } + + if ![info exists ASFLAGS] { set ASFLAGS "" } + + send_log "$as $ASFLAGS -o $object $source\n" + verbose "$as $ASFLAGS -o $object $source" + + catch "exec $as $ASFLAGS -o $object $source" exec_output + if [string match "" $exec_output] then { + return 1 + } else { + send_log "$exec_output\n" + verbose "$exec_output" + perror "$source: assembly failed" + return 0 + } +} + +# +# default_ld_nm +# run nm on a file, putting the result in the array nm_output +# +proc default_ld_nm { nm object } { + global NMFLAGS + global nm_output + + if {[which $nm] == 0} then { + perror "$nm does not exist" + return 0 + } + + if ![info exists NMFLAGS] { set NMFLAGS "" } + + send_log "$nm $NMFLAGS $object >tmpdir/nm.out\n" + verbose "$nm $NMFLAGS $object >tmpdir/nm.out" + + catch "exec $nm $NMFLAGS $object >tmpdir/nm.out" exec_output + if [string match "" $exec_output] then { + set file [open tmpdir/nm.out r] + while { [gets $file line] != -1 } { + verbose "$line" 2 + if [regexp "^(\[0-9a-fA-F\]+) \[a-zA-Z0-9\] (.+)$" $line whole value name] { + verbose "Setting nm_output($name) to 0x$value" 2 + set nm_output($name) 0x$value + } + } + close $file + return 1 + } else { + send_log "$exec_output\n" + verbose $exec_output + perror "$object: nm failed" + return 0 + } +} + # # simple_diff # compares two files line-by-line -- 2.30.2