[binutils-gdb/binutils-2_44-branch] gas: fix rs_fill_nop listing

Jan Beulich jbeulich@sourceware.org
Fri Feb 14 09:05:08 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d4c7ee9fbc1e9da2dbb92dc8eccba495b2104f21

commit d4c7ee9fbc1e9da2dbb92dc8eccba495b2104f21
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Feb 14 09:33:18 2025 +0100

    gas: fix rs_fill_nop listing
    
    In commit a0094f1a70e1 ("gas: make .nops output visible in listing") I
    was wrongly assuming fr_fix would be zero for rs_fill_nop, when that's
    only a side effect of listing_newline() inserting dummy frags, but only
    when file/line did actually change from the previous invocation. This is
    in particular not going to be true when the .nops directive isn't the
    first statement on a line.

Diff:
---
 gas/listing.c                   | 3 +--
 gas/testsuite/gas/i386/i386.exp | 1 +
 gas/testsuite/gas/i386/nop-7.l  | 6 ++++++
 gas/testsuite/gas/i386/nop-7.s  | 6 ++++++
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/gas/listing.c b/gas/listing.c
index ebe5ff5bdf0..43a7fdf86b2 100644
--- a/gas/listing.c
+++ b/gas/listing.c
@@ -820,9 +820,8 @@ calc_hex (list_info_type *list)
 	}
       else if (frag_ptr->fr_type == rs_fill_nop && frag_ptr->fr_opcode)
 	{
-	  gas_assert (!octet_in_frag);
-
 	  /* Print as many bytes from fr_opcode as is sensible.  */
+	  octet_in_frag = 0;
 	  while (octet_in_frag < (unsigned int) frag_ptr->fr_offset
 		 && data_buffer_size < MAX_BYTES - 3)
 	    {
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index b4d33cc7500..09d4dc94afe 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -637,6 +637,7 @@ if [gas_32_check] then {
     run_dump_test "nop-1-suffix"
     run_list_test "nop-1" "-aln"
     run_dump_test "nop-2"
+    run_list_test "nop-7" "-aln"
     run_dump_test "optimize-1"
     run_dump_test "optimize-1a"
     run_dump_test "optimize-2"
diff --git a/gas/testsuite/gas/i386/nop-7.l b/gas/testsuite/gas/i386/nop-7.l
new file mode 100644
index 00000000000..2a74137efd9
--- /dev/null
+++ b/gas/testsuite/gas/i386/nop-7.l
@@ -0,0 +1,6 @@
+[ 	]*[0-9]+[ 	]+\.text
+[ 	]*[0-9]+[ 	]+nops:
+[ 	]*[0-9]+[ 	]+.... F88D7426[ 	]+clc; \.nops 4; stc
+[ 	]*[0-9]+[ 	]+00F9
+[ 	]*[0-9]+[ 	]+.... C3[ 	]+ret
+#pass
diff --git a/gas/testsuite/gas/i386/nop-7.s b/gas/testsuite/gas/i386/nop-7.s
new file mode 100644
index 00000000000..8018f219d9a
--- /dev/null
+++ b/gas/testsuite/gas/i386/nop-7.s
@@ -0,0 +1,6 @@
+	.text
+nops:
+	clc; .nops 4; stc
+	ret
+
+	.end


More information about the Binutils-cvs mailing list