From 5e0729b655a2594c7b6750fb53f2f99750744ca2 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 23 Oct 2023 10:30:55 +0200 Subject: [PATCH] x86: don't use operand size override with NOP in 16-bit code Since we don't key the NOP selection to user-controlled properties, we may not use i386 features; otherwise we would violate a possible .arch directive restricting ISA to pre-386. --- gas/config/tc-i386.c | 3 ++- gas/testsuite/gas/i386/nop-2.d | 2 +- gas/testsuite/gas/i386/nops16-1.d | 16 ++++++++-------- gas/testsuite/gas/i386/x86-64-nop-2.d | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index bec63049992..b8df4e949a4 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1291,6 +1291,7 @@ static const unsigned char f64_7[] = #define f64_8 (f64_9 + 1) /* lea 0L(%rsi,%riz),%rsi */ static const unsigned char f64_9[] = {0x2e,0x48,0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* lea %cs:0L(%rsi,%riz),%rsi */ +#define f16_2 (f64_3 + 1) /* mov %si,%si */ static const unsigned char f16_3[] = {0x8d,0x74,0x00}; /* lea 0(%si),%si */ static const unsigned char f16_4[] = @@ -1311,7 +1312,7 @@ static const unsigned char *const f64_patt[] = { }; /* 16-bit NOPs patterns. */ static const unsigned char *const f16_patt[] = { - f32_1, f32_2, f16_3, f16_4 + f32_1, f16_2, f16_3, f16_4 }; /* nopl (%[re]ax) */ static const unsigned char alt_3[] = diff --git a/gas/testsuite/gas/i386/nop-2.d b/gas/testsuite/gas/i386/nop-2.d index e8df5ed8a22..265fc358d49 100644 --- a/gas/testsuite/gas/i386/nop-2.d +++ b/gas/testsuite/gas/i386/nop-2.d @@ -26,7 +26,7 @@ Disassembly of section .text: +[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si +[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si +[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si - +[a-f0-9]+: 66 90 xchg %eax,%eax + +[a-f0-9]+: 89 f6 mov %si,%si 0+26 : +[a-f0-9]+: eb 1c jmp 44 diff --git a/gas/testsuite/gas/i386/nops16-1.d b/gas/testsuite/gas/i386/nops16-1.d index 0f302c96b84..d5fdbcac22c 100644 --- a/gas/testsuite/gas/i386/nops16-1.d +++ b/gas/testsuite/gas/i386/nops16-1.d @@ -55,7 +55,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+80 : [ ]*[a-f0-9]+: 90 nop @@ -118,7 +118,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+100 : [ ]*[a-f0-9]+: 90 nop @@ -193,7 +193,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+180 : [ ]*[a-f0-9]+: 90 nop @@ -280,7 +280,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+200 : [ ]*[a-f0-9]+: 90 nop @@ -315,7 +315,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: eb 0a jmp 240 [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+240 : [ ]*[a-f0-9]+: 90 nop @@ -336,7 +336,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 90 nop [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+260 : [ ]*[a-f0-9]+: 90 nop @@ -387,7 +387,7 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 90 nop [ ]*[a-f0-9]+: 90 nop [ ]*[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si 0+2a0 : [ ]*[a-f0-9]+: 90 nop @@ -450,5 +450,5 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 90 nop [ ]*[a-f0-9]+: 90 nop [ ]*[a-f0-9]+: 90 nop -[ ]*[a-f0-9]+: 66 90 xchg %eax,%eax +[ ]*[a-f0-9]+: 89 f6 mov %si,%si #pass diff --git a/gas/testsuite/gas/i386/x86-64-nop-2.d b/gas/testsuite/gas/i386/x86-64-nop-2.d index 4e38b73729a..159454168f2 100644 --- a/gas/testsuite/gas/i386/x86-64-nop-2.d +++ b/gas/testsuite/gas/i386/x86-64-nop-2.d @@ -27,7 +27,7 @@ Disassembly of section .text: +[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si +[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si +[a-f0-9]+: 8d b4 00 00 lea 0x0\(%si\),%si - +[a-f0-9]+: 66 90 xchg %eax,%eax + +[a-f0-9]+: 89 f6 mov %si,%si 0+26 : +[a-f0-9]+: eb 1c jmp 44 -- 2.30.2