x86-64: make SYSEXIT handling similar to SYSRET's
authorJan Beulich <jbeulich@suse.com>
Tue, 9 Mar 2021 07:53:38 +0000 (08:53 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 9 Mar 2021 07:53:38 +0000 (08:53 +0100)
Despite SYSEXIT being an Intel-only insn in long mode, its behavior
there is similar to SYSRET's: Depending on REX.W execution continues in
either 64-bit or compatibility mode. Hence distinguishing by suffix is
as necessary here as it is there.

16 files changed:
gas/ChangeLog
gas/testsuite/gas/i386/noreg-intel64.l
gas/testsuite/gas/i386/noreg64-data16.d
gas/testsuite/gas/i386/noreg64-data16.e
gas/testsuite/gas/i386/noreg64-rex64.d
gas/testsuite/gas/i386/noreg64.d
gas/testsuite/gas/i386/noreg64.l
gas/testsuite/gas/i386/noreg64.s
gas/testsuite/gas/i386/x86-64-sysenter-amd.d
gas/testsuite/gas/i386/x86-64-sysenter-amd.l
gas/testsuite/gas/i386/x86-64-sysenter-amd.s
gas/testsuite/gas/i386/x86-64-sysenter-intel.d
opcodes/ChangeLog
opcodes/i386-dis.c
opcodes/i386-opc.tbl
opcodes/i386-tbl.h

index 8dd9a59d0729e96b7d7dd4582a2dd7afdece295e..ee553fbb0c2dbb8986c949a9868c7f5bd1a628d4 100644 (file)
@@ -1,3 +1,18 @@
+2021-03-09  Jan Beulich  <jbeulich@suse.com>
+
+       * testsuite/gas/i386/noreg64.s: Add sysexit.
+       * testsuite/gas/i386/x86-64-sysenter-amd.s: Split sysexit into
+       sysexitl and sysexitq.
+       * testsuite/gas/i386/noreg-intel64.l,
+       testsuite/gas/i386/noreg64-data16.d,
+       testsuite/gas/i386/noreg64-data16.e,
+       testsuite/gas/i386/noreg64-rex64.d,
+       testsuite/gas/i386/noreg64.d,
+       testsuite/gas/i386/noreg64.l,
+       testsuite/gas/i386/x86-64-sysenter-amd.d,
+       testsuite/gas/i386/x86-64-sysenter-amd.l,
+       testsuite/gas/i386/x86-64-sysenter-intel.d: Adjust expectations.
+
 2021-02-26  Nick Clifton  <nickc@redhat.com>
 
        PR 27411
index 4bcec14e1a34684c3f0155e8cb8465518690b6f1..9b9226d6d4e9a257148bb358065282819b6d2ca7 100644 (file)
 .*:[1-9][0-9]*: Warning: .* `sub'
 .*:[1-9][0-9]*: Warning: .* `sub'
 .*:[1-9][0-9]*: Warning: .* `sub'
+.*:[1-9][0-9]*: Warning: .* `sysexit'
 .*:[1-9][0-9]*: Warning: .* `sysret'
 .*:[1-9][0-9]*: Warning: .* `test'
 .*:[1-9][0-9]*: Warning: .* `test'
index 881043df61e48aca86e009b338909029df5529ae..f5e921c14fcd3ba9edc259fa1a6041f8b35d3342 100644 (file)
@@ -150,6 +150,7 @@ Disassembly of section .text:
  *[a-f0-9]+:   66 81 28 89 00          subw   \$0x89,\(%rax\)
  *[a-f0-9]+:   66 81 28 34 12          subw   \$0x1234,\(%rax\)
  *[a-f0-9]+:   66 81 28 78 56          subw   \$0x5678,\(%rax\)
+ *[a-f0-9]+:   66 0f 35                data16 sysexitl *
  *[a-f0-9]+:   66 0f 07                data16 sysretl *
  *[a-f0-9]+:   66 f7 00 89 00          testw  \$0x89,\(%rax\)
  *[a-f0-9]+:   66 f7 00 34 12          testw  \$0x1234,\(%rax\)
index 24c595a7b2be9c7b044b80c14c7ddef90550878f..5b37033f9593751bf0abd7735c296d0c2e063410 100644 (file)
@@ -7,5 +7,5 @@
 .*:117: Warning: .*shortened.*
 .*:146: Warning: .*shortened.*
 .*:170: Warning: .*shortened.*
-.*:174: Warning: .*shortened.*
-.*:178: Warning: .*shortened.*
+.*:175: Warning: .*shortened.*
+.*:179: Warning: .*shortened.*
index db36de483c55bf2575573c5be6256bec3ded1590..bf16ab7e417fc41453deaafccdbdb476dddc08ca 100644 (file)
@@ -149,6 +149,7 @@ Disassembly of section .text:
  *[a-f0-9]+:   48 81 28 89 00 00 00    subq   \$0x89,\(%rax\)
  *[a-f0-9]+:   48 81 28 34 12 00 00    subq   \$0x1234,\(%rax\)
  *[a-f0-9]+:   48 81 28 78 56 34 12    subq   \$0x12345678,\(%rax\)
+ *[a-f0-9]+:   48 0f 35                sysexitq *
  *[a-f0-9]+:   48 0f 07                sysretq *
  *[a-f0-9]+:   48 f7 00 89 00 00 00    testq  \$0x89,\(%rax\)
  *[a-f0-9]+:   48 f7 00 34 12 00 00    testq  \$0x1234,\(%rax\)
index 6cc461f485b0337a3b7cabc4fda47a86c80709f7..e73caeed893b1c74aa57b4859ccf04cb3609678d 100644 (file)
@@ -151,6 +151,7 @@ Disassembly of section .text:
  *[a-f0-9]+:   81 28 89 00 00 00       subl   \$0x89,\(%rax\)
  *[a-f0-9]+:   81 28 34 12 00 00       subl   \$0x1234,\(%rax\)
  *[a-f0-9]+:   81 28 78 56 34 12       subl   \$0x12345678,\(%rax\)
+ *[a-f0-9]+:   0f 35                   sysexitl *
  *[a-f0-9]+:   0f 07                   sysretl *
  *[a-f0-9]+:   f7 00 89 00 00 00       testl  \$0x89,\(%rax\)
  *[a-f0-9]+:   f7 00 34 12 00 00       testl  \$0x1234,\(%rax\)
index c4e8b05c595a1f600a6af1bc977eca1a43d0e2fd..23baa2606c28645e4c92862a57568e0a172e8a27 100644 (file)
 .*:[1-9][0-9]*: Warning: .* `sub'
 .*:[1-9][0-9]*: Warning: .* `sub'
 .*:[1-9][0-9]*: Warning: .* `sub'
+.*:[1-9][0-9]*: Warning: .* `sysexit'
 .*:[1-9][0-9]*: Warning: .* `sysret'
 .*:[1-9][0-9]*: Warning: .* `test'
 .*:[1-9][0-9]*: Warning: .* `test'
index 6845bb7348769ecf8d55f4a0d0305549aca5ddb9..c067f88ce1724edc3359d9ac8f8aea339fbb276b 100644 (file)
@@ -168,6 +168,7 @@ noreg:
        pfx sub $0x89, (%rax)
        pfx sub $0x1234, (%rax)
        pfx sub $0x12345678, (%rax)
+       pfx sysexit
        pfx sysret
        pfx test        $0x89, (%rax)
        pfx test        $0x1234, (%rax)
index 5b2fc37a64eb0bbda0602b64fbe3bfe4272eab16..b3fa23cad86c71cb83e7eb00caecd5d95ae5478d 100644 (file)
@@ -9,6 +9,8 @@ Disassembly of section .text:
 0+ <.text>:
 [      ]*[a-f0-9]+:[   ]+0f 34[        ]+\(bad\)[      ]*
 [      ]*[a-f0-9]+:[   ]+0f 35[        ]+\(bad\)[      ]*
+[      ]*[a-f0-9]+:[   ]+48 0f 35[     ]+\(bad\)[      ]*
 [      ]*[a-f0-9]+:[   ]+0f 34[        ]+\(bad\)[      ]*
 [      ]*[a-f0-9]+:[   ]+0f 35[        ]+\(bad\)[      ]*
+[      ]*[a-f0-9]+:[   ]+48 0f 35[     ]+\(bad\)[      ]*
 #pass
index faa2562335d74da7cb1f7ebd16951680c1c2993f..c7d30e2c7f8b88420d93f42a31ac30e1a65b6ed0 100644 (file)
@@ -1,5 +1,7 @@
 .*: Assembler messages:
 .*:2: Error: .*
 .*:3: Error: .*
-.*:6: Error: .*
+.*:4: Error: .*
 .*:7: Error: .*
+.*:8: Error: .*
+.*:9: Error: .*
index b6d31f99ceb58c91e2800f8efe19c3add8840bbc..bf9bddaedd4ac8bb2327d6ee37e65bece00a3b00 100644 (file)
@@ -1,7 +1,9 @@
        .text
        sysenter
-       sysexit
+       sysexitl
+       sysexitq
 
        .intel_syntax noprefix
        sysenter
-       sysexit
+       sysexitd
+       sysexitq
index ffd5e3e96a897f19e99f1dc0a4e24d57ea6c7b7a..451cd91d5de62a910f80363093e0397eaca904e7 100644 (file)
@@ -9,7 +9,9 @@ Disassembly of section .text:
 
 0+ <.text>:
 [      ]*[a-f0-9]+:    0f 34                   sysenter *
-[      ]*[a-f0-9]+:    0f 35                   sysexit *
+[      ]*[a-f0-9]+:    0f 35                   sysexitl *
+[      ]*[a-f0-9]+:    48 0f 35                sysexitq *
 [      ]*[a-f0-9]+:    0f 34                   sysenter *
-[      ]*[a-f0-9]+:    0f 35                   sysexit *
+[      ]*[a-f0-9]+:    0f 35                   sysexitl *
+[      ]*[a-f0-9]+:    48 0f 35                sysexitq *
 #pass
index d15907029dacbae203065b0941972e277955d401..1b689f32e2ffa430c3119042faba6754e066e5c2 100644 (file)
@@ -1,3 +1,10 @@
+2021-03-09  Jan Beulich  <jbeulich@suse.com>
+
+       * opcodes/i386-dis.c (dis386_twobyte): Add %LQ to sysexit.
+       * opcodes/i386-opc.tbl (sysexit): Drop No_lSuf and No_qSuf from
+       64-bit form.
+       * opcodes/i386-tbl.h: Re-generate.
+
 2021-03-03  Jan Beulich  <jbeulich@suse.com>
 
        * i386-gen.c (output_i386_opcode): Don't get operand count. Look
index 59888c8c53661b019f0b46f01ff6b4526569d5c5..6a34ce534f6bc5b7d9d123edd3745c10d130fe26 100644 (file)
@@ -2180,7 +2180,7 @@ static const struct dis386 dis386_twobyte[] = {
   { "rdmsr",           { XX }, 0 },
   { "rdpmc",           { XX }, 0 },
   { "sysenter",                { SEP }, 0 },
-  { "sysexit",         { SEP }, 0 },
+  { "sysexit%LQ",      { SEP }, 0 },
   { Bad_Opcode },
   { "getsec",          { XX }, 0 },
   /* 38 */
index 87f69af37d9635844c447ccaffafb091a2de5749..e792cedf96970f87d9065570ee0a2b3f100f3178 100644 (file)
@@ -877,7 +877,7 @@ cmpxchg8b, 0xfc7, 0x1, 2, Cpu586, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf
 // Pentium II/Pentium Pro extensions.
 sysenter, 0xf34, None, 2, Cpu64, Intel64Only|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
 sysenter, 0xf34, None, 2, Cpu686|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
-sysexit, 0xf35, None, 2, Cpu64, Intel64Only|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
+sysexit, 0xf35, None, 2, Cpu64, Intel64Only|No_bSuf|No_wSuf|No_sSuf|No_ldSuf, {}
 sysexit, 0xf35, None, 2, Cpu686|CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
 fxsave, 0xfae, 0x0, 2, CpuFXSR, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf, { Unspecified|BaseIndex }
 fxsave64, 0xfae, 0x0, 2, CpuFXSR|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Size64, { Unspecified|BaseIndex }
index b2457c6f4c3d62e2fa918db4117771f9ac719150..12b049e16d7aee5e8029f34fd4a0562ea44ed602 100644 (file)
@@ -8508,7 +8508,7 @@ const insn_template i386_optab[] =
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 1, 0, 0 } },
-    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 },
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,