Index: arch/ia64/src/ddi/ddi.c
===================================================================
--- arch/ia64/src/ddi/ddi.c	(revision cf85e24c9b6fc5900e0535710b65384f89867e00)
+++ arch/ia64/src/ddi/ddi.c	(revision 6ecc8bce45bcc67b6373d7dbfafad230f5b1ee01)
@@ -46,2 +46,13 @@
 	return 0;
 }
+
+/** Enable/disable interrupts for syscall
+ *
+ * @param enable If non-zero, interrupts are enabled, otherwise disabled
+ * @param flags PSR register.
+ */
+__native ddi_int_control_arch(__native enable, __native *flags)
+{
+	/* TODO: not implemented. */
+	return 0;	
+}
Index: arch/ia64/src/ia64.c
===================================================================
--- arch/ia64/src/ia64.c	(revision cf85e24c9b6fc5900e0535710b65384f89867e00)
+++ arch/ia64/src/ia64.c	(revision 6ecc8bce45bcc67b6373d7dbfafad230f5b1ee01)
@@ -45,4 +45,14 @@
 #include <syscall/syscall.h>
 
+void arch_pre_main(void)
+{
+	/* Setup usermode init tasks. */
+	init.cnt = 2;
+	init.tasks[0].addr = INIT0_ADDRESS;
+	init.tasks[0].size = INIT0_SIZE;
+	init.tasks[1].addr = INIT1_ADDRESS;
+	init.tasks[1].size = INIT1_SIZE;
+}
+
 void arch_pre_mm_init(void)
 {
@@ -52,12 +62,5 @@
 	
 	ski_init_console();
-	it_init();
-	
-	/* Setup usermode */
-	init.cnt = 2;
-	init.tasks[0].addr = INIT0_ADDRESS;
-	init.tasks[0].size = INIT0_SIZE;
-	init.tasks[1].addr = INIT1_ADDRESS;
-	init.tasks[1].size = INIT1_SIZE;
+	it_init();	
 }
 
Index: arch/ia64/src/start.S
===================================================================
--- arch/ia64/src/start.S	(revision cf85e24c9b6fc5900e0535710b65384f89867e00)
+++ arch/ia64/src/start.S	(revision 6ecc8bce45bcc67b6373d7dbfafad230f5b1ee01)
@@ -129,4 +129,5 @@
 	srlz.d;;
 
+	br.call.sptk.many b0 = arch_pre_main
 
 	movl r18=main_bsp ;;
