]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: correct {RD,WR}{FS,GS}BASE {dis,}assembly
authorJan Beulich <jbeulich@suse.com>
Fri, 5 Dec 2025 08:10:28 +0000 (09:10 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 5 Dec 2025 08:10:28 +0000 (09:10 +0100)
First they are valid only in 64-bit mode. And then an operand size prefix
has no meaning here, hence v_mode is wrong to use; switch to dq_mode.

gas/testsuite/gas/i386/fsgs-intel.d [deleted file]
gas/testsuite/gas/i386/fsgs.d [deleted file]
gas/testsuite/gas/i386/fsgs.s [deleted file]
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/x86-64-fsgs-intel.d
gas/testsuite/gas/i386/x86-64-fsgs.d
gas/testsuite/gas/i386/x86-64-fsgs.s
opcodes/i386-dis.c
opcodes/i386-gen.c
opcodes/i386-init.h
opcodes/i386-tbl.h

diff --git a/gas/testsuite/gas/i386/fsgs-intel.d b/gas/testsuite/gas/i386/fsgs-intel.d
deleted file mode 100644 (file)
index 84e2ff6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#objdump: -dwMintel
-#name: i386 FSGSBase (Intel disassembly)
-#source: fsgs.s
-
-.*: +file format .*
-
-
-Disassembly of section .text:
-
-0+ <foo>:
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase ebx
-#pass
diff --git a/gas/testsuite/gas/i386/fsgs.d b/gas/testsuite/gas/i386/fsgs.d
deleted file mode 100644 (file)
index f7b0d0f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#objdump: -dw
-#name: i386 FSGSBase
-
-.*: +file format .*
-
-
-Disassembly of section .text:
-
-0+ <foo>:
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae cb             rdgsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae d3             wrfsbase %ebx
-[      ]*[a-f0-9]+:    f3 0f ae db             wrgsbase %ebx
-#pass
diff --git a/gas/testsuite/gas/i386/fsgs.s b/gas/testsuite/gas/i386/fsgs.s
deleted file mode 100644 (file)
index 92473a8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# Check FSGSBase new instructions.
-
-       .text
-foo:
-       .rept 2
-       rdfsbase %ebx
-       rdgsbase %ebx
-       wrfsbase %ebx
-       wrgsbase %ebx
-
-       .intel_syntax noprefix
-       rdfsbase ebx
-       rdgsbase ebx
-       wrfsbase ebx
-       wrgsbase ebx
-
-       .att_syntax prefix
-       .code16
-       .endr
index 9b23a7b671dc3f276583d418bd96133f50b27947..822e8e1551311ce60a53720356d42d55b01996ff 100644 (file)
@@ -364,8 +364,6 @@ if [gas_32_check] then {
     run_dump_test "tbm-16bit"
     run_dump_test "f16c"
     run_dump_test "f16c-intel"
-    run_dump_test "fsgs"
-    run_dump_test "fsgs-intel"
     run_dump_test "rdrnd"
     run_dump_test "rdrnd-intel"
     run_dump_test "bundle"
index 778f83ddf7b67794d84adbb689c099bdb3cc9c20..ba768e80971e2aa781fd37c7ba2898cf5d12302f 100644 (file)
@@ -1,3 +1,4 @@
+#as: --divide
 #objdump: -drwMintel
 #name: x86-64 FSGSBase (Intel mode)
 #source: x86-64-fsgs.s
@@ -24,6 +25,8 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    f3 48 0f ae db          wrgsbase rbx
 [      ]*[a-f0-9]+:    f3 41 0f ae d8          wrgsbase r8d
 [      ]*[a-f0-9]+:    f3 49 0f ae d8          wrgsbase r8
+[      ]*[a-f0-9]+:    66 f3 0f ae c1          data16 rdfsbase ecx
+[      ]*[a-f0-9]+:    f3 66 0f ae d9          data16 wrgsbase ecx
 [      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase ebx
 [      ]*[a-f0-9]+:    f3 48 0f ae c3          rdfsbase rbx
 [      ]*[a-f0-9]+:    f3 41 0f ae c0          rdfsbase r8d
index 0549a3fec84b023708470687efe3da40f9877276..4ce1e6818553dd4228e091b8b73b8a709f5447d6 100644 (file)
@@ -1,3 +1,4 @@
+#as: --divide
 #objdump: -dw
 #name: x86-64 FSGSBase
 
@@ -23,6 +24,8 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    f3 48 0f ae db          wrgsbase %rbx
 [      ]*[a-f0-9]+:    f3 41 0f ae d8          wrgsbase %r8d
 [      ]*[a-f0-9]+:    f3 49 0f ae d8          wrgsbase %r8
+[      ]*[a-f0-9]+:    66 f3 0f ae c1          data16 rdfsbase %ecx
+[      ]*[a-f0-9]+:    f3 66 0f ae d9          data16 wrgsbase %ecx
 [      ]*[a-f0-9]+:    f3 0f ae c3             rdfsbase %ebx
 [      ]*[a-f0-9]+:    f3 48 0f ae c3          rdfsbase %rbx
 [      ]*[a-f0-9]+:    f3 41 0f ae c0          rdfsbase %r8d
index 8234b85dd8c194c0ccf3a2227856721b91a9bd60..3356348f589fe95604893a236ec09beaedbc0b3b 100644 (file)
@@ -19,6 +19,10 @@ foo:
        wrgsbase %r8d
        wrgsbase %r8
 
+       data16 rdfsbase %ecx
+       repe
+       .insn 0x0fae/3, %cx
+
        .intel_syntax noprefix
        rdfsbase ebx
        rdfsbase rbx
index ac37a96957b99c6cbdc0e7466a8ec8df0c9bb44f..03b51d8bdef491d0d3ded5f2061976f55a558e39 100644 (file)
@@ -1358,6 +1358,10 @@ enum
   X86_64_0F388A,
   X86_64_0F388B,
   X86_64_0F38F8_M_1,
+  X86_64_0FAE_REG_0_MOD_3_PREFIX_1,
+  X86_64_0FAE_REG_1_MOD_3_PREFIX_1,
+  X86_64_0FAE_REG_2_MOD_3_PREFIX_1,
+  X86_64_0FAE_REG_3_MOD_3_PREFIX_1,
   X86_64_0FC7_REG_6_MOD_3_PREFIX_1,
 
   X86_64_VEX_0F3848,
@@ -3595,25 +3599,25 @@ static const struct dis386 prefix_table[][4] = {
   /* PREFIX_0FAE_REG_0_MOD_3 */
   {
     { Bad_Opcode },
-    { "rdfsbase", { Ev }, 0 },
+    { X86_64_TABLE (X86_64_0FAE_REG_0_MOD_3_PREFIX_1) },
   },
 
   /* PREFIX_0FAE_REG_1_MOD_3 */
   {
     { Bad_Opcode },
-    { "rdgsbase", { Ev }, 0 },
+    { X86_64_TABLE (X86_64_0FAE_REG_1_MOD_3_PREFIX_1) },
   },
 
   /* PREFIX_0FAE_REG_2_MOD_3 */
   {
     { Bad_Opcode },
-    { "wrfsbase", { Ev }, 0 },
+    { X86_64_TABLE (X86_64_0FAE_REG_2_MOD_3_PREFIX_1) },
   },
 
   /* PREFIX_0FAE_REG_3_MOD_3 */
   {
     { Bad_Opcode },
-    { "wrgsbase", { Ev }, 0 },
+    { X86_64_TABLE (X86_64_0FAE_REG_3_MOD_3_PREFIX_1) },
   },
 
   /* PREFIX_0FAE_REG_4_MOD_0 */
@@ -4707,6 +4711,30 @@ static const struct dis386 x86_64_table[][2] = {
     { PREFIX_TABLE (PREFIX_0F38F8_M_1_X86_64) },
   },
 
+  /* X86_64_0FAE_REG_0_MOD_3_PREFIX_1 */
+  {
+    { Bad_Opcode },
+    { "rdfsbase", { Edq }, 0 },
+  },
+
+  /* X86_64_0FAE_REG_1_MOD_3_PREFIX_1 */
+  {
+    { Bad_Opcode },
+    { "rdgsbase", { Edq }, 0 },
+  },
+
+  /* X86_64_0FAE_REG_2_MOD_3_PREFIX_1 */
+  {
+    { Bad_Opcode },
+    { "wrfsbase", { Edq }, 0 },
+  },
+
+  /* X86_64_0FAE_REG_3_MOD_3_PREFIX_1 */
+  {
+    { Bad_Opcode },
+    { "wrgsbase", { Edq }, 0 },
+  },
+
   /* X86_64_0FC7_REG_6_MOD_3_PREFIX_1 */
   {
     { Bad_Opcode },
index bc86f2befbb17fc86f637806cc9ac8b304c69d5b..7b160dc8c87579635b3f0b07f15af99dab8750f8 100644 (file)
@@ -281,6 +281,8 @@ static const dependency isa_dependencies[] =
     "SSE2" },
   { "WIDEKL",
     "KL" },
+  { "FSGSBase",
+    "64" },
   { "PBNDKB",
     "64" },
   { "UINTR",
index bcc670585a3e7defd7af1babebfe1082351c3eeb..8b92159ce746a0d04cca485a6e23afaf756812dd 100644 (file)
 #define CPU_ANY_64_FLAGS \
   { { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, \
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 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, 1, 0, 0, 0, 1, 0, 1, 0, 0, \
       1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
index 0e9d98c219d07d710c8e4626f848636bee7ba808..351d2897d7ec4b78752748564273d934b2b71549 100644 (file)
@@ -31664,7 +31664,7 @@ static const insn_template i386_optab[] =
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { 57, 0, 0, 0, 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 } },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
          0, 0, 0, 0, 0, 0 } } } },
@@ -31672,7 +31672,7 @@ static const insn_template i386_optab[] =
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { 57, 0, 0, 0, 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 } },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
          0, 0, 0, 0, 0, 0 } } } },
@@ -31688,7 +31688,7 @@ static const insn_template i386_optab[] =
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { 57, 0, 0, 0, 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 } },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
          0, 0, 0, 0, 0, 0 } } } },
@@ -31696,7 +31696,7 @@ static const insn_template i386_optab[] =
     { 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+    { { 57, 0, 0, 0, 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 } },
     { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
          0, 0, 0, 0, 0, 0 } } } },