objcopy --extract-symbol testcase
authorAlan Modra <amodra@gmail.com>
Thu, 15 Oct 2015 11:04:39 +0000 (21:34 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 15 Oct 2015 13:08:29 +0000 (23:38 +1030)
Run the test for more than just ELF.  Shows that objcopy --extract-symbol
isn't working on PE, mips, mmix and some aout targets.

* config/default.exp (size): New global.
* ld-elf/extract-symbol-1.s,
* ld-elf/extract-symbol-1.ld,
* ld-elf/extract-symbol-1sec.d,
* ld-elf/extract-symbol-1sym.d: Delete.
* ld-scripts/script.exp (extract_symbol_test): New.

ld/testsuite/ChangeLog
ld/testsuite/config/default.exp
ld/testsuite/ld-elf/extract-symbol-1.ld [deleted file]
ld/testsuite/ld-elf/extract-symbol-1.s [deleted file]
ld/testsuite/ld-elf/extract-symbol-1sec.d [deleted file]
ld/testsuite/ld-elf/extract-symbol-1sym.d [deleted file]
ld/testsuite/ld-scripts/script.exp

index ef4631b14e57d892fb3df94e8471e00496d5ef7f..af8a69fd01763b656914292a6f9523bf986cc112 100644 (file)
@@ -1,3 +1,12 @@
+2015-10-15  Alan Modra  <amodra@gmail.com>
+
+       * config/default.exp (size): New global.
+       * ld-elf/extract-symbol-1.s,
+       * ld-elf/extract-symbol-1.ld,
+       * ld-elf/extract-symbol-1sec.d,
+       * ld-elf/extract-symbol-1sym.d: Delete.
+       * ld-scripts/script.exp (extract_symbol_test): New.
+
 2015-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/19073
index 5b3e29f28a2d19866e87549cdecc5c8a3c44d0f0..310a3b21ba85fc51efc20664f960f09d166f4a33 100644 (file)
@@ -49,6 +49,10 @@ if ![info exists strip] then {
     set strip [findfile $base_dir/../binutils/strip-new $base_dir/../binutils/strip-new [transform strip]]
 }
 
+if ![info exists size] then {
+    set size [findfile $base_dir/../binutils/size]
+}
+
 remote_exec host "mkdir -p tmpdir"
 
 # Make symlinks from tmpdir/ld to the linker and assembler in the
diff --git a/ld/testsuite/ld-elf/extract-symbol-1.ld b/ld/testsuite/ld-elf/extract-symbol-1.ld
deleted file mode 100644 (file)
index 53e95c6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-ENTRY(_entry)
-PHDRS
-{
-  data PT_LOAD AT (0);
-}
-SECTIONS
-{
-  . = 0x10000;
-  .foo : { *(.foo) } :data
-
-  . = 0x20000;
-  .bar : { *(.bar) } :data
-
-  /DISCARD/ : { *(*) }
-
-  _entry = 0x30000;
-  linker_symbol = 0x40000;
-}
diff --git a/ld/testsuite/ld-elf/extract-symbol-1.s b/ld/testsuite/ld-elf/extract-symbol-1.s
deleted file mode 100644 (file)
index 0971500..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-       .globl          B
-       .globl          C
-
-       .section        .foo,"awx",%progbits
-       .4byte          1,2,3,4
-B:
-       .4byte          5,6,7
-
-       .section        .bar,"ax",%nobits
-       .space          0x123
-C:
-       .space          0x302
-
-       .globl          D
-       .equ            D,0x12345678
diff --git a/ld/testsuite/ld-elf/extract-symbol-1sec.d b/ld/testsuite/ld-elf/extract-symbol-1sec.d
deleted file mode 100644 (file)
index 35ca898..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#name: --extract-symbol test 1 (sections)
-#source: extract-symbol-1.s
-#ld: -Textract-symbol-1.ld
-#objcopy_linked_file: --extract-symbol
-#objdump: --headers
-#xfail: "hppa*-*-*" "rx-*-*" "v850*-*-*"
-# FAILS on the RX because the linker has to set LMA == VMA for the Renesas loader.
-# FAILS on the V850 because an extra section - .note.renesas - is created.
-#...
-Sections:
- *Idx +Name +Size +VMA +LMA .*
- *0 +\.foo +0+ +0+10000 +0+10000 .*
- *CONTENTS, ALLOC, LOAD, CODE
- *1 +\.bar +0+ +0+20000 +0+10000 .*
- *ALLOC, READONLY, CODE
diff --git a/ld/testsuite/ld-elf/extract-symbol-1sym.d b/ld/testsuite/ld-elf/extract-symbol-1sym.d
deleted file mode 100644 (file)
index 4069191..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#name: --extract-symbol test 1 (symbols)
-#source: extract-symbol-1.s
-#ld: -Textract-symbol-1.ld
-#objcopy_linked_file: --extract-symbol
-#nm: -n
-#xfail: "hppa*-*-*"
-#...
-0*00010010 T B
-#...
-0*00020123 T C
-#...
-0*00030000 A _entry
-#...
-0*00040000 A linker_symbol
-#...
-0*12345678 A D
-#pass
\ No newline at end of file
index 6ab04ec01e013622390bf689ead7e49565b18f1f..b5f175f2b1f9821d94b16aa6b384c3b65390d928 100644 (file)
@@ -107,6 +107,35 @@ proc check_script { } {
     }
 }
 
+proc extract_symbol_test { testfile testname } {
+    global objcopy
+    global nm
+    global size
+
+    set copyfile tmpdir/extract
+    set args "--extract-symbol $testfile $copyfile"
+    set exec_output [run_host_cmd $objcopy $args]
+    if ![string equal "" $exec_output] {
+       fail $testname
+       return
+    }
+
+    set orig_syms [run_host_cmd $nm $testfile]
+    set extract_syms [run_host_cmd $nm $copyfile]
+    if ![string equal $orig_syms $extract_syms] {
+       fail $testname
+       return
+    }
+
+    set exec_output [run_host_cmd $size $copyfile]
+    if ![regexp ".* 0\[         \]+0\[  \]+0\[  \]+0\[  \]+0\[  \]+.*" $exec_output] {
+       fail $testname
+       return
+    }
+
+    pass $testname
+}
+
 # PE targets need to set the image base to 0 to avoid complications from nm.
 set flags ""
 if {[istarget "*-*-pe*"] \
@@ -143,8 +172,10 @@ if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir
 set testname "MEMORY with symbols"
 if ![ld_simple_link $ld tmpdir/script "$flags -defsym DATA_ORIGIN=0x1000 -defsym DATA_LENGTH=0x10000 -T $srcdir/$subdir/memory_sym.t tmpdir/script.o"] {
     fail $testname
+    untested "extract symbols"
 } else {
     check_script
+    extract_symbol_test tmpdir/script "extract symbols"
 }
 
 set test_script_list [lsort [glob $srcdir/$subdir/region-alias-*.t]]