This patch has to be applied after vs1.28. This is a workaround against a gcc-2.95 bug which generates the following error if both SMP and PREEMPT are enabled. Disabling either of them, or upgrading to GCC 3 (3.0, 3.1, 3.2 and 3.3 are OK) is enough to make the problem disappear. The simple patch below helps gcc compile again. Willy array.c: In function `proc_pid_stat': array.c:474: Internal compiler error: array.c:474: internal error--unrecognizable insn: (insn/i 605 604 889 (parallel[ (set (reg:SI 0 %eax) (asm_operands ("") ("=a") 0[ (reg:DI 1 %edx) ] [ (asm_input:DI ("A")) ] ("/usr/src/linux-2.4.27-wt1/include/linux/times.h") 17)) (set (reg:SI 1 %edx) (asm_operands ("") ("=d") 1[ (reg:DI 1 %edx) ] [ (asm_input:DI ("A")) ] ("/usr/src/linux-2.4.27-wt1/include/linux/times.h") 17)) ] ) -1 (insn_list 599 (nil)) (nil)) make[3]: *** [array.o] Error 1 --- ./fs/proc/array.c.bad Sat Aug 14 23:43:51 2004 +++ ./fs/proc/array.c Sat Aug 14 23:59:32 2004 @@ -382,6 +382,7 @@ int res; pid_t ppid; struct mm_struct *mm; + struct context_info *s_info = current->s_info; state = *get_task_state(task); vsize = eip = esp = 0; @@ -419,7 +420,7 @@ read_lock(&tasklist_lock); ppid = task->pid ? task->p_opptr->pid : 0; - if (current->s_info && current->s_info->initpid == ppid) + if (s_info && s_info->initpid == ppid) ppid = 1; read_unlock(&tasklist_lock); res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \