* 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.
This commit is contained in:
Ian Lance Taylor 1994-09-28 00:06:27 +00:00
parent 8352254c2e
commit 9de5523bb6
9 changed files with 203 additions and 1 deletions

View File

@ -28,6 +28,7 @@ config
lib
ld.bootstrap
ld.cdtest
ld.scripts
Things-to-lose:

View File

@ -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.

View File

@ -23,7 +23,7 @@ Do-first:
Things-to-keep:
unix-ld.exp
default.exp
Things-to-lose:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,2 @@
.globl defined
defined = 1

View File

@ -0,0 +1,5 @@
SECTIONS {
.text : { *(.text) }
}
value1 = DEFINED (defined) ? 1 : 2;
value2 = DEFINED (undefined) ? 1 : 2;

View File

@ -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