# HG changeset patch # User Tim Deegan # Date 1299496871 0 # Node ID 04783b003d5c5691930af6baa3614389247ddda1 # Parent c72c074d0e084dcabb5314ac71e3b7730898c764 Xen: remove run_in_exception_handler() and recode its only caller (dump_execution_state()) as its own bug-trap. This is needed to compile xen with clang, which can't handle using a function name in an asm immediate. Signed-off-by: Tim Deegan diff -r c72c074d0e08 -r 04783b003d5c xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c Mon Mar 07 11:21:11 2011 +0000 +++ b/xen/arch/x86/traps.c Mon Mar 07 11:21:11 2011 +0000 @@ -907,6 +907,15 @@ asmlinkage void do_invalid_op(struct cpu goto die; eip += sizeof(bug); + id = bug.id & 3; + + if ( id == BUGFRAME_state ) + { + show_execution_state(regs); + regs->eip = (unsigned long)eip; + return; + } + /* Decode first pointer argument. */ if ( !is_kernel(eip) || __copy_from_user(&bug_str, eip, sizeof(bug_str)) || @@ -917,16 +926,6 @@ asmlinkage void do_invalid_op(struct cpu goto die; eip += sizeof(bug_str); - id = bug.id & 3; - - if ( id == BUGFRAME_run_fn ) - { - void (*fn)(struct cpu_user_regs *) = (void *)p; - (*fn)(regs); - regs->eip = (unsigned long)eip; - return; - } - /* WARN, BUG or ASSERT: decode the filename pointer and line number. */ filename = p; lineno = bug.id >> 2; diff -r c72c074d0e08 -r 04783b003d5c xen/include/asm-x86/bug.h --- a/xen/include/asm-x86/bug.h Mon Mar 07 11:21:11 2011 +0000 +++ b/xen/include/asm-x86/bug.h Mon Mar 07 11:21:11 2011 +0000 @@ -13,16 +13,15 @@ struct bug_frame { unsigned short id; /* BUGFRAME_??? */ } __attribute__((packed)); -#define BUGFRAME_run_fn 0 +#define BUGFRAME_state 0 #define BUGFRAME_warn 1 #define BUGFRAME_bug 2 #define BUGFRAME_assert 3 -#define run_in_exception_handler(fn) \ +#define dump_execution_state() \ asm volatile ( \ - "ud2 ; ret %0" BUG_STR(1) \ - : : "i" (BUGFRAME_run_fn), \ - "i" (fn) ) + "ud2 ; ret %0" \ + : : "i" (BUGFRAME_state) ) #define WARN() \ asm volatile ( \ diff -r c72c074d0e08 -r 04783b003d5c xen/include/asm-x86/processor.h --- a/xen/include/asm-x86/processor.h Mon Mar 07 11:21:11 2011 +0000 +++ b/xen/include/asm-x86/processor.h Mon Mar 07 11:21:11 2011 +0000 @@ -542,7 +542,6 @@ void show_stack(struct cpu_user_regs *re void show_stack_overflow(unsigned int cpu, unsigned long esp); void show_registers(struct cpu_user_regs *regs); void show_execution_state(struct cpu_user_regs *regs); -#define dump_execution_state() run_in_exception_handler(show_execution_state) void show_page_walk(unsigned long addr); asmlinkage void fatal_trap(int trapnr, struct cpu_user_regs *regs);