Merge branch 'x86-misc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull misc x86 updates from Ingo Molnar:

 - extend the decoder maps with CET instructions

 - fix !vDSO corner cases

* 'x86-misc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf/tests: Add CET instructions to the new instructions test
  x86/insn: Add Control-flow Enforcement (CET) instructions to the opcode map
  selftests/x86/ptrace_syscall_32: Fix no-vDSO segfault
  selftests/x86/vdso: Fix no-vDSO segfaults
This commit is contained in:
Linus Torvalds 2020-03-31 11:30:45 -07:00
commit 7cc7e93519
8 changed files with 592 additions and 14 deletions

View File

@ -366,7 +366,7 @@ AVXcode: 1
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
1c: Grp20 (1A),(1C)
1d:
1e:
1e: Grp21 (1A)
1f: NOP Ev
# 0x0f 0x20-0x2f
20: MOV Rd,Cd
@ -803,8 +803,8 @@ f0: MOVBE Gy,My | MOVBE Gw,Mw (66) | CRC32 Gd,Eb (F2) | CRC32 Gd,Eb (66&F2)
f1: MOVBE My,Gy | MOVBE Mw,Gw (66) | CRC32 Gd,Ey (F2) | CRC32 Gd,Ew (66&F2)
f2: ANDN Gy,By,Ey (v)
f3: Grp17 (1A)
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v)
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v)
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) | WRUSSD/Q My,Gy (66)
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSSD/Q My,Gy
f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v)
f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3)
f9: MOVDIRI My,Gy
@ -970,7 +970,7 @@ GrpTable: Grp7
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B)
3: LIDT Ms
4: SMSW Mw/Rv
5: rdpkru (110),(11B) | wrpkru (111),(11B)
5: rdpkru (110),(11B) | wrpkru (111),(11B) | SAVEPREVSSP (F3),(010),(11B) | RSTORSSP Mq (F3) | SETSSBSY (F3),(000),(11B)
6: LMSW Ew
7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B)
EndTable
@ -1041,8 +1041,8 @@ GrpTable: Grp15
2: vldmxcsr Md (v1) | WRFSBASE Ry (F3),(11B)
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
4: XSAVE | ptwrite Ey (F3),(11B)
5: XRSTOR | lfence (11B)
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B)
5: XRSTOR | lfence (11B) | INCSSPD/Q Ry (F3),(11B)
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) | CLRSSBSY Mq (F3)
7: clflush | clflushopt (66) | sfence (11B)
EndTable
@ -1077,6 +1077,11 @@ GrpTable: Grp20
0: cldemote Mb
EndTable
GrpTable: Grp21
1: RDSSPD/Q Ry (F3),(11B)
7: ENDBR64 (F3),(010),(11B) | ENDBR32 (F3),(011),(11B)
EndTable
# AMD's Prefetch Group
GrpTable: GrpP
0: PREFETCH

View File

@ -366,7 +366,7 @@ AVXcode: 1
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
1c: Grp20 (1A),(1C)
1d:
1e:
1e: Grp21 (1A)
1f: NOP Ev
# 0x0f 0x20-0x2f
20: MOV Rd,Cd
@ -803,8 +803,8 @@ f0: MOVBE Gy,My | MOVBE Gw,Mw (66) | CRC32 Gd,Eb (F2) | CRC32 Gd,Eb (66&F2)
f1: MOVBE My,Gy | MOVBE Mw,Gw (66) | CRC32 Gd,Ey (F2) | CRC32 Gd,Ew (66&F2)
f2: ANDN Gy,By,Ey (v)
f3: Grp17 (1A)
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v)
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v)
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) | WRUSSD/Q My,Gy (66)
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSSD/Q My,Gy
f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v)
f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3)
f9: MOVDIRI My,Gy
@ -970,7 +970,7 @@ GrpTable: Grp7
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B)
3: LIDT Ms
4: SMSW Mw/Rv
5: rdpkru (110),(11B) | wrpkru (111),(11B)
5: rdpkru (110),(11B) | wrpkru (111),(11B) | SAVEPREVSSP (F3),(010),(11B) | RSTORSSP Mq (F3) | SETSSBSY (F3),(000),(11B)
6: LMSW Ew
7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B)
EndTable
@ -1041,8 +1041,8 @@ GrpTable: Grp15
2: vldmxcsr Md (v1) | WRFSBASE Ry (F3),(11B)
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
4: XSAVE | ptwrite Ey (F3),(11B)
5: XRSTOR | lfence (11B)
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B)
5: XRSTOR | lfence (11B) | INCSSPD/Q Ry (F3),(11B)
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) | CLRSSBSY Mq (F3)
7: clflush | clflushopt (66) | sfence (11B)
EndTable
@ -1077,6 +1077,11 @@ GrpTable: Grp20
0: cldemote Mb
EndTable
GrpTable: Grp21
1: RDSSPD/Q Ry (F3),(11B)
7: ENDBR64 (F3),(010),(11B) | ENDBR32 (F3),(011),(11B)
EndTable
# AMD's Prefetch Group
GrpTable: GrpP
0: PREFETCH

View File

@ -2085,6 +2085,118 @@
"67 f3 0f 38 f8 1c \tenqcmds (%si),%bx",},
{{0x67, 0xf3, 0x0f, 0x38, 0xf8, 0x8c, 0x34, 0x12, }, 8, 0, "", "",
"67 f3 0f 38 f8 8c 34 12 \tenqcmds 0x1234(%si),%cx",},
{{0xf3, 0x0f, 0xae, 0xe8, }, 4, 0, "", "",
"f3 0f ae e8 \tincsspd %eax",},
{{0x0f, 0xae, 0x28, }, 3, 0, "", "",
"0f ae 28 \txrstor (%eax)",},
{{0x0f, 0xae, 0x2d, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
"0f ae 2d 78 56 34 12 \txrstor 0x12345678",},
{{0x0f, 0xae, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
"0f ae ac c8 78 56 34 12 \txrstor 0x12345678(%eax,%ecx,8)",},
{{0x0f, 0xae, 0xe8, }, 3, 0, "", "",
"0f ae e8 \tlfence ",},
{{0xf3, 0x0f, 0x1e, 0xc8, }, 4, 0, "", "",
"f3 0f 1e c8 \trdsspd %eax",},
{{0xf3, 0x0f, 0x01, 0xea, }, 4, 0, "", "",
"f3 0f 01 ea \tsaveprevssp ",},
{{0xf3, 0x0f, 0x01, 0x28, }, 4, 0, "", "",
"f3 0f 01 28 \trstorssp (%eax)",},
{{0xf3, 0x0f, 0x01, 0x2d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
"f3 0f 01 2d 78 56 34 12 \trstorssp 0x12345678",},
{{0xf3, 0x0f, 0x01, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"f3 0f 01 ac c8 78 56 34 12 \trstorssp 0x12345678(%eax,%ecx,8)",},
{{0x0f, 0x38, 0xf6, 0x08, }, 4, 0, "", "",
"0f 38 f6 08 \twrssd %ecx,(%eax)",},
{{0x0f, 0x38, 0xf6, 0x15, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
"0f 38 f6 15 78 56 34 12 \twrssd %edx,0x12345678",},
{{0x0f, 0x38, 0xf6, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"0f 38 f6 94 c8 78 56 34 12 \twrssd %edx,0x12345678(%eax,%ecx,8)",},
{{0x66, 0x0f, 0x38, 0xf5, 0x08, }, 5, 0, "", "",
"66 0f 38 f5 08 \twrussd %ecx,(%eax)",},
{{0x66, 0x0f, 0x38, 0xf5, 0x15, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"66 0f 38 f5 15 78 56 34 12 \twrussd %edx,0x12345678",},
{{0x66, 0x0f, 0x38, 0xf5, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"66 0f 38 f5 94 c8 78 56 34 12 \twrussd %edx,0x12345678(%eax,%ecx,8)",},
{{0xf3, 0x0f, 0x01, 0xe8, }, 4, 0, "", "",
"f3 0f 01 e8 \tsetssbsy ",},
{{0x0f, 0x01, 0xee, }, 3, 0, "", "",
"0f 01 ee \trdpkru ",},
{{0x0f, 0x01, 0xef, }, 3, 0, "", "",
"0f 01 ef \twrpkru ",},
{{0xf3, 0x0f, 0xae, 0x30, }, 4, 0, "", "",
"f3 0f ae 30 \tclrssbsy (%eax)",},
{{0xf3, 0x0f, 0xae, 0x35, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
"f3 0f ae 35 78 56 34 12 \tclrssbsy 0x12345678",},
{{0xf3, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"f3 0f ae b4 c8 78 56 34 12 \tclrssbsy 0x12345678(%eax,%ecx,8)",},
{{0xf3, 0x0f, 0x1e, 0xfb, }, 4, 0, "", "",
"f3 0f 1e fb \tendbr32 ",},
{{0xf3, 0x0f, 0x1e, 0xfa, }, 4, 0, "", "",
"f3 0f 1e fa \tendbr64 ",},
{{0xff, 0xd0, }, 2, 0, "call", "indirect",
"ff d0 \tcall *%eax",},
{{0xff, 0x10, }, 2, 0, "call", "indirect",
"ff 10 \tcall *(%eax)",},
{{0xff, 0x15, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "call", "indirect",
"ff 15 78 56 34 12 \tcall *0x12345678",},
{{0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "call", "indirect",
"ff 94 c8 78 56 34 12 \tcall *0x12345678(%eax,%ecx,8)",},
{{0xf2, 0xff, 0xd0, }, 3, 0, "call", "indirect",
"f2 ff d0 \tbnd call *%eax",},
{{0xf2, 0xff, 0x10, }, 3, 0, "call", "indirect",
"f2 ff 10 \tbnd call *(%eax)",},
{{0xf2, 0xff, 0x15, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "call", "indirect",
"f2 ff 15 78 56 34 12 \tbnd call *0x12345678",},
{{0xf2, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"f2 ff 94 c8 78 56 34 12 \tbnd call *0x12345678(%eax,%ecx,8)",},
{{0x3e, 0xff, 0xd0, }, 3, 0, "call", "indirect",
"3e ff d0 \tnotrack call *%eax",},
{{0x3e, 0xff, 0x10, }, 3, 0, "call", "indirect",
"3e ff 10 \tnotrack call *(%eax)",},
{{0x3e, 0xff, 0x15, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "call", "indirect",
"3e ff 15 78 56 34 12 \tnotrack call *0x12345678",},
{{0x3e, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"3e ff 94 c8 78 56 34 12 \tnotrack call *0x12345678(%eax,%ecx,8)",},
{{0x3e, 0xf2, 0xff, 0xd0, }, 4, 0, "call", "indirect",
"3e f2 ff d0 \tnotrack bnd call *%eax",},
{{0x3e, 0xf2, 0xff, 0x10, }, 4, 0, "call", "indirect",
"3e f2 ff 10 \tnotrack bnd call *(%eax)",},
{{0x3e, 0xf2, 0xff, 0x15, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"3e f2 ff 15 78 56 34 12 \tnotrack bnd call *0x12345678",},
{{0x3e, 0xf2, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "call", "indirect",
"3e f2 ff 94 c8 78 56 34 12 \tnotrack bnd call *0x12345678(%eax,%ecx,8)",},
{{0xff, 0xe0, }, 2, 0, "jmp", "indirect",
"ff e0 \tjmp *%eax",},
{{0xff, 0x20, }, 2, 0, "jmp", "indirect",
"ff 20 \tjmp *(%eax)",},
{{0xff, 0x25, 0x78, 0x56, 0x34, 0x12, }, 6, 0, "jmp", "indirect",
"ff 25 78 56 34 12 \tjmp *0x12345678",},
{{0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "jmp", "indirect",
"ff a4 c8 78 56 34 12 \tjmp *0x12345678(%eax,%ecx,8)",},
{{0xf2, 0xff, 0xe0, }, 3, 0, "jmp", "indirect",
"f2 ff e0 \tbnd jmp *%eax",},
{{0xf2, 0xff, 0x20, }, 3, 0, "jmp", "indirect",
"f2 ff 20 \tbnd jmp *(%eax)",},
{{0xf2, 0xff, 0x25, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "jmp", "indirect",
"f2 ff 25 78 56 34 12 \tbnd jmp *0x12345678",},
{{0xf2, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"f2 ff a4 c8 78 56 34 12 \tbnd jmp *0x12345678(%eax,%ecx,8)",},
{{0x3e, 0xff, 0xe0, }, 3, 0, "jmp", "indirect",
"3e ff e0 \tnotrack jmp *%eax",},
{{0x3e, 0xff, 0x20, }, 3, 0, "jmp", "indirect",
"3e ff 20 \tnotrack jmp *(%eax)",},
{{0x3e, 0xff, 0x25, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "jmp", "indirect",
"3e ff 25 78 56 34 12 \tnotrack jmp *0x12345678",},
{{0x3e, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"3e ff a4 c8 78 56 34 12 \tnotrack jmp *0x12345678(%eax,%ecx,8)",},
{{0x3e, 0xf2, 0xff, 0xe0, }, 4, 0, "jmp", "indirect",
"3e f2 ff e0 \tnotrack bnd jmp *%eax",},
{{0x3e, 0xf2, 0xff, 0x20, }, 4, 0, "jmp", "indirect",
"3e f2 ff 20 \tnotrack bnd jmp *(%eax)",},
{{0x3e, 0xf2, 0xff, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"3e f2 ff 25 78 56 34 12 \tnotrack bnd jmp *0x12345678",},
{{0x3e, 0xf2, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "jmp", "indirect",
"3e f2 ff a4 c8 78 56 34 12 \tnotrack bnd jmp *0x12345678(%eax,%ecx,8)",},
{{0x0f, 0x01, 0xcf, }, 3, 0, "", "",
"0f 01 cf \tencls ",},
{{0x0f, 0x01, 0xd7, }, 3, 0, "", "",

View File

@ -2263,6 +2263,202 @@
"67 f3 0f 38 f8 18 \tenqcmds (%eax),%ebx",},
{{0x67, 0xf3, 0x0f, 0x38, 0xf8, 0x88, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"67 f3 0f 38 f8 88 78 56 34 12 \tenqcmds 0x12345678(%eax),%ecx",},
{{0xf3, 0x0f, 0xae, 0xe8, }, 4, 0, "", "",
"f3 0f ae e8 \tincsspd %eax",},
{{0xf3, 0x41, 0x0f, 0xae, 0xe8, }, 5, 0, "", "",
"f3 41 0f ae e8 \tincsspd %r8d",},
{{0xf3, 0x48, 0x0f, 0xae, 0xe8, }, 5, 0, "", "",
"f3 48 0f ae e8 \tincsspq %rax",},
{{0xf3, 0x49, 0x0f, 0xae, 0xe8, }, 5, 0, "", "",
"f3 49 0f ae e8 \tincsspq %r8",},
{{0x0f, 0xae, 0x28, }, 3, 0, "", "",
"0f ae 28 \txrstor (%rax)",},
{{0x41, 0x0f, 0xae, 0x28, }, 4, 0, "", "",
"41 0f ae 28 \txrstor (%r8)",},
{{0x0f, 0xae, 0x2c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
"0f ae 2c 25 78 56 34 12 \txrstor 0x12345678",},
{{0x0f, 0xae, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
"0f ae ac c8 78 56 34 12 \txrstor 0x12345678(%rax,%rcx,8)",},
{{0x41, 0x0f, 0xae, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"41 0f ae ac c8 78 56 34 12 \txrstor 0x12345678(%r8,%rcx,8)",},
{{0x0f, 0xae, 0xe8, }, 3, 0, "", "",
"0f ae e8 \tlfence ",},
{{0xf3, 0x0f, 0x1e, 0xc8, }, 4, 0, "", "",
"f3 0f 1e c8 \trdsspd %eax",},
{{0xf3, 0x41, 0x0f, 0x1e, 0xc8, }, 5, 0, "", "",
"f3 41 0f 1e c8 \trdsspd %r8d",},
{{0xf3, 0x48, 0x0f, 0x1e, 0xc8, }, 5, 0, "", "",
"f3 48 0f 1e c8 \trdsspq %rax",},
{{0xf3, 0x49, 0x0f, 0x1e, 0xc8, }, 5, 0, "", "",
"f3 49 0f 1e c8 \trdsspq %r8",},
{{0xf3, 0x0f, 0x01, 0xea, }, 4, 0, "", "",
"f3 0f 01 ea \tsaveprevssp ",},
{{0xf3, 0x0f, 0x01, 0x28, }, 4, 0, "", "",
"f3 0f 01 28 \trstorssp (%rax)",},
{{0xf3, 0x41, 0x0f, 0x01, 0x28, }, 5, 0, "", "",
"f3 41 0f 01 28 \trstorssp (%r8)",},
{{0xf3, 0x0f, 0x01, 0x2c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"f3 0f 01 2c 25 78 56 34 12 \trstorssp 0x12345678",},
{{0xf3, 0x0f, 0x01, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"f3 0f 01 ac c8 78 56 34 12 \trstorssp 0x12345678(%rax,%rcx,8)",},
{{0xf3, 0x41, 0x0f, 0x01, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"f3 41 0f 01 ac c8 78 56 34 12 \trstorssp 0x12345678(%r8,%rcx,8)",},
{{0x0f, 0x38, 0xf6, 0x08, }, 4, 0, "", "",
"0f 38 f6 08 \twrssd %ecx,(%rax)",},
{{0x41, 0x0f, 0x38, 0xf6, 0x10, }, 5, 0, "", "",
"41 0f 38 f6 10 \twrssd %edx,(%r8)",},
{{0x0f, 0x38, 0xf6, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"0f 38 f6 14 25 78 56 34 12 \twrssd %edx,0x12345678",},
{{0x0f, 0x38, 0xf6, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"0f 38 f6 94 c8 78 56 34 12 \twrssd %edx,0x12345678(%rax,%rcx,8)",},
{{0x41, 0x0f, 0x38, 0xf6, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"41 0f 38 f6 94 c8 78 56 34 12 \twrssd %edx,0x12345678(%r8,%rcx,8)",},
{{0x48, 0x0f, 0x38, 0xf6, 0x08, }, 5, 0, "", "",
"48 0f 38 f6 08 \twrssq %rcx,(%rax)",},
{{0x49, 0x0f, 0x38, 0xf6, 0x10, }, 5, 0, "", "",
"49 0f 38 f6 10 \twrssq %rdx,(%r8)",},
{{0x48, 0x0f, 0x38, 0xf6, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"48 0f 38 f6 14 25 78 56 34 12 \twrssq %rdx,0x12345678",},
{{0x48, 0x0f, 0x38, 0xf6, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"48 0f 38 f6 94 c8 78 56 34 12 \twrssq %rdx,0x12345678(%rax,%rcx,8)",},
{{0x49, 0x0f, 0x38, 0xf6, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"49 0f 38 f6 94 c8 78 56 34 12 \twrssq %rdx,0x12345678(%r8,%rcx,8)",},
{{0x66, 0x0f, 0x38, 0xf5, 0x08, }, 5, 0, "", "",
"66 0f 38 f5 08 \twrussd %ecx,(%rax)",},
{{0x66, 0x41, 0x0f, 0x38, 0xf5, 0x10, }, 6, 0, "", "",
"66 41 0f 38 f5 10 \twrussd %edx,(%r8)",},
{{0x66, 0x0f, 0x38, 0xf5, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"66 0f 38 f5 14 25 78 56 34 12 \twrussd %edx,0x12345678",},
{{0x66, 0x0f, 0x38, 0xf5, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"66 0f 38 f5 94 c8 78 56 34 12 \twrussd %edx,0x12345678(%rax,%rcx,8)",},
{{0x66, 0x41, 0x0f, 0x38, 0xf5, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 11, 0, "", "",
"66 41 0f 38 f5 94 c8 78 56 34 12 \twrussd %edx,0x12345678(%r8,%rcx,8)",},
{{0x66, 0x48, 0x0f, 0x38, 0xf5, 0x08, }, 6, 0, "", "",
"66 48 0f 38 f5 08 \twrussq %rcx,(%rax)",},
{{0x66, 0x49, 0x0f, 0x38, 0xf5, 0x10, }, 6, 0, "", "",
"66 49 0f 38 f5 10 \twrussq %rdx,(%r8)",},
{{0x66, 0x48, 0x0f, 0x38, 0xf5, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 11, 0, "", "",
"66 48 0f 38 f5 14 25 78 56 34 12 \twrussq %rdx,0x12345678",},
{{0x66, 0x48, 0x0f, 0x38, 0xf5, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 11, 0, "", "",
"66 48 0f 38 f5 94 c8 78 56 34 12 \twrussq %rdx,0x12345678(%rax,%rcx,8)",},
{{0x66, 0x49, 0x0f, 0x38, 0xf5, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 11, 0, "", "",
"66 49 0f 38 f5 94 c8 78 56 34 12 \twrussq %rdx,0x12345678(%r8,%rcx,8)",},
{{0xf3, 0x0f, 0x01, 0xe8, }, 4, 0, "", "",
"f3 0f 01 e8 \tsetssbsy ",},
{{0x0f, 0x01, 0xee, }, 3, 0, "", "",
"0f 01 ee \trdpkru ",},
{{0x0f, 0x01, 0xef, }, 3, 0, "", "",
"0f 01 ef \twrpkru ",},
{{0xf3, 0x0f, 0xae, 0x30, }, 4, 0, "", "",
"f3 0f ae 30 \tclrssbsy (%rax)",},
{{0xf3, 0x41, 0x0f, 0xae, 0x30, }, 5, 0, "", "",
"f3 41 0f ae 30 \tclrssbsy (%r8)",},
{{0xf3, 0x0f, 0xae, 0x34, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"f3 0f ae 34 25 78 56 34 12 \tclrssbsy 0x12345678",},
{{0xf3, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
"f3 0f ae b4 c8 78 56 34 12 \tclrssbsy 0x12345678(%rax,%rcx,8)",},
{{0xf3, 0x41, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
"f3 41 0f ae b4 c8 78 56 34 12 \tclrssbsy 0x12345678(%r8,%rcx,8)",},
{{0xf3, 0x0f, 0x1e, 0xfb, }, 4, 0, "", "",
"f3 0f 1e fb \tendbr32 ",},
{{0xf3, 0x0f, 0x1e, 0xfa, }, 4, 0, "", "",
"f3 0f 1e fa \tendbr64 ",},
{{0xff, 0xd0, }, 2, 0, "call", "indirect",
"ff d0 \tcallq *%rax",},
{{0xff, 0x10, }, 2, 0, "call", "indirect",
"ff 10 \tcallq *(%rax)",},
{{0x41, 0xff, 0x10, }, 3, 0, "call", "indirect",
"41 ff 10 \tcallq *(%r8)",},
{{0xff, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "call", "indirect",
"ff 14 25 78 56 34 12 \tcallq *0x12345678",},
{{0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "call", "indirect",
"ff 94 c8 78 56 34 12 \tcallq *0x12345678(%rax,%rcx,8)",},
{{0x41, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"41 ff 94 c8 78 56 34 12 \tcallq *0x12345678(%r8,%rcx,8)",},
{{0xf2, 0xff, 0xd0, }, 3, 0, "call", "indirect",
"f2 ff d0 \tbnd callq *%rax",},
{{0xf2, 0xff, 0x10, }, 3, 0, "call", "indirect",
"f2 ff 10 \tbnd callq *(%rax)",},
{{0xf2, 0x41, 0xff, 0x10, }, 4, 0, "call", "indirect",
"f2 41 ff 10 \tbnd callq *(%r8)",},
{{0xf2, 0xff, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"f2 ff 14 25 78 56 34 12 \tbnd callq *0x12345678",},
{{0xf2, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"f2 ff 94 c8 78 56 34 12 \tbnd callq *0x12345678(%rax,%rcx,8)",},
{{0xf2, 0x41, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "call", "indirect",
"f2 41 ff 94 c8 78 56 34 12 \tbnd callq *0x12345678(%r8,%rcx,8)",},
{{0x3e, 0xff, 0xd0, }, 3, 0, "call", "indirect",
"3e ff d0 \tnotrack callq *%rax",},
{{0x3e, 0xff, 0x10, }, 3, 0, "call", "indirect",
"3e ff 10 \tnotrack callq *(%rax)",},
{{0x3e, 0x41, 0xff, 0x10, }, 4, 0, "call", "indirect",
"3e 41 ff 10 \tnotrack callq *(%r8)",},
{{0x3e, 0xff, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"3e ff 14 25 78 56 34 12 \tnotrack callq *0x12345678",},
{{0x3e, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "call", "indirect",
"3e ff 94 c8 78 56 34 12 \tnotrack callq *0x12345678(%rax,%rcx,8)",},
{{0x3e, 0x41, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "call", "indirect",
"3e 41 ff 94 c8 78 56 34 12 \tnotrack callq *0x12345678(%r8,%rcx,8)",},
{{0x3e, 0xf2, 0xff, 0xd0, }, 4, 0, "call", "indirect",
"3e f2 ff d0 \tnotrack bnd callq *%rax",},
{{0x3e, 0xf2, 0xff, 0x10, }, 4, 0, "call", "indirect",
"3e f2 ff 10 \tnotrack bnd callq *(%rax)",},
{{0x3e, 0xf2, 0x41, 0xff, 0x10, }, 5, 0, "call", "indirect",
"3e f2 41 ff 10 \tnotrack bnd callq *(%r8)",},
{{0x3e, 0xf2, 0xff, 0x14, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "call", "indirect",
"3e f2 ff 14 25 78 56 34 12 \tnotrack bnd callq *0x12345678",},
{{0x3e, 0xf2, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "call", "indirect",
"3e f2 ff 94 c8 78 56 34 12 \tnotrack bnd callq *0x12345678(%rax,%rcx,8)",},
{{0x3e, 0xf2, 0x41, 0xff, 0x94, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "call", "indirect",
"3e f2 41 ff 94 c8 78 56 34 12 \tnotrack bnd callq *0x12345678(%r8,%rcx,8)",},
{{0xff, 0xe0, }, 2, 0, "jmp", "indirect",
"ff e0 \tjmpq *%rax",},
{{0xff, 0x20, }, 2, 0, "jmp", "indirect",
"ff 20 \tjmpq *(%rax)",},
{{0x41, 0xff, 0x20, }, 3, 0, "jmp", "indirect",
"41 ff 20 \tjmpq *(%r8)",},
{{0xff, 0x24, 0x25, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "jmp", "indirect",
"ff 24 25 78 56 34 12 \tjmpq *0x12345678",},
{{0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "jmp", "indirect",
"ff a4 c8 78 56 34 12 \tjmpq *0x12345678(%rax,%rcx,8)",},
{{0x41, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"41 ff a4 c8 78 56 34 12 \tjmpq *0x12345678(%r8,%rcx,8)",},
{{0xf2, 0xff, 0xe0, }, 3, 0, "jmp", "indirect",
"f2 ff e0 \tbnd jmpq *%rax",},
{{0xf2, 0xff, 0x20, }, 3, 0, "jmp", "indirect",
"f2 ff 20 \tbnd jmpq *(%rax)",},
{{0xf2, 0x41, 0xff, 0x20, }, 4, 0, "jmp", "indirect",
"f2 41 ff 20 \tbnd jmpq *(%r8)",},
{{0xf2, 0xff, 0x24, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"f2 ff 24 25 78 56 34 12 \tbnd jmpq *0x12345678",},
{{0xf2, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"f2 ff a4 c8 78 56 34 12 \tbnd jmpq *0x12345678(%rax,%rcx,8)",},
{{0xf2, 0x41, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "jmp", "indirect",
"f2 41 ff a4 c8 78 56 34 12 \tbnd jmpq *0x12345678(%r8,%rcx,8)",},
{{0x3e, 0xff, 0xe0, }, 3, 0, "jmp", "indirect",
"3e ff e0 \tnotrack jmpq *%rax",},
{{0x3e, 0xff, 0x20, }, 3, 0, "jmp", "indirect",
"3e ff 20 \tnotrack jmpq *(%rax)",},
{{0x3e, 0x41, 0xff, 0x20, }, 4, 0, "jmp", "indirect",
"3e 41 ff 20 \tnotrack jmpq *(%r8)",},
{{0x3e, 0xff, 0x24, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"3e ff 24 25 78 56 34 12 \tnotrack jmpq *0x12345678",},
{{0x3e, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "jmp", "indirect",
"3e ff a4 c8 78 56 34 12 \tnotrack jmpq *0x12345678(%rax,%rcx,8)",},
{{0x3e, 0x41, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "jmp", "indirect",
"3e 41 ff a4 c8 78 56 34 12 \tnotrack jmpq *0x12345678(%r8,%rcx,8)",},
{{0x3e, 0xf2, 0xff, 0xe0, }, 4, 0, "jmp", "indirect",
"3e f2 ff e0 \tnotrack bnd jmpq *%rax",},
{{0x3e, 0xf2, 0xff, 0x20, }, 4, 0, "jmp", "indirect",
"3e f2 ff 20 \tnotrack bnd jmpq *(%rax)",},
{{0x3e, 0xf2, 0x41, 0xff, 0x20, }, 5, 0, "jmp", "indirect",
"3e f2 41 ff 20 \tnotrack bnd jmpq *(%r8)",},
{{0x3e, 0xf2, 0xff, 0x24, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "jmp", "indirect",
"3e f2 ff 24 25 78 56 34 12 \tnotrack bnd jmpq *0x12345678",},
{{0x3e, 0xf2, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "jmp", "indirect",
"3e f2 ff a4 c8 78 56 34 12 \tnotrack bnd jmpq *0x12345678(%rax,%rcx,8)",},
{{0x3e, 0xf2, 0x41, 0xff, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "jmp", "indirect",
"3e f2 41 ff a4 c8 78 56 34 12 \tnotrack bnd jmpq *0x12345678(%r8,%rcx,8)",},
{{0x0f, 0x01, 0xcf, }, 3, 0, "", "",
"0f 01 cf \tencls ",},
{{0x0f, 0x01, 0xd7, }, 3, 0, "", "",

View File

@ -1771,6 +1771,145 @@ int main(void)
asm volatile("enqcmds (%eax),%ebx");
asm volatile("enqcmds 0x12345678(%eax),%ecx");
/* incsspd/q */
asm volatile("incsspd %eax");
asm volatile("incsspd %r8d");
asm volatile("incsspq %rax");
asm volatile("incsspq %r8");
/* Also check instructions in the same group encoding as incsspd/q */
asm volatile("xrstor (%rax)");
asm volatile("xrstor (%r8)");
asm volatile("xrstor (0x12345678)");
asm volatile("xrstor 0x12345678(%rax,%rcx,8)");
asm volatile("xrstor 0x12345678(%r8,%rcx,8)");
asm volatile("lfence");
/* rdsspd/q */
asm volatile("rdsspd %eax");
asm volatile("rdsspd %r8d");
asm volatile("rdsspq %rax");
asm volatile("rdsspq %r8");
/* saveprevssp */
asm volatile("saveprevssp");
/* rstorssp */
asm volatile("rstorssp (%rax)");
asm volatile("rstorssp (%r8)");
asm volatile("rstorssp (0x12345678)");
asm volatile("rstorssp 0x12345678(%rax,%rcx,8)");
asm volatile("rstorssp 0x12345678(%r8,%rcx,8)");
/* wrssd/q */
asm volatile("wrssd %ecx,(%rax)");
asm volatile("wrssd %edx,(%r8)");
asm volatile("wrssd %edx,(0x12345678)");
asm volatile("wrssd %edx,0x12345678(%rax,%rcx,8)");
asm volatile("wrssd %edx,0x12345678(%r8,%rcx,8)");
asm volatile("wrssq %rcx,(%rax)");
asm volatile("wrssq %rdx,(%r8)");
asm volatile("wrssq %rdx,(0x12345678)");
asm volatile("wrssq %rdx,0x12345678(%rax,%rcx,8)");
asm volatile("wrssq %rdx,0x12345678(%r8,%rcx,8)");
/* wrussd/q */
asm volatile("wrussd %ecx,(%rax)");
asm volatile("wrussd %edx,(%r8)");
asm volatile("wrussd %edx,(0x12345678)");
asm volatile("wrussd %edx,0x12345678(%rax,%rcx,8)");
asm volatile("wrussd %edx,0x12345678(%r8,%rcx,8)");
asm volatile("wrussq %rcx,(%rax)");
asm volatile("wrussq %rdx,(%r8)");
asm volatile("wrussq %rdx,(0x12345678)");
asm volatile("wrussq %rdx,0x12345678(%rax,%rcx,8)");
asm volatile("wrussq %rdx,0x12345678(%r8,%rcx,8)");
/* setssbsy */
asm volatile("setssbsy");
/* Also check instructions in the same group encoding as setssbsy */
asm volatile("rdpkru");
asm volatile("wrpkru");
/* clrssbsy */
asm volatile("clrssbsy (%rax)");
asm volatile("clrssbsy (%r8)");
asm volatile("clrssbsy (0x12345678)");
asm volatile("clrssbsy 0x12345678(%rax,%rcx,8)");
asm volatile("clrssbsy 0x12345678(%r8,%rcx,8)");
/* endbr32/64 */
asm volatile("endbr32");
asm volatile("endbr64");
/* call with/without notrack prefix */
asm volatile("callq *%rax"); /* Expecting: call indirect 0 */
asm volatile("callq *(%rax)"); /* Expecting: call indirect 0 */
asm volatile("callq *(%r8)"); /* Expecting: call indirect 0 */
asm volatile("callq *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("callq *0x12345678(%rax,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("callq *0x12345678(%r8,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("bnd callq *%rax"); /* Expecting: call indirect 0 */
asm volatile("bnd callq *(%rax)"); /* Expecting: call indirect 0 */
asm volatile("bnd callq *(%r8)"); /* Expecting: call indirect 0 */
asm volatile("bnd callq *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("bnd callq *0x12345678(%rax,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("bnd callq *0x12345678(%r8,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("notrack callq *%rax"); /* Expecting: call indirect 0 */
asm volatile("notrack callq *(%rax)"); /* Expecting: call indirect 0 */
asm volatile("notrack callq *(%r8)"); /* Expecting: call indirect 0 */
asm volatile("notrack callq *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("notrack callq *0x12345678(%rax,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("notrack callq *0x12345678(%r8,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd callq *%rax"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd callq *(%rax)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd callq *(%r8)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd callq *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd callq *0x12345678(%rax,%rcx,8)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd callq *0x12345678(%r8,%rcx,8)"); /* Expecting: call indirect 0 */
/* jmp with/without notrack prefix */
asm volatile("jmpq *%rax"); /* Expecting: jmp indirect 0 */
asm volatile("jmpq *(%rax)"); /* Expecting: jmp indirect 0 */
asm volatile("jmpq *(%r8)"); /* Expecting: jmp indirect 0 */
asm volatile("jmpq *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("jmpq *0x12345678(%rax,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("jmpq *0x12345678(%r8,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmpq *%rax"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmpq *(%rax)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmpq *(%r8)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmpq *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmpq *0x12345678(%rax,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmpq *0x12345678(%r8,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmpq *%rax"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmpq *(%rax)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmpq *(%r8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmpq *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmpq *0x12345678(%rax,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmpq *0x12345678(%r8,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmpq *%rax"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmpq *(%rax)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmpq *(%r8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmpq *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmpq *0x12345678(%rax,%rcx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmpq *0x12345678(%r8,%rcx,8)"); /* Expecting: jmp indirect 0 */
#else /* #ifdef __x86_64__ */
/* bound r32, mem (same op code as EVEX prefix) */
@ -3434,6 +3573,103 @@ int main(void)
asm volatile("enqcmds (%si),%bx");
asm volatile("enqcmds 0x1234(%si),%cx");
/* incsspd */
asm volatile("incsspd %eax");
/* Also check instructions in the same group encoding as incsspd */
asm volatile("xrstor (%eax)");
asm volatile("xrstor (0x12345678)");
asm volatile("xrstor 0x12345678(%eax,%ecx,8)");
asm volatile("lfence");
/* rdsspd */
asm volatile("rdsspd %eax");
/* saveprevssp */
asm volatile("saveprevssp");
/* rstorssp */
asm volatile("rstorssp (%eax)");
asm volatile("rstorssp (0x12345678)");
asm volatile("rstorssp 0x12345678(%eax,%ecx,8)");
/* wrssd */
asm volatile("wrssd %ecx,(%eax)");
asm volatile("wrssd %edx,(0x12345678)");
asm volatile("wrssd %edx,0x12345678(%eax,%ecx,8)");
/* wrussd */
asm volatile("wrussd %ecx,(%eax)");
asm volatile("wrussd %edx,(0x12345678)");
asm volatile("wrussd %edx,0x12345678(%eax,%ecx,8)");
/* setssbsy */
asm volatile("setssbsy");
/* Also check instructions in the same group encoding as setssbsy */
asm volatile("rdpkru");
asm volatile("wrpkru");
/* clrssbsy */
asm volatile("clrssbsy (%eax)");
asm volatile("clrssbsy (0x12345678)");
asm volatile("clrssbsy 0x12345678(%eax,%ecx,8)");
/* endbr32/64 */
asm volatile("endbr32");
asm volatile("endbr64");
/* call with/without notrack prefix */
asm volatile("call *%eax"); /* Expecting: call indirect 0 */
asm volatile("call *(%eax)"); /* Expecting: call indirect 0 */
asm volatile("call *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("call *0x12345678(%eax,%ecx,8)"); /* Expecting: call indirect 0 */
asm volatile("bnd call *%eax"); /* Expecting: call indirect 0 */
asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */
asm volatile("bnd call *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("bnd call *0x12345678(%eax,%ecx,8)"); /* Expecting: call indirect 0 */
asm volatile("notrack call *%eax"); /* Expecting: call indirect 0 */
asm volatile("notrack call *(%eax)"); /* Expecting: call indirect 0 */
asm volatile("notrack call *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("notrack call *0x12345678(%eax,%ecx,8)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd call *%eax"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd call *(%eax)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd call *(0x12345678)"); /* Expecting: call indirect 0 */
asm volatile("notrack bnd call *0x12345678(%eax,%ecx,8)"); /* Expecting: call indirect 0 */
/* jmp with/without notrack prefix */
asm volatile("jmp *%eax"); /* Expecting: jmp indirect 0 */
asm volatile("jmp *(%eax)"); /* Expecting: jmp indirect 0 */
asm volatile("jmp *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("jmp *0x12345678(%eax,%ecx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmp *%eax"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmp *(%eax)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmp *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("bnd jmp *0x12345678(%eax,%ecx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmp *%eax"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmp *(%eax)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmp *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack jmp *0x12345678(%eax,%ecx,8)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmp *%eax"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmp *(%eax)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmp *(0x12345678)"); /* Expecting: jmp indirect 0 */
asm volatile("notrack bnd jmp *0x12345678(%eax,%ecx,8)"); /* Expecting: jmp indirect 0 */
#endif /* #ifndef __x86_64__ */
/* SGX */

View File

@ -414,8 +414,12 @@ int main()
#if defined(__i386__) && (!defined(__GLIBC__) || __GLIBC__ > 2 || __GLIBC_MINOR__ >= 16)
vsyscall32 = (void *)getauxval(AT_SYSINFO);
if (vsyscall32) {
printf("[RUN]\tCheck AT_SYSINFO return regs\n");
test_sys32_regs(do_full_vsyscall32);
} else {
printf("[SKIP]\tAT_SYSINFO is not available\n");
}
#endif
test_ptrace_syscall_restart();

View File

@ -259,6 +259,11 @@ static void test_one_clock_gettime(int clock, const char *name)
static void test_clock_gettime(void)
{
if (!vdso_clock_gettime) {
printf("[SKIP]\tNo vDSO, so skipping clock_gettime() tests\n");
return;
}
for (int clock = 0; clock < sizeof(clocknames) / sizeof(clocknames[0]);
clock++) {
test_one_clock_gettime(clock, clocknames[clock]);

View File

@ -15,6 +15,7 @@
#include <err.h>
#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
@ -46,11 +47,23 @@ int main()
int nerrs = 0;
struct real_sigaction sa;
void *vdso = dlopen("linux-vdso.so.1",
RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
if (!vdso)
vdso = dlopen("linux-gate.so.1",
RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
if (!vdso) {
printf("[SKIP]\tFailed to find vDSO. Tests are not expected to work.\n");
return 0;
}
memset(&sa, 0, sizeof(sa));
sa.handler = handler_with_siginfo;
sa.flags = SA_SIGINFO;
sa.restorer = NULL; /* request kernel-provided restorer */
printf("[RUN]\tRaise a signal, SA_SIGINFO, sa.restorer == NULL\n");
if (syscall(SYS_rt_sigaction, SIGUSR1, &sa, NULL, 8) != 0)
err(1, "raw rt_sigaction syscall");
@ -63,6 +76,8 @@ int main()
nerrs++;
}
printf("[RUN]\tRaise a signal, !SA_SIGINFO, sa.restorer == NULL\n");
sa.flags = 0;
sa.handler = handler_without_siginfo;
if (syscall(SYS_sigaction, SIGUSR1, &sa, 0) != 0)