From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 3/3] DO NOT APPLY - test code for this series Date: Thu, 9 Apr 2015 21:06:23 +0100 Message-ID: <1428609983-26998-4-git-send-email-andrew.cooper3@citrix.com> References: <1428609983-26998-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1428609983-26998-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org --- xen/arch/x86/traps.c | 66 +++++++++++++++++++++++++++++++++++++++++++ xen/arch/x86/x86_64/entry.S | 26 +++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 22cdfc4..c562842 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -3981,6 +3981,72 @@ void asm_domain_crash_synchronous(unsigned long addr) __domain_crash_synchronous(); } +#include + +void asm_test_warnframe(void); +void asm_test_bugframe(void); +void asm_test_assertframe(void); +void asm_test_assert_enabled(void); +void asm_test_assert_disabled(void); + +static void do_extreme_debug(unsigned char key, struct cpu_user_regs *regs) +{ + printk("'%c' pressed -> Extreme debugging in progress...\n", key); + + switch ( key ) + { + case '1': + printk("WARN frame:\n"); + asm_test_warnframe(); + printk("Done\n"); + break; + + case '2': + printk("BUG frame:\n"); + asm_test_bugframe(); + printk("Done\n"); + break; + + case '3': + printk("ASSERT frame:\n"); + asm_test_assertframe(); + printk("Done\n"); + break; + + case '4': + printk("Trip ASSERT_IRQ_ENABLED:\n"); + asm_test_assert_enabled(); + printk("Done\n"); + break; + + case '5': + printk("Trip ASSERT_IRQ_DISABLED:\n"); + asm_test_assert_disabled(); + printk("Done\n"); + break; + + default: + printk("Nothing\n"); + } +} + +static struct keyhandler extreme_debug_keyhandler = { + .irq_callback = 1, + .u.irq_fn = do_extreme_debug, + .desc = "Extreme debugging" +}; + +static int __init extreme_debug_keyhandler_init(void) +{ + register_keyhandler('1', &extreme_debug_keyhandler); + register_keyhandler('2', &extreme_debug_keyhandler); + register_keyhandler('3', &extreme_debug_keyhandler); + register_keyhandler('4', &extreme_debug_keyhandler); + register_keyhandler('5', &extreme_debug_keyhandler); + return 0; +} +__initcall(extreme_debug_keyhandler_init); + /* * Local variables: * mode: C diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index 2d25d57..233483b 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -13,6 +13,32 @@ #include #include +ENTRY(asm_test_warnframe) + WARN() + ret + +ENTRY(asm_test_bugframe) + BUG() + ret + +ENTRY(asm_test_assertframe) + ASSERT_FAILED("asm assert frame") + ret + +ENTRY(asm_test_assert_enabled) + pushfq + cli + ASSERT_INTERRUPTS_ENABLED + popfq + ret + +ENTRY(asm_test_assert_disabled) + pushfq + sti + ASSERT_INTERRUPTS_DISABLED + popfq + ret + ALIGN /* %rbx: struct vcpu */ switch_to_kernel: -- 1.7.10.4