Redefine exit to simply destroy a process
[akaros.git] / user / include / vcore.h
index 1b5066f..9bcc48a 100644 (file)
@@ -8,9 +8,24 @@ extern "C" {
 #include <arch/vcore.h>
 #include <string.h>
 
+/*****************************************************************************/
+/* TODO: This is a complete hack, but necessary for vcore stuff tow ork for now
+ * The issue is that exit sometimes calls sys_yield(), and we can't recover from
+ * that properly under our vcore model (we shouldn't though).  We really need to
+ * rethink what sys_yield 'should' do when in multicore mode, or else come up 
+ * with a different syscall entirely. */
+#include <stdlib.h>
+#include <unistd.h>
+#undef exit
+#define exit(status) ros_syscall(SYS_proc_destroy,getpid(),status,0,0,0)
+/*****************************************************************************/
+
 #define LOG2_MAX_VCORES 6
 #define MAX_VCORES (1 << LOG2_MAX_VCORES)
 
+#define TRANSITION_STACK_PAGES 2
+#define TRANSITION_STACK_SIZE (TRANSITION_STACK_PAGES*PGSIZE)
+
 /* Defined by glibc; Must be implemented by a user level threading library */
 extern void vcore_entry();