From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by sourceware.org (Postfix) with ESMTPS id 2FBB3385DC0C for ; Mon, 13 Apr 2020 19:44:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2FBB3385DC0C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gmx.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=n54@gmx.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1586807070; bh=AwXWUFS+ECwKGi8b3Hdcyadr21kbTPjMk3kYEOj0gL4=; h=X-UI-Sender-Class:To:References:From:Subject:Date:In-Reply-To; b=Do32b8HPbZFo//ei6y4pG3rwhplEG69AYO/2laXJaczM3ZX3mJeYGdpAEeIqhMwBV ohy2aEREClbNCtX1QTOGy+GlYcVvu53OY4oFyuxozOA/ep13wCikhXdKrA4dt2B+sT NfBa8DTt1je1eFTDxwOCdvAX8eJ+12DaaSnvN2sU= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.0.241] ([89.79.191.25]) by mail.gmx.com (mrgmx105 [212.227.17.174]) with ESMTPSA (Nemesis) id 1N63VY-1jCw2o1gHw-016Qo4; Mon, 13 Apr 2020 21:44:30 +0200 To: Simon Marchi , gdb-patches@sourceware.org References: <20200413181911.17133-1-n54@gmx.com> <64ef8889-0782-a541-6efa-3c37ed06b372@simark.ca> From: Kamil Rytarowski Autocrypt: addr=n54@gmx.com; prefer-encrypt=mutual; keydata= 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 4XSbcg== Subject: Re: [PATCH] Implement IP_STAT on NetBSD Message-ID: <4671cd7b-b081-1aad-88c3-f40aaefa38f5@gmx.com> Date: Mon, 13 Apr 2020 21:43:15 +0200 User-Agent: Mozilla/5.0 (X11; NetBSD amd64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <64ef8889-0782-a541-6efa-3c37ed06b372@simark.ca> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:xTWfbl77sRQk9r+LjL4FgN6T0yCmsi5FjCQ/MYvbobRlR+p2io1 uNHSLf6C0KAS6Wjw+mwhoJFR2vVTzFI6iojNtQ636RACFepMWr31Znolao+FlZCsXj/KpGF w2OQhn6Ju3KmVTlYmwcnUJ1m8PSCyLK6e3jTXll1714MdlC+j+I0/doMyLw6z0OlY0QXXft k8wirNSmnW2KTp/t5j8Qw== X-UI-Out-Filterresults: notjunk:1;V03:K0:IJUdrlCG1nE=:X6nLuJX6qtRHe9zYQc7u+w DSiALcdTh1c5XpROLJOC/1xsZ5QSePCaOGEBo4qFqczjNOTbsyTxDcLXdz6g3gJ+6MqtSllSi z8aWezFB2qDtVPR5hqb+Vcea0Oqr6US9L6GKArkWa/w1XpXWmIsxCkda5yvgZX51F9zL73u57 Yqx9UTbqgzESCVBSUhzaTeq9gJMiSWaNLnbeeLfrk5AoK+l6wXWHKvS4HWZ1mEU61gSlD6zGy sGj99xmmmTpse3lRSZbMP7xC/R4OScpStSMevMRj+IaZD+nKMHchgfrHVFzKBRISd1oT7i/vj NUYzOKOFcNn3PYccATF5q2ZWz+fouhxwwMibjuvgAm2keRHRPKUuYhHfViA2oLYcaPZn7DuBN b3SRW003GC/2C8u9Zhc53UiOz8qj31BI3A6+Wr9cC4aSN7cHsvVMpTsQlERlIlZ1GBESTtZ2B SsI/zxPgpAgZ85cJe3R8/cY9K4A/4bXvXGZDV9LQy0/TOYHP0osnoJllhjS8m5QLXKG4S4lFS WQuLdiPgGSGjN6UdJsox77L0Z8BTPgPr7ldmzZi3lQzy+ZjLQP7Mycb3PIar3+tk5VL96Kevw M3aNS57+U92AwF941TdtcHN7Y2ER/r5gUbc3Q+58EnT/PJxTxrbmfzH2z3a9b2LpVczkqroWJ b8/G9uhCR1Ud+u1zroMZGGIsz58Taqyjdgfx/i1CRZ5KNbs7Jd7oB6PrLjLxcY9PRpR4IOqtw iEG01tKPqsCuYkLUJRbZY2bwLUrIVUhAe3QGCI5G0kdmzqGO/up+TYmr+kkk7MeG90+fyUhX4 5B6CygxfjSMYaD83MKL4rxMfMygPOhDdNWQjyqrdwc5udUIeSEuNfpL+0Rx17YFbSdnOHtWCG 2Pm52qYsmZNUReCOx9nrLbcar/XfeeLxfZYtT63ZZNO1IoLuAdpHexXxpQymRtH9i5PisBFkF xZWGWYfsGl6Bf7A773OPWM1VbVlIh9hwio+03CWYjGoUMM9cNybWRMWZclUoCJ6Zsqj7z5vZ9 v+bIEwjzFUtjlI3GRDf1tXLn51WIEcdwG2KSy9dSvWeTt64O1U4LhwS2q5qs7hMpsrHroPW0Q RzVwMIcaCXQA2Rxis9NSLX+FcRyXgbbYXCob/FcBrne4BJfdkruyicL6MSRkAjVKXCE6bnZCa 8o/zDdj/SAQZsNCdlHj1zk4e5uP3vER2GFHOoYc6bh0sA8C51vgvPqW5g3j4Xku+vOc70= X-Spam-Status: No, score=-27.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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: Mon, 13 Apr 2020 19:44:36 -0000 On 13.04.2020 21:16, Simon Marchi wrote: > On 2020-04-13 2:19 p.m., Kamil Rytarowski wrote: >> NetBSD ships with a compatibility layer in a /proc virtual file system >> and delivers optionally /proc//stat. In case of missing >> /proc//stat fallback to emulating it with sysctl(3) APIs. >> >> gdb/ChangeLog: >> >> * nbsd-nat.c: Include "sys/resource.h" and "machine/vmparam.h". >> (nbsd_pid_to_kinfo_proc2, nbsd_pid_to_rlimit_cur) >> (nbsd_pid_to_statstr): New. >> (nbsd_nat_target::info_proc): Add do_stat. >> --- >> gdb/ChangeLog | 7 ++ >> gdb/nbsd-nat.c | 278 +++++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 285 insertions(+) >> >> diff --git a/gdb/ChangeLog b/gdb/ChangeLog >> index 7d91abf6334..5ff76e85cb3 100644 >> --- a/gdb/ChangeLog >> +++ b/gdb/ChangeLog >> @@ -1,3 +1,10 @@ >> +2020-04-13 Kamil Rytarowski >> + >> + * nbsd-nat.c: Include "sys/resource.h" and "machine/vmparam.h". >> + (nbsd_pid_to_kinfo_proc2, nbsd_pid_to_rlimit_cur) >> + (nbsd_pid_to_statstr): New. >> + (nbsd_nat_target::info_proc): Add do_stat. >> + >> 2020-04-12 Kamil Rytarowski >> >> * nbsd-nat.c (nbsd_nat_target::info_proc): Add IP_MINIMAL and >> diff --git a/gdb/nbsd-nat.c b/gdb/nbsd-nat.c >> index 5eaf9dec8af..b2a05d63122 100644 >> --- a/gdb/nbsd-nat.c >> +++ b/gdb/nbsd-nat.c >> @@ -28,6 +28,8 @@ >> #include >> #include >> #include >> +#include >> +#include >> >> /* Return the name of a file that can be opened to get the symbols for >> the child process identified by PID. */ >> @@ -58,6 +60,134 @@ nbsd_pid_to_cwd (int pid) >> return buf; >> } >> >> +/* Return the kinfo_proc2 structure for the process identified by PID.= */ >> + >> +static bool >> +nbsd_pid_to_kinfo_proc2(pid_t pid, struct kinfo_proc2 *ki) > > Space. > OK >> +{ >> + gdb_assert (ki !=3D nullptr); >> + >> + size_t size =3D sizeof (*ki); >> + int mib[6] =3D {CTL_KERN, KERN_PROC2, KERN_PROC_PID, pid, >> + static_cast (size), 1}; >> + return sysctl (mib, ARRAY_SIZE (mib), ki, &size, NULL, 0); > > That looks counter-intuitive. sysctl returns 0 on success, which transl= ates to > false as a bool. WHen a function returns a bool it is more typical that= true > means success. This happens lower too. > OK >> +} >> + >> +/* Return the RLIMIT value for the process identified by PID. */ >> + >> +static bool >> +nbsd_pid_to_rlimit_cur(pid_t pid, rlim_t *rlim, int type) > > Space. > OK >> +{ >> + gdb_assert (rlim !=3D nullptr); >> + >> + size_t size =3D sizeof (*rlim); >> + int mib[5] =3D {CTL_PROC, pid, PROC_PID_LIMIT, type, PROC_PID_LIMIT_= TYPE_SOFT}; >> + return sysctl (mib, ARRAY_SIZE (mib), rlim, &size, NULL, 0); >> +} >> + >> +/* Return the emulated /proc/#/stat string for the process identified = by PID. >> + NetBSD keeps the /proc filesystem that is optional and not recommen= ded for >> + new software, thus this call emulates it with sysctl(3). */ >> + >> +static gdb::unique_xmalloc_ptr >> +nbsd_pid_to_statstr (int pid) >> +{ >> + struct kinfo_proc2 ki; >> + if (nbsd_pid_to_kinfo_proc2 (pid, &ki)) >> + return nullptr; >> + >> + struct rusage cru =3D {}; >> + /* We can check only the current process. */ >> + if (getpid() =3D=3D pid) > > Space. > OK >> @@ -433,6 +568,149 @@ nbsd_nat_target::info_proc (const char *args, enu= m info_proc_what what) >> else >> warning (_("unable to fetch virtual memory map")); >> } >> + if (do_stat) >> + { >> + /* First, try with Linux-compat /proc//stat. */ >> + char filename[100]; >> + xsnprintf (filename, sizeof filename, "/proc/%d/stat", pid); > > Use > > std::string filename =3D string_printf (...); > OK. Meanwhile linux-tdep.c could be upgraded by a Linux maintainer. >> + gdb::unique_xmalloc_ptr statstr >> + =3D target_fileio_read_stralloc (NULL, filename); >> + >> + /* Then fallback to emulating /proc//stat with sysctl(3). = */ >> + if (statstr =3D=3D nullptr) >> + statstr =3D nbsd_pid_to_statstr (pid); > > I find it a bit strange to take the route of formatting the contents of = kinfo_proc2, > only to parse it here. I think it would have been more natural to do: > > - If /proc/#/stat is available: string -> struct some_internal_struct ->= print function > - If /proc/#/stat is available: kinfo_proc2 -> struct some_internal_stru= ct -> print function > This compat shim is only to emulate Linux... it's possible to follow the FreeBSD case and just print local kinfo_proc2 as-is (that is fully OS-specific). What do you think? The same question applies to IP_STATUS. >> + >> + if (statstr) > > !=3D nullptr > OK >> + { >> + const char *p =3D statstr.get (); >> + >> + printf_filtered (_("Process: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + >> + p =3D skip_spaces (p); >> + if (*p =3D=3D '(') >> + { >> + /* ps command also relies on no trailing fields >> + ever contain ')'. */ >> + const char *ep =3D strrchr (p, ')'); >> + if (ep !=3D NULL) >> + { >> + printf_filtered ("Exec file: %.*s\n", >> + (int) (ep - p - 1), p + 1); >> + p =3D ep + 1; >> + } >> + } >> + >> + p =3D skip_spaces (p); >> + if (*p) >> + printf_filtered (_("State: %c\n"), *p++); >> + >> + if (*p) >> + printf_filtered (_("Parent process: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Process group: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Session id: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("TTY: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("TTY owner process group: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + >> + if (*p) >> + printf_filtered (_("Flags: %s\n"), >> + hex_string (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Minor faults (no memory page): %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Minor faults, children: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Major faults (memory page faults): %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Major faults, children: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("utime: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("stime: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("utime, children: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("stime, children: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("jiffies remaining in current " >> + "time slice: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("'nice' value: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("jiffies until next timeout: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("jiffies until next SIGALRM: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("start time (jiffies since " >> + "system boot): %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Virtual memory size: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Resident set size: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("rlim: %s\n"), >> + pulongest (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Start of text: %s\n"), >> + hex_string (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("End of text: %s\n"), >> + hex_string (strtoulst (p, &p, 10))); >> + if (*p) >> + printf_filtered (_("Start of stack: %s\n"), >> + hex_string (strtoulst (p, &p, 10))); >> +#if 0 /* Don't know how architecture-dependent the rest is... >> + Anyway the signal bitmap info is available from "status". */ > > Either figure out how to print this correctly, or let's just leave it ou= t. > This comment was copied as-is from gdb/linux-tdep.c. > Simon >