]> xenbits.xensource.com Git - people/tklengyel/xen.git/commitdiff
Xen: remove run_in_exception_handler() and recode its only caller
authorTim Deegan <Tim.Deegan@citrix.com>
Mon, 7 Mar 2011 11:21:11 +0000 (11:21 +0000)
committerTim Deegan <Tim.Deegan@citrix.com>
Mon, 7 Mar 2011 11:21:11 +0000 (11:21 +0000)
(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 <Tim.Deegan@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
xen/arch/x86/traps.c
xen/include/asm-x86/bug.h
xen/include/asm-x86/processor.h

index 58fbaba82c8fc49448c4eb7425d487592386138c..8964fa65feafeee8d9bf46cac2f6a4059c194844 100644 (file)
@@ -907,6 +907,15 @@ asmlinkage void do_invalid_op(struct cpu_user_regs *regs)
         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_user_regs *regs)
         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;
index 05083e016827d9f89ddb1817b996865da2af61bc..19fc06a0c8df048167d2abfd7b54fd6c488fc688 100644 (file)
@@ -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 (                                 \
index 78d9278173d18299dafe54addd8a0fbebad358e7..c63b574976ec38c0f154b7817ef4c9646c9b4a70 100644 (file)
@@ -542,7 +542,6 @@ void show_stack(struct cpu_user_regs *regs);
 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);