* binutils-all/ar.exp: Remove stray semicolons.
[deliverable/binutils-gdb.git] / binutils / testsuite / binutils-all / objcopy.exp
index 33a159febeabcc7e83ab892726b942b4e744c14e..e210f3c2cd0b1a14a4daedf592ae23b30ae736c9 100644 (file)
@@ -1,4 +1,5 @@
-#   Copyright (C) 1994, 95, 96, 97, 1998 Free Software Foundation, Inc.
+#   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+#   Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -35,8 +36,8 @@ if {![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o]} then {
 }
 
 if ![is_remote host] {
-    set tempfile tmpdir/bintest.o;
-    set copyfile tmpdir/copy;
+    set tempfile tmpdir/bintest.o
+    set copyfile tmpdir/copy
 } else {
     set tempfile [remote_download host tmpdir/bintest.o]
     set copyfile copy
@@ -54,14 +55,14 @@ if ![string match "" $got] then {
     if [is_remote host] {
        set src1 tmpdir/bintest.o
        set src2 tmpdir/copy.o
-       remote_upload host $tempfile $src1;
-       remote_upload host ${copyfile}.o $src2;
+       remote_upload host $tempfile $src1
+       remote_upload host ${copyfile}.o $src2
     } else {
        set src1 ${tempfile}
        set src2 ${copyfile}.o
     }
-    set status [remote_exec build cmp "${src1} ${src2}"];
-    set exec_output [lindex $status 1];
+    set status [remote_exec build cmp "${src1} ${src2}"]
+    set exec_output [lindex $status 1]
     set exec_output [prune_warnings $exec_output]
 
     # On some systems the result of objcopy will not be identical.
@@ -69,20 +70,20 @@ if ![string match "" $got] then {
     # in the first place, and may order things a little differently.
     # Those systems should use setup_xfail here.
 
-    setup_xfail "sh-*-coff" "sh-*-hms" 
-    setup_xfail "m68*-*-hpux*" "m68*-*-sunos*" "m68*-*-coff" "m68*-*-vxworks*"
-    setup_xfail "m68*-ericsson-ose" "m68k*-motorola-sysv*"
-    setup_xfail "i*86-*-linuxaout*" "i*86-*-aout*"
-    setup_xfail "i*86-*-sysv3" "i*86-*-isc*" "i*86-*-sco*" "i*86-*-coff"
-    setup_xfail "i*86-*-aix*" "i*86-*-go32*" "i*86-*-msdos*"
-    setup_xfail "a29k-*-udi" "a29k-*-coff" "a29k-*-vxworks*"
-    setup_xfail "i960-*-coff"
-    setup_xfail "h8300-*-hms" "h8300-*-coff"
-    setup_xfail "h8500-*-hms" "h8500-*-coff"
+    setup_xfail "a29k-*"
+    setup_xfail "h8300-*-rtems*" "h8300-*-coff"
+    setup_xfail "h8500-*-rtems*" "h8500-*-coff"
     setup_xfail "hppa*-*-*"
-    clear_xfail "hppa*-*-*elf*"
-    setup_xfail "m88*-*-coff" "m88*-motorola-sysv*"
-    setup_xfail "z8*-*-coff"
+    setup_xfail "i960-*"
+    setup_xfail "m68*-*-*coff" "m68*-*-hpux*" "m68*-*-lynxos*"
+    setup_xfail "m68*-*-sysv*" "m68*-apple-aux*"
+    setup_xfail "m8*-*"
+    setup_xfail "or32-*-rtems*" "or32-*-coff"
+    setup_xfail "sh-*-coff*" "sh-*-rtems*" 
+    setup_xfail "tic4x-*-*" "tic80-*-*" "w65-*" "z8*-*"
+
+    clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
+    clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*" "m68*-*-sysv4*"
 
     if [string match "" $exec_output] then {
        pass "objcopy (simple copy)"
@@ -119,8 +120,8 @@ if ![string match "" $got] then {
     fail "objcopy -O srec"
 } else {
     if [is_remote host] {
-       remote_upload host ${srecfile} tmpdir/copy.srec;
-       set srecfile tmpdir/copy.srec;
+       remote_upload host ${srecfile} tmpdir/copy.srec
+       set srecfile tmpdir/copy.srec
     }
     set file [open ${srecfile} r]
 
@@ -174,7 +175,7 @@ if ![regexp "start address (\[0-9a-fA-FxX\]+)" $got all origstart] then {
     perror "objdump can not recognize bintest.o"
     set origstart ""
 } else {
-    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${copyfile}.srec --set-start 0x7654"]
+    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --set-start 0x7654 $tempfile ${copyfile}.srec"]
     if ![string match "" $got] then {
        fail "objcopy --set-start"
     } else {
@@ -191,7 +192,7 @@ if ![regexp "start address (\[0-9a-fA-FxX\]+)" $got all origstart] then {
        }
     }
 
-    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${copyfile}.srec --adjust-start 0x123"]
+    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-start 0x123 $tempfile ${copyfile}.srec"]
     if ![string match "" $got] then {
        fail "objcopy --adjust-start"
     } else {
@@ -236,7 +237,7 @@ while {[regexp $headers_regexp $got all name size vma rest]} {
 if {$low == "" || $origstart == ""} then {
     perror "objdump can not recognize bintest.o"
 } else {
-    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${copyfile}.srec --adjust-vma 0x123"]
+    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-vma 0x123 $tempfile ${copyfile}.srec"]
     if ![string match "" $got] then {
         fail "objcopy --adjust-vma"
     } else {
@@ -270,7 +271,7 @@ if {$low == "" || $origstart == ""} then {
        set got $rest
     }
 
-    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${copyfile}.srec $arg"]
+    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $arg $tempfile ${copyfile}.srec"]
     if ![string match "" $got] then {
        fail "objcopy --adjust-section-vma +"
     } else {
@@ -290,7 +291,7 @@ if {$low == "" || $origstart == ""} then {
     }
 
     regsub -all "\\+4" $arg "=[expr $low + 4]" argeq
-    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${copyfile}.srec $argeq"]
+    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $argeq $tempfile ${copyfile}.srec"]
     if ![string match "" $got] then {
        fail "objcopy --adjust-section-vma ="
     } else {
@@ -313,6 +314,7 @@ if {$low == "" || $origstart == ""} then {
 # Test stripping an object.
 
 proc strip_test { } {
+    global AR
     global CC
     global STRIP
     global STRIPFLAGS
@@ -329,7 +331,35 @@ proc strip_test { } {
     }
 
     if [is_remote host] {
-       set objfile [remote_download host tmpdir/testprog.o];
+       set archive libstrip.a
+       set objfile [remote_download host tmpdir/testprog.o]
+       remote_file host delete $archive
+    } else {
+       set archive tmpdir/libstrip.a
+       set objfile tmpdir/testprog.o
+    }
+
+    remote_file build delete tmpdir/libstrip.a
+
+    set exec_output [binutils_run $AR "rc $archive ${objfile}"]
+    if ![string match "" $exec_output] {
+       fail $test
+       return
+    }
+
+    set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
+    if ![string match "" $exec_output] {
+       fail $test
+       return
+    }
+
+    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
+       untested $test
+       return
+    }
+
+    if [is_remote host] {
+       set objfile [remote_download host tmpdir/testprog.o]
     } else {
        set objfile tmpdir/testprog.o
     }
@@ -370,7 +400,7 @@ proc strip_test_with_saving_a_symbol { } {
     }
 
     if [is_remote host] {
-       set objfile [remote_download host tmpdir/testprog.o];
+       set objfile [remote_download host tmpdir/testprog.o]
     } else {
        set objfile tmpdir/testprog.o
     }
@@ -382,7 +412,7 @@ proc strip_test_with_saving_a_symbol { } {
     }
 
     set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
-    if {![regexp {^([0-9a-fA-F]+)?[ ]+T main} $exec_output] \
+    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
          && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
        fail $test
        return
@@ -395,26 +425,39 @@ strip_test_with_saving_a_symbol
 
 # Build a final executable.
 
+if { [istarget *-*-cygwin] || [istarget *-*-mingw32] } {
+    set test_prog "testprog.exe"
+} else {
+    set test_prog "testprog"
+}
+
 proc copy_setup { } {
     global srcdir
     global subdir
+    global gcc_gas_flag
+    global test_prog
     
-    set res [build_wrapper testglue.o];
-    set flags { debug };
+    set res [build_wrapper testglue.o]
+    set flags { debug }
     
     if { $res != "" } {
-       lappend flags "additional_flags=[lindex $res 1]";
-       set add_libs "testglue.o";
+       lappend flags "additional_flags=[lindex $res 1]"
+       set add_libs "testglue.o"
     } else {
-       set add_libs "";
+       set add_libs ""
     }
 
-    if { [target_compile "$srcdir/$subdir/testprog.c $add_libs" tmpdir/testprog executable $flags]  != "" } {
+    if { [istarget *-*-linux*] } {
+       foreach i $gcc_gas_flag {
+           set flags "additional_flags=$i $flags"
+       }
+    }
+    if { [target_compile "$srcdir/$subdir/testprog.c $add_libs" tmpdir/$test_prog executable $flags]  != "" } {
        return 2
     }
 
-    set result [remote_load target tmpdir/testprog];
-    set status [lindex $result 0];
+    set result [remote_load target tmpdir/$test_prog]
+    set status [lindex $result 0]
 
     if { $status != "pass"  } {
        perror "unresolved setup, status = $status"
@@ -427,15 +470,16 @@ proc copy_setup { } {
 # Test copying an executable.
 
 proc copy_executable { prog flags test1 test2 } {
+    global test_prog
 
     if [is_remote host] {
-       set testfile [remote_download host tmpdir/testprog];
+       set testfile [remote_download host tmpdir/$test_prog]
        set testcopy copyprog
     } else {
-       set testfile tmpdir/testprog
+       set testfile tmpdir/$test_prog
        set testcopy tmpdir/copyprog
     }
-    remote_file host delete $testcopy;
+    remote_file host delete $testcopy
 
     set exec_output [binutils_run $prog "$flags $testfile $testcopy"]
 
@@ -449,8 +493,8 @@ proc copy_executable { prog flags test1 test2 } {
        remote_upload host $testcopy tmpdir/copyprog
     }
 
-    set status [remote_exec build "cmp" "tmpdir/testprog tmpdir/copyprog"]
-    set exec_output [lindex $status 1];
+    set status [remote_exec build "cmp" "tmpdir/$test_prog tmpdir/copyprog"]
+    set exec_output [lindex $status 1]
 
     if [string match "" $exec_output] then {
        pass $test1
@@ -473,11 +517,17 @@ proc copy_executable { prog flags test1 test2 } {
        # mips_elf_sym_is_global.
        setup_xfail "mips*-*-elf"
 
+       setup_xfail "*arm*-*-coff"
+       setup_xfail "xscale-*-coff"
+       setup_xfail "arm*-*-pe"
+       setup_xfail "thumb*-*-coff"
+       setup_xfail "thumb*-*-pe"
+    
        fail $test1
     }
 
     set output [remote_load target tmpdir/copyprog]
-    set status [lindex $output 0];
+    set status [lindex $output 0]
     if { $status != "pass" } {
        fail $test2
     } else {
@@ -493,7 +543,7 @@ proc strip_executable { prog flags test } {
 
     remote_download build tmpdir/copyprog tmpdir/striprog
     if [is_remote host] {
-       set copyfile [remote_download host tmpdir/striprog];
+       set copyfile [remote_download host tmpdir/striprog]
     } else {
        set copyfile tmpdir/striprog
     }
@@ -505,11 +555,11 @@ proc strip_executable { prog flags test } {
     }
 
     if [is_remote host] {
-       remote_upload host ${copyfile} tmpdir/striprog;
+       remote_upload host ${copyfile} tmpdir/striprog
     }
 
     set result [remote_load target tmpdir/striprog]
-    set status [lindex $result 0];
+    set status [lindex $result 0]
     if { $status != "pass" } {
        fail $test
         return
@@ -531,7 +581,7 @@ proc strip_executable_with_saving_a_symbol { prog flags test } {
 
     remote_download build tmpdir/copyprog tmpdir/striprog
     if [is_remote host] {
-       set copyfile [remote_download host tmpdir/striprog];
+       set copyfile [remote_download host tmpdir/striprog]
     } else {
        set copyfile tmpdir/striprog
     }
@@ -543,19 +593,28 @@ proc strip_executable_with_saving_a_symbol { prog flags test } {
     }
 
     if [is_remote host] {
-       remote_upload host ${copyfile} tmpdir/striprog;
+       remote_upload host ${copyfile} tmpdir/striprog
     }
 
     set result [remote_load target tmpdir/striprog]
-    set status [lindex $result 0];
+    set status [lindex $result 0]
     if { $status != "pass" } {
        fail $test
         return
     }
 
     set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
-    if {![regexp {^[0-9a-fA-F]+ T main} $exec_output] \
-         && ![regexp {^[0-9a-fA-F]+ T _main} $exec_output]} {
+    if { [istarget mmix-knuth-mmixware] } {
+       # Whenever there's a symbol in the mmo format, there's the symbol
+       # Main, so remove it manually from the expected output for sake of
+       # this test.
+
+       # Using "" not {} to get the \n and \r translated.
+       regsub "^\[0-9a-fA-F\]+\[ \]+T Main\[\n\r\]+" $exec_output "" exec_output
+    }
+
+    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
+         && ![regexp {^([0-9a-fA-F]+)?[ ]+[TD] _main} $exec_output]} {
        fail $test
        return
     }
This page took 0.035204 seconds and 4 git commands to generate.