From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 103805 invoked by alias); 6 Nov 2019 13:27:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 103796 invoked by uid 89); 6 Nov 2019 13:27:54 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT autolearn=ham version=3.3.1 spammy= X-HELO: smtprelay-out1.synopsys.com Received: from smtprelay-out1.synopsys.com (HELO smtprelay-out1.synopsys.com) (149.117.87.133) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Nov 2019 13:27:52 +0000 Received: from mailhost.synopsys.com (mdc-mailhost2.synopsys.com [10.225.0.210]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 4FFE7C0928; Wed, 6 Nov 2019 13:27:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1573046871; bh=rsYsDkRmnQV4MxnoW1lZw3wCF0TV/A+VjJ2Rtcj6aIY=; h=From:To:Cc:Subject:Date:From; b=aR+bBpd0iqzIfMJPb5A8/HcD4Z0WQ9zqGnxWSqOXGqm7rEBEA2A9pGTNhzCC71p7T tLf6dpTyvV/lzwzeu9f36x5/x8+B/oND8AaWN0JeNHxeY0/X5sIQt2W6T8N2XMJGTr yv3TpaOIAqvjdfisKbQSL5r3fwJfL/qf7BtHxFS0msaJrcW9TjhQJBIyo6nx87XI1h +daR0k0xDpxE43m4hhH8KyTO1oQK1Aqg9fVluLn32nJod+kINDhEjlBYNG4LyrBzdb 9aaq7mKikkHrL9QOzvJiRSccXEivBQ65yDIFPZMEveQfznrhi631Cgeh1JdYGBhw7R H+47KwH/p4RWA== Received: from didin-7490l.internal.synopsys.com (didin-7490l.internal.synopsys.com [10.121.3.58]) by mailhost.synopsys.com (Postfix) with ESMTP id 232DBA0057; Wed, 6 Nov 2019 13:27:42 +0000 (UTC) From: Evgeniy Didin To: gdb-patches@sourceware.org Cc: Evgeniy Didin , Alexey Brodkin , Claudiu Zissulescu , Cupertino Miranda , Vineet Gupta , Shahab Vahedi , linux-snps-arc@lists.infradead.org Subject: [PATCH v2] gdb/remote: Remove negative tid/pid handling in wite_ptid Date: Wed, 06 Nov 2019 13:27:00 -0000 Message-Id: <20191106132732.11034-1-didin@synopsys.com> X-SW-Source: 2019-11/txt/msg00147.txt.bz2 Actually thread and process ID's are positive values. Accorting to http://man7.org/linux/man-pages/man7/pthreads.7.html threads are creating using "clone" syscall, so the ID generation mechanism is similar for threads and processes. According to Linux source code there is a function call tree, which allocates PID[TID]: clone |->_do_fork |->copy_process |->alloc_pid |->idr_alloc_cyclic |->idr_alloc_u32(idr, ptr, &id, max, gfp); And in idr_alloc_u32() "id" is u32 value, which means positiveness. Also according to: https://elixir.bootlin.com/linux/latest/source/kernel/pid.c#L177 PID cannot be less than 1. In Zephyr RTOS the k_thread_create function returns thread ID which is actually pointer to k_thread structure. If the memory addressing starts from 0x80000000, passing such big values to write_ptid() leads to overflow of "int tid" variable and thread ID becomes negative. So lets remove the code, which handles negative tid/pid values. gdb/ChangeLog: 2019-11-06 Evgeniy Didin * remote.c (remote_target::write_ptid): Remove handling negative tid,pid. Change "int" to "unsigned int" for pid/tid. Signed-off-by: Evgeniy Didin Cc: Alexey Brodkin Cc: Claudiu Zissulescu Cc: Cupertino Miranda Cc: Vineet Gupta Cc: Shahab Vahedi Cc: linux-snps-arc@lists.infradead.org Signed-off-by: Evgeniy Didin --- Changes v1-v2: -make no change of tid/pid bitness, use generic "unsigned int" instead of "uint32_t" gdb/ChangeLog | 6 ++++++ gdb/remote.c | 12 +++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e886480d62..cd55d65ced 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2019-11-06 Evgeniy Didin + + * remote.c (remote_target::write_ptid): Remove handling + negative tid,pid. Change "int" to "unsigned int" for pid/tid. + + 2019-11-05 Tom Tromey * tui/tui-disasm.c (struct tui_asm_line) : New member. diff --git a/gdb/remote.c b/gdb/remote.c index 8ea52d355a..ea12d738c8 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -2909,22 +2909,16 @@ static int remote_newthread_step (threadref *ref, void *context); char * remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid) { - int pid, tid; + unsigned int pid, tid; struct remote_state *rs = get_remote_state (); if (remote_multi_process_p (rs)) { pid = ptid.pid (); - if (pid < 0) - buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid); - else - buf += xsnprintf (buf, endbuf - buf, "p%x.", pid); + buf += xsnprintf (buf, endbuf - buf, "p%x.", pid); } tid = ptid.lwp (); - if (tid < 0) - buf += xsnprintf (buf, endbuf - buf, "-%x", -tid); - else - buf += xsnprintf (buf, endbuf - buf, "%x", tid); + buf += xsnprintf (buf, endbuf - buf, "%x", tid); return buf; } -- 2.17.2