From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id B9B90385DC05 for ; Sat, 11 Apr 2020 21:05:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B9B90385DC05 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark@simark.ca Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 110311E827; Sat, 11 Apr 2020 17:05:52 -0400 (EDT) Subject: Re: [PATCH v3] Implement "info proc mappings" for NetBSD To: Kamil Rytarowski , gdb-patches@sourceware.org Cc: tom@tromey.com References: <20200402200916.26504-1-n54@gmx.com> <20200406093753.13772-1-n54@gmx.com> From: Simon Marchi Message-ID: <5d7ee373-df4f-6a05-fda3-d8d6f4d1efcc@simark.ca> Date: Sat, 11 Apr 2020 17:05:52 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200406093753.13772-1-n54@gmx.com> Content-Type: text/plain; charset=utf-8 Content-Language: fr Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-24.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Apr 2020 21:05:55 -0000 On 2020-04-06 5:37 a.m., Kamil Rytarowski wrote: > @@ -39,3 +42,148 @@ nbsd_nat_target::pid_to_exec_file (int pid) > return NULL; > return buf; > } > + > +/* Retrieve all the memory regions in the specified process. */ > + > +static gdb::unique_xmalloc_ptr > +nbsd_kinfo_get_vmmap (pid_t pid, size_t *size) > +{ > + int mib[5] = {CTL_VM, VM_PROC, VM_PROC_MAP, pid, > + sizeof (struct kinfo_vmentry)}; > + > + size_t length = 0; > + if (sysctl (mib, ARRAY_SIZE (mib), NULL, &length, NULL, 0)) > + { > + *size = 0; > + return NULL; > + } > + > + /* Prereserve more space. */ > + length = length * 5 / 3; Why is this needed? > + > + gdb::unique_xmalloc_ptr kiv > + ((struct kinfo_vmentry *) xcalloc (length, 1)); Let's use XCNEWVAR here. It doesn't matter in this case, but for consistency. It does check that we are not trying to allocate space for a non-POD type. You can use like: XCNEWVAR (kinfo_vmentry, length) You can also use XNEWVAR if you don't care about the buffer being initialized to zeros. > diff --git a/gdb/nbsd-tdep.h b/gdb/nbsd-tdep.h > index c99a8b537b6..81bdb2510f5 100644 > --- a/gdb/nbsd-tdep.h > +++ b/gdb/nbsd-tdep.h > @@ -25,4 +25,22 @@ struct link_map_offsets *nbsd_lp64_solib_svr4_fetch_link_map_offsets (void); > > int nbsd_pc_in_sigtramp (CORE_ADDR, const char *); > > +/* Output the header for "info proc mappings". ADDR_BIT is the size > + of a virtual address in bits. */ > + > +extern void nbsd_info_proc_mappings_header (int addr_bit); > + > +/* Output description of a single memory range for "info proc > + mappings". ADDR_BIT is the size of a virtual address in bits. The > + KVE_START, KVE_END, KVE_OFFSET, KVE_FLAGS, and KVE_PROTECTION > + parameters should contain the value of the corresponding fields in > + a 'struct kinfo_vmentry'. The KVE_PATH parameter should contain a > + pointer to the 'kve_path' field in a 'struct kinfo_vmentry'. */ > + > +extern void nbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start, > + ULONGEST kve_end, > + ULONGEST kve_offset, > + int kve_flags, int kve_protection, > + const void *kve_path); I'd make the last parameter a `const char *` directly, since this is what the function expects to receive. And remove the reinterpret_casts. Simon