[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 3/3] DO NOT APPLY - test code for this series
--- 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 <xen/keyhandler.h> + +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..08a2eb8 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -13,6 +13,32 @@ #include <public/xen.h> #include <irq_vectors.h> +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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |