mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86: use / "support" UDB
With opcode D6h now firmly reserved as another #UD-raising one in 64-bit mode, use that instead of the two-byte UD2 for bug frame marking. While there also make a minor adjustment to the emulator. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
98610a6c34
commit
1f3dd605ea
3 files changed
+6
-6
No files matched your search
@@ -21,7 +21,7 @@
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#define BUG_INSTR "ud2"
|
||||
#define BUG_INSTR ".byte 0xd6" /* UDB, requiring gas 2.46 */
|
||||
#define BUG_ASM_CONST "c"
|
||||
|
||||
#else /* !__ASSEMBLER__ */
|
||||
@@ -37,7 +37,7 @@
|
||||
.error "Invalid BUGFRAME index"
|
||||
.endif
|
||||
|
||||
.L\@ud: ud2a
|
||||
.L\@ud: .byte 0xd6 /* UDB, requiring gas 2.46 */
|
||||
|
||||
.pushsection .rodata.str1, "aMS", @progbits, 1
|
||||
.L\@s1: .asciz "\file_str"
|
||||
|
||||
@@ -1338,7 +1338,7 @@ void asmlinkage do_trap(struct cpu_user_regs *regs)
|
||||
|
||||
void asmlinkage do_invalid_op(struct cpu_user_regs *regs)
|
||||
{
|
||||
u8 bug_insn[2];
|
||||
uint8_t bug_insn;
|
||||
const void *eip = (const void *)regs->rip;
|
||||
int id;
|
||||
|
||||
@@ -1350,8 +1350,8 @@ void asmlinkage do_invalid_op(struct cpu_user_regs *regs)
|
||||
}
|
||||
|
||||
if ( !is_active_kernel_text(regs->rip) ||
|
||||
copy_from_unsafe(bug_insn, eip, sizeof(bug_insn)) ||
|
||||
memcmp(bug_insn, "\xf\xb", sizeof(bug_insn)) )
|
||||
copy_from_unsafe(&bug_insn, eip, sizeof(bug_insn)) ||
|
||||
bug_insn != 0xd6 /* UDB */ )
|
||||
goto die;
|
||||
|
||||
id = do_bug_frame(regs, regs->rip);
|
||||
|
||||
@@ -652,7 +652,7 @@ decode_onebyte(struct x86_emulate_state *s,
|
||||
case 0xce: /* into */
|
||||
case 0xd4: /* aam */
|
||||
case 0xd5: /* aad */
|
||||
case 0xd6: /* salc */
|
||||
case 0xd6: /* salc / udb */
|
||||
s->not_64bit = true;
|
||||
break;
|
||||
|
||||
|
||||