OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.18.50/] [binutils/] [testsuite/] [binutils-all/] [objcopy.exp] - Diff between revs 38 and 156

Only display areas with differences | Details | Blame | View Log

Rev 38 Rev 156
#   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
#   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
#   2004, 2006, 2007
#   2004, 2006, 2007
#   Free Software Foundation, Inc.
#   Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# 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
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# (at your option) any later version.
#
#
# This program is distributed in the hope that it will be useful,
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
# Please email any bugs, comments, and/or additions to this file to:
# Please email any bugs, comments, and/or additions to this file to:
# bug-dejagnu@prep.ai.mit.edu
# bug-dejagnu@prep.ai.mit.edu
# Written by Ian Lance Taylor 
# Written by Ian Lance Taylor 
if ![is_remote host] {
if ![is_remote host] {
    if {[which $OBJCOPY] == 0} then {
    if {[which $OBJCOPY] == 0} then {
        perror "$OBJCOPY does not exist"
        perror "$OBJCOPY does not exist"
        return
        return
    }
    }
}
}
send_user "Version [binutil_version $OBJCOPY]"
send_user "Version [binutil_version $OBJCOPY]"
if ![is_remote host] {
if ![is_remote host] {
    set tempfile tmpdir/bintest.o
    set tempfile tmpdir/bintest.o
    set copyfile tmpdir/copy
    set copyfile tmpdir/copy
} else {
} else {
    set tempfile [remote_download host tmpdir/bintest.o]
    set tempfile [remote_download host tmpdir/bintest.o]
    set copyfile copy
    set copyfile copy
}
}
# Test that objcopy does not modify a file when copying it.
# Test that objcopy does not modify a file when copying it.
proc objcopy_test {testname srcfile} {
proc objcopy_test {testname srcfile} {
    global OBJCOPY
    global OBJCOPY
    global OBJCOPYFLAGS
    global OBJCOPYFLAGS
    global srcdir
    global srcdir
    global subdir
    global subdir
    global tempfile
    global tempfile
    global copyfile
    global copyfile
    if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
    if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
        perror "unresolved $testname"
        perror "unresolved $testname"
        unresolved "objcopy ($testname)"
        unresolved "objcopy ($testname)"
        return
        return
    }
    }
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS $tempfile ${copyfile}.o"]
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS $tempfile ${copyfile}.o"]
    if ![string match "" $got] then {
    if ![string match "" $got] then {
        fail "objcopy ($testname)"
        fail "objcopy ($testname)"
    } else {
    } else {
        send_log "cmp $tempfile ${copyfile}.o\n"
        send_log "cmp $tempfile ${copyfile}.o\n"
        verbose "cmp $tempfile ${copyfile}.o"
        verbose "cmp $tempfile ${copyfile}.o"
        if [is_remote host] {
        if [is_remote host] {
            set src1 tmpdir/bintest.o
            set src1 tmpdir/bintest.o
            set src2 tmpdir/copy.o
            set src2 tmpdir/copy.o
            remote_upload host $tempfile $src1
            remote_upload host $tempfile $src1
            remote_upload host ${copyfile}.o $src2
            remote_upload host ${copyfile}.o $src2
        } else {
        } else {
            set src1 ${tempfile}
            set src1 ${tempfile}
            set src2 ${copyfile}.o
            set src2 ${copyfile}.o
        }
        }
        set status [remote_exec build cmp "${src1} ${src2}"]
        set status [remote_exec build cmp "${src1} ${src2}"]
        set exec_output [lindex $status 1]
        set exec_output [lindex $status 1]
        set exec_output [prune_warnings $exec_output]
        set exec_output [prune_warnings $exec_output]
        # On some systems the result of objcopy will not be identical.
        # On some systems the result of objcopy will not be identical.
        # Usually this is just because gas isn't using bfd to write the
        # Usually this is just because gas isn't using bfd to write the
        # files in the first place, and may order things a little
        # files in the first place, and may order things a little
        # differently. Those systems should use setup_xfail here.
        # differently. Those systems should use setup_xfail here.
        setup_xfail "h8300-*-rtems*" "h8300-*-coff"
        setup_xfail "h8300-*-rtems*" "h8300-*-coff"
        setup_xfail "h8500-*-rtems*" "h8500-*-coff"
        setup_xfail "h8500-*-rtems*" "h8500-*-coff"
        setup_xfail "hppa*-*-*"
        setup_xfail "hppa*-*-*"
        setup_xfail "i960-*"
        setup_xfail "i960-*"
        setup_xfail "m68*-*-*coff" "m68*-*-hpux*" "m68*-*-lynxos*"
        setup_xfail "m68*-*-*coff" "m68*-*-hpux*" "m68*-*-lynxos*"
        setup_xfail "m68*-*-sysv*" "m68*-apple-aux*"
        setup_xfail "m68*-*-sysv*" "m68*-apple-aux*"
        setup_xfail "m8*-*"
        setup_xfail "m8*-*"
        setup_xfail "or32-*-rtems*" "or32-*-coff"
        setup_xfail "or32-*-rtems*" "or32-*-coff"
        setup_xfail "sh-*-coff*" "sh-*-rtems*"
        setup_xfail "sh-*-coff*" "sh-*-rtems*"
        setup_xfail "tic4x-*-*" "tic80-*-*" "w65-*"
        setup_xfail "tic4x-*-*" "tic80-*-*" "w65-*"
        clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
        clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
        clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*"
        clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*"
        clear_xfail "m68*-*-sysv4*"
        clear_xfail "m68*-*-sysv4*"
        if [string match "" $exec_output] then {
        if [string match "" $exec_output] then {
            pass "objcopy ($testname)"
            pass "objcopy ($testname)"
        } else {
        } else {
            send_log "$exec_output\n"
            send_log "$exec_output\n"
            verbose "$exec_output" 1
            verbose "$exec_output" 1
            # On OSF/1, this succeeds with gas and fails with /bin/as.
            # On OSF/1, this succeeds with gas and fails with /bin/as.
            setup_xfail "alpha*-*-osf*"
            setup_xfail "alpha*-*-osf*"
            fail "objcopy ($testname)"
            fail "objcopy ($testname)"
        }
        }
    }
    }
}
}
objcopy_test "simple copy" bintest.s
objcopy_test "simple copy" bintest.s
# Test reversing bytes in a section.
# Test reversing bytes in a section.
set reversed ${tempfile}-reversed
set reversed ${tempfile}-reversed
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j .data --reverse-bytes=4 $tempfile $reversed"]
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j .data --reverse-bytes=4 $tempfile $reversed"]
if ![string match "" $got] then {
if ![string match "" $got] then {
    fail "objcopy --reverse-bytes"
    fail "objcopy --reverse-bytes"
} else {
} else {
    if [is_remote host] {
    if [is_remote host] {
        remote_upload host ${reversed} tmpdir/copy-reversed.o
        remote_upload host ${reversed} tmpdir/copy-reversed.o
        set reversed tmpdir/copy-reversed.o
        set reversed tmpdir/copy-reversed.o
    }
    }
    set origdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $tempfile"]
    set origdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $tempfile"]
    set revdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $reversed"]
    set revdata [binutils_run $OBJDUMP "$OBJDUMPFLAGS -s -j .data $reversed"]
    set want "^ \[0-9\]+ (\[0-9\]+)"
    set want "^ \[0-9\]+ (\[0-9\]+)"
    set found_orig [regexp -lineanchor $want $origdata -> origdata]
    set found_orig [regexp -lineanchor $want $origdata -> origdata]
    set found_rev [regexp -lineanchor $want $revdata -> revdata]
    set found_rev [regexp -lineanchor $want $revdata -> revdata]
    if {$found_orig == 0 || $found_rev == 0} then {
    if {$found_orig == 0 || $found_rev == 0} then {
        fail "objcopy --reverse-bytes"
        fail "objcopy --reverse-bytes"
    } else {
    } else {
        scan $origdata "%2x%2x%2x%2x" b1 b2 b3 b4
        scan $origdata "%2x%2x%2x%2x" b1 b2 b3 b4
        scan $revdata "%2x%2x%2x%2x" c4 c3 c2 c1
        scan $revdata "%2x%2x%2x%2x" c4 c3 c2 c1
        if {$b1 == $c1 && $b2 == $c2 && $b3 == $c3 && $b4 == $c4} then {
        if {$b1 == $c1 && $b2 == $c2 && $b3 == $c3 && $b4 == $c4} then {
            pass "objcopy --reverse-bytes"
            pass "objcopy --reverse-bytes"
        } else {
        } else {
            fail "objcopy --reverse-bytes"
            fail "objcopy --reverse-bytes"
        }
        }
    }
    }
}
}
# Test generating S records.
# Test generating S records.
# We make the srec filename 8.3 compatible. Note that the header string
# We make the srec filename 8.3 compatible. Note that the header string
# matched against depends on the name of the file. Ugh.
# matched against depends on the name of the file. Ugh.
if [is_remote host] {
if [is_remote host] {
    set srecfile copy.sre
    set srecfile copy.sre
    set header_string S00B0000636F70792E737265C1
    set header_string S00B0000636F70792E737265C1
} else {
} else {
    set srecfile ${copyfile}.srec
    set srecfile ${copyfile}.srec
    set header_string S0130000746D706469722F636F70792E7372656397
    set header_string S0130000746D706469722F636F70792E7372656397
}
}
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${srecfile}"]
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $tempfile ${srecfile}"]
if ![string match "" $got] then {
if ![string match "" $got] then {
    fail "objcopy -O srec"
    fail "objcopy -O srec"
} else {
} else {
    if [is_remote host] {
    if [is_remote host] {
        remote_upload host ${srecfile} tmpdir/copy.srec
        remote_upload host ${srecfile} tmpdir/copy.srec
        set srecfile tmpdir/copy.srec
        set srecfile tmpdir/copy.srec
    }
    }
    set file [open ${srecfile} r]
    set file [open ${srecfile} r]
    # The first S record is fixed by the file name we are using.
    # The first S record is fixed by the file name we are using.
    gets $file line
    gets $file line
    send_log "$line\n"
    send_log "$line\n"
    verbose $line
    verbose $line
    if ![regexp "$header_string.*" $line] {
    if ![regexp "$header_string.*" $line] {
        send_log "bad header\n"
        send_log "bad header\n"
        fail "objcopy -O srec"
        fail "objcopy -O srec"
    } else {
    } else {
        while {[gets $file line] != -1 \
        while {[gets $file line] != -1 \
               && [regexp "^S\[123\]\[0-9a-fA-F\]+\[\r\n\]*$" $line]} {
               && [regexp "^S\[123\]\[0-9a-fA-F\]+\[\r\n\]*$" $line]} {
            send_log "$line\n"
            send_log "$line\n"
            verbose $line
            verbose $line
            set line "**EOF**"
            set line "**EOF**"
        }
        }
        send_log "$line\n"
        send_log "$line\n"
        verbose $line
        verbose $line
        if ![regexp "^S\[789\]\[0-9a-fA-F\]+\[\r\n\]*$" $line] then {
        if ![regexp "^S\[789\]\[0-9a-fA-F\]+\[\r\n\]*$" $line] then {
            send_log "bad trailer\n"
            send_log "bad trailer\n"
            fail "objcopy -O srec"
            fail "objcopy -O srec"
        } else {
        } else {
            if {[gets $file line] != -1} then {
            if {[gets $file line] != -1} then {
                send_log "garbage at end\n"
                send_log "garbage at end\n"
                send_log "$line\n"
                send_log "$line\n"
                verbose $line
                verbose $line
                fail "objcopy -O srec"
                fail "objcopy -O srec"
            } else {
            } else {
                set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${srecfile}"]
                set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${srecfile}"]
                if ![regexp "file format srec" $got] then {
                if ![regexp "file format srec" $got] then {
                    send_log "objdump failed\n"
                    send_log "objdump failed\n"
                    fail "objcopy -O srec"
                    fail "objcopy -O srec"
                } else {
                } else {
                    pass "objcopy -O srec"
                    pass "objcopy -O srec"
                }
                }
            }
            }
        }
        }
    }
    }
    close $file
    close $file
}
}
# Test setting and adjusting the start address.  We only test this
# Test setting and adjusting the start address.  We only test this
# while generating S records, because we may not be able to set the
# 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
# start address for other object file formats, and the S record case
# is the only useful one anyhow.
# is the only useful one anyhow.
set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f $tempfile"]
set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f $tempfile"]
if ![regexp "start address (\[0-9a-fA-FxX\]+)" $got all origstart] then {
if ![regexp "start address (\[0-9a-fA-FxX\]+)" $got all origstart] then {
    perror "objdump can not recognize bintest.o"
    perror "objdump can not recognize bintest.o"
    set origstart ""
    set origstart ""
} else {
} else {
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --set-start 0x7654 $tempfile ${copyfile}.srec"]
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --set-start 0x7654 $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
    if ![string match "" $got] then {
        fail "objcopy --set-start"
        fail "objcopy --set-start"
    } else {
    } else {
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
        if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
        if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
            fail "objcopy --set-start"
            fail "objcopy --set-start"
        } else {
        } else {
            if {$srecstart != 0x7654} then {
            if {$srecstart != 0x7654} then {
                send_log "$srecstart != 0x7654\n"
                send_log "$srecstart != 0x7654\n"
                fail "objcopy --set-start"
                fail "objcopy --set-start"
            } else {
            } else {
                pass "objcopy --set-start"
                pass "objcopy --set-start"
            }
            }
        }
        }
    }
    }
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-start 0x123 $tempfile ${copyfile}.srec"]
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-start 0x123 $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
    if ![string match "" $got] then {
        fail "objcopy --adjust-start"
        fail "objcopy --adjust-start"
    } else {
    } else {
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"]
        if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
        if ![regexp "file format srec.*start address (\[0-9a-fA-FxX\]+)" $got all srecstart] then {
            fail "objcopy --adjust-start"
            fail "objcopy --adjust-start"
        } else {
        } else {
            if {$srecstart != $origstart + 0x123} then {
            if {$srecstart != $origstart + 0x123} then {
                send_log "$srecstart != $origstart + 0x123\n"
                send_log "$srecstart != $origstart + 0x123\n"
                fail "objcopy --adjust-start"
                fail "objcopy --adjust-start"
            } else {
            } else {
                pass "objcopy --adjust-start"
                pass "objcopy --adjust-start"
            }
            }
        }
        }
    }
    }
}
}
# Test adjusting the overall VMA, and adjusting the VMA of a
# Test adjusting the overall VMA, and adjusting the VMA of a
# particular section.  We again only test this when generating S
# particular section.  We again only test this when generating S
# records.
# records.
set low ""
set low ""
set lowname ""
set lowname ""
set headers [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h $tempfile"]
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 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
set got $headers
while {[regexp $headers_regexp $got all name size vma rest]} {
while {[regexp $headers_regexp $got all name size vma rest]} {
    set vma 0x$vma
    set vma 0x$vma
    set size 0x$size
    set size 0x$size
    if {$size != 0} {
    if {$size != 0} {
        if {$low == "" || $vma < $low} {
        if {$low == "" || $vma < $low} {
            set low $vma
            set low $vma
            set lowname $name
            set lowname $name
        }
        }
    }
    }
    set got $rest
    set got $rest
}
}
if {$low == "" || $origstart == ""} then {
if {$low == "" || $origstart == ""} then {
    perror "objdump can not recognize bintest.o"
    perror "objdump can not recognize bintest.o"
} else {
} else {
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-vma 0x123 $tempfile ${copyfile}.srec"]
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec --adjust-vma 0x123 $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
    if ![string match "" $got] then {
        fail "objcopy --adjust-vma"
        fail "objcopy --adjust-vma"
    } else {
    } else {
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -fh ${copyfile}.srec"]
        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\]+)"
        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 {
        if ![regexp $want $got all start vma] then {
            fail "objcopy --adjust-vma"
            fail "objcopy --adjust-vma"
        } else {
        } else {
            set vma 0x$vma
            set vma 0x$vma
            if {$vma != $low + 0x123} then {
            if {$vma != $low + 0x123} then {
                send_log "$vma != $low + 0x123\n"
                send_log "$vma != $low + 0x123\n"
                fail "objcopy --adjust-vma"
                fail "objcopy --adjust-vma"
            } else {
            } else {
                if {$start != $origstart + 0x123} then {
                if {$start != $origstart + 0x123} then {
                    send_log "$start != $origstart + 0x123\n"
                    send_log "$start != $origstart + 0x123\n"
                    fail "objcopy --adjust-vma"
                    fail "objcopy --adjust-vma"
                } else {
                } else {
                    pass "objcopy --adjust-vma"
                    pass "objcopy --adjust-vma"
                }
                }
            }
            }
        }
        }
    }
    }
    set arg ""
    set arg ""
    set got $headers
    set got $headers
    while {[regexp $headers_regexp $got all name size vma rest]} {
    while {[regexp $headers_regexp $got all name size vma rest]} {
        set vma 0x$vma
        set vma 0x$vma
        if {$vma == $low} then {
        if {$vma == $low} then {
            set arg "$arg --adjust-section-vma $name+4"
            set arg "$arg --adjust-section-vma $name+4"
        }
        }
        set got $rest
        set got $rest
    }
    }
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $arg $tempfile ${copyfile}.srec"]
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $arg $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
    if ![string match "" $got] then {
        fail "objcopy --adjust-section-vma +"
        fail "objcopy --adjust-section-vma +"
    } else {
    } else {
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
        set want "file format srec.*sec1\[      \]+\[0-9a-fA-F\]+\[     \]+(\[0-9a-fA-F\]+)"
        set want "file format srec.*sec1\[      \]+\[0-9a-fA-F\]+\[     \]+(\[0-9a-fA-F\]+)"
        if ![regexp $want $got all vma] then {
        if ![regexp $want $got all vma] then {
            fail "objcopy --adjust-section-vma +"
            fail "objcopy --adjust-section-vma +"
        } else {
        } else {
            set vma 0x$vma
            set vma 0x$vma
            if {$vma != $low + 4} then {
            if {$vma != $low + 4} then {
                send_log "$vma != $low + 4\n"
                send_log "$vma != $low + 4\n"
                fail "objcopy --adjust-section-vma +"
                fail "objcopy --adjust-section-vma +"
            } else {
            } else {
                pass "objcopy --adjust-section-vma +"
                pass "objcopy --adjust-section-vma +"
            }
            }
        }
        }
    }
    }
    regsub -all "\\+4" $arg "=[expr $low + 4]" argeq
    regsub -all "\\+4" $arg "=[expr $low + 4]" argeq
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $argeq $tempfile ${copyfile}.srec"]
    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -O srec $argeq $tempfile ${copyfile}.srec"]
    if ![string match "" $got] then {
    if ![string match "" $got] then {
        fail "objcopy --adjust-section-vma ="
        fail "objcopy --adjust-section-vma ="
    } else {
    } else {
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
        set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -h ${copyfile}.srec"]
        set want "file format srec.*sec1\[      \]+\[0-9a-fA-F\]+\[     \]+(\[0-9a-fA-F\]+)"
        set want "file format srec.*sec1\[      \]+\[0-9a-fA-F\]+\[     \]+(\[0-9a-fA-F\]+)"
        if ![regexp $want $got all vma] then {
        if ![regexp $want $got all vma] then {
            fail "objcopy --adjust-section-vma ="
            fail "objcopy --adjust-section-vma ="
        } else {
        } else {
            set vma 0x$vma
            set vma 0x$vma
            if {$vma != $low + 4} then {
            if {$vma != $low + 4} then {
                send_log "$vma != $low + 4\n"
                send_log "$vma != $low + 4\n"
                fail "objcopy --adjust-section-vma ="
                fail "objcopy --adjust-section-vma ="
            } else {
            } else {
                pass "objcopy --adjust-section-vma ="
                pass "objcopy --adjust-section-vma ="
            }
            }
        }
        }
    }
    }
}
}
# Test stripping an object.
# Test stripping an object.
proc strip_test { } {
proc strip_test { } {
    global AR
    global AR
    global CC
    global CC
    global STRIP
    global STRIP
    global STRIPFLAGS
    global STRIPFLAGS
    global NM
    global NM
    global NMFLAGS
    global NMFLAGS
    global srcdir
    global srcdir
    global subdir
    global subdir
    set test "strip"
    set test "strip"
    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
        untested $test
        untested $test
        return
        return
    }
    }
    if [is_remote host] {
    if [is_remote host] {
        set archive libstrip.a
        set archive libstrip.a
        set objfile [remote_download host tmpdir/testprog.o]
        set objfile [remote_download host tmpdir/testprog.o]
        remote_file host delete $archive
        remote_file host delete $archive
    } else {
    } else {
        set archive tmpdir/libstrip.a
        set archive tmpdir/libstrip.a
        set objfile tmpdir/testprog.o
        set objfile tmpdir/testprog.o
    }
    }
    remote_file build delete tmpdir/libstrip.a
    remote_file build delete tmpdir/libstrip.a
    set exec_output [binutils_run $AR "rc $archive ${objfile}"]
    set exec_output [binutils_run $AR "rc $archive ${objfile}"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    set exec_output [binutils_run $STRIP "-g $archive"]
    set exec_output [binutils_run $STRIP "-g $archive"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
    set exec_output [binutils_run $STRIP "$STRIPFLAGS $archive"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
        untested $test
        untested $test
        return
        return
    }
    }
    if [is_remote host] {
    if [is_remote host] {
        set objfile [remote_download host tmpdir/testprog.o]
        set objfile [remote_download host tmpdir/testprog.o]
    } else {
    } else {
        set objfile tmpdir/testprog.o
        set objfile tmpdir/testprog.o
    }
    }
    set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"]
    set exec_output [binutils_run $STRIP "$STRIPFLAGS $objfile"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"]
    set exec_output [binutils_run $NM "-a $NMFLAGS $objfile"]
    if ![string match "*: no symbols*" $exec_output] {
    if ![string match "*: no symbols*" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    pass $test
    pass $test
}
}
strip_test
strip_test
# Test stripping an object file with saving a symbol
# Test stripping an object file with saving a symbol
proc strip_test_with_saving_a_symbol { } {
proc strip_test_with_saving_a_symbol { } {
    global CC
    global CC
    global STRIP
    global STRIP
    global STRIPFLAGS
    global STRIPFLAGS
    global NM
    global NM
    global NMFLAGS
    global NMFLAGS
    global srcdir
    global srcdir
    global subdir
    global subdir
    set test "strip with saving a symbol"
    set test "strip with saving a symbol"
    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
    if { [target_compile $srcdir/$subdir/testprog.c tmpdir/testprog.o object debug] != "" } {
        untested $test
        untested $test
        return
        return
    }
    }
    if [is_remote host] {
    if [is_remote host] {
        set objfile [remote_download host tmpdir/testprog.o]
        set objfile [remote_download host tmpdir/testprog.o]
    } else {
    } else {
        set objfile tmpdir/testprog.o
        set objfile tmpdir/testprog.o
    }
    }
    set exec_output [binutils_run $STRIP "$STRIPFLAGS -K main -K _main $objfile"]
    set exec_output [binutils_run $STRIP "$STRIPFLAGS -K main -K _main $objfile"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
    set exec_output [binutils_run $NM "$NMFLAGS $objfile"]
    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
         && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
         && ![regexp {^([0-9a-fA-F]+)?[ ]+T _main} $exec_output]} {
        fail $test
        fail $test
        return
        return
    }
    }
    pass $test
    pass $test
}
}
strip_test_with_saving_a_symbol
strip_test_with_saving_a_symbol
# Build a final executable.
# Build a final executable.
if { [istarget *-*-cygwin] || [istarget *-*-mingw*] } {
if { [istarget *-*-cygwin] || [istarget *-*-mingw*] } {
    set test_prog "testprog.exe"
    set test_prog "testprog.exe"
} else {
} else {
    set test_prog "testprog"
    set test_prog "testprog"
}
}
proc copy_setup { } {
proc copy_setup { } {
    global srcdir
    global srcdir
    global subdir
    global subdir
    global gcc_gas_flag
    global gcc_gas_flag
    global test_prog
    global test_prog
    set res [build_wrapper testglue.o]
    set res [build_wrapper testglue.o]
    set flags { debug }
    set flags { debug }
    if { [istarget *-*-uclinux*] } {
    if { [istarget *-*-uclinux*] } {
        return 1
        return 1
    }
    }
    if { $res != "" } {
    if { $res != "" } {
        lappend flags "additional_flags=[lindex $res 1]"
        lappend flags "additional_flags=[lindex $res 1]"
        set add_libs "testglue.o"
        set add_libs "testglue.o"
    } else {
    } else {
        set add_libs ""
        set add_libs ""
    }
    }
    if { [istarget *-*-linux*] } {
    if { [istarget *-*-linux*] } {
        foreach i $gcc_gas_flag {
        foreach i $gcc_gas_flag {
            set flags "additional_flags=$i $flags"
            set flags "additional_flags=$i $flags"
        }
        }
    }
    }
    if { [target_compile "$srcdir/$subdir/testprog.c $add_libs" tmpdir/$test_prog executable $flags]  != "" } {
    if { [target_compile "$srcdir/$subdir/testprog.c $add_libs" tmpdir/$test_prog executable $flags]  != "" } {
        return 2
        return 2
    }
    }
    set result [remote_load target tmpdir/$test_prog]
    set result [remote_load target tmpdir/$test_prog]
    set status [lindex $result 0]
    set status [lindex $result 0]
    if { $status != "pass"  } {
    if { $status != "pass"  } {
        send_log "cannot run executable, status = ${status}\n"
        send_log "cannot run executable, status = ${status}\n"
        return 3
        return 3
    }
    }
    return 0
    return 0
}
}
# Test copying an executable.
# Test copying an executable.
proc copy_executable { prog flags test1 test2 } {
proc copy_executable { prog flags test1 test2 } {
    global test_prog
    global test_prog
    if [is_remote host] {
    if [is_remote host] {
        set testfile [remote_download host tmpdir/$test_prog]
        set testfile [remote_download host tmpdir/$test_prog]
        set testcopy copyprog
        set testcopy copyprog
    } else {
    } else {
        set testfile tmpdir/$test_prog
        set testfile tmpdir/$test_prog
        set testcopy tmpdir/copyprog
        set testcopy tmpdir/copyprog
    }
    }
    remote_file host delete $testcopy
    remote_file host delete $testcopy
    set exec_output [binutils_run $prog "$flags $testfile $testcopy"]
    set exec_output [binutils_run $prog "$flags $testfile $testcopy"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test1
        fail $test1
        if [string match "" $test2] {
        if [string match "" $test2] {
            return
            return
        }
        }
        fail $test2
        fail $test2
        return
        return
    }
    }
    if [is_remote host] {
    if [is_remote host] {
        remote_upload host $testcopy tmpdir/copyprog
        remote_upload host $testcopy tmpdir/copyprog
    }
    }
    set status [remote_exec build "cmp" "tmpdir/$test_prog tmpdir/copyprog"]
    set status [remote_exec build "cmp" "tmpdir/$test_prog tmpdir/copyprog"]
    set exec_output [lindex $status 1]
    set exec_output [lindex $status 1]
    if [string match "" $exec_output] then {
    if [string match "" $exec_output] then {
        pass $test1
        pass $test1
    } else {
    } else {
        send_log "$exec_output\n"
        send_log "$exec_output\n"
        verbose "$exec_output"
        verbose "$exec_output"
        # This will fail for many reasons.  For example, it will most
        # This will fail for many reasons.  For example, it will most
        # likely fail if a non-GNU linker is used.  Therefore, we do
        # likely fail if a non-GNU linker is used.  Therefore, we do
        # not insist that it pass.  If you are using an assembler and
        # not insist that it pass.  If you are using an assembler and
        # linker based on the same BFD as objcopy, it is worth
        # linker based on the same BFD as objcopy, it is worth
        # investigating to see why this failure occurs.  If we are
        # investigating to see why this failure occurs.  If we are
        # cross compiling, we assume that a GNU linker is being used,
        # cross compiling, we assume that a GNU linker is being used,
        # and expect it to succeed.
        # and expect it to succeed.
        if {[isnative]} then {
        if {[isnative]} then {
            setup_xfail "*-*-*"
            setup_xfail "*-*-*"
        }
        }
        # This also fails for mips*-*-elf targets.  See elf32-mips.c
        # This also fails for mips*-*-elf targets.  See elf32-mips.c
        # mips_elf_sym_is_global.
        # mips_elf_sym_is_global.
        setup_xfail "mips*-*-elf"
        setup_xfail "mips*-*-elf"
        setup_xfail "*arm*-*-coff"
        setup_xfail "*arm*-*-coff"
        setup_xfail "xscale-*-coff"
        setup_xfail "xscale-*-coff"
        setup_xfail "arm*-*-pe"
        setup_xfail "arm*-*-pe"
        setup_xfail "thumb*-*-coff"
        setup_xfail "thumb*-*-coff"
        setup_xfail "thumb*-*-pe"
        setup_xfail "thumb*-*-pe"
        fail $test1
        fail $test1
    }
    }
    if [string match "" $test2] {
    if [string match "" $test2] {
        return
        return
    }
    }
    set output [remote_load target tmpdir/copyprog]
    set output [remote_load target tmpdir/copyprog]
    set status [lindex $output 0]
    set status [lindex $output 0]
    if { $status != "pass" } {
    if { $status != "pass" } {
        fail $test2
        fail $test2
    } else {
    } else {
        pass $test2
        pass $test2
    }
    }
}
}
# Test stripping an executable
# Test stripping an executable
proc strip_executable { prog flags test } {
proc strip_executable { prog flags test } {
    global NM
    global NM
    global NMFLAGS
    global NMFLAGS
    remote_download build tmpdir/copyprog tmpdir/striprog
    remote_download build tmpdir/copyprog tmpdir/striprog
    if [is_remote host] {
    if [is_remote host] {
        set copyfile [remote_download host tmpdir/striprog]
        set copyfile [remote_download host tmpdir/striprog]
    } else {
    } else {
        set copyfile tmpdir/striprog
        set copyfile tmpdir/striprog
    }
    }
    set exec_output [binutils_run $prog "$flags ${copyfile}"]
    set exec_output [binutils_run $prog "$flags ${copyfile}"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    if [is_remote host] {
    if [is_remote host] {
        remote_upload host ${copyfile} tmpdir/striprog
        remote_upload host ${copyfile} tmpdir/striprog
    }
    }
    set result [remote_load target tmpdir/striprog]
    set result [remote_load target tmpdir/striprog]
    set status [lindex $result 0]
    set status [lindex $result 0]
    if { $status != "pass" } {
    if { $status != "pass" } {
        fail $test
        fail $test
        return
        return
    }
    }
    set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
    set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
    if ![string match "*: no symbols*" $exec_output] {
    if ![string match "*: no symbols*" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    pass $test
    pass $test
}
}
# Test stripping an executable with saving a symbol
# Test stripping an executable with saving a symbol
proc strip_executable_with_saving_a_symbol { prog flags test } {
proc strip_executable_with_saving_a_symbol { prog flags test } {
    global NM
    global NM
    global NMFLAGS
    global NMFLAGS
    remote_download build tmpdir/copyprog tmpdir/striprog
    remote_download build tmpdir/copyprog tmpdir/striprog
    if [is_remote host] {
    if [is_remote host] {
        set copyfile [remote_download host tmpdir/striprog]
        set copyfile [remote_download host tmpdir/striprog]
    } else {
    } else {
        set copyfile tmpdir/striprog
        set copyfile tmpdir/striprog
    }
    }
    set exec_output [binutils_run $prog "$flags ${copyfile}"]
    set exec_output [binutils_run $prog "$flags ${copyfile}"]
    if ![string match "" $exec_output] {
    if ![string match "" $exec_output] {
        fail $test
        fail $test
        return
        return
    }
    }
    if [is_remote host] {
    if [is_remote host] {
        remote_upload host ${copyfile} tmpdir/striprog
        remote_upload host ${copyfile} tmpdir/striprog
    }
    }
    set result [remote_load target tmpdir/striprog]
    set result [remote_load target tmpdir/striprog]
    set status [lindex $result 0]
    set status [lindex $result 0]
    if { $status != "pass" } {
    if { $status != "pass" } {
        fail $test
        fail $test
        return
        return
    }
    }
    set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
    set exec_output [binutils_run $NM "$NMFLAGS ${copyfile}"]
    if { [istarget mmix-knuth-mmixware] } {
    if { [istarget mmix-knuth-mmixware] } {
        # Whenever there's a symbol in the mmo format, there's the symbol
        # 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
        # Main, so remove it manually from the expected output for sake of
        # this test.
        # this test.
        # Using "" not {} to get the \n and \r translated.
        # Using "" not {} to get the \n and \r translated.
        regsub "^\[0-9a-fA-F\]+\[ \]+T Main\[\n\r\]+" $exec_output "" exec_output
        regsub "^\[0-9a-fA-F\]+\[ \]+T Main\[\n\r\]+" $exec_output "" exec_output
    }
    }
    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
    if {![regexp {^([0-9a-fA-F]+)?[ ]+[TD] main} $exec_output] \
         && ![regexp {^([0-9a-fA-F]+)?[ ]+[TD] _main} $exec_output]} {
         && ![regexp {^([0-9a-fA-F]+)?[ ]+[TD] _main} $exec_output]} {
        fail $test
        fail $test
        return
        return
    }
    }
    pass $test
    pass $test
}
}
set test1 "simple objcopy of executable"
set test1 "simple objcopy of executable"
set test2 "run objcopy of executable"
set test2 "run objcopy of executable"
set test3 "run stripped executable"
set test3 "run stripped executable"
set test4 "run stripped executable with saving a symbol"
set test4 "run stripped executable with saving a symbol"
switch [copy_setup] {
switch [copy_setup] {
    "1" {
    "1" {
        # do nothing
        # do nothing
    }
    }
    "2" {
    "2" {
        untested $test1
        untested $test1
        untested $test2
        untested $test2
        untested $test3
        untested $test3
        untested $test4
        untested $test4
    }
    }
    "3" {
    "3" {
        copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" ""
        copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" ""
        unsupported $test2
        unsupported $test2
        unsupported $test3
        unsupported $test3
        unsupported $test4
        unsupported $test4
    }
    }
    "0" {
    "0" {
        copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "$test2"
        copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "$test2"
        strip_executable "$STRIP" "$STRIPFLAGS" "$test3"
        strip_executable "$STRIP" "$STRIPFLAGS" "$test3"
        strip_executable_with_saving_a_symbol "$STRIP" "-K main -K _main $STRIPFLAGS" "$test4"
        strip_executable_with_saving_a_symbol "$STRIP" "-K main -K _main $STRIPFLAGS" "$test4"
    }
    }
}
}
proc objcopy_test_readelf {testname srcfile} {
proc objcopy_test_readelf {testname srcfile} {
    global OBJCOPY
    global OBJCOPY
    global OBJCOPYFLAGS
    global OBJCOPYFLAGS
    global READELF
    global READELF
    global srcdir
    global srcdir
    global subdir
    global subdir
    if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
    if {![binutils_assemble $srcdir/$subdir/${srcfile} tmpdir/bintest.o]} then {
        unresolved "objcopy ($testname)"
        unresolved "objcopy ($testname)"
        return
        return
    }
    }
    verbose -log "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"
    verbose -log "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"
    set exec_output [remote_exec host "$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
    if { [lindex $exec_output 0] != 0
         || ![string match "" [lindex $exec_output 1]] } then {
         || ![string match "" [lindex $exec_output 1]] } then {
        fail "objcopy ($testname)"
        fail "objcopy ($testname)"
        return
        return
    }
    }
    verbose -log "$READELF -a tmpdir/bintest.o > tmpdir/bintest.o.out"
    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"]
    set exec_output [remote_exec host "$READELF -a tmpdir/bintest.o" "" "/dev/null" "tmpdir/bintest.o.out"]
    if { [lindex $exec_output 0] != 0 } then {
    if { [lindex $exec_output 0] != 0 } then {
        unresolved "objcopy ($testname)"
        unresolved "objcopy ($testname)"
        return
        return
    }
    }
    set exec_output [prune_warnings [lindex $exec_output 1]]
    set exec_output [prune_warnings [lindex $exec_output 1]]
    if ![string match "" $exec_output] then {
    if ![string match "" $exec_output] then {
        unresolved "objcopy ($testname)"
        unresolved "objcopy ($testname)"
        return
        return
    }
    }
    verbose -log "$READELF -a tmpdir/copy.o > tmpdir/copy.o.out"
    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"]
    set exec_output [remote_exec host "$READELF -a tmpdir/copy.o" "" "/dev/null" "tmpdir/copy.o.out"]
    if { [lindex $exec_output 0] != 0 } then {
    if { [lindex $exec_output 0] != 0 } then {
        unresolved "objcopy ($testname)"
        unresolved "objcopy ($testname)"
        return
        return
    }
    }
    set exec_output [prune_warnings [lindex $exec_output 1]]
    set exec_output [prune_warnings [lindex $exec_output 1]]
    if ![string match "" $exec_output] then {
    if ![string match "" $exec_output] then {
        unresolved "objcopy ($testname)"
        unresolved "objcopy ($testname)"
        return
        return
    }
    }
    verbose -log "diff tmpdir/bintest.o.out tmpdir/copy.o.out"
    verbose -log "diff tmpdir/bintest.o.out tmpdir/copy.o.out"
    catch "exec diff tmpdir/bintest.o.out tmpdir/copy.o.out" exec_output
    catch "exec diff tmpdir/bintest.o.out tmpdir/copy.o.out" exec_output
    set exec_output [prune_warnings $exec_output]
    set exec_output [prune_warnings $exec_output]
    if [string match "" $exec_output] then {
    if [string match "" $exec_output] then {
        pass "objcopy ($testname)"
        pass "objcopy ($testname)"
    } else {
    } else {
        fail "objcopy ($testname)"
        fail "objcopy ($testname)"
    }
    }
}
}
# ia64 specific tests
# ia64 specific tests
if { ([istarget "ia64-*-elf*"]
if { ([istarget "ia64-*-elf*"]
       || [istarget "ia64-*-linux*"]) } {
       || [istarget "ia64-*-linux*"]) } {
    objcopy_test "ia64 link order" link-order.s
    objcopy_test "ia64 link order" link-order.s
}
}
# ELF specific tests
# ELF specific tests
if [is_elf_format] {
if [is_elf_format] {
    objcopy_test "ELF unknown section type" unknown.s
    objcopy_test "ELF unknown section type" unknown.s
    objcopy_test_readelf "ELF group" group.s
    objcopy_test_readelf "ELF group" group.s
    run_dump_test "copy-1"
    run_dump_test "copy-1"
}
}
run_dump_test "copy-2"
run_dump_test "copy-2"
run_dump_test "copy-3"
run_dump_test "copy-3"
if [is_elf_format] {
if [is_elf_format] {
    run_dump_test "strip-1"
    run_dump_test "strip-1"
    run_dump_test "strip-2"
    run_dump_test "strip-2"
    run_dump_test "strip-3"
    run_dump_test "strip-3"
    if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } {
    if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } {
        # Check to make sure we don't strip a symbol named in relocations.
        # Check to make sure we don't strip a symbol named in relocations.
        set test "objcopy keeps symbols needed by relocs"
        set test "objcopy keeps symbols needed by relocs"
        set srcfile $srcdir/$subdir/needed-by-reloc.s
        set srcfile $srcdir/$subdir/needed-by-reloc.s
        if {![binutils_assemble $srcfile tmpdir/bintest.o]} then {
        if {![binutils_assemble $srcfile tmpdir/bintest.o]} then {
            unresolved $test
            unresolved $test
        } else {
        } else {
            set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS --strip-symbol=foo tmpdir/bintest.o ${copyfile}.o"]
            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] {
            if [regexp "not stripping symbol `foo' because it is named in a relocation" $got] {
                pass $test
                pass $test
            } else {
            } else {
                fail $test
                fail $test
            }
            }
        }
        }
    }
    }
    run_dump_test "localize-hidden-1"
    run_dump_test "localize-hidden-1"
}
}
run_dump_test "localize-hidden-2"
run_dump_test "localize-hidden-2"
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.