diff options
author | Nick Clifton <nickc@redhat.com> | 2022-12-01 13:09:26 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2022-12-01 13:09:26 +0000 |
commit | 6ef35c04dffe685ece08212201c4c032baf8aa86 (patch) | |
tree | 3eba01220e92f2f24152d4ad94f4be8c45c9f53b /binutils/testsuite/binutils-all | |
parent | 7505bb034c7c8a3d9ecf34e22777114c8bc4a93e (diff) | |
download | gdb-6ef35c04dffe685ece08212201c4c032baf8aa86.zip gdb-6ef35c04dffe685ece08212201c4c032baf8aa86.tar.gz gdb-6ef35c04dffe685ece08212201c4c032baf8aa86.tar.bz2 |
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.
Diffstat (limited to 'binutils/testsuite/binutils-all')
-rw-r--r-- | binutils/testsuite/binutils-all/objcopy.exp | 38 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/verilog-I4.hex | 6 |
2 files changed, 42 insertions, 2 deletions
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index aebfdb2..de6f3aa 100644 --- a/binutils/testsuite/binutils-all/objcopy.exp +++ b/binutils/testsuite/binutils-all/objcopy.exp @@ -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" diff --git a/binutils/testsuite/binutils-all/verilog-I4.hex b/binutils/testsuite/binutils-all/verilog-I4.hex new file mode 100644 index 0000000..4fa1a5c --- /dev/null +++ b/binutils/testsuite/binutils-all/verilog-I4.hex @@ -0,0 +1,6 @@ +@00000000 +(01020304|04030201) 00000000.* +@000000.. +(02000000|00000002).* +#pass + |