ld/testing: run_dump_test can now check linker mapfiles.
Add a new option 'map' to the ld run_dump_test mechanism. When the 'map' option is given run_dump_test will ensure that there is a -Map=MAPFILE present in the linker command line, adding one if needed. The MAPFILE is then compared with the file passed to the new 'map' option using the regexp_diff function. This should make it slightly easier to write tests that check the linker mapfile output. The only test I found that already compares mapfile content is updated to use the new mechanism. ld/testsuite/ChangeLog: * ld-scripts/overlay-size.d: Add 'map' option. * ld-scripts/overlay-size.exp: Remove manual check of mapfile. * lib/ld-lib.exp (run_dump_test): Add support for new 'map' option, checking linker mapfile output.
This commit is contained in:
parent
23283c1be0
commit
43d66c95c8
4 changed files with 42 additions and 9 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2015-01-20 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
|
* ld-scripts/overlay-size.d: Add 'map' option.
|
||||||
|
* ld-scripts/overlay-size.exp: Remove manual check of mapfile.
|
||||||
|
* lib/ld-lib.exp (run_dump_test): Add support for new 'map'
|
||||||
|
option, checking linker mapfile output.
|
||||||
|
|
||||||
2015-01-20 Alan Modra <amodra@gmail.com>
|
2015-01-20 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* ld-powerpc/ambiguousv1.d,
|
* ld-powerpc/ambiguousv1.d,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# ld: -T overlay-size.t -Map tmpdir/overlay-size.map
|
# ld: -T overlay-size.t -Map tmpdir/overlay-size.map
|
||||||
# name: overlay size
|
# name: overlay size
|
||||||
# objdump: --headers
|
# objdump: --headers
|
||||||
|
# map: overlay-size-map.d
|
||||||
# xfail: rx-*-*
|
# xfail: rx-*-*
|
||||||
# FAILS on the RX because the linker has to set LMA == VMA for the
|
# FAILS on the RX because the linker has to set LMA == VMA for the
|
||||||
# Renesas loader.
|
# Renesas loader.
|
||||||
|
|
|
@ -23,12 +23,3 @@ if ![is_elf_format] {
|
||||||
}
|
}
|
||||||
|
|
||||||
run_dump_test overlay-size
|
run_dump_test overlay-size
|
||||||
|
|
||||||
set testname "overlay size (map check)"
|
|
||||||
|
|
||||||
if [regexp_diff "tmpdir/overlay-size.map" \
|
|
||||||
"$srcdir/$subdir/overlay-size-map.d"] {
|
|
||||||
fail $testname
|
|
||||||
} else {
|
|
||||||
pass $testname
|
|
||||||
}
|
|
||||||
|
|
|
@ -555,6 +555,14 @@ proc ld_simple_link_defsyms {} {
|
||||||
# both "error" and "warning". Multiple "warning" directives
|
# both "error" and "warning". Multiple "warning" directives
|
||||||
# append to the expected linker warning message.
|
# append to the expected linker warning message.
|
||||||
#
|
#
|
||||||
|
# map: FILE
|
||||||
|
# Adding this option will cause the linker to generate a linker
|
||||||
|
# map file, using the -Map=MAPFILE command line option. If
|
||||||
|
# there is no -Map=MAPFILE in the 'ld: FLAGS' then one will be
|
||||||
|
# added to the linker command line. The contents of the
|
||||||
|
# generated MAPFILE are then compared against the regexp lines
|
||||||
|
# in FILE using `regexp_diff' (see below for details).
|
||||||
|
#
|
||||||
# Each option may occur at most once unless otherwise mentioned.
|
# Each option may occur at most once unless otherwise mentioned.
|
||||||
#
|
#
|
||||||
# After the option lines come regexp lines. `run_dump_test' calls
|
# After the option lines come regexp lines. `run_dump_test' calls
|
||||||
|
@ -607,6 +615,7 @@ proc run_dump_test { name {extra_options {}} } {
|
||||||
set opts(warning) {}
|
set opts(warning) {}
|
||||||
set opts(objcopy_linked_file) {}
|
set opts(objcopy_linked_file) {}
|
||||||
set opts(objcopy_objects) {}
|
set opts(objcopy_objects) {}
|
||||||
|
set opts(map) {}
|
||||||
|
|
||||||
foreach i $opt_array {
|
foreach i $opt_array {
|
||||||
set opt_name [lindex $i 0]
|
set opt_name [lindex $i 0]
|
||||||
|
@ -860,6 +869,20 @@ proc run_dump_test { name {extra_options {}} } {
|
||||||
set cmd "$LD $LDFLAGS -L$srcdir/$subdir \
|
set cmd "$LD $LDFLAGS -L$srcdir/$subdir \
|
||||||
$opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
|
$opts(ld) -o $objfile $objfiles $opts(ld_after_inputfiles)"
|
||||||
|
|
||||||
|
# If needed then check for, or add a -Map option.
|
||||||
|
set mapfile ""
|
||||||
|
if { $opts(map) != "" } then {
|
||||||
|
if { [regexp -- "-Map=(\[^ \]+)" $cmd all mapfile] } then {
|
||||||
|
# Found existing mapfile option
|
||||||
|
verbose -log "Existing mapfile '$mapfile' found"
|
||||||
|
} else {
|
||||||
|
# No mapfile option.
|
||||||
|
set mapfile "tmpdir/dump.map"
|
||||||
|
verbose -log "Adding mapfile '$mapfile'"
|
||||||
|
set cmd "$cmd -Map=$mapfile"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
send_log "$cmd\n"
|
send_log "$cmd\n"
|
||||||
set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "ld.tmp"]
|
set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "ld.tmp"]
|
||||||
remote_upload host "ld.tmp"
|
remote_upload host "ld.tmp"
|
||||||
|
@ -908,6 +931,17 @@ proc run_dump_test { name {extra_options {}} } {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if { $opts(map) != "" } then {
|
||||||
|
# Check the map file matches.
|
||||||
|
set map_pattern_file $srcdir/$subdir/$opts(map)
|
||||||
|
verbose -log "Compare '$mapfile' against '$map_pattern_file'"
|
||||||
|
if { [regexp_diff $mapfile $map_pattern_file] } then {
|
||||||
|
fail "$testname (map file check)"
|
||||||
|
} else {
|
||||||
|
pass "$testname (map file check)"
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
set objfile "tmpdir/dump0.o"
|
set objfile "tmpdir/dump0.o"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue