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>
|
2005-07-12 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* ld-powerpc/sdalib.s (lib_var): Size it.
|
* ld-powerpc/sdalib.s (lib_var): Size it.
|
||||||
|
@ -28,3 +28,19 @@ foreach t $test_list {
|
|||||||
verbose [file rootname $t]
|
verbose [file rootname $t]
|
||||||
run_dump_test [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
|
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