From owner-freebsd-hackers@freebsd.org Sun Aug 12 22:01:12 2018 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B9A6C107DD37 for ; Sun, 12 Aug 2018 22:01:12 +0000 (UTC) (envelope-from wjw@digiware.nl) Received: from smtp.digiware.nl (smtp.digiware.nl [IPv6:2001:4cb8:90:ffff::3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1754E7BA5B for ; Sun, 12 Aug 2018 22:01:12 +0000 (UTC) (envelope-from wjw@digiware.nl) Received: from router.digiware.nl (localhost.digiware.nl [127.0.0.1]) by smtp.digiware.nl (Postfix) with ESMTP id A635578A3E; Mon, 13 Aug 2018 00:01:03 +0200 (CEST) X-Virus-Scanned: amavisd-new at digiware.com Received: from smtp.digiware.nl ([127.0.0.1]) by router.digiware.nl (router.digiware.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yN2EutlVmQ-O; Mon, 13 Aug 2018 00:01:02 +0200 (CEST) Received: from [192.168.11.152] (unknown [192.168.11.152]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.digiware.nl (Postfix) with ESMTPSA id 16FB178A3B; Mon, 13 Aug 2018 00:01:02 +0200 (CEST) Subject: Re: Write a version for pthread_get_name_np To: Konstantin Belousov Cc: FreeBSD Hackers References: <7fa2b876-9397-da2b-cb29-56badf11b66d@ecoracks.nl> <42689feb-9bd4-429b-63d7-b9193123ee47@digiware.nl> <20180812205835.GB2340@kib.kiev.ua> From: Willem Jan Withagen Message-ID: Date: Mon, 13 Aug 2018 00:01:03 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180812205835.GB2340@kib.kiev.ua> Content-Type: text/plain; charset=koi8-r; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Aug 2018 22:01:12 -0000 On 12/08/2018 22:58, Konstantin Belousov wrote: > On Sun, Aug 12, 2018 at 10:33:06PM +0200, Willem Jan Withagen wrote: >> Hi, >> >> For some porting I'm trying to write a pthread_get_name_np(), but >> I have run into a snag.... >> Tried some the the procstat code I would come up with: >> >> int pthread_get_name_np(pthread_t *thread, >> ššššššššššššššššššššššš char *name, size_t len){ >> ššš struct procstat *procstat; >> ššš int pid = getpid(); >> ššš unsigned int count, i; >> ššš struct kinfo_proc *kip, *kipp; >> >> ššš procstat = procstat_open_sysctl(); >> ššš kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD, >> ššššššššššš pid, &count); >> ššš for (i = 0; i < count; i++) { >> ššš ššš kipp = &kip[i]; >> ššš ššš printf("thread: %ld(0x%lx), %ld(0x%lx)\n", thread, thread, >> kipp->ki_tid, kipp->ki_tid); >> ššš ššš if (thread == kipp->ki_tid) { >> ššš ššš ššš kinfo_proc_thread_name(kipp, name, len); >> ššš ššš } >> ššš } >> ššš return 0; >> } >> >> Problem only is that the TID value in what procstat_getprocs returns in >> ki_tid is nowhere near >> what pthread_self() returns. >> But both manual page and the include file describe the value as Thread ID. >> Only in sys/user.h the type is >> ššš lwpid_t ki_tid;šššššššššššššššš /* XXXKSE thread id */ >> >> What do I need to translate one tid into the other so I can really >> compare them? > > You need to cast pthread_t * to struct thread *, this is an internal > libthr structure which represents the thread in userspace. The > structure field tid gives you the tid you want to pass to sysctl. mmmm, I'm afraid I'm not quit able to followup on your answer. Trying to find what to include to be able to cast this, I can only find a small bit defined in /usr/src/lib/libthr/thread/thr_private.h. /* * lwpid_t is 32bit but kernel thr API exports tid as long type * to preserve the ABI for M:N model in very early date (r131431). */ #define TID(thread) ((uint32_t) ((thread)->tid)) But that I cannot just "include" that file without a lot of mess, and then still it does not compile. So could you point me to where this private part of struct thread is hidding? Thanx, --WjW