mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-12-19 01:19:41 +08:00
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:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
13
gas/testsuite/gas/i386/nops-10.d
Normal file
13
gas/testsuite/gas/i386/nops-10.d
Normal 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
|
||||
6
gas/testsuite/gas/i386/nops-10.s
Normal file
6
gas/testsuite/gas/i386/nops-10.s
Normal file
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
default:
|
||||
movsbl %al,%esi
|
||||
.p2align 4
|
||||
|
||||
.code16
|
||||
13
gas/testsuite/gas/i386/x86-64-nops-6.d
Normal file
13
gas/testsuite/gas/i386/x86-64-nops-6.d
Normal 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
|
||||
7
gas/testsuite/gas/i386/x86-64-nops-6.s
Normal file
7
gas/testsuite/gas/i386/x86-64-nops-6.s
Normal file
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
default:
|
||||
movsbl %al,%esi
|
||||
.p2align 4
|
||||
|
||||
.code32
|
||||
.arch generic32
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user