Date: Fri, 14 Dec 2001 13:17:18 -0800 (PST) From: Julian Elischer <julian@elischer.org> To: arch@freebsd.org Subject: KSEs and PTRACE/PROCFS Message-ID: <Pine.BSF.4.21.0112141306510.17119-100000@InterJet.elischer.org>
next in thread | raw e-mail | index | archive | help
Is there someone who really understands these, and who feels that they have a good idea of what the behaviour of a multi-threaded process should be when ptraced? The question is: WHat does it mean to "single step" a process with several threads? WHen you suspend a process, what happens? If there is someone with feelings on these topics I whuold welcome your input. Here's a brief example: case PT_STEP: case PT_CONTINUE: case PT_DETACH: if ((uap->req != PT_STEP) && ((unsigned)uap->data >= NSIG)) return (EINVAL); PHOLD(p); if (uap->req == PT_STEP) { if ((error = ptrace_single_step(FIRST_THREAD_IN_PROC(p))) { PRELE(p); return (error); } } if (uap->addr != (caddr_t)1) { fill_kinfo_proc(p, &p->p_uarea->u_kproc); if ((error = ptrace_set_pc( FIRST_THREAD_IN_PROC(p), (u_long)(uintfptr_t)uap->addr))) { PRELE(p); return (error); } } PRELE(p); In this code in the "ptrace" function, we use FIRST_THREAD_IN_PROC() which returns tgeh only thread in a normal system but if there are many threads active in the process, what should we do? Should we set asside one thread and KSE to run all work, thus serialising everything? if so where do we store it, and how do we separate it from all the other threads? Should we pick threads at random? If you are a debugger afficionado, I'd lov eto hear your ideas on this, julian To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0112141306510.17119-100000>