Index: arch/ia32/src/asm.S
===================================================================
--- arch/ia32/src/asm.S	(revision 51029384665ae5896fd3e9dd9231220b0d8f7f48)
+++ arch/ia32/src/asm.S	(revision b5eb1eead6fcc27268412795e1274afa6f006dee)
@@ -118,7 +118,8 @@
 	test $0xe0,%cl;
 	jnz 0f;
+	and $0x1f,%cl;
 	shl %cl,%eax;
 	and $ERROR_WORD_INTERRUPT_LIST,%eax;
-	jnz 0f;
+	jz 0f;
 
 	popa;
@@ -358,7 +359,14 @@
 .global utext
 utext:
+	xor %ax,%ax;
+	mov %ax,%ds;
+	mov %ax,%es;
+	mov %ax,%fs;
+	mov %ax,%gs;
 0:
 #	movl $0xdeadbeaf, %eax
-	int $48
+  int $48
+	cli;
+	sti;
 	jmp 0b
 	# not reached
Index: arch/ia32/src/interrupt.c
===================================================================
--- arch/ia32/src/interrupt.c	(revision 51029384665ae5896fd3e9dd9231220b0d8f7f48)
+++ arch/ia32/src/interrupt.c	(revision b5eb1eead6fcc27268412795e1274afa6f006dee)
@@ -80,13 +80,14 @@
 void gp_fault(__u8 n, __u32 stack[])
 {
-	printf("stack[0]=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]);
+	printf("ERROR_WORD=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]);
 	printf("%%eax=%L, %%ebx=%L, %%ecx=%L, %%edx=%L,\n%%edi=%L, %%esi=%L, %%ebp=%L, %%esp=%L\n", stack[-2], stack[-5], stack[-3], stack[-4], stack[-9], stack[-8], stack[-1], stack);
 	printf("stack: %X, %X, %X, %X\n", stack[4], stack[5], stack[6], stack[7]);
-	panic("general protection fault\n");
+	//panic("general protection fault\n");
+	stack[1]++;
 }
 
 void ss_fault(__u8 n, __u32 stack[])
 {
-	printf("stack[0]=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]);
+	printf("ERROR_WORD=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]);
 	printf("%%eax=%L, %%ebx=%L, %%ecx=%L, %%edx=%L,\n%%edi=%L, %%esi=%L, %%ebp=%L, %%esp=%L\n", stack[-2], stack[-5], stack[-3], stack[-4], stack[-9], stack[-8], stack[-1], stack);
 	printf("stack: %X, %X, %X, %X\n", stack[4], stack[5], stack[6], stack[7]);
@@ -112,5 +113,5 @@
 {
 	printf("page fault address: %X\n", read_cr2());
-	printf("stack[0]=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]);
+	printf("ERROR_WORD=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]);
 	printf("%%eax=%L, %%ebx=%L, %%ecx=%L, %%edx=%L,\n%%edi=%L, %%esi=%L, %%ebp=%L, %%esp=%L\n", stack[-2], stack[-5], stack[-3], stack[-4], stack[-9], stack[-8], stack[-1], stack);
 	printf("stack: %X, %X, %X, %X\n", stack[4], stack[5], stack[6], stack[7]);
