aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2025-02-14 09:33:18 +0100
committerJan Beulich <jbeulich@suse.com>2025-02-14 09:33:18 +0100
commit69d68fbeb88aa12949838916a8f1b957a85097a1 (patch)
tree521eedcd6b0b2d422dd7eab15a17cc18e7c0e17d
parent298a68339718add09a0026aeda4c427df7924372 (diff)
downloadbinutils-69d68fbeb88aa12949838916a8f1b957a85097a1.zip
binutils-69d68fbeb88aa12949838916a8f1b957a85097a1.tar.gz
binutils-69d68fbeb88aa12949838916a8f1b957a85097a1.tar.bz2
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.
-rw-r--r--gas/listing.c3
-rw-r--r--gas/testsuite/gas/i386/i386.exp1
-rw-r--r--gas/testsuite/gas/i386/nop-7.l6
-rw-r--r--gas/testsuite/gas/i386/nop-7.s6
4 files changed, 14 insertions, 2 deletions
diff --git a/gas/listing.c b/gas/listing.c
index 11ae450..be71597 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 34d0a2f..329efc7 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -638,6 +638,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 0000000..2a74137
--- /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 0000000..8018f21
--- /dev/null
+++ b/gas/testsuite/gas/i386/nop-7.s
@@ -0,0 +1,6 @@
+ .text
+nops:
+ clc; .nops 4; stc
+ ret
+
+ .end