2005-07-14 H.J. Lu <hongjiu.lu@intel.com>
* ld-elf/elf.exp (array_tests): New. Call run_ld_link_exec_tests with array_tests. * ld-elf/fini.c: New file. * ld-elf/fini.out: Likewise. * ld-elf/init.c: Likewise. * ld-elf/init.out: Likewise. * ld-elf/preinit.c: Likewise. * ld-elf/preinit.out: Likewise. * lib/ld-lib.exp (run_ld_link_exec_tests): New.
This commit is contained in:
parent
6c5cf62cc9
commit
24edc24dbe
@ -1,3 +1,17 @@
|
||||
2005-07-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-elf/elf.exp (array_tests): New.
|
||||
Call run_ld_link_exec_tests with array_tests.
|
||||
|
||||
* ld-elf/fini.c: New file.
|
||||
* ld-elf/fini.out: Likewise.
|
||||
* ld-elf/init.c: Likewise.
|
||||
* ld-elf/init.out: Likewise.
|
||||
* ld-elf/preinit.c: Likewise.
|
||||
* ld-elf/preinit.out: Likewise.
|
||||
|
||||
* lib/ld-lib.exp (run_ld_link_exec_tests): New.
|
||||
|
||||
2005-07-12 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* ld-powerpc/sdalib.s (lib_var): Size it.
|
||||
|
@ -28,3 +28,19 @@ foreach t $test_list {
|
||||
verbose [file rootname $t]
|
||||
run_dump_test [file rootname $t]
|
||||
}
|
||||
|
||||
# The following tests require running the executable generated by ld.
|
||||
if ![isnative] {
|
||||
return
|
||||
}
|
||||
|
||||
set array_tests {
|
||||
{"preinit array" "" "" {preinit.c} "preinit" "preinit.out"}
|
||||
{"static preinit array" "-static" "" {preinit.c} "preinit" "preinit.out"}
|
||||
{"init array" "" "" {init.c} "init" "init.out"}
|
||||
{"static init array" "-static" "" {init.c} "init" "init.out"}
|
||||
{"fini array" "" "" {fini.c} "fini" "fini.out"}
|
||||
{"static fini array" "-static" "" {fini.c} "fini" "fini.out"}
|
||||
}
|
||||
|
||||
run_ld_link_exec_tests $array_tests
|
||||
|
34
ld/testsuite/ld-elf/fini.c
Normal file
34
ld/testsuite/ld-elf/fini.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include <stdio.h>
|
||||
|
||||
static void
|
||||
fini_0 (void)
|
||||
{
|
||||
printf ("fini array 0\n");
|
||||
}
|
||||
|
||||
static void
|
||||
fini_1 (void)
|
||||
{
|
||||
printf ("fini array 1\n");
|
||||
}
|
||||
|
||||
static void
|
||||
fini_2 (void)
|
||||
{
|
||||
printf ("fini array 2\n");
|
||||
}
|
||||
|
||||
void (*const fini_array []) (void)
|
||||
__attribute__ ((section (".fini_array"),
|
||||
aligned (sizeof (void *)))) =
|
||||
{
|
||||
&fini_0,
|
||||
&fini_1,
|
||||
&fini_2
|
||||
};
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
3
ld/testsuite/ld-elf/fini.out
Normal file
3
ld/testsuite/ld-elf/fini.out
Normal file
@ -0,0 +1,3 @@
|
||||
fini array 2
|
||||
fini array 1
|
||||
fini array 0
|
34
ld/testsuite/ld-elf/init.c
Normal file
34
ld/testsuite/ld-elf/init.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include <stdio.h>
|
||||
|
||||
static void
|
||||
init_0 (void)
|
||||
{
|
||||
printf ("init array 0\n");
|
||||
}
|
||||
|
||||
static void
|
||||
init_1 (void)
|
||||
{
|
||||
printf ("init array 1\n");
|
||||
}
|
||||
|
||||
static void
|
||||
init_2 (void)
|
||||
{
|
||||
printf ("init array 2\n");
|
||||
}
|
||||
|
||||
void (*const init_array []) (void)
|
||||
__attribute__ ((section (".init_array"),
|
||||
aligned (sizeof (void *)))) =
|
||||
{
|
||||
&init_0,
|
||||
&init_1,
|
||||
&init_2
|
||||
};
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
3
ld/testsuite/ld-elf/init.out
Normal file
3
ld/testsuite/ld-elf/init.out
Normal file
@ -0,0 +1,3 @@
|
||||
init array 0
|
||||
init array 1
|
||||
init array 2
|
34
ld/testsuite/ld-elf/preinit.c
Normal file
34
ld/testsuite/ld-elf/preinit.c
Normal file
@ -0,0 +1,34 @@
|
||||
#include <stdio.h>
|
||||
|
||||
static void
|
||||
preinit_0 (void)
|
||||
{
|
||||
printf ("preinit array 0\n");
|
||||
}
|
||||
|
||||
static void
|
||||
preinit_1 (void)
|
||||
{
|
||||
printf ("preinit array 1\n");
|
||||
}
|
||||
|
||||
static void
|
||||
preinit_2 (void)
|
||||
{
|
||||
printf ("preinit array 2\n");
|
||||
}
|
||||
|
||||
void (*const preinit_array []) (void)
|
||||
__attribute__ ((section (".preinit_array"),
|
||||
aligned (sizeof (void *)))) =
|
||||
{
|
||||
&preinit_0,
|
||||
&preinit_1,
|
||||
&preinit_2
|
||||
};
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
3
ld/testsuite/ld-elf/preinit.out
Normal file
3
ld/testsuite/ld-elf/preinit.out
Normal file
@ -0,0 +1,3 @@
|
||||
preinit array 0
|
||||
preinit array 1
|
||||
preinit array 2
|
@ -1262,3 +1262,98 @@ if ![string length [info proc prune_warnings]] {
|
||||
return $text
|
||||
}
|
||||
}
|
||||
|
||||
# List contains test-items with 3 items followed by 2 lists, one item and
|
||||
# one optional item:
|
||||
# 0:name
|
||||
# 1:ld options
|
||||
# 2:assembler options
|
||||
# 3:filenames of assembler files
|
||||
# 4:name of output file
|
||||
# 5:expected output
|
||||
# 6:compiler flags (optional)
|
||||
|
||||
proc run_ld_link_exec_tests { ldtests } {
|
||||
global ld
|
||||
global as
|
||||
global srcdir
|
||||
global subdir
|
||||
global env
|
||||
global CC
|
||||
global CFLAGS
|
||||
|
||||
foreach testitem $ldtests {
|
||||
set testname [lindex $testitem 0]
|
||||
set ld_options [lindex $testitem 1]
|
||||
set as_options [lindex $testitem 2]
|
||||
set src_files [lindex $testitem 3]
|
||||
set binfile tmpdir/[lindex $testitem 4]
|
||||
set expfile [lindex $testitem 5]
|
||||
set cflags [lindex $testitem 6]
|
||||
set objfiles {}
|
||||
set is_unresolved 0
|
||||
set failed 0
|
||||
|
||||
# verbose -log "Testname is $testname"
|
||||
# verbose -log "ld_options is $ld_options"
|
||||
# verbose -log "as_options is $as_options"
|
||||
# verbose -log "src_files is $src_files"
|
||||
# verbose -log "actions is $actions"
|
||||
# verbose -log "binfile is $binfile"
|
||||
|
||||
# Assemble each file in the test.
|
||||
foreach src_file $src_files {
|
||||
set objfile "tmpdir/[file rootname $src_file].o"
|
||||
lappend objfiles $objfile
|
||||
|
||||
if ![ld_compile "$CC -c $CFLAGS $cflags" $srcdir/$subdir/$src_file $objfile] {
|
||||
set is_unresolved 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
# Catch assembler errors.
|
||||
if { $is_unresolved != 0 } {
|
||||
unresolved $testname
|
||||
continue
|
||||
}
|
||||
|
||||
if ![ld_link $ld $binfile "-L$srcdir/$subdir $ld_options $objfiles"] {
|
||||
set failed 1
|
||||
} else {
|
||||
set failed 0
|
||||
send_log "Running: $binfile > $binfile.out\n"
|
||||
verbose "Running: $binfile > $binfile.out"
|
||||
catch "exec $binfile > $binfile.out" exec_output
|
||||
|
||||
if ![string match "" $exec_output] then {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
set failed 1
|
||||
} else {
|
||||
send_log "diff $binfile.out $srcdir/$subdir/$expfile\n"
|
||||
verbose "diff $binfile.out $srcdir/$subdir/$expfile"
|
||||
catch "exec diff $binfile.out $srcdir/$subdir/$expfile" exec_output
|
||||
set exec_output [prune_warnings $exec_output]
|
||||
|
||||
if ![string match "" $exec_output] then {
|
||||
send_log "$exec_output\n"
|
||||
verbose "$exec_output" 1
|
||||
set failed 1
|
||||
}
|
||||
}
|
||||
|
||||
if { $failed != 0 } {
|
||||
fail $testname
|
||||
} else { if { $is_unresolved == 0 } {
|
||||
pass $testname
|
||||
} }
|
||||
}
|
||||
|
||||
# Catch action errors.
|
||||
if { $is_unresolved != 0 } {
|
||||
unresolved $testname
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user