* lib/ld-lib.exp (ld_simple_link_defsyms): New proc, adding
authorAlan Modra <amodra@gmail.com>
Thu, 1 Oct 2009 23:29:29 +0000 (23:29 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 1 Oct 2009 23:29:29 +0000 (23:29 +0000)
powerpc-*-rtems to code setting symbols, extracted from..
* ld-srec/srec.exp (run_srec_test): ..here.  Correct flags for sh64.
* ld-gc/gc.exp (test_gc): Use ld_simple_link_defsyms.

ld/testsuite/ChangeLog
ld/testsuite/ld-gc/gc.exp
ld/testsuite/ld-srec/srec.exp
ld/testsuite/lib/ld-lib.exp

index fa8ec9e..3fbd06f 100644 (file)
@@ -1,3 +1,10 @@
+2009-10-02  Alan Modra  <amodra@bigpond.net.au>
+
+       * lib/ld-lib.exp (ld_simple_link_defsyms): New proc, adding
+       powerpc-*-rtems to code setting symbols, extracted from..
+       * ld-srec/srec.exp (run_srec_test): ..here.  Correct flags for sh64.
+       * ld-gc/gc.exp (test_gc): Use ld_simple_link_defsyms.
+
 2009-10-01  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * ld-spu/icache1.d: Update to new section layout.
index 648f732..c85d4f2 100644 (file)
@@ -44,7 +44,8 @@ proc test_gc { testname filename linker ldflags} {
     }
 
     set outfile "tmpdir/$filename"
-    set options "-L$srcdir/$subdir $ldflags $objfile"
+    set options "-L$srcdir/$subdir"
+    append options " " $ldflags " " [ld_simple_link_defsyms] " " $objfile
 
     # SH64 targets needs an extra ld option for this test.
     if [istarget sh64*-*-*] {
index e5b5af3..0a3dc44 100644 (file)
@@ -229,9 +229,9 @@ proc run_srec_test { test objs } {
     global host_triplet
 
     # Tell the ELF linker to not do anything clever with .eh_frame,
-    # not to put anything in small data, and define a symbol referenced
-    # by gcc -fstack-protector code.
-    set flags "--traditional-format -G 0 --defsym __stack_chk_fail=0"
+    # not to put anything in small data, and define various symbols.
+    set flags "--traditional-format -G 0 "
+    append flags [ld_simple_link_defsyms]
 
     # If the linker script uses SIZEOF_HEADERS, use a -Ttext argument
     # to force both the normal link and the S-record link to be put in
@@ -244,7 +244,7 @@ proc run_srec_test { test objs } {
 
     if [istarget sh64*-*-elf] {
         # This is what gcc passes to ld by default.
-        set flags "-mshelf32"
+        set flags "$flags -mshelf32"
         # SH64 targets cannot convert format in the linker 
         # using the -oformat command line switch.
        setup_xfail "sh64*-*-*"
@@ -254,10 +254,6 @@ proc run_srec_test { test objs } {
         [istarget strongarm*-*-*] || \
         [istarget xscale*-*-*]    || \
         [istarget thumb-*-*] } {
-    
-        # ARM targets call __gccmain
-        set flags "$flags --defsym __gccmain=0"
-
         # ARM targets cannot convert format in the linker 
         # using the --oformat command line switch
        setup_xfail "*arm*-*-*"
@@ -265,23 +261,6 @@ proc run_srec_test { test objs } {
        setup_xfail "thumb-*-*"
     }
 
-    # PowerPC EABI code calls __eabi.
-    if [istarget powerpc*-*-eabi*] {
-       set flags "$flags --defsym __eabi=0"
-    }
-
-    # mn10200 code calls __truncsipsi2_d0_d2.
-    if {[istarget mn10200*-*-*]} then {
-       set flags "$flags --defsym __truncsipsi2_d0_d2=0"
-    }
-
-    # m6811/m6812 code has references to soft registers.
-    if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
-       set flags "$flags --defsym _.frame=0 --defsym _.d1=0 --defsym _.d2=0"
-       set flags "$flags --defsym _.d3=0 --defsym _.d4=0"
-       set flags "$flags --defsym _.tmp=0 --defsym _.xy=0 --defsym _.z=0"
-    }
-
     # V850 targets need libgcc.a
     if [istarget v850*-*-elf] {
        set objs "$objs -L ../gcc -lgcc"
@@ -292,13 +271,6 @@ proc run_srec_test { test objs } {
        set flags "$flags -no-relax"
     }
 
-    # Some OpenBSD targets have ProPolice and reference __guard and
-    # __stack_smash_handler.
-    if [istarget *-*-openbsd*] {
-       set flags "$flags --defsym __guard=0"
-       set flags "$flags --defsym __stack_smash_handler=0"
-    }
-
     if { ![ld_simple_link $ld tmpdir/sr1 "$flags $objs"] \
         || ![ld_simple_link $ld tmpdir/sr2.sr "$flags --oformat srec $objs"] } {
        fail $test
index c9d4f8c..a738747 100644 (file)
@@ -352,6 +352,47 @@ proc default_ld_nm { nm nmflags object } {
     }
 }
 
+# Define various symbols needed when not linking against all
+# target libs.
+proc ld_simple_link_defsyms {} {
+
+    set flags "--defsym __stack_chk_fail=0"
+
+    # ARM targets call __gccmain
+    if {[istarget arm*-*-*]       || \
+        [istarget strongarm*-*-*] || \
+        [istarget xscale*-*-*]    || \
+        [istarget thumb-*-*] } {
+        append flags " --defsym __gccmain=0"
+    }
+
+    # PowerPC EABI code calls __eabi.
+    if {[istarget powerpc*-*-eabi*] || [istarget powerpc*-*-rtems*]} {
+       append flags " --defsym __eabi=0"
+    }
+
+    # mn10200 code calls __truncsipsi2_d0_d2.
+    if {[istarget mn10200*-*-*]} then {
+       append flags " --defsym __truncsipsi2_d0_d2=0"
+    }
+
+    # m6811/m6812 code has references to soft registers.
+    if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
+       append flags " --defsym _.frame=0 --defsym _.d1=0 --defsym _.d2=0"
+       append flags " --defsym _.d3=0 --defsym _.d4=0"
+       append flags " --defsym _.tmp=0 --defsym _.xy=0 --defsym _.z=0"
+    }
+
+    # Some OpenBSD targets have ProPolice and reference __guard and
+    # __stack_smash_handler.
+    if [istarget *-*-openbsd*] {
+       append flags " --defsym __guard=0"
+       append flags " --defsym __stack_smash_handler=0"
+    }
+
+    return $flags
+}
+
 # True if the object format is known to be ELF.
 #
 proc is_elf_format {} {