aboutsummaryrefslogtreecommitdiff
path: root/binutils/testsuite
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2022-12-01 13:09:26 +0000
committerNick Clifton <nickc@redhat.com>2022-12-01 13:09:26 +0000
commit6ef35c04dffe685ece08212201c4c032baf8aa86 (patch)
tree3eba01220e92f2f24152d4ad94f4be8c45c9f53b /binutils/testsuite
parent7505bb034c7c8a3d9ecf34e22777114c8bc4a93e (diff)
downloadgdb-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')
-rw-r--r--binutils/testsuite/binutils-all/objcopy.exp38
-rw-r--r--binutils/testsuite/binutils-all/verilog-I4.hex6
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
+