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. UPDATE !!! under some circumstances, the previous patch was not enough against -march=i686 without SMP and without PREEMPT. The following patch seems to fix all cases. 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 --- linux-2.4.27-vs1.28/fs/proc/array.c Wed Aug 18 13:35:26 2004 +++ linux-2.4.27-vs1.28-gcc-fix/fs/proc/array.c Wed Aug 18 13:36:01 2004 @@ -382,6 +382,7 @@ int res; pid_t ppid; struct mm_struct *mm; + struct task_struct *current_copy = current; 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 (current_copy->s_info && current_copy->s_info->initpid == ppid) ppid = 1; read_unlock(&tasklist_lock); res = sprintf(buffer,"%d (%s) %c %d %d %d %d %d %lu %lu \