diff -Naur -X exclude-files ac_cur/arch/um/Makefile ac/arch/um/Makefile --- ac_cur/arch/um/Makefile Tue Sep 18 22:04:07 2001 +++ ac/arch/um/Makefile Tue Sep 18 22:09:23 2001 @@ -67,14 +67,13 @@ archmrproper: $(MAKE) -C $(ARCH_DIR)/sys-$(SUBARCH) archmrproper - rm -f linux x.i $(ARCH_SYMLINKS) include/asm \ + rm -f $(ARCH_SYMLINKS) include/asm \ $(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) archclean: find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ -o -name '*.gcov' \) -type f -print | xargs rm -f - rm -f gmon.out - rm -f link.ld + rm -f linux x.i gmon.out link.ld @$(MAKEBOOT) clean archdep: $(ARCH_SYMLINKS) diff -Naur -X exclude-files ac_cur/arch/um/drivers/chan_user.c ac/arch/um/drivers/chan_user.c --- ac_cur/arch/um/drivers/chan_user.c Tue Sep 18 22:04:07 2001 +++ ac/arch/um/drivers/chan_user.c Tue Sep 18 22:09:23 2001 @@ -68,6 +68,7 @@ else { execlp("xterm", "xterm", flag, "-T", title, NULL); printk("execlp of xterm failed - errno = %d\n", errno); + close(info->fd); exit(1); } } @@ -119,7 +120,10 @@ char dev[] = "/dev/ptyXX", c; master = getmaster(dev, chan->data.xterm.raw); - if(master == -1) return(-ENODEV); + if(master == -1){ + printk("No unused host ptys found\n"); + return(-ENODEV); + } dev[strlen("/dev/")] = 't'; slave = open(dev, O_RDWR); if(slave == -1) return(-errno); @@ -130,6 +134,7 @@ info.pid_out = &chan->data.xterm.pid; info.title = chan->data.xterm.title; tracing_cb(xterm_tramp, &info); + close(master); while((read(slave, &c, sizeof(c)) == sizeof(c)) && (c != '\n')) ; if(chan->data.xterm.raw) raw(slave, 1); chan->fd = slave; diff -Naur -X exclude-files ac_cur/arch/um/kernel/trap_kern.c ac/arch/um/kernel/trap_kern.c --- ac_cur/arch/um/kernel/trap_kern.c Tue Sep 18 22:04:07 2001 +++ ac/arch/um/kernel/trap_kern.c Tue Sep 18 22:09:23 2001 @@ -39,11 +39,26 @@ vma = find_vma(mm, address); ok = 1; if(!vma) ok = 0; + else if(is_write && !(vma->vm_flags & VM_WRITE)) ok = 0; else if(vma->vm_start > address){ if((vma->vm_flags & VM_STACK_FLAGS) != VM_STACK_FLAGS) ok = 0; else if(expand_stack(vma, address)) ok = 0; } if(!ok){ + if(current->thread.signal.state == SIGNAL_HANDLING){ + /* The signal delivery failed because the SIGUSR2 + * frame couldn't be constructed + */ + current->thread.signal.state = SIGNAL_NONE; + if(current->thread.signal.signal == SIGSEGV){ + struct k_sigaction *ka; + + ka = ¤t->sig->action[SIGSEGV - 1]; + ka->sa.sa_handler = SIG_DFL; + } + force_sig(SIGSEGV, current); + return(0); + } if (current->thread.fault_catcher != NULL) { current->thread.fault_addr = (void *) address; up_read(&mm->mmap_sem); diff -Naur -X exclude-files ac_cur/arch/um/kernel/um_arch.c ac/arch/um/kernel/um_arch.c --- ac_cur/arch/um/kernel/um_arch.c Tue Sep 18 22:04:07 2001 +++ ac/arch/um/kernel/um_arch.c Tue Sep 18 22:09:23 2001 @@ -103,9 +103,6 @@ return(0); } -#define XSTRING(s) #s -#define STRING(s) XSTRING(s) - extern unsigned long high_physmem; unsigned long physmem = 0x50000000 + NESTING * 0x10000000;