aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/asm-x86/x86_64
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-03-31 13:23:11 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-03-31 13:23:11 +0100
commit7f6385949637051d1529431d7acd59e1677318c8 (patch)
tree17dba712c8f5b7b8a4a4f25591edb5e3efa29f9f /xen/include/asm-x86/x86_64
parented25dad906fd3bec60fa79bc124afb3e854d67f0 (diff)
downloadxen-7f6385949637051d1529431d7acd59e1677318c8.tar.gz
xen-7f6385949637051d1529431d7acd59e1677318c8.tar.bz2
xen-7f6385949637051d1529431d7acd59e1677318c8.zip
x86: unify BUG() & Co, reduce overhead on x86-64
Since it's only the string pointer representations that differ between i386 and x86-64, abstract out those and make everything else shared. While touching this code, also use - proper instructions rather than a mixture of such and raw .byte/ .long/.quad data emissions, - PC-relative pointers on x86-64 to cut the amount of storage (and in particular cache space) needed for string references by half. Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/include/asm-x86/x86_64')
-rw-r--r--xen/include/asm-x86/x86_64/bug.h31
1 files changed, 4 insertions, 27 deletions
diff --git a/xen/include/asm-x86/x86_64/bug.h b/xen/include/asm-x86/x86_64/bug.h
index 3fa5debfa7..ecae455b83 100644
--- a/xen/include/asm-x86/x86_64/bug.h
+++ b/xen/include/asm-x86/x86_64/bug.h
@@ -2,33 +2,10 @@
#define __X86_64_BUG_H__
struct bug_frame_str {
- unsigned char mov[2];
- unsigned long str;
+ unsigned char mov;
+ signed int str_disp;
} __attribute__((packed));
-#define BUG_MOV_STR "\x48\xbc"
-
-#define dump_execution_state() \
- asm volatile ( \
- "ud2 ; ret $%c0" \
- : : "i" (BUGFRAME_dump) )
-
-#define WARN() \
- asm volatile ( \
- "ud2 ; ret $%c0 ; .byte 0x48,0xbc ; .quad %c1" \
- : : "i" (BUGFRAME_warn | (__LINE__<<2)), \
- "i" (__FILE__) )
-
-#define BUG() \
- asm volatile ( \
- "ud2 ; ret $%c0 ; .byte 0x48,0xbc ; .quad %c1" \
- : : "i" (BUGFRAME_bug | (__LINE__<<2)), \
- "i" (__FILE__) )
-
-#define assert_failed(p) \
- asm volatile ( \
- "ud2 ; ret $%c0 ; .byte 0x48,0xbc ; .quad %c1" \
- " ; .byte 0x48,0xbc ; .quad %c2" \
- : : "i" (BUGFRAME_assert | (__LINE__<<2)), \
- "i" (__FILE__), "i" (#p) )
+#define bug_str(b, rip) ((const char *)(rip) + (b).str_disp)
+#define BUG_STR(n) "; movl %" #n " - ., %%esp"
#endif /* __X86_64_BUG_H__ */