mirror of https://gitee.com/openkylin/linux.git
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:
commit
7cc7e93519
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, "", "",
|
||||
|
|
|
@ -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, "", "",
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue