This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb/binutils-2_25-branch] ld/testing: run_dump_test can now check linker mapfiles.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0654954b14696f1f60b2744d5f8d2b34f38b3c09

commit 0654954b14696f1f60b2744d5f8d2b34f38b3c09
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Tue Jan 6 23:40:48 2015 +0000

    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.

Diff:
---
 ld/testsuite/ChangeLog                   |  6 ++++++
 ld/testsuite/ld-scripts/overlay-size.d   |  1 +
 ld/testsuite/ld-scripts/overlay-size.exp |  9 ---------
 ld/testsuite/lib/ld-lib.exp              | 34 ++++++++++++++++++++++++++++++++
 4 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index a5b868b..d7dfad8 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,6 +1,12 @@
 2015-02-11  Alan Modra  <amodra@gmail.com>
 
 	Apply from master.
+	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-19  Alan Modra  <amodra@gmail.com>
 	* ld-gc/pr14265.d,
 	* ld-cris/tls-gc-68.d,
diff --git a/ld/testsuite/ld-scripts/overlay-size.d b/ld/testsuite/ld-scripts/overlay-size.d
index 78a9c92..4e60150 100644
--- a/ld/testsuite/ld-scripts/overlay-size.d
+++ b/ld/testsuite/ld-scripts/overlay-size.d
@@ -1,6 +1,7 @@
 # ld: -T overlay-size.t -Map tmpdir/overlay-size.map
 # name: overlay size
 # objdump: --headers
+# map: overlay-size-map.d
 # xfail: rx-*-*
 #   FAILS on the RX because the linker has to set LMA == VMA for the
 #   Renesas loader.
diff --git a/ld/testsuite/ld-scripts/overlay-size.exp b/ld/testsuite/ld-scripts/overlay-size.exp
index df3407a..c3e6e4b 100644
--- a/ld/testsuite/ld-scripts/overlay-size.exp
+++ b/ld/testsuite/ld-scripts/overlay-size.exp
@@ -23,12 +23,3 @@ if ![is_elf_format] {
 }
 
 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
-}
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 7d2df22..ce39a47 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -554,6 +554,14 @@ proc ld_simple_link_defsyms {} {
 #	both "error" and "warning".  Multiple "warning" directives
 #	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.
 #
 # After the option lines come regexp lines.  `run_dump_test' calls
@@ -606,6 +614,7 @@ proc run_dump_test { name {extra_options {}} } {
     set opts(warning) {}
     set opts(objcopy_linked_file) {}
     set opts(objcopy_objects) {}
+    set opts(map) {}
 
     foreach i $opt_array {
 	set opt_name [lindex $i 0]
@@ -859,6 +868,20 @@ proc run_dump_test { name {extra_options {}} } {
 	set cmd "$LD $LDFLAGS -L$srcdir/$subdir \
 		   $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"
 	set cmdret [remote_exec host [concat sh -c [list "$cmd 2>&1"]] "" "/dev/null" "ld.tmp"]
 	remote_upload host "ld.tmp"
@@ -907,6 +930,17 @@ proc run_dump_test { name {extra_options {}} } {
 		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 {
 	set objfile "tmpdir/dump0.o"
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]