#   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
#   2004, 2006, 2007, 2009, 2010, 2011
#   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
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

# Please email any bugs, comments, and/or additions to this file to:
# bug-dejagnu@prep.ai.mit.edu

# Written by Ian Lance Taylor <ian@cygnus.com>

if ![is_remote host] {
    if {[which $OBJCOPY] == 0} then {
        perror "$OBJCOPY does not exist"
        return
    }
}

send_user "Version [binutil_version $OBJCOPY]"

if ![is_remote host] {
    set tempfile tmpdir/bintest.o
    set copyfile tmpdir/copy
} else {
    set tempfile [remote_download host tmpdir/bintest.o]
    set copyfile copy
}

# Test that objcopy does not modify a file when copying it.

proc objcopy_test {testname srcfile} {
    global OBJCOPY
    global OBJCOPYFLAGS
    global srcdir
    global subdir
    global tempfile
    global copyfile

    if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
 	perror "unresolved $testname"
	unresolved "objcopy ($testname)"
	return
    }

    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS $tempfile ${copyfile}.o"]

    if ![string match "" $got] then {
	fail "objcopy ($testname)"
    } else {
	send_log "cmp $tempfile ${copyfile}.o\n"
	verbose "cmp $tempfile ${copyfile}.o"
	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
	} else {
	    set src1 ${tempfile}
	    set src2 ${copyfile}.o
	}
	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.
	# Usually this is just because gas isn't using bfd to write the
	# files in the first place, and may order things a little
	# differently. Those systems should use setup_xfail here.

	setup_xfail "h8300-*-coff"
	setup_xfail "h8500-*-rtems*" "h8500-*-coff"
	setup_xfail "hppa*-*-*"
	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*"
	setup_xfail "tic80-*-*" "w65-*"

	clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
	clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*"
	clear_xfail "m68*-*-sysv4*"

	if [string match "" $exec_output] then {
	    pass "objcopy ($testname)"
	} else {
	    send_log "$exec_output\n"
	    verbose "$exec_output" 1

	    # On OSF/1, this succeeds with gas and fails with /bin/as.
	    setup_xfail "alpha*-*-osf*"

	    fail "objcopy ($testname)"
	}
    }
}

objcopy_test "simple copy" bintest.s

# Test reversing bytes in a section.

set reversed ${tempfile}-reversed
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j .data --reverse-bytes=4 $tempfile $reversed"]

if ![string match "" $got] then {
    fail "objcopy --reverse-bytes"
} else {
    if [is_remote host] {
        remote_upload host ${reversed} tmpdir/copy-reversed.o
        set reversed tmpdir/copy-reversed.o
    }

    set origdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $tempfile"]
    set revdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $reversed"]

    set want "^ \[0-9\]+ (\[0-9\]+)"
    set found_orig [regexp -lineanchor $want $origdata -> origdata]
    set found_rev [regexp -lineanchor $want $revdata -> revdata]

    if {$found_orig == 0 || $found_rev == 0} then {
	# som doesn't have a .data section
	setup_xfail "hppa*-*-hpux*"
	clear_xfail "hppa*64*-*-hpux*"

        fail "objcopy --reverse-bytes"
    } else {
        scan $origdata "%2x%2x%2x%2x" b1 b2 b3 b4
        scan $revdata "%2x%2x%2x%2x" c4 c3 c2 c1

        if {$b1 == $c1 && $b2 == $c2 && $b3 == $c3 && $b4 == $c4} then {
            pass "objcopy --reverse-bytes"
        } else {
            fail "objcopy --reverse-bytes"
        }
    }
}

# Test interleaved copy of multiple byte width

set sequence_file sequence_file
set file [open ${sequence_file} w]
puts ${file} "12345678"
close ${file}

if [is_remote host] {
    remote_upload host ${sequence_file} tmpdir/sequence_file
    set sequence_file tmpdir/sequence_file
}

set got [binutils_run $OBJCOPY "-I binary -i 4 -b 0 --interleave-width 2 ${sequence_file} ${copyfile}"]

if ![string match "" $got] then {
    fail "objcopy -i --interleave-width"
} else {
    if [is_remote host] {
	remote_upload host ${copyfile} tmpdir/interleave_output
	set interleave_output tmpdir/interleave_output
    } else {
	set interleave_output ${copyfile}
    }

    set file [open ${interleave_output} r]
    gets $file line
    send_log "$line\n"
    verbose $line

    if ![string match "1256" $line] then {
	fail "objcopy -i --interleave-width"
    }
    pass "objcopy -i --interleave-width"

    close $file
}

# Test generating S records.

# We make the srec filename 8.3 compatible. Note that the header string
# matched against depends on the name of the file. Ugh.

if [is_remote host] {
    set srecfile copy.sre
    set header_string S00B0000636F70792E737265C1
} else {
    set srecfile ${copyfile}.srec
    set header_string S0130000746D706469722F636F70792E7372656397
}

set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${srecfile}"]

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
    }
    set file [open ${srecfile} r]

    # The first S record is fixed by the file name we are using.
    gets $file line
    send_log "$line\n"
    verbose $line
    if ![regexp "$header_string.*" $line] {
	send_log "bad header\n"
	fail "objcopy -O srec"
    } else {
	while {[gets $file line] != -1 \
	       && [regexp "^S\[123\]\[0-9a-fA-F\]+\[\r\n\]*$" $line]} {
	    send_log "$line\n"
	    verbose $line
	    set line "**EOF**"
	}
	send_log "$line\n"
	verbose $line
	if ![regexp "^S\[789\]\[0-9a-fA-F\]+\[\r\n\]*$" $line] then {
	    send_log "bad trailer\n"
	    fail "objcopy -O srec"
	} else {
	    if {[gets $file line] != -1} then {
		send_log "garbage at end\n"
		send_log "$line\n"
		verbose $line
		fail "objcopy -O srec"
	    } else {
		set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${srecfile}"]
		if ![regexp "file format srec" $got] then {
		    send_log "objdump failed\n"
		    fail "objcopy -O srec"
		} else {
		    pass "objcopy -O srec"
		}
	    }
	}
    }

    close $file
}

# Test setting and adjusting the start address.  We only test this
# while generating S records, because we may not be able to set the
# start address for other object file formats, and the S record case
# is the only useful one anyhow.

set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f $tempfile"]
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 --set-start 0x7654 $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
	fail "objcopy --set-start"
    } else {
	set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
	if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
	    fail "objcopy --set-start"
	} else {
	    if {$srecstart != 0x7654} then {
		send_log "$srecstart != 0x7654\n"
		fail "objcopy --set-start"
	    } else {
		pass "objcopy --set-start"
	    }
	}
    }

    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-start 0x123 $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
	fail "objcopy --adjust-start"
    } else {
	set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
	if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
	    fail "objcopy --adjust-start"
	} else {
	    if {$srecstart != $origstart + 0x123} then {
		send_log "$srecstart != $origstart + 0x123\n"
		fail "objcopy --adjust-start"
	    } else {
		pass "objcopy --adjust-start"
	    }
	}
    }
}

# Test adjusting the overall VMA, and adjusting the VMA of a
# particular section.  We again only test this when generating S
# records.

set low ""
set lowname ""

set headers [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h $tempfile"]

set headers_regexp "\[ 	0-9\]+(\[^ 	\]+)\[ 	\]*(\[0-9a-fA-F\]+)\[ 	\]+\[0-9a-fA-F\]+\[ 	\]+(\[0-9a-fA-F\]+)\[ 	\]+\[0-9a-fA-F\]+\[ 	\]+2\[*\]\[*\]\[0-9\]+(.*)"

set got $headers
while {[regexp $headers_regexp $got all name size vma rest]} {
    set vma 0x$vma
    set size 0x$size
    if {$size != 0} {
	if {$low == "" || $vma < $low} {
            set low $vma
	    set lowname $name
	}
    }
    set got $rest
}

if {$low == "" || $origstart == ""} then {
    perror "objdump can not recognize bintest.o"
} else {
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-vma 0x123 $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
        fail "objcopy --adjust-vma"
    } else {
	set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -fh ${copyfile}.srec"]
	set want "file format srec.*start address\[ 	\]*(\[0-9a-fA-FxX\]+).*sec1\[ 	\]+\[0-9a-fA-F\]+\[ 	\]+(\[0-9a-fA-F\]+)"
	if ![regexp $want $got all start vma] then {
	    fail "objcopy --adjust-vma"
	} else {
	    set vma 0x$vma
	    if {$vma != $low + 0x123} then {
		send_log "$vma != $low + 0x123\n"
		fail "objcopy --adjust-vma"
	    } else {
		if {$start != $origstart + 0x123} then {
		    send_log "$start != $origstart + 0x123\n"
		    fail "objcopy --adjust-vma"
		} else {
		    pass "objcopy --adjust-vma"
		}
	    }
	}
    }

    set arg ""
    set got $headers
    while {[regexp $headers_regexp $got all name size vma rest]} {
	set vma 0x$vma
	if {$vma == $low} then {
	    set arg "$arg --adjust-section-vma $name+4"
	}
	set got $rest
    }

    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $arg $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
	fail "objcopy --adjust-section-vma +"
    } else {
	set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
	set want "file format srec.*sec1\[ 	\]+\[0-9a-fA-F\]+\[ 	\]+(\[0-9a-fA-F\]+)"
	if ![regexp $want $got all vma] then {
	    fail "objcopy --adjust-section-vma +"
	} else {
	    set vma 0x$vma
	    if {$vma != $low + 4} then {
		send_log "$vma != $low + 4\n"
		fail "objcopy --adjust-section-vma +"
	    } else {
		pass "objcopy --adjust-section-vma +"
	    }
	}
    }

    regsub -all "\\+4" $arg "=[expr $low + 4]" argeq
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $argeq $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
	fail "objcopy --adjust-section-vma ="
    } else {
	set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
	set want "file format srec.*sec1\[ 	\]+\[0-9a-fA-F\]+\[ 	\]+(\[0-9a-fA-F\]+)"
	if ![regexp $want $got all vma] then {
	    fail "objcopy --adjust-section-vma ="
	} else {
	    set vma 0x$vma
	    if {$vma != $low + 4} then {
		send_log "$vma != $low + 4\n"
		fail "objcopy --adjust-section-vma ="
	    } else {
		pass "objcopy --adjust-section-vma ="
	    }
	}
    }
}

# Test stripping an object.

proc strip_test { } {
    global AR
    global CC
    global STRIP
    global STRIPFLAGS
    global NM
    global NMFLAGS
    global srcdir
    global subdir
    global READELF

    set test "strip"

    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
	untested $test
	return
    }

    set osabi_fail "false"
    if [is_elf_format] {
	verbose -log "$READELF -a tmpdir/testprog.o > tmpdir/osabi.in"
	set exec_output [remote_exec host "$READELF -h tmpdir/testprog.o" "" "/dev/null" "tmpdir/osabi.in"]
	if { [lindex $exec_output 0] != 0 } then {
	    unresolved "$test preserving OS/ABI"	
	    set osabi_fail "true"
	} else {
	    verbose -log "grep OS/ABI tmpdir/osabi.in"
	    catch "exec grep OS/ABI tmpdir/osabi.in" osabi_in
	}
    }

    if [is_remote host] {
	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
	unresolved "$test preserving OS/ABI"	
	return
    }

    set exec_output [binutils_run $STRIP "-g $archive"]
    if ![string match "" $exec_output] {
	fail $test
	unresolved "$test preserving OS/ABI"	
	return
    }

    set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
    if ![string match "" $exec_output] {
	fail $test
	unresolved "$test preserving OS/ABI"	
	return
    }

    if { $osabi_fail != "true" && [is_elf_format] } {
	verbose -log "$READELF -a tmpdir/testprog.o > tmpdir/osabi.out"
	set exec_output [remote_exec host "$READELF -h tmpdir/testprog.o" "" "/dev/null" "tmpdir/osabi.out"]
	if { [lindex $exec_output 0] != 0 } then {
	    unresolved "$test preserving OS/ABI"	
	} else {
	    verbose -log "grep OS/ABI tmpdir/osabi.out"
	    catch "exec grep OS/ABI tmpdir/osabi.out" osabi_out
	    if { "$osabi_in" == "$osabi_out" } {
		pass "$test preserving OS/ABI"
	    } else {
		fail "$test preserving OS/ABI"
	    }
	}
    }

    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
    }

    set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"]
    if ![string match "" $exec_output] {
	fail $test
	return
    }

    set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"]
    if ![string match "*: no symbols*" $exec_output] {
	fail $test
	return
    }

    pass $test
}

strip_test

# Test stripping an object file with saving a symbol

proc strip_test_with_saving_a_symbol { } {
    global CC
    global STRIP
    global STRIPFLAGS
    global NM
    global NMFLAGS
    global srcdir
    global subdir

    set test "strip with saving a symbol"

    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
    }

    set exec_output [binutils_run $STRIP "$STRIPFLAGS -K main -K _main $objfile"]
    if ![string match "" $exec_output] {
	fail $test
	return
    }

    set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
         && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
	fail $test
	return
    }

    pass $test
}

strip_test_with_saving_a_symbol

# Build a final executable.

if { [istarget *-*-cygwin] || [istarget *-*-mingw*] } {
    set test_prog "testprog.exe"
} else {
    set test_prog "testprog"
}

proc copy_setup { } {
    global srcdir
    global subdir
    global gcc_gas_flag
    global test_prog
    global host_triplet
    
    set res [build_wrapper testglue.o]
    set flags { debug }
    
    if { [istarget *-*-uclinux*] && ![istarget tic6x-*-*] } {
	return 1
    }
    
    if { $res != "" } {
	lappend flags "additional_flags=[lindex $res 1]"
	set add_libs "testglue.o"
    } else {
	set add_libs ""
    }

    if { [istarget *-*-linux*]
	 || [istarget *-*-gnu*] } {
	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/$test_prog]
    set status [lindex $result 0]

    if { $status != "pass"  } {
	send_log "cannot run executable, status = ${status} on ${host_triplet}\n"
	if { [istarget $host_triplet] } {
	  return 3
	}
      set status "pass"
    }

    return 0
}

# Test copying an executable.

proc copy_executable { prog flags test1 test2 } {
    global test_prog
    global host_triplet

    if [is_remote host] {
	set testfile [remote_download host tmpdir/$test_prog]
	set testcopy copyprog
    } else {
	set testfile tmpdir/$test_prog
	set testcopy tmpdir/copyprog
    }
    remote_file host delete $testcopy

    set exec_output [binutils_run $prog "$flags $testfile $testcopy"]

    if ![string match "" $exec_output] {
	fail $test1
	if [string match "" $test2] {
	    return
	}
	fail $test2
	return
    }

    if [is_remote host] {
	remote_upload host $testcopy tmpdir/copyprog
    }

    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
    } else {
	send_log "$exec_output\n"
	verbose "$exec_output"

	# This will fail for many reasons.  For example, it will most
	# likely fail if a non-GNU linker is used.  Therefore, we do
	# not insist that it pass.  If you are using an assembler and
	# linker based on the same BFD as objcopy, it is worth
	# investigating to see why this failure occurs.  If we are
	# cross compiling, we assume that a GNU linker is being used,
	# and expect it to succeed.
	if {[isnative]} then {
	    setup_xfail "*-*-*"
	}

	# This also fails for mips*-*-elf targets.  See elf32-mips.c
	# mips_elf_sym_is_global.
	setup_xfail "mips*-*-elf"

	setup_xfail "arm*-*-coff"
	setup_xfail "arm*-*-pe"
	setup_xfail "*-*-mingw*"
	setup_xfail "*-*-cygwin*"
    
	fail $test1
    }

    if [string match "" $test2] {
	return
    }

    set output [remote_load target tmpdir/copyprog]
    set status [lindex $output 0]
    if { ![istarget $host_triplet] } {
      set status "pass"
    }
    if { $status != "pass" } {
	fail $test2
    } else {
	pass $test2
    }
}

# Test stripping an executable

proc strip_executable { prog flags test } {
    global NM
    global NMFLAGS
    global READELF
    global host_triplet

    remote_file build delete tmpdir/striprog
    remote_download build tmpdir/copyprog tmpdir/striprog
    if [is_remote host] {
	set copyfile [remote_download host tmpdir/striprog]
    } else {
	set copyfile tmpdir/striprog
    }

    set osabi_fail "false"
    if [is_elf_format] {
	verbose -log "$READELF -a ${copyfile} > tmpdir/osabi.in"
	set exec_output [remote_exec host "$READELF -h ${copyfile}" "" "/dev/null" "tmpdir/osabi.in"]
	if { [lindex $exec_output 0] != 0 } then {
	    unresolved "$test preserving OS/ABI"	
	    set osabi_fail "true"
	} else {
	    verbose -log "grep OS/ABI tmpdir/osabi.in"
	    catch "exec grep OS/ABI tmpdir/osabi.in" osabi_in
	}
     }

    set exec_output [binutils_run $prog "$flags ${copyfile}"]
    if ![string match "" $exec_output] {
	fail $test
	return
    }

    if [is_remote host] {
	remote_upload host ${copyfile} tmpdir/striprog
    }

    set result [remote_load target tmpdir/striprog]
    set status [lindex $result 0]
    if { ![istarget $host_triplet] } {
      set status "pass"
    }
    if { $status != "pass" } {
	fail $test
        return
    }

    if { $osabi_fail != "true" && [is_elf_format] } {
	verbose -log "$READELF -a ${copyfile} > tmpdir/osabi.out"
	set exec_output [remote_exec host "$READELF -h ${copyfile}" "" "/dev/null" "tmpdir/osabi.out"]
	if { [lindex $exec_output 0] != 0 } then {
	    unresolved "$test preserving OS/ABI"	
	} else {
	    verbose -log "grep OS/ABI tmpdir/osabi.out"
	    catch "exec grep OS/ABI tmpdir/osabi.out" osabi_out
	    if { "$osabi_in" == "$osabi_out" } {
		pass "$test preserving OS/ABI"
	    } else {
		fail "$test preserving OS/ABI"
	    }
	}
    }

    set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
    if ![string match "*: no symbols*" $exec_output] {
	fail $test
	return
    }
    pass $test
}

# Test stripping an executable with saving a symbol

proc strip_executable_with_saving_a_symbol { prog flags test } {
    global NM
    global NMFLAGS
    global host_triplet

    remote_file build delete tmpdir/striprog
    remote_download build tmpdir/copyprog tmpdir/striprog
    if [is_remote host] {
	set copyfile [remote_download host tmpdir/striprog]
    } else {
	set copyfile tmpdir/striprog
    }

    set exec_output [binutils_run $prog "$flags ${copyfile}"]
    if ![string match "" $exec_output] {
	fail $test
	return
    }

    if [is_remote host] {
	remote_upload host ${copyfile} tmpdir/striprog
    }

    set result [remote_load target tmpdir/striprog]
    set status [lindex $result 0]
    if { ![istarget $host_triplet] } {
      set status "pass"
    }
    if { $status != "pass" } {
	fail $test
        return
    }

    set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
    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
    }
    pass $test
}

# Test keeping only debug symbols of an executable

proc keep_debug_symbols_and_test_copy { prog1 flags1 test1 prog2 flags2 test2 } {
    global NM
    global NMFLAGS

    remote_file build delete tmpdir/striprog
    remote_download build tmpdir/copyprog tmpdir/striprog
    if [is_remote host] {
	set copyfile [remote_download host tmpdir/striprog]
    } else {
	set copyfile tmpdir/striprog
    }

    set exec_output [binutils_run $prog1 "$flags1 ${copyfile}"]
    if ![string match "" $exec_output] {
	fail $test1
	return
    }
    pass $test1

    set exec_output [binutils_run $prog2 "$flags2 ${copyfile}"]
    if ![string match "" $exec_output] {
	fail $test2
	return
    }
    pass $test2
}

set test1 "simple objcopy of executable"
set test2 "run objcopy of executable"
set test3 "run stripped executable"
set test4 "run stripped executable with saving a symbol"
set test5 "keep only debug data"
set test6 "simple objcopy of debug data"

switch [copy_setup] {
    "1" {
	# do nothing
    }
    "2" {
	untested $test1
	untested $test2
	untested $test3
	untested $test4
	untested $test5
	untested $test6
    }
    "3" {
	copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" ""
	unsupported $test2
	unsupported $test3
	unsupported $test4
	unsupported $test5
	unsupported $test6
    }
    "0" {
	copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "$test2"
	strip_executable "$STRIP" "$STRIPFLAGS" "$test3"
	strip_executable_with_saving_a_symbol "$STRIP" "-K main -K _main $STRIPFLAGS" "$test4"
	keep_debug_symbols_and_test_copy "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test5" \
					 "$OBJCOPY" "$OBJCOPYFLAGS" "$test6"
    }
}

proc objcopy_test_readelf {testname srcfile} {
    global OBJCOPY
    global OBJCOPYFLAGS
    global READELF
    global srcdir
    global subdir

    if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
	unresolved "objcopy ($testname)"
	return
    }

    verbose -log "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"
    set exec_output [remote_exec host "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"]
    if { [lindex $exec_output 0] != 0
	 || ![string match "" [lindex $exec_output 1]] } then {
	fail "objcopy ($testname)"
	return
    }

    verbose -log "$READELF -a tmpdir/bintest.o > tmpdir/bintest.o.out"
    set exec_output [remote_exec host "$READELF -a tmpdir/bintest.o" "" "/dev/null" "tmpdir/bintest.o.out"]
    if { [lindex $exec_output 0] != 0 } then {
	unresolved "objcopy ($testname)"
	return
    }
    set exec_output [prune_warnings [lindex $exec_output 1]]
    if ![string match "" $exec_output] then {
	unresolved "objcopy ($testname)"
	return
    }

    verbose -log "$READELF -a tmpdir/copy.o > tmpdir/copy.o.out"
    set exec_output [remote_exec host "$READELF -a tmpdir/copy.o" "" "/dev/null" "tmpdir/copy.o.out"]
    if { [lindex $exec_output 0] != 0 } then {
	unresolved "objcopy ($testname)"
	return
    }
    set exec_output [prune_warnings [lindex $exec_output 1]]
    if ![string match "" $exec_output] then {
	unresolved "objcopy ($testname)"
	return
    }

    verbose -log "diff tmpdir/bintest.o.out tmpdir/copy.o.out"
    catch "exec diff tmpdir/bintest.o.out tmpdir/copy.o.out" exec_output
    set exec_output [prune_warnings $exec_output]

    if [string match "" $exec_output] then {
	pass "objcopy ($testname)"
    } else {
	fail "objcopy ($testname)"
    }
}

# ia64 specific tests
if { ([istarget "ia64-*-elf*"]
       || [istarget "ia64-*-linux*"]) } {
    objcopy_test "ia64 link order" link-order.s
}

# ELF specific tests
if [is_elf_format] {
    objcopy_test "ELF unknown section type" unknown.s
    objcopy_test_readelf "ELF group" group.s
    objcopy_test_readelf "ELF group" group-2.s
    objcopy_test_readelf "ELF group" group-3.s
    objcopy_test_readelf "ELF group" group-4.s
    run_dump_test "group-5"
    run_dump_test "group-6"
    run_dump_test "copy-1"
    run_dump_test "note-1"
}

run_dump_test "copy-2"
run_dump_test "copy-3"
run_dump_test "copy-4"

if [is_elf_format] {
    run_dump_test "strip-1"
    run_dump_test "strip-2"
    run_dump_test "strip-3"
    run_dump_test "strip-4"
    run_dump_test "strip-5"
    run_dump_test "strip-6"
    run_dump_test "strip-7"
    run_dump_test "strip-8"
    run_dump_test "strip-9"
    if { ![istarget "*-*-hpux*"]
	 && ![istarget "msp*-*-*"] } {
	run_dump_test "strip-10"
    }

    if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } {
	# Check to make sure we don't strip a symbol named in relocations.
	set test "objcopy keeps symbols needed by relocs"

	set srcfile $srcdir/$subdir/needed-by-reloc.s

	if {![binutils_assemble $srcfile tmpdir/bintest.o]} then {
	    unresolved $test
	} else {
	    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-symbol=foo tmpdir/bintest.o ${copyfile}.o"]

	    if [regexp "not stripping symbol `foo' because it is named in a relocation" $got] {
		pass $test
	    } else {
		fail $test
	    }
	}
    }

    run_dump_test "localize-hidden-1"
    run_dump_test "testranges"
    run_dump_test "testranges-ia64"

    run_dump_test "add-section"
    run_dump_test "add-empty-section"

    run_dump_test "exclude-1a"
    run_dump_test "exclude-1b"
}
run_dump_test "localize-hidden-2"
