mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
Fix verilog output when the width is > 1.
PR 25202 bfd * bfd.c (VerilogDataEndianness): New variable. (verilog_write_record): Use VerilogDataEndianness, if set, to choose the endianness of the output. (verilog_write_section): Adjust the address by the data width. binutils* objcopy.c (copy_object): Set VerilogDataEndianness to the endianness of the input file. (copy_main): Verifiy the value set by the --verilog-data-width option. * testsuite/binutils-all/objcopy.exp: Add tests of the new behaviour. * testsuite/binutils-all/verilog-I4.hex: New file.
This commit is contained in:
@ -155,13 +155,13 @@ proc objcopy_test_verilog {testname} {
|
||||
}
|
||||
|
||||
set got [binutils_run $OBJCOPY "-O verilog --verilog-data-width 0 $binfile $verilog-0.hex"]
|
||||
if ![regexp "verilog data width must be at least 1 byte" $got] then {
|
||||
if ![regexp "error: verilog data width must be 1, 2, 4, 8 or 16" $got] then {
|
||||
fail "objcopy ($testname 0) {$got}"
|
||||
} else {
|
||||
pass "objcopy ($testname 0)"
|
||||
}
|
||||
|
||||
foreach width {1 2 4 8} {
|
||||
foreach width {1 2} {
|
||||
set got [binutils_run $OBJCOPY "-O verilog --verilog-data-width $width $binfile $verilog-$width.hex"]
|
||||
if ![string equal "" $got] then {
|
||||
fail "objcopy ($testname $width)"
|
||||
@ -173,6 +173,40 @@ proc objcopy_test_verilog {testname} {
|
||||
fail "objcopy ($testname $width)"
|
||||
}
|
||||
}
|
||||
|
||||
# 16-bit little-endian targets fail the following tests because the
|
||||
# verilog backend does not convert from 16-bits to 32-bits before it
|
||||
# converts from internal format to little endian format.
|
||||
if { [istarget tic54*-*-*] || [istarget pdp11-*-*] } {
|
||||
untested "verilog width-4 and width-8 tests"
|
||||
return
|
||||
}
|
||||
|
||||
foreach width {4 8} {
|
||||
set got [binutils_run $OBJCOPY "-O verilog --verilog-data-width $width $binfile $verilog-$width.hex"]
|
||||
if ![string equal "" $got] then {
|
||||
fail "objcopy ($testname $width)"
|
||||
}
|
||||
send_log "regexp_diff $verilog-$width.hex $srcdir/$subdir/verilog-$width.hex\n"
|
||||
if {! [regexp_diff "$verilog-$width.hex" "$srcdir/$subdir/verilog-$width.hex"]} {
|
||||
pass "objcopy ($testname $width)"
|
||||
} else {
|
||||
fail "objcopy ($testname $width)"
|
||||
}
|
||||
}
|
||||
|
||||
# Test generating endian correct output.
|
||||
set testname "objcopy (verilog output endian-ness == input endian-ness)"
|
||||
set got [binutils_run $OBJCOPY "-O verilog --verilog-data-width 4 $binfile $verilog-I4.hex"]
|
||||
if ![string equal "" $got] then {
|
||||
fail $testname
|
||||
}
|
||||
send_log "regexp_diff $verilog-I4.hex $srcdir/$subdir/verilog-I4.hex\n"
|
||||
if {! [regexp_diff "$verilog-I4.hex" "$srcdir/$subdir/verilog-I4.hex"]} {
|
||||
pass $testname
|
||||
} else {
|
||||
fail $testname
|
||||
}
|
||||
}
|
||||
|
||||
objcopy_test_verilog "verilog data width"
|
||||
|
6
binutils/testsuite/binutils-all/verilog-I4.hex
Normal file
6
binutils/testsuite/binutils-all/verilog-I4.hex
Normal file
@ -0,0 +1,6 @@
|
||||
@00000000
|
||||
(01020304|04030201) 00000000.*
|
||||
@000000..
|
||||
(02000000|00000002).*
|
||||
#pass
|
||||
|
Reference in New Issue
Block a user