x86: i386_generate_nops() may not derive decisions from global variables

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.
This commit is contained in:
Jan Beulich
2023-10-23 10:29:54 +02:00
parent ed71929492
commit d12c7ab814
7 changed files with 43 additions and 2 deletions

View File

@@ -1434,7 +1434,7 @@ i386_generate_nops (fragS *fragP, char *where, offsetT count, int limit)
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 *where, offsetT count, int limit)
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

View File

@@ -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"

View File

@@ -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

View File

@@ -0,0 +1,6 @@
.text
default:
movsbl %al,%esi
.p2align 4
.code16

View File

@@ -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

View File

@@ -0,0 +1,7 @@
.text
default:
movsbl %al,%esi
.p2align 4
.code32
.arch generic32

View File

@@ -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"