From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aSYyMBV2fGpIlCAAWB0awg (envelope-from ) for ; Wed, 12 Aug 2026 09:33:09 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=hoJaGnw8; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id C231E1E166; Wed, 12 Aug 2026 09:33:09 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 8A3941E09E for ; Wed, 12 Aug 2026 09:33:07 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 13C4D4BA799B for ; Wed, 12 Aug 2026 13:33:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 13C4D4BA799B Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=hoJaGnw8 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.11]) by sourceware.org (Postfix) with ESMTPS id F30EB4BB24FD for ; Wed, 12 Aug 2026 13:29:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F30EB4BB24FD Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F30EB4BB24FD Authentication-Results: sourceware.org; arc=none smtp.remote-ip=192.198.163.11 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1786541341; cv=none; b=D4rEflY130i9HLchPXDGDX5c+zFwCizdQAsvpAEv+j57EhLBGZhN/pH1SkbN+3bFIv2NCUS4RWC3JMsvonObeFVQWlsgpJxhbkF0xv8T/wpf/8AHa2ViJ+TRvlDKAocCplviGA78xXlTjkynSZDSA/7v0hNmMiiZs8JeRlW+TmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1786541341; c=relaxed/simple; bh=0k2HyDpoZnF8AgHG9h4wZkn65eMHxmCTYGNPIYZQa/E=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Kcxzc2wP5CJZmyKk+fdnsOJvvxqjJaCf7XtWb6dvMKs4ScDvDPkoCIMSuO165gP8MjmhB/JahZ2rI4E1LoCcH2JfPAngTI4UEYFTgOuoUKmDIZo3uNKirnx1/u9OBpvDUx9tKOs281Bkjur23VH/LSBYmGH/HeHNKx6YHMwU4HI= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=hoJaGnw8 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F30EB4BB24FD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1786541341; x=1818077341; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0k2HyDpoZnF8AgHG9h4wZkn65eMHxmCTYGNPIYZQa/E=; b=hoJaGnw8ux24YAZFB3eN7kwdMqAHYz4PMLrB/DxIVWUNr4d6IIavXXhQ o/elhJOjCf2Hlq30DiKRCkp7LSrkYrw6oj8VCm28OXKgPoUau42dRoP29 YXo05R5JT3KL1A+5EblPwL0L/MD+0Ili2iWBylLL+oxXCz9wjIpSxXPyl yvo/WhpXf5dDSgZixim8BfHPo+Ot9nuGkBIyLI/dUIHQKBLRbuhxU527G MzedYYpe3apkSOt/zbQ4jmORlgPbyLT4DhunBrXZgH3quP2NDrKTNGvBE eOJzVFz79UOnBGD/t/IOJm3vx0RhlhSENfK2+4s40PM5aqhC0P9gANogM A==; X-CSE-ConnectionGUID: 0sJwlYzuRP2BCTbhBmyQYg== X-CSE-MsgGUID: RxcYTspEQ8CVRZlGYS9cWw== X-IronPort-AV: E=McAfee;i="6800,10657,11872"; a="97683611" X-IronPort-AV: E=Sophos;i="6.25,219,1779174000"; d="scan'208";a="97683611" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Aug 2026 06:28:54 -0700 X-CSE-ConnectionGUID: vTUb1dtHTbaeXhXL5wlraA== X-CSE-MsgGUID: YnGEHzNhRWm8zjd6j1qpog== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.25,219,1779174000"; d="scan'208";a="263171342" Received: from gkldtt-dev-004.igk.intel.com (HELO localhost) ([10.123.221.202]) by orviesa008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Aug 2026 06:28:52 -0700 From: Markus Metzger To: gdb-patches@sourceware.org Cc: Tankut Baris Aktemur Subject: [PATCH v4 14/44] gdbserver: adjust pid after the target attaches Date: Wed, 12 Aug 2026 15:27:34 +0200 Message-ID: <20260812132805.380163-15-markus.t.metzger@intel.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812132805.380163-1-markus.t.metzger@intel.com> References: <20260812132805.380163-1-markus.t.metzger@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org From: Tankut Baris Aktemur The PID argument of the attach operation may be interpreted in a target specific way, and may not necessarily mean that the process we attached to has PID as its process id. This is for example the case for Intel GT targets, where the PID refers to the process id of the host application that is using the devices. The target in that case creates a new process for each device where the PID of the process is the device id/ordinal. Therefore, once the target completes the attach, we want adjust the PID value. For this, revise the meaning of the return value of the 'attach' target op in case of success: return the PID of the process that was attached to. The PID argument to the 'attach' target op is of type 'int' in caller sites. Also, the type of the PID field in ptid_t is of type 'int'. Hence, update the parameter of 'attach' to 'int', too. --- gdbserver/linux-low.cc | 6 +++--- gdbserver/linux-low.h | 2 +- gdbserver/netbsd-low.cc | 2 +- gdbserver/netbsd-low.h | 2 +- gdbserver/server.cc | 18 ++++++++++++++---- gdbserver/target.h | 11 ++++++++--- gdbserver/win32-low.cc | 4 ++-- gdbserver/win32-low.h | 2 +- 8 files changed, 31 insertions(+), 16 deletions(-) diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index f14e5b1dc32..8f8bcfb72ea 100644 --- a/gdbserver/linux-low.cc +++ b/gdbserver/linux-low.cc @@ -1191,7 +1191,7 @@ static void async_file_mark (void); of its threads. */ int -linux_process_target::attach (unsigned long pid) +linux_process_target::attach (int pid) { struct process_info *proc; thread_info *initial_thread; @@ -1210,7 +1210,7 @@ linux_process_target::attach (unsigned long pid) this->remove_linux_process (proc); std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err); - error (_("Cannot attach to process %ld: %s"), pid, reason.c_str ()); + error (_("Cannot attach to process %d: %s"), pid, reason.c_str ()); } /* Don't report shared library events after attaching, even if some @@ -1279,7 +1279,7 @@ linux_process_target::attach (unsigned long pid) gdb_assert (proc->tdesc != NULL); } - return 0; + return pid; } static int diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h index 60154240ddd..f8cddef7236 100644 --- a/gdbserver/linux-low.h +++ b/gdbserver/linux-low.h @@ -150,7 +150,7 @@ class linux_process_target : public process_stratum_target void post_create_inferior () override; - int attach (unsigned long pid) override; + int attach (int pid) override; int kill (process_info *proc) override; diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc index 326b4d55860..c74c1da6fed 100644 --- a/gdbserver/netbsd-low.cc +++ b/gdbserver/netbsd-low.cc @@ -105,7 +105,7 @@ netbsd_process_target::post_create_inferior () /* Implement the attach target_ops method. */ int -netbsd_process_target::attach (unsigned long pid) +netbsd_process_target::attach (int pid) { /* Unimplemented. */ return -1; diff --git a/gdbserver/netbsd-low.h b/gdbserver/netbsd-low.h index 265009739a9..65866308902 100644 --- a/gdbserver/netbsd-low.h +++ b/gdbserver/netbsd-low.h @@ -46,7 +46,7 @@ class netbsd_process_target : public process_stratum_target void post_create_inferior () override; - int attach (unsigned long pid) override; + int attach (int pid) override; int kill (process_info *proc) override; diff --git a/gdbserver/server.cc b/gdbserver/server.cc index 471d6782091..13a806421a0 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -301,16 +301,26 @@ static int attach_inferior (int pid) { client_state &cs = get_client_state (); - /* myattach should return -1 if attaching is unsupported, - 0 if it succeeded, and call error() otherwise. */ if (find_process_pid (pid) != nullptr) error (_("Already attached to process %d\n"), pid); - if (myattach (pid) != 0) + /* If attaching is unsupported, myattach returns -1. If successful, + it returns the PID of the process that was attached to. In other + cases, it calls error(). */ + int new_pid = myattach (pid); + if (new_pid == -1) return -1; - fprintf (stderr, "Attached; pid = %d\n", pid); + if (new_pid == pid) + fprintf (stderr, "Attached; pid = %d\n", pid); + else + { + fprintf (stderr, "Attached; given pid = %d, updated to %d\n", + pid, new_pid); + pid = new_pid; + } + fflush (stderr); /* FIXME - It may be that we should get the SIGNAL_PID from the diff --git a/gdbserver/target.h b/gdbserver/target.h index 82eab9d1243..e38570dabb2 100644 --- a/gdbserver/target.h +++ b/gdbserver/target.h @@ -95,9 +95,14 @@ class process_stratum_target PID is the process ID to attach to, specified by the user or a higher layer. - Returns -1 if attaching is unsupported, 0 on success, and calls - error() otherwise. */ - virtual int attach (unsigned long pid) = 0; + If attaching is unsupported, returns -1. + + If successful, returns the ID of the process that was attached to. + This return value may be different from the argument PID, depending + on how the target interpreted the argument. + + Calls error() in other cases. */ + virtual int attach (int pid) = 0; /* Kill process PROC. Return -1 on failure, and 0 on success. */ virtual int kill (process_info *proc) = 0; diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index 935ac6657f7..ecfdd030d8b 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -604,7 +604,7 @@ win32_process_target::create_inferior (const char *program, PID is the process ID to attach to, specified by the user or a higher layer. */ int -win32_process_target::attach (unsigned long pid) +win32_process_target::attach (int pid) { HANDLE h; DWORD err; @@ -619,7 +619,7 @@ win32_process_target::attach (unsigned long pid) /* win32_wait needs to know we're attaching. */ windows_process.attaching = 1; do_initial_child_stuff (h, pid, 1); - return 0; + return pid; } CloseHandle (h); diff --git a/gdbserver/win32-low.h b/gdbserver/win32-low.h index 439adb84bc2..03bd625e23d 100644 --- a/gdbserver/win32-low.h +++ b/gdbserver/win32-low.h @@ -100,7 +100,7 @@ class win32_process_target : public process_stratum_target int create_inferior (const char *program, const std::string &program_args) override; - int attach (unsigned long pid) override; + int attach (int pid) override; int kill (process_info *proc) override; -- 2.43.0 ________________________________________ Intel Deutschland GmbH Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany Tel: +49 (89) 99143-0 www.intel.de Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitaraman Chairperson of the Supervisory Board: Sonja Pierer Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928 This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.