326 lines
11 KiB
Diff
326 lines
11 KiB
Diff
Index: 2007-02-20/xen/arch/powerpc/backtrace.c
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/arch/powerpc/backtrace.c 2006-12-15 16:33:59.000000000 +0100
|
|
+++ 2007-02-20/xen/arch/powerpc/backtrace.c 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -206,7 +206,7 @@ void show_backtrace_regs(struct cpu_user
|
|
console_end_sync();
|
|
}
|
|
|
|
-void __warn(char *file, int line)
|
|
+void __warn(const char *file, int line)
|
|
{
|
|
ulong sp;
|
|
ulong lr;
|
|
Index: 2007-02-20/xen/arch/x86/mm/shadow/common.c
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/arch/x86/mm/shadow/common.c 2007-02-20 10:55:36.000000000 +0100
|
|
+++ 2007-02-20/xen/arch/x86/mm/shadow/common.c 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -948,6 +948,7 @@ mfn_t shadow_alloc(struct domain *d,
|
|
* we might free up higher-level pages that the caller is working on. */
|
|
SHADOW_PRINTK("Can't allocate %i shadow pages!\n", 1 << order);
|
|
BUG();
|
|
+ return _mfn(0);
|
|
}
|
|
|
|
|
|
Index: 2007-02-20/xen/arch/x86/mm/shadow/multi.c
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/arch/x86/mm/shadow/multi.c 2007-02-20 10:55:27.000000000 +0100
|
|
+++ 2007-02-20/xen/arch/x86/mm/shadow/multi.c 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -3195,7 +3195,7 @@ sh_update_linear_entries(struct vcpu *v)
|
|
*/
|
|
{
|
|
l2_pgentry_t *l2e, new_l2e;
|
|
- shadow_l3e_t *guest_l3e = NULL, *shadow_l3e;
|
|
+ shadow_l3e_t *guest_l3e = NULL, *shadow_l3e = NULL;
|
|
int i;
|
|
int unmap_l2e = 0;
|
|
|
|
Index: 2007-02-20/xen/arch/x86/traps.c
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/arch/x86/traps.c 2007-02-20 10:56:00.000000000 +0100
|
|
+++ 2007-02-20/xen/arch/x86/traps.c 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -635,14 +635,50 @@ asmlinkage int do_invalid_op(struct cpu_
|
|
|
|
if ( unlikely(!guest_mode(regs)) )
|
|
{
|
|
- char sig[5];
|
|
- /* Signature (ud2; .ascii "dbg") indicates dump state and continue. */
|
|
- if ( (__copy_from_user(sig, (char *)regs->eip, sizeof(sig)) == 0) &&
|
|
- (memcmp(sig, "\xf\xb""dbg", sizeof(sig)) == 0) )
|
|
- {
|
|
- show_execution_state(regs);
|
|
- regs->eip += sizeof(sig);
|
|
- return EXCRET_fault_fixed;
|
|
+ struct bug_frame f;
|
|
+
|
|
+ if ( (__copy_from_user(&f, (char *)regs->eip, sizeof(f)) == 0) &&
|
|
+ f.ud2[0] == 0x0f && f.ud2[1] == 0x0b && f.ret == 0xc2 )
|
|
+ {
|
|
+ const char *text = NULL;
|
|
+ char file[40];
|
|
+
|
|
+ switch ( f.id )
|
|
+ {
|
|
+ case bug_bug:
|
|
+ text = "BUG";
|
|
+ break;
|
|
+ case bug_warn:
|
|
+ text = "Badness";
|
|
+ break;
|
|
+ case bug_dump_state:
|
|
+ text = "State";
|
|
+ break;
|
|
+ case bug_crash_dom:
|
|
+ text = "domain_crash called";
|
|
+ break;
|
|
+ }
|
|
+ if ( text )
|
|
+ {
|
|
+ const void *ptr;
|
|
+
|
|
+ ptr = &((const struct bug_frame *)regs->eip)->id + f.file_rel;
|
|
+ if ( __addr_ok(ptr) ||
|
|
+ __copy_from_user(file, ptr, sizeof(file) - 1) )
|
|
+ text = NULL;
|
|
+ else
|
|
+ file[sizeof(file) - 1] = 0;
|
|
+ }
|
|
+ if ( text )
|
|
+ {
|
|
+ printk("%s at %s:%d\n", text, file, f.line);
|
|
+ if ( f.id != bug_bug )
|
|
+ {
|
|
+ show_execution_state(regs);
|
|
+ regs->eip += sizeof(f);
|
|
+ return EXCRET_fault_fixed;
|
|
+ }
|
|
+ }
|
|
}
|
|
DEBUGGER_trap_fatal(TRAP_invalid_op, regs);
|
|
show_execution_state(regs);
|
|
Index: 2007-02-20/xen/common/keyhandler.c
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/common/keyhandler.c 2007-02-20 10:41:46.000000000 +0100
|
|
+++ 2007-02-20/xen/common/keyhandler.c 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -94,7 +94,7 @@ static void show_handlers(unsigned char
|
|
|
|
static void __dump_execstate(void *unused)
|
|
{
|
|
- dump_execution_state();
|
|
+ DUMP_STATE();
|
|
}
|
|
|
|
static void dump_registers(unsigned char key, struct cpu_user_regs *regs)
|
|
Index: 2007-02-20/xen/drivers/char/console.c
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/drivers/char/console.c 2006-12-15 16:33:59.000000000 +0100
|
|
+++ 2007-02-20/xen/drivers/char/console.c 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -880,15 +880,21 @@ void panic(const char *fmt, ...)
|
|
}
|
|
}
|
|
|
|
-void __bug(char *file, int line)
|
|
+void __bug(const char *file, int line)
|
|
{
|
|
console_start_sync();
|
|
printk("BUG at %s:%d\n", file, line);
|
|
- dump_execution_state();
|
|
+ DUMP_STATE();
|
|
panic("BUG at %s:%d\n", file, line);
|
|
for ( ; ; ) ;
|
|
}
|
|
|
|
+void __warn(const char *file, int line) __attribute__((__weak__));
|
|
+void __warn(const char *file, int line)
|
|
+{
|
|
+ printk("Badness at %s:%d\n", file, line);
|
|
+}
|
|
+
|
|
/*
|
|
* Local variables:
|
|
* mode: C
|
|
Index: 2007-02-20/xen/include/asm-ia64/bug.h
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ 2007-02-20/xen/include/asm-ia64/bug.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -0,0 +1,6 @@
|
|
+#ifndef __ASM_IA64_BUG_H__
|
|
+#define __ASM_IA64_BUG_H__
|
|
+
|
|
+#define DUMP_STATE() printk("FIXME: implement ia64 dump_execution_state()\n");
|
|
+
|
|
+#endif /* __ASM_IA64_BUG_H__ */
|
|
Index: 2007-02-20/xen/include/asm-ia64/linux-xen/asm/iosapic.h
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/include/asm-ia64/linux-xen/asm/iosapic.h 2006-12-13 11:15:55.000000000 +0100
|
|
+++ 2007-02-20/xen/include/asm-ia64/linux-xen/asm/iosapic.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -123,11 +123,10 @@ static inline void list_move(struct list
|
|
|
|
#define move_irq(x)
|
|
|
|
-#define WARN_ON(condition) do { \
|
|
- if (unlikely((condition)!=0)) { \
|
|
- printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
|
|
- dump_stack(); \
|
|
- } \
|
|
+#undef WARN
|
|
+#define WARN() do { \
|
|
+ printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
|
|
+ dump_stack(); \
|
|
} while (0)
|
|
|
|
#ifdef nop
|
|
Index: 2007-02-20/xen/include/asm-ia64/xenprocessor.h
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/include/asm-ia64/xenprocessor.h 2006-12-13 11:15:55.000000000 +0100
|
|
+++ 2007-02-20/xen/include/asm-ia64/xenprocessor.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -237,6 +237,4 @@ typedef union {
|
|
u64 itir;
|
|
} ia64_itir_t;
|
|
|
|
-#define dump_execution_state() printk("FIXME: implement ia64 dump_execution_state()\n");
|
|
-
|
|
#endif // _ASM_IA64_XENPROCESSOR_H
|
|
Index: 2007-02-20/xen/include/asm-powerpc/bug.h
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ 2007-02-20/xen/include/asm-powerpc/bug.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -0,0 +1,7 @@
|
|
+#ifndef __ASM_PPC_BUG_H__
|
|
+#define __ASM_PPC_BUG_H__
|
|
+
|
|
+extern void dump_execution_state(void);
|
|
+#define DUMP_STATE() dump_execution_state()
|
|
+
|
|
+#endif /* __ASM_PPC_BUG_H__ */
|
|
Index: 2007-02-20/xen/include/asm-powerpc/debugger.h
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/include/asm-powerpc/debugger.h 2006-12-15 16:33:59.000000000 +0100
|
|
+++ 2007-02-20/xen/include/asm-powerpc/debugger.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -67,10 +67,6 @@ static inline void unimplemented(void)
|
|
#endif
|
|
}
|
|
|
|
-extern void __warn(char *file, int line);
|
|
-#define WARN() __warn(__FILE__, __LINE__)
|
|
-#define WARN_ON(_p) do { if (_p) WARN(); } while ( 0 )
|
|
-
|
|
extern void __attn(void);
|
|
#define ATTN() __attn();
|
|
|
|
Index: 2007-02-20/xen/include/asm-x86/bug.h
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ 2007-02-20/xen/include/asm-x86/bug.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -0,0 +1,60 @@
|
|
+#ifndef __ASM_X86_BUG_H__
|
|
+#define __ASM_X86_BUG_H__
|
|
+
|
|
+enum bug_id {
|
|
+ bug_bug = 0xb8,
|
|
+ bug_warn,
|
|
+ bug_dump_state,
|
|
+ bug_crash_dom
|
|
+} __attribute__((__packed__));
|
|
+
|
|
+struct bug_frame {
|
|
+ unsigned char ud2[2];
|
|
+ enum bug_id id;
|
|
+ signed int file_rel;
|
|
+ unsigned char ret;
|
|
+ unsigned short line;
|
|
+} __attribute__((__packed__));
|
|
+
|
|
+/* NB. These need interrupts enabled else we end up in fatal_trap(). */
|
|
+
|
|
+#define BUG() __asm__ __volatile__( \
|
|
+ "pushf\n\t" \
|
|
+ "sti\n\t" \
|
|
+ "ud2\n\t" \
|
|
+ "movl $%c0-.,%%eax\n\t" \
|
|
+ "ret $%c1\n\t" \
|
|
+ "popf" \
|
|
+ : : "i" (__FILE__), "i" (__LINE__))
|
|
+
|
|
+#define WARN() __asm__ __volatile__( \
|
|
+ "pushf\n\t" \
|
|
+ "sti\n\t" \
|
|
+ "ud2\n\t" \
|
|
+ "movl $%c0-.,%%ecx\n\t" \
|
|
+ "ret $%c1\n\t" \
|
|
+ "popf" \
|
|
+ : : "i" (__FILE__), "i" (__LINE__))
|
|
+
|
|
+#define DUMP_STATE() __asm__ __volatile__( \
|
|
+ "pushf\n\t" \
|
|
+ "sti\n\t" \
|
|
+ "ud2\n\t" \
|
|
+ "movl $%c0-.,%%edx\n\t" \
|
|
+ "ret $%c1\n\t" \
|
|
+ "popf" \
|
|
+ : : "i" (__FILE__), "i" (__LINE__))
|
|
+
|
|
+#define CRASH_DOM(d) do { \
|
|
+ __asm__ __volatile__( \
|
|
+ "pushf\n\t" \
|
|
+ "sti\n\t" \
|
|
+ "ud2\n\t" \
|
|
+ "movl $%c0-.,%%ebx\n\t" \
|
|
+ "ret $%c1\n\t" \
|
|
+ "popf" \
|
|
+ : : "i" (__FILE__), "i" (__LINE__)); \
|
|
+ __domain_crash(d); \
|
|
+ } while (0)
|
|
+
|
|
+#endif /* __ASM_X86_BUG_H__ */
|
|
Index: 2007-02-20/xen/include/asm-x86/processor.h
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/include/asm-x86/processor.h 2007-02-20 10:41:44.000000000 +0100
|
|
+++ 2007-02-20/xen/include/asm-x86/processor.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -565,11 +565,6 @@ void compat_show_guest_stack(struct cpu_
|
|
#define compat_show_guest_stack(regs, lines) ((void)0)
|
|
#endif
|
|
|
|
-/* Dumps current register and stack state. */
|
|
-#define dump_execution_state() \
|
|
- /* NB. Needs interrupts enabled else we end up in fatal_trap(). */ \
|
|
- __asm__ __volatile__ ( "pushf ; sti ; ud2 ; .ascii \"dbg\" ; popf" )
|
|
-
|
|
extern void mtrr_ap_init(void);
|
|
extern void mtrr_bp_init(void);
|
|
|
|
Index: 2007-02-20/xen/include/xen/lib.h
|
|
===================================================================
|
|
--- 2007-02-20.orig/xen/include/xen/lib.h 2007-01-08 14:16:35.000000000 +0100
|
|
+++ 2007-02-20/xen/include/xen/lib.h 2007-02-20 10:56:04.000000000 +0100
|
|
@@ -7,10 +7,26 @@
|
|
#include <xen/types.h>
|
|
#include <xen/xmalloc.h>
|
|
#include <xen/string.h>
|
|
+#include <asm/bug.h>
|
|
|
|
-extern void __bug(char *file, int line) __attribute__((noreturn));
|
|
+#ifndef BUG
|
|
+extern void __bug(const char *file, int line) __attribute__((noreturn));
|
|
#define BUG() __bug(__FILE__, __LINE__)
|
|
-#define BUG_ON(_p) do { if (_p) BUG(); } while ( 0 )
|
|
+#endif
|
|
+
|
|
+#ifndef WARN
|
|
+extern void __warn(const char *file, int line);
|
|
+#define WARN() __warn(__FILE__, __LINE__)
|
|
+#endif
|
|
+
|
|
+#ifndef CRASH_DOM
|
|
+#define CRASH_DOM(d) domain_crash(d)
|
|
+#endif
|
|
+
|
|
+#define BUG_ON(_p) do { if (unlikely(_p)) BUG(); } while ( 0 )
|
|
+#define WARN_ON(_p) do { if (unlikely(_p)) WARN(); } while ( 0 )
|
|
+#define DUMP_STATE_ON(_p) do { if (unlikely(_p)) DUMP_STATE(); } while ( 0 )
|
|
+#define CRASH_DOM_ON(_d, _p) do { if (unlikely(_p)) CRASH_DOM(_d); } while ( 0 )
|
|
|
|
/* Force a compilation error if condition is true */
|
|
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))
|