Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel'
[palacios.git] / kitten / include / arch-x86_64 / bug.h
diff --git a/kitten/include/arch-x86_64/bug.h b/kitten/include/arch-x86_64/bug.h
new file mode 100644 (file)
index 0000000..dca9ae5
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef __ARCH_BUG_H
+#define __ARCH_BUG_H
+
+#include <lwk/stringify.h>
+
+/*
+ * 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 <arch-generic/bug.h>
+#endif