[PATCH 02/11] x86: i386_generate_nops() may not derive decisions from global variables

Jan Beulich jbeulich@suse.com
Wed Sep 27 15:48:15 GMT 2023


What matters is what was in effect at the time the original directive
was issued. Later changes to global state (bitness or ISA) must not
affect what code is generated.

--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1434,7 +1434,7 @@ i386_generate_nops (fragS *fragP, char *
      When -march= or .arch is used, we can't use anything beyond
      cpu_arch_isa_flags.   */
 
-  if (flag_code == CODE_16BIT)
+  if (fragP->tc_frag_data.code == CODE_16BIT)
     {
       patt = f16_patt;
       max_single_nop_size = sizeof (f16_patt) / sizeof (f16_patt[0]);
@@ -1446,7 +1446,7 @@ i386_generate_nops (fragS *fragP, char *
       if (fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN)
 	{
 	  /* PROCESSOR_UNKNOWN means that all ISAs may be used.  */
-	  switch (cpu_arch_tune)
+	  switch (fragP->tc_frag_data.tune)
 	    {
 	    case PROCESSOR_UNKNOWN:
 	      /* We use cpu_arch_isa_flags to check if we SHOULD
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -148,6 +148,7 @@ if [gas_32_check] then {
     run_dump_test "nops-7"
     run_dump_test "nops-8"
     run_dump_test "nops-9"
+    run_dump_test "nops-10"
     run_dump_test "noreg16"
     run_list_test "noreg16"
     run_dump_test "noreg16-data32"
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-10.d
@@ -0,0 +1,13 @@
+#objdump: -drw
+#name: nops 10
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <default>:
+[ 	]*[a-f0-9]+:	0f be f0             	movsbl %al,%esi
+[ 	]*[a-f0-9]+:	8d b4 26 00 00 00 00 	lea    0x0\(%esi,%eiz,1\),%esi
+[ 	]*[a-f0-9]+:	8d b6 00 00 00 00    	lea    0x0\(%esi\),%esi
+#pass
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-10.s
@@ -0,0 +1,6 @@
+	.text
+default:
+	movsbl %al,%esi
+	.p2align 4
+
+	.code16
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-6.d
@@ -0,0 +1,13 @@
+#objdump: -drw
+#name: x86-64 nops 6
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <default>:
+[ 	]*[a-f0-9]+:	0f be f0             	movsbl %al,%esi
+[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data16 cs nopw (0x)?0\(%rax,%rax,1\)
+[ 	]*[a-f0-9]+:	66 90                	xchg   %ax,%ax
+#pass
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-nops-6.s
@@ -0,0 +1,7 @@
+	.text
+default:
+	movsbl %al,%esi
+	.p2align 4
+
+	.code32
+	.arch generic32
--- a/gas/testsuite/gas/i386/x86-64.exp
+++ b/gas/testsuite/gas/i386/x86-64.exp
@@ -116,6 +116,7 @@ run_dump_test "x86-64-nops-4-core2"
 run_dump_test "x86-64-nops-4-k8"
 run_dump_test "x86-64-nops-5"
 run_dump_test "x86-64-nops-5-k8"
+run_dump_test "x86-64-nops-6"
 run_dump_test "x86-64-nops-7"
 run_dump_test "x86-64-sysenter"
 run_dump_test "x86-64-sysenter-intel"



More information about the Binutils mailing list