X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=kitten%2Finclude%2Farch-x86_64%2Fbug.h;fp=kitten%2Finclude%2Farch-x86_64%2Fbug.h;h=dca9ae5e8a414fbfec96e4360931858ea45f76ff;hb=66a1a4c7a9edcd7d8bc207aca093d694a6e6b5b2;hp=0000000000000000000000000000000000000000;hpb=f7cf9c19ecb0a589dd45ae0d2c91814bd3c2acc2;p=palacios.git diff --git a/kitten/include/arch-x86_64/bug.h b/kitten/include/arch-x86_64/bug.h new file mode 100644 index 0000000..dca9ae5 --- /dev/null +++ b/kitten/include/arch-x86_64/bug.h @@ -0,0 +1,30 @@ +#ifndef __ARCH_BUG_H +#define __ARCH_BUG_H + +#include + +/* + * Tell the user there is some problem. The exception handler decodes + * this frame. + */ +struct bug_frame { + unsigned char ud2[2]; + unsigned char push; + signed int filename; + unsigned char ret; + unsigned short line; +} __attribute__((packed)); + +#define HAVE_ARCH_BUG +/* We turn the bug frame into valid instructions to not confuse + the disassembler. Thanks to Jan Beulich & Suresh Siddha + for nice instruction selection. + The magic numbers generate mov $64bitimm,%eax ; ret $offset. */ +#define BUG() \ + asm volatile( \ + "ud2 ; pushq $%c1 ; ret $%c0" :: \ + "i"(__LINE__), "i" (__FILE__)) +void out_of_line_bug(void); + +#include +#endif