From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2073.outbound.protection.outlook.com [40.107.105.73]) by sourceware.org (Postfix) with ESMTPS id 1EE303858CDB for ; Mon, 28 Nov 2022 11:50:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1EE303858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UHwUNZv94iehwHRuzRVV+J9muJP5ObZfdimcINUMK/WHCFPy95OTtBQzwiOShKd0cFVPfFDXhlGm6McEIZl+uBhYHVvGkzDj3sPHgF13jXL4KhdzrynvdHtw2ORhxGa9+nHvCNb6n22uT6qeoXii1ec4+y/zyzM5EYuTyi7FZacPWufP7Ssgufb0pqgNNu06DbNfY9hkvLP5GjHyD6WkpZtruL6Kcpa10y4mOKol17QvJdsRLbUk/6VGwEfqtazCufMwlgZhu/XwG2wpozZHg5x3DZiL9RDYwxCNzXqICbd6lVy7IFMeJ+DYt1ULzvGIjRpI9AHsPIn0LkcmfCtoBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ePcWudrv4SPAeZ/3wgReNABWZHDXjllvafHH40HayNs=; b=WUQpaeEn44AMTGe+u8U4cAI8Vue+1NbRQTDqPCK+Tb4k7zvVJMuI1453zPdwEBFgm6D2rDU6WoqgjARC1HAOAnuS+fPW+Db4GGGHgJB6GFJaqOjX43jZw/JeN5heTiITn5yhwSv3PNx9xNo1Qlbt8mfpZkGU7uEhFIvd2JjdzYMotTJAveWirTWYv0K580Ec3W6tuJ6Wo+EXAS/B15gxTt9il157sUbeTWjoLfbYdNKW4grHzEmqUhyEybgB53TQEw5d4eyu0dHwA17vcs33x76jQfVa2dOY4LDPf2Enh7Djiqt2QwdtyvR9ybxKOM5cItQX/xUw2eOHcPSdwJW+dg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ePcWudrv4SPAeZ/3wgReNABWZHDXjllvafHH40HayNs=; b=JRMLpgYEDA590Ws2Ss7M60DN98PfqNle9L/+hN4BIOLwnypxugJ8ePl+vygkDwh5aV722H5pHJVi/uS/7yKEPgV/xi9+0GwB0jRb7j25bxjD5GJ1o0doP4zWJBCzIlTa/ZhuNhheiWNFOjX3Hf9X3IjcCfXkjg1KvsZlpmyEDoU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) by DB3PR08MB9136.eurprd08.prod.outlook.com (2603:10a6:10:43c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.6; Mon, 28 Nov 2022 11:50:32 +0000 Received: from VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::fe5c:b195:a2ad:b19c]) by VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::fe5c:b195:a2ad:b19c%4]) with mapi id 15.20.5880.008; Mon, 28 Nov 2022 11:50:26 +0000 Message-ID: <5309bed5-3145-0763-150d-75cad9ef4e44@arm.com> Date: Mon, 28 Nov 2022 11:50:24 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v2 2/6] gdbserver: Add PID parameter to linux_get_auxv and linux_get_hwcap To: Thiago Jung Bauermann , gdb-patches@sourceware.org References: <20221126020452.1686509-1-thiago.bauermann@linaro.org> <20221126020452.1686509-3-thiago.bauermann@linaro.org> Content-Language: en-US From: Luis Machado In-Reply-To: <20221126020452.1686509-3-thiago.bauermann@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P265CA0005.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ad::17) To VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR08MB3919:EE_|DB3PR08MB9136:EE_ X-MS-Office365-Filtering-Correlation-Id: 3810a137-85d7-4396-c6d6-08dad136bd60 NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BxaKbyFFdf5sxQiwS7UXswAOfy4VV4RQzapnnePB0XiJ+7XXuBD9QXm4FoBqL7wtk1ktdZJy8pPGXUVFyOlzJRMCqoStiIdPsoX8Lp+7SWlaj+pLNyQejqVBlpfT4hbW0ZX/nggs/LHd7wul8FNrNgy08c1aVTIa9HwaR+jJI2UOYe8/fYVeN+BuMH1TQKwfbWMscpt+iX1K9UlTMbv6bp3IZtXc2qo4ceG9Xx5x8Fd0OVDcZIT6T23bpwPS+KIUkDtR/ToMoHEDHlWofYt0pex1pK/wQAvsaLN6S3k8sgH+Gpx/vUZHIgiCx/W+sin8Tz+gsyn0US+uS9yWol7MO4b1IIqqh8hyNn4CZ8iK4wmmbAnl7cE47STdyAYDCOIV1L8pJ2/Gr7RL8H5Wgr7TSiI9gz6O6Z0WttZIdOQgZ4+O0DPIO4t6I6NmHg596wuw6jMZ12J6m1vbNpslzvJR6zoPVucpuSvIMmdDF7X+Q11FYDec+ypxGkc+oRAVvoH9AWPPTQGWRJoH1JAt0SGJVE6RTUYUNzOWe1zcrHVoszfbd6LBzjJOtOylGoj5r7bpUFj/3YUBU8Mpy0XwPpilDbOSITcFV4dorQISUdcmIDgVFcZmkysiqq0dx4TUM7RNiy9DZv99I+2s2NVuefSs/YzotghKWsMPs9S69gf7C7XcZCxfo4lsz930bp/g/aLAYA7OYc5PQesZcHOhxp2aQ9CczHO5s8vnNhHyPmqDSwE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB3919.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(396003)(39850400004)(136003)(346002)(376002)(451199015)(316002)(31686004)(2906002)(31696002)(8936002)(186003)(2616005)(83380400001)(86362001)(36756003)(5660300002)(44832011)(38100700002)(66556008)(8676002)(66476007)(30864003)(41300700001)(66946007)(53546011)(6506007)(6486002)(26005)(6512007)(478600001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TUFGTmdxUzhBZEprMVJsVGdXSlRUVHJoMk5jSzFBOXM3R2lYVldyTHlLd1Bn?= =?utf-8?B?NUc2YllvcHVzRU9VL3ZYQndYTlN5ZGNvWHdmQkE5T250Ti9HclJCbUtDTDZ1?= =?utf-8?B?K2tvcE9vSWFJa1YvaVVzN1NiQXRlaVZCblkvMEdnMzJKWXllUFhrUzBJMUIv?= =?utf-8?B?VlhtWVlwNjFvS2VERXFZQnhpeEdVZ3Bsb21jeXQyNGhBcll2RXcxQXoxT3FC?= =?utf-8?B?KzVwNDlzaGFRTE5VOXBLN2czZHNoYjRscGZza2N6TGtmcGpxQzZJT2c2TzVD?= =?utf-8?B?ejIydlFMRXM0UDJxd3pVampqT0hDRk5mSk9aZ0dwWGJpN09vT0FkRklxVmJB?= =?utf-8?B?L3hYV0NnTEJLRHltMnNRVWtHSVBXcWdQNFJJYkZHMFNhZFBRdHdwS2JuSUhY?= =?utf-8?B?WlFEc016T01kL0ppNDB0TmFIOTRhQVpzbUZZWm9PZnlGa2lNcmk4RlF4RG5C?= =?utf-8?B?UlZWYmYzSzJVT0xmNFVRa0REZDNXNS9iS2IzTkZEVEtFaUxtYzFLYlNVSzdE?= =?utf-8?B?ZnR6blNRRVluRDA0Q0RscURhY1Z4YmhSaDh5eFpCR0VRSktJSXdjZXh3RjNE?= =?utf-8?B?MlJ4NzZUeS9KckZYeVo4QzBlaVYvRUJ0L1BaUjBtaTlmdWN5UjZPWGFoU1RD?= =?utf-8?B?YnNvODZQbldRNHljMWdqT08wNjN2WDJRdWIxc0d4TzNEQ1Y1M2ZrdUprYmNU?= =?utf-8?B?MUoxeHJuOUlBMmxubGowRFlUM1FYeHMxVU5mQXd5VG9Ub05iWkUySXF2Y01q?= =?utf-8?B?NzRzTGI0dXNibVkxRHNVRHpXK1hBSXpReHhXcnhBN1k5WFBQUXNsTFVVQmls?= =?utf-8?B?bHI3QURSRk1nKzlOSGYxZzdjVVozK2g3Vkk3WlprOW40V3psRkJ6bmZPbDFG?= =?utf-8?B?OUV1YktwSVNHK3BRUEtkcURVZFdVZjF1RW16MUJJOHNNY0tURE1XUDhMVkI4?= =?utf-8?B?bm5pRDlrNmZpcjFVVVMvVnNxYytDVFpIaDhrZUtVWE5WZXQ3ZVowL2lHZzlU?= =?utf-8?B?QnBoQmNpYkhFdTlMK3NvR0V4LzZJUlFZeTVDNUhYNzBpaDI4YXZBajlhVkcy?= =?utf-8?B?SXQ3d08zUlFMVFJPM2ErUlc3OXlheDBobDl0Mzg0czJZZFF5NXVxQUJYeG4x?= =?utf-8?B?TUVhZnduY0krMmdSSDV5N1JUUHhwYm8yeXNka2wyc1lIRitoeE5nMFFLSjU0?= =?utf-8?B?V2VZODFZNGVBemVsUTRMRGlmMHJJelVGdkNjRCtMQlorczlFUVdyamZYNnc3?= =?utf-8?B?aUNJVnFNUWdZMWJkbGNybFNsWW41THpBbWZieG1tRmVLQW9wNmVWTkNjZXJz?= =?utf-8?B?M016VFl2RG5OaG83OUdycHR5WGpaUVJjOUNMcFNoMk94Tjd4Z2FHN1FaQVpR?= =?utf-8?B?WWVZZDg4eVU3RVI3RkM4YlZVejZPMXFyU3FxaEhienhCajlxaHNtUDQwM1RB?= =?utf-8?B?bjB6SnJSZnFqeHRlK0UwTENBc1FuNkNPdDJVNkd0ckJGejgvQm01OFpSRHBV?= =?utf-8?B?clhxVTU3NnorSkV6UnU3QldZc3V4YW1EOS85R29wUjkwU2lQOVVUdFpyNHh0?= =?utf-8?B?SE5VWHJDTmdNSjdaUEpUVit2SGJMdDZ5N2VIbzNCcE9NM3daTEtWTlRDdXV2?= =?utf-8?B?UFRNTW5QNUNBeklJU1Ixc0hNTm1xeVNCZGROQXBQRTAva3ZDMjRwcFdTdTBQ?= =?utf-8?B?cE5oL1hyaHh5Rm90QnhEejVtVjdsMktSSXM0cVh3YUllNExVSjVJQzBPVUwy?= =?utf-8?B?Q0VpWS9nMmFxTTNzVWR4aThIbU9ibzlPSmlkQ3A3NWZYU243UklTSXRnazdw?= =?utf-8?B?cXhNRUFEdnpzOXU0eFE5SkV0aTdsemo3SGczNHpMeGprMW94ZmdUQVhOYUpB?= =?utf-8?B?TWNoSUdmWU9tM2VSNDRvcENsMkl5bzNJelJwcEcwbzdBenVYTXJ1VnFEN0ZO?= =?utf-8?B?VlA3MlJHenhDTXNkbjFnN016eDlMVFVCWWY2bWw3dkFwL0V2WEtRTFljNVdx?= =?utf-8?B?SHNGV0pvQVYvY2pzUmQ5c2l1clVaMGtscTlSMm9qMUNZelR5eTZseW9pUFpn?= =?utf-8?B?V0pITHdLV0ZVaExKT1d2T0ZZNjRsVVVhRXdaQ0RoZmt6SWZwWkdaMlBtMWMx?= =?utf-8?Q?5huqDzhCLRJuPS1zWJxj97Rbx?= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3810a137-85d7-4396-c6d6-08dad136bd60 X-MS-Exchange-CrossTenant-AuthSource: VI1PR08MB3919.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2022 11:50:26.3584 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3ZDk2QmcCc7otFjLChoGJGCLYmURNqAYeadLan6N4xRqhWzZJWYGGWmxScTymtuhP8DOtWIUv5QCpo6Ejvkt/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB9136 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi, On 11/26/22 02:04, Thiago Jung Bauermann wrote: > This patch doesn't change gdbserver behaviour, but after later changes are > made it avoids a null pointer dereference when HWCAP needs to be obtained > for a specific process while current_thread is nullptr. > > Fixing linux_read_auxv, linux_get_hwcap and linux_get_hwcap2 to take a PID > parameter seems more correct than setting current_thread in one particular > code path. I'm wondering if passing the pid is needed at all in gdbserver for the purposes of fetching the hwcap entries from auxv. While current thread can be nullptr, I suppose current_process will never be nullptr if we have a valid inferior. And the auxv entries are per-process rather than per-thread. There is a bit of a corner case when we have extended-remote without a live process and we need to fetch the hwcap bits to determine a particular feature to report via qSupported. But I suppose this is not what this change is trying to address, is it? If not, it may be the case that we don't need these changes, and we can just use current_process. Does that make sense? > > Changes are propagated to allow passing the new parameter through the call > chain. > --- > gdbserver/linux-aarch64-low.cc | 7 ++++--- > gdbserver/linux-arm-low.cc | 2 +- > gdbserver/linux-low.cc | 18 +++++++++--------- > gdbserver/linux-low.h | 9 ++++----- > gdbserver/linux-ppc-low.cc | 6 +++--- > gdbserver/linux-s390-low.cc | 2 +- > gdbserver/netbsd-low.cc | 4 +--- > gdbserver/netbsd-low.h | 2 +- > gdbserver/server.cc | 2 +- > gdbserver/target.cc | 4 ++-- > gdbserver/target.h | 2 +- > 11 files changed, 28 insertions(+), 30 deletions(-) > > diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc > index db5086962612..a6ed68f93029 100644 > --- a/gdbserver/linux-aarch64-low.cc > +++ b/gdbserver/linux-aarch64-low.cc > @@ -823,12 +823,13 @@ aarch64_target::low_arch_setup () > if (is_elf64) > { > struct aarch64_features features; > + int pid = pid_of (current_thread); > > features.vq = aarch64_sve_get_vq (tid); > /* A-profile PAC is 64-bit only. */ > - features.pauth = linux_get_hwcap (8) & AARCH64_HWCAP_PACA; > + features.pauth = (linux_get_hwcap (pid, 8) & AARCH64_HWCAP_PACA); > /* A-profile MTE is 64-bit only. */ > - features.mte = linux_get_hwcap2 (8) & HWCAP2_MTE; > + features.mte = linux_get_hwcap2 (pid, 8) & HWCAP2_MTE; > features.tls = true; > > current_process ()->tdesc = aarch64_linux_read_description (features); > @@ -3299,7 +3300,7 @@ aarch64_target::supports_memory_tagging () > #endif > } > > - return (linux_get_hwcap2 (8) & HWCAP2_MTE) != 0; > + return (linux_get_hwcap2 (pid_of (current_thread), 8) & HWCAP2_MTE) != 0; > } > > bool > diff --git a/gdbserver/linux-arm-low.cc b/gdbserver/linux-arm-low.cc > index a458b0f14a68..1420909626e8 100644 > --- a/gdbserver/linux-arm-low.cc > +++ b/gdbserver/linux-arm-low.cc > @@ -958,7 +958,7 @@ get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self) > static const struct target_desc * > arm_read_description (void) > { > - unsigned long arm_hwcap = linux_get_hwcap (4); > + unsigned long arm_hwcap = linux_get_hwcap (pid_of (current_thread), 4); > > if (arm_hwcap & HWCAP_IWMMXT) > return arm_linux_read_description (ARM_FP_TYPE_IWMMXT); > diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc > index a896b37528b6..fc496275d6a3 100644 > --- a/gdbserver/linux-low.cc > +++ b/gdbserver/linux-low.cc > @@ -5480,12 +5480,11 @@ linux_process_target::supports_read_auxv () > to debugger memory starting at MYADDR. */ > > int > -linux_process_target::read_auxv (CORE_ADDR offset, unsigned char *myaddr, > - unsigned int len) > +linux_process_target::read_auxv (int pid, CORE_ADDR offset, > + unsigned char *myaddr, unsigned int len) > { > char filename[PATH_MAX]; > int fd, n; > - int pid = lwpid_of (current_thread); > > xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid); > > @@ -6979,14 +6978,15 @@ linux_get_pc_64bit (struct regcache *regcache) > /* See linux-low.h. */ > > int > -linux_get_auxv (int wordsize, CORE_ADDR match, CORE_ADDR *valp) > +linux_get_auxv (int pid, int wordsize, CORE_ADDR match, CORE_ADDR *valp) > { > gdb_byte *data = (gdb_byte *) alloca (2 * wordsize); > int offset = 0; > > gdb_assert (wordsize == 4 || wordsize == 8); > > - while (the_target->read_auxv (offset, data, 2 * wordsize) == 2 * wordsize) > + while (the_target->read_auxv (pid, offset, data, 2 * wordsize) > + == 2 * wordsize) > { > if (wordsize == 4) > { > @@ -7016,20 +7016,20 @@ linux_get_auxv (int wordsize, CORE_ADDR match, CORE_ADDR *valp) > /* See linux-low.h. */ > > CORE_ADDR > -linux_get_hwcap (int wordsize) > +linux_get_hwcap (int pid, int wordsize) > { > CORE_ADDR hwcap = 0; > - linux_get_auxv (wordsize, AT_HWCAP, &hwcap); > + linux_get_auxv (pid, wordsize, AT_HWCAP, &hwcap); > return hwcap; > } > > /* See linux-low.h. */ > > CORE_ADDR > -linux_get_hwcap2 (int wordsize) > +linux_get_hwcap2 (int pid, int wordsize) > { > CORE_ADDR hwcap2 = 0; > - linux_get_auxv (wordsize, AT_HWCAP2, &hwcap2); > + linux_get_auxv (pid, wordsize, AT_HWCAP2, &hwcap2); > return hwcap2; > } > > diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h > index 1594f063f47c..182a540f3bb3 100644 > --- a/gdbserver/linux-low.h > +++ b/gdbserver/linux-low.h > @@ -178,7 +178,7 @@ class linux_process_target : public process_stratum_target > > bool supports_read_auxv () override; > > - int read_auxv (CORE_ADDR offset, unsigned char *myaddr, > + int read_auxv (int pid, CORE_ADDR offset, unsigned char *myaddr, > unsigned int len) override; > > int insert_point (enum raw_bkpt_type type, CORE_ADDR addr, > @@ -946,17 +946,16 @@ extern int have_ptrace_getregset; > *VALP and return 1. If not found or if there is an error, return > 0. */ > > -int linux_get_auxv (int wordsize, CORE_ADDR match, > - CORE_ADDR *valp); > +int linux_get_auxv (int pid, int wordsize, CORE_ADDR match, CORE_ADDR *valp); > > /* Fetch the AT_HWCAP entry from the auxv vector, where entries are length > WORDSIZE. If no entry was found, return zero. */ > > -CORE_ADDR linux_get_hwcap (int wordsize); > +CORE_ADDR linux_get_hwcap (int pid, int wordsize); > > /* Fetch the AT_HWCAP2 entry from the auxv vector, where entries are length > WORDSIZE. If no entry was found, return zero. */ > > -CORE_ADDR linux_get_hwcap2 (int wordsize); > +CORE_ADDR linux_get_hwcap2 (int pid, int wordsize); > > #endif /* GDBSERVER_LINUX_LOW_H */ > diff --git a/gdbserver/linux-ppc-low.cc b/gdbserver/linux-ppc-low.cc > index 08824887003b..1db20d998ffd 100644 > --- a/gdbserver/linux-ppc-low.cc > +++ b/gdbserver/linux-ppc-low.cc > @@ -894,8 +894,8 @@ ppc_target::low_arch_setup () > > /* The value of current_process ()->tdesc needs to be set for this > call. */ > - ppc_hwcap = linux_get_hwcap (features.wordsize); > - ppc_hwcap2 = linux_get_hwcap2 (features.wordsize); > + ppc_hwcap = linux_get_hwcap (pid_of (current_thread), features.wordsize); > + ppc_hwcap2 = linux_get_hwcap2 (pid_of (current_thread), features.wordsize); > > features.isa205 = ppc_linux_has_isa205 (ppc_hwcap); > > @@ -1097,7 +1097,7 @@ is_elfv2_inferior (void) > const struct target_desc *tdesc = current_process ()->tdesc; > int wordsize = register_size (tdesc, 0); > > - if (!linux_get_auxv (wordsize, AT_PHDR, &phdr)) > + if (!linux_get_auxv (pid_of (current_thread), wordsize, AT_PHDR, &phdr)) > return def_res; > > /* Assume ELF header is at the beginning of the page where program headers > diff --git a/gdbserver/linux-s390-low.cc b/gdbserver/linux-s390-low.cc > index 5adc28070574..2d030a806350 100644 > --- a/gdbserver/linux-s390-low.cc > +++ b/gdbserver/linux-s390-low.cc > @@ -592,7 +592,7 @@ s390_target::low_arch_setup () > /* Determine word size and HWCAP. */ > int pid = pid_of (current_thread); > int wordsize = s390_get_wordsize (pid); > - unsigned long hwcap = linux_get_hwcap (wordsize); > + unsigned long hwcap = linux_get_hwcap (pid, wordsize); > > /* Check whether the kernel supports extra register sets. */ > int have_regset_last_break > diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc > index f05bcd4e173f..03af80049457 100644 > --- a/gdbserver/netbsd-low.cc > +++ b/gdbserver/netbsd-low.cc > @@ -581,11 +581,9 @@ netbsd_read_auxv(pid_t pid, void *offs, void *addr, size_t len) > to debugger memory starting at MYADDR. */ > > int > -netbsd_process_target::read_auxv (CORE_ADDR offset, > +netbsd_process_target::read_auxv (int pid, CORE_ADDR offset, > unsigned char *myaddr, unsigned int len) > { > - pid_t pid = pid_of (current_thread); > - > return netbsd_read_auxv (pid, (void *) (intptr_t) offset, myaddr, len); > } > > diff --git a/gdbserver/netbsd-low.h b/gdbserver/netbsd-low.h > index 06b4fd613571..eced7b3dd860 100644 > --- a/gdbserver/netbsd-low.h > +++ b/gdbserver/netbsd-low.h > @@ -77,7 +77,7 @@ class netbsd_process_target : public process_stratum_target > > bool supports_read_auxv () override; > > - int read_auxv (CORE_ADDR offset, unsigned char *myaddr, > + int read_auxv (int pid, CORE_ADDR offset, unsigned char *myaddr, > unsigned int len) override; > > bool supports_hardware_single_step () override; > diff --git a/gdbserver/server.cc b/gdbserver/server.cc > index aaef38e00622..63c323071670 100644 > --- a/gdbserver/server.cc > +++ b/gdbserver/server.cc > @@ -1443,7 +1443,7 @@ handle_qxfer_auxv (const char *annex, > if (annex[0] != '\0' || current_thread == NULL) > return -1; > > - return the_target->read_auxv (offset, readbuf, len); > + return the_target->read_auxv (pid_of (current_thread), offset, readbuf, len); > } > > /* Handle qXfer:exec-file:read. */ > diff --git a/gdbserver/target.cc b/gdbserver/target.cc > index c06a67600b1f..3651dbb9e862 100644 > --- a/gdbserver/target.cc > +++ b/gdbserver/target.cc > @@ -344,8 +344,8 @@ process_stratum_target::supports_read_auxv () > } > > int > -process_stratum_target::read_auxv (CORE_ADDR offset, unsigned char *myaddr, > - unsigned int len) > +process_stratum_target::read_auxv (int pid, CORE_ADDR offset, > + unsigned char *myaddr, unsigned int len) > { > gdb_assert_not_reached ("target op read_auxv not supported"); > } > diff --git a/gdbserver/target.h b/gdbserver/target.h > index 18ab969dda70..fe7a80b645bc 100644 > --- a/gdbserver/target.h > +++ b/gdbserver/target.h > @@ -175,7 +175,7 @@ class process_stratum_target > /* Read auxiliary vector data from the inferior process. > > Read LEN bytes at OFFSET into a buffer at MYADDR. */ > - virtual int read_auxv (CORE_ADDR offset, unsigned char *myaddr, > + virtual int read_auxv (int pid, CORE_ADDR offset, unsigned char *myaddr, > unsigned int len); > > /* Returns true if GDB Z breakpoint type TYPE is supported, false