From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id KDfpJYXAhV/2CgAAWB0awg (envelope-from ) for ; Tue, 13 Oct 2020 10:58:13 -0400 Received: by simark.ca (Postfix, from userid 112) id 9938D1EF6F; Tue, 13 Oct 2020 10:58:13 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 29BC61E58E for ; Tue, 13 Oct 2020 10:58:13 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 68331389442C; Tue, 13 Oct 2020 14:58:12 +0000 (GMT) Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200]) by sourceware.org (Postfix) with ESMTPS id AA6613851C15 for ; Tue, 13 Oct 2020 14:58:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AA6613851C15 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=netbsd.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=kamil@netbsd.org Received: from [IPv6:::1] (localhost [127.0.0.1]) by mail.netbsd.org (Postfix) with ESMTP id 313EE84C71; Tue, 13 Oct 2020 14:58:04 +0000 (UTC) Subject: Re: [PATCH v2] gdb::handle_eintr, remove need to specify return type To: Pedro Alves , Kamil Rytarowski , Simon Marchi , gdb-patches@sourceware.org References: <20200904002905.13616-1-n54@gmx.com> <20200904002905.13616-2-n54@gmx.com> <75070000-03a2-eeed-4f72-e29f199291af@palves.net> <223cf7ec-36b5-fe52-7d0f-e19c335be534@palves.net> From: Kamil Rytarowski Autocrypt: addr=kamil@netbsd.org; keydata= mQINBFVwUF8BEADHmOg7PFLIcSDdMx5HNDYr8MY2ExGfUTrKwPndbt3peaa5lHsK+UGoPG48 KiWkhEaMmjaXHFa7XgVpJHhFmNoJXfPgjI/sOKTMCPQ5DEHEHTibC4mta7IBAk+rmnaOF0k8 bxHfP8Qbls66wvicrAfTRXn/1ReeNc3NP4Sq39PoVHkfQTlnQiD4eAqBdq61B7DhzjhbKAZ4 RsNtLfB6eOv9qvmblUzs50ChYewM9hvn+c7MdDH+x2UXoSDhkBDkKcJGkX91evos8s9AuoEd D32X5e+bmdUGe8Cr3cAZJ8IEXR6F9828/kxzPliMsCWVRx1Fr28baCJOUGgFPNr3ips78m9+ Iw8PdQ101jU0dvucDFxw/1SCGYEZzV+O/237oRPuLCiDX5nhQoxf6dn9ukQleLBMNy2BLI4H g342NhF21HLA+KlyLOHaMKQCKzlal+zVNZTRTCh/ikMhsxWQjBfnqTDbMj85DnWwtump27SI qhPjUnS0a6MKoS/A+hbi64k5zztkvloELfCSrX7NyBTT0jgF2IGFIxZMrKCtQ9StcGMCV9MX tjcBy6fj7QMontEaIDRJEMjg8UIGw1B687OhalOv1ISia4xOWvpYAM6ipgqh6tBQmFzasL9P h1RtcVdFpFbhwVlr1Bly8c25gBNQHL5GUjLMn45LlQz50OzrkwARAQABtCNLYW1pbCBSeXRh cm93c2tpIDxrYW1pbEBOZXRCU0Qub3JnPokCOQQTAQgAIwUCVbKF6wIbIwcLCQgHAwIBBhUI AgkKCwQWAgMBAh4BAheAAAoJEEuzCOmwLnZsrgwQAMdXTXDWkxtUciFgBnioE6hvZYOBV7Xa Gh3dwgVvS5rLwwq5ob1R9qdtCGMYxdaCAQCzo2hhUfe9ts11/Q4Pg0aDAb5CfdVVTmyvLMu+ gtK99t/sG4SfCdn8Bb8rCfRRDpkTq1cAGy6pp7rxyMrFBITTbdBWVcWdEdlMhEZtV8Z1BNDI kwEwZkYnM1UxOGW4rJNjNU+hBjNAscCTwBSbpG6NV1oBbgmgJ1PfaPCeAmGTLZyI57VLuFJy kR0Jlj8Ui7dAaJgO1WYdmvL+48s0N2QGEoHnrf50xoO34LlrIBUsCLmhtjWhZiuj0meCxNTr 5YpdBP13b2i64OCruH8/M4IO85GAIWxIMMv510rge9qSe38NHCzSmn9zcjFwVXIh9flZi7PK eqOP3yah6r1ZIBY68If/2FtvwDptUi1NHoSpN+dt0kRg26hDqMFOg+Jc6o7Wtm+3vFNDhU4I 8HkjDr62VlbHBxe6gDgVELcecWgXOydKgdrQhOPwCBJkPJigifsIz4EZQnyI3CchFja3qR9J Vo4iXwqAi6xN4RD0PS775JYDh56qUaaUsEctQ/D6Xm7Bbdv1VPlsYs/9uXxc/jWVhkd1sDn2 KZ3kv7uo04DoejVGWK9B4XEZ1ufRPzmlV0SYohX34ouLBq5Q6wbyw6+hUM+yM9RcvgkOCVgB laejuQINBFVwUF8BEAC61vNvzAAcYvkU89YoStDcGyun1ENNWpHOnuQEw613/Xgys6xZbKKa Xhee8Fiwm6FlaiYWh66Vw5cA+hMna9PDp6tZi106JnKZ9DcYxanHOCQ5V42OwUX0BDfwUIwq YgOz12Cf4pdIheVkDfiSEot3XrdI3lT8od9iWeehx5zfW77utVrWGUXkMFJKmiKzxyzjV+gF gLk2wH+L7KoYiV/MfLukLa7mTJAK4mi0sfjLStPlf5gELvPtyooKG0gs0MbDSG2qmzb1/A4Y ET8Vaa7wJulIePym+Du5TJBwptls0KEF9a04kp2Oc2zlUd/Z5z3lLBiZaXpfProbz3Ydjg4O 2+XTn+SHSq10l3agjiAkGwHH83Xnzn/clg3iTvwYgdOcwvfEnJ1FGz3DAzcBd/+IMaszJjuo dBVckt07mc97sseDjy+vIIyQGdMzDmI0U9UK7nDUFpnIfG5LYe+myBS1CgFrZAQ/WNg0j7aq CiIgbhVAOFi2sPRYlph2L8LZRUPFHLTt23vdJXdFDuKM6JSvPiDf914UpjXr/WSwT43lJzlO O3zgKGM7eclFsetDF3p0I4SVHvR7dHbIC5IHibssmk7bQgH0K1aGUX/QC18v3VY7wYYaotYH RnTiGbBGz+XxPhZYiXKQuyFu6dY3qOw/VjbsV6KVNn49z2Zg4RQV8QARAQABiQIfBBgBCAAJ BQJVcFBfAhsMAAoJEEuzCOmwLnZs9rIP/2MTyZ0252u51LFsMHa9/ylTyvl+UKq8iR852lkZ X9bH9nH4cUcen5vZo0EZI3IVOemHUq71u+DTq8PSj5vtJ0DW+sGBEbjW3Q4IjJ+96PPrlemK fYS0KWVwEzzNQLEejjduU43x83DvQ/URzSWgGnhMBqXUyJdsHyTFFNFwQ9U71gX00+wXHJyh aXRlK+7gRKtCWuNFtW/5bQXL9epxDAS0POIVAdBc1FtPLwg08Pj0KwHsGQpEr5/W8ybDtLF+ zISHIKCj1lZ8dv/7D1PmH5SEXzsv+bbzvPtb6zhoIA8HONshaG2eAYknAiCJZ0gj0npgktwc u9VkvDvHMD9+VyNzRV/M6Ak4nDeEG6QecTPv8IqCcAHDI27nY/49BvFVOJOMwqbTp5Xvfa71 ksP1mARrN+bIYMfOy7OhfCxGeZydvBhgCLKdL698aXmgy0xrmrOw+GXO69GVcebOvxWMXxz1 FOG/JnLIe1ZgCo2YF5wy8zTCGKCMx6gAwnku2nJmDGNsePVedV00FmB8mQ7Oxz+3B9+LtFim FHHR33PlRnViXlG+XTm9NontiGE0LvG4TzIY5CYNSw8PBao795dQMSsmMI4FHlvTIgupE9g1 PQWP+2H2C0RtnLUanRNUGRkze1+MNG7jc+fqJIo5s7+PSs26rUvA38QzEOJ95k7hdJty Message-ID: Date: Tue, 13 Oct 2020 16:54:42 +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: <223cf7ec-36b5-fe52-7d0f-e19c335be534@palves.net> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="2g2xZ7BLZFGsmyvMLQW4cHeFvK7PLrwyZ" 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: , Cc: tom@tromey.com Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --2g2xZ7BLZFGsmyvMLQW4cHeFvK7PLrwyZ Content-Type: multipart/mixed; boundary="yX9380I3bu6dZYWxWf61RI0LvQ81evj7Z"; protected-headers="v1" From: Kamil Rytarowski To: Pedro Alves , Kamil Rytarowski , Simon Marchi , gdb-patches@sourceware.org Cc: tom@tromey.com Message-ID: Subject: Re: [PATCH v2] gdb::handle_eintr, remove need to specify return type References: <20200904002905.13616-1-n54@gmx.com> <20200904002905.13616-2-n54@gmx.com> <75070000-03a2-eeed-4f72-e29f199291af@palves.net> <223cf7ec-36b5-fe52-7d0f-e19c335be534@palves.net> In-Reply-To: <223cf7ec-36b5-fe52-7d0f-e19c335be534@palves.net> --yX9380I3bu6dZYWxWf61RI0LvQ81evj7Z Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable On 13.10.2020 16:17, Pedro Alves wrote: > On 10/13/20 2:43 PM, Kamil Rytarowski wrote: >=20 >> This patch applied on trunk gives me: >> >> gmake[2]: Wej=C5=9Bcie do katalogu '/public/binutils-gdb-netbsd/build/= gdbserver' >> CXX netbsd-low.o >> ../../gdbserver/netbsd-low.cc: In function =E2=80=98bool elf_64_file_p= (const >> char*)=E2=80=99: >> ../../gdbserver/netbsd-low.cc:1152:57: error: no matching function for= >> call to =E2=80=98handle_eintr(int, int (&)(const char*, int, ...), con= st char*&, >> int)=E2=80=99 >> 1152 | int fd =3D gdb::handle_eintr (-1, ::open, file, O_RDONLY); >> | ^ >> In file included from ../../gdbserver/netbsd-low.cc:37: >> ../../gdbserver/../gdbsupport/eintr.h:58:1: note: candidate: >> =E2=80=98template typen= ame >> gdb::return_type::type gdb::handle_eintr(ErrorValType, const Fun&= , >> const Args& ...)=E2=80=99 >> 58 | handle_eintr (ErrorValType errval, const Fun &f, const Args &.= =2E. >> args) >> | ^~~~~~~~~~~~ >> ../../gdbserver/../gdbsupport/eintr.h:58:1: note: template argument >> deduction/substitution failed: >> ../../gdbserver/../gdbsupport/eintr.h: In substitution of >> =E2=80=98template typen= ame >> gdb::return_type::type gdb::handle_eintr(ErrorValType, const Fun&= , >> const Args& ...) [with ErrorValType =3D int; Fun =3D int(const char*, = int, >> ...); Args =3D {const char*, int}]=E2=80=99: >> ../../gdbserver/netbsd-low.cc:1152:57: required from here >> ../../gdbserver/../gdbsupport/eintr.h:58:1: error: invalid use of >> incomplete type =E2=80=98struct gdb::return_type=E2=80=99 >> In file included from ../../gdbserver/../gdbsupport/poison.h:23, >> from ../../gdbserver/../gdbsupport/common-utils.h:26,= >> from ../../gdbserver/../gdbsupport/common-defs.h:125,= >> from ../../gdbserver/server.h:22, >> from ../../gdbserver/netbsd-low.cc:18: >> ../../gdbserver/../gdbsupport/traits.h:49:8: note: declaration of >> =E2=80=98struct gdb::return_type=E2=80=99 >> 49 | struct return_type; >> | ^~~~~~~~~~~ >=20 > Huh, Fun is clearly a function, yet the compiler doesn't pick > the partial specialization. >=20 > I could reproduce it here, seems to be related to open being varargs. >=20 > Anyhow, we don't really need the new trait. We can just=20 > use decltype and a trailing return. I don't know why I didn't > think of it in the first place. >=20 > Here's an updated patch. I believe this one should work for you too. >=20 This version works for me. >=20 > From 37d06f47a379e44a895f68a22cbb0f745da33ec5 Mon Sep 17 00:00:00 2001 > From: Pedro Alves > Date: Tue, 8 Sep 2020 17:34:41 +0100 > Subject: [PATCH v2] gdb::handle_eintr, remove need to specify return ty= pe >=20 > This eliminates the need to specify the return type when using > handle_eintr. We let the compiler deduce it for us. >=20 > Also, use lowercase for function parameter names. Uppercase should > only be used on template parameters. >=20 > gdb/ChangeLog: >=20 > * nat/linux-waitpid.c: Include "gdbsupport/eintr.h". > (my_waitpid): Use gdb::handle_eintr. >=20 > gdbserver/ChangeLog: >=20 > * netbsd-low.cc (netbsd_waitpid, netbsd_process_target::kill) > (netbsd_qxfer_libraries_svr4): Use gdb::handle_eintr without > explicit type. >=20 > gdbsupport/ChangeLog: >=20 > * eintr.h (handle_eintr): Replace Ret template parameter with > ErrorValType. Use it as type of the failure value. Deduce the > function's return type using decltype. Use lowercase for function > parameter names. > --- > gdb/nat/linux-waitpid.c | 11 ++--------- > gdbserver/netbsd-low.cc | 10 +++++----- > gdbsupport/eintr.h | 32 +++++++++++++++++++------------- > 3 files changed, 26 insertions(+), 27 deletions(-) >=20 > diff --git a/gdb/nat/linux-waitpid.c b/gdb/nat/linux-waitpid.c > index f50e0c7bcff..d066239220a 100644 > --- a/gdb/nat/linux-waitpid.c > +++ b/gdb/nat/linux-waitpid.c > @@ -22,6 +22,7 @@ > #include "linux-nat.h" > #include "linux-waitpid.h" > #include "gdbsupport/gdb_wait.h" > +#include "gdbsupport/eintr.h" > =20 > /* Convert wait status STATUS to a string. Used for printing debug > messages only. */ > @@ -54,13 +55,5 @@ status_to_str (int status) > int > my_waitpid (int pid, int *status, int flags) > { > - int ret; > - > - do > - { > - ret =3D waitpid (pid, status, flags); > - } > - while (ret =3D=3D -1 && errno =3D=3D EINTR); > - > - return ret; > + return gdb::handle_eintr (-1, ::waitpid, pid, status, flags); > } > diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc > index 30028d3a384..519614d0473 100644 > --- a/gdbserver/netbsd-low.cc > +++ b/gdbserver/netbsd-low.cc > @@ -245,7 +245,7 @@ netbsd_waitpid (ptid_t ptid, struct target_waitstat= us *ourstatus, > int options =3D (target_options & TARGET_WNOHANG) ? WNOHANG : 0; > =20 > pid_t pid > - =3D gdb::handle_eintr (-1, ::waitpid, ptid.pid (), &status, o= ptions); > + =3D gdb::handle_eintr (-1, ::waitpid, ptid.pid (), &status, option= s); > =20 > if (pid =3D=3D -1) > perror_with_name (_("Child process unexpectedly missing")); > @@ -456,7 +456,7 @@ netbsd_process_target::kill (process_info *process)= > return -1; > =20 > int status; > - if (gdb::handle_eintr (-1, ::waitpid, pid, &status, 0) =3D=3D -= 1) > + if (gdb::handle_eintr (-1, ::waitpid, pid, &status, 0) =3D=3D -1) > return -1; > mourn (process); > return 0; > @@ -1149,15 +1149,15 @@ netbsd_qxfer_libraries_svr4 (const pid_t pid, c= onst char *annex, > static bool > elf_64_file_p (const char *file) > { > - int fd =3D gdb::handle_eintr (-1, ::open, file, O_RDONLY); > + int fd =3D gdb::handle_eintr (-1, ::open, file, O_RDONLY); > if (fd < 0) > perror_with_name (("open")); > =20 > Elf64_Ehdr header; > - ssize_t ret =3D gdb::handle_eintr (-1, ::read, fd, &header,= sizeof (header)); > + ssize_t ret =3D gdb::handle_eintr (-1, ::read, fd, &header, sizeof (= header)); > if (ret =3D=3D -1) > perror_with_name (("read")); > - gdb::handle_eintr (-1, ::close, fd); > + gdb::handle_eintr (-1, ::close, fd); > if (ret !=3D sizeof (header)) > error ("Cannot read ELF file header: %s", file); > =20 > diff --git a/gdbsupport/eintr.h b/gdbsupport/eintr.h > index 64ff5940b75..02c26e4def1 100644 > --- a/gdbsupport/eintr.h > +++ b/gdbsupport/eintr.h > @@ -43,25 +43,31 @@ namespace gdb > =20 > You could wrap it by writing the wrapped form: > =20 > - ssize_t ret =3D gdb::handle_eintr (-1, ::write, pipe[1], "= +", 1); > - > - The RET typename specifies the return type of the wrapped system ca= ll, which > - is typically int or ssize_t. The R argument specifies the failure = value > - indicating the interrupted syscall when calling the F function with= > - the A... arguments. */ > - > -template > -inline Ret handle_eintr (const Ret &R, const Fun &F, const Args &... A= ) > + ssize_t ret =3D gdb::handle_eintr (-1, ::write, pipe[1], "+", 1); > + > + ERRVAL specifies the failure value indicating that the call to the > + F function with ARGS... arguments was possibly interrupted with a > + signal. */ > + > +template + typename Fun, > + typename... Args> > +inline auto > +handle_eintr (ErrorValType errval, const Fun &f, const Args &... args)= > + -> decltype (f(args...)) > { > - Ret ret; > + decltype (f(args...)) ret; > + > do > { > errno =3D 0; > - ret =3D F (A...); > + ret =3D f (args...); > } > - while (ret =3D=3D R && errno =3D=3D EINTR); > + while (ret =3D=3D errval && errno =3D=3D EINTR); > + > return ret; > } > -} > + > +} /* namespace gdb */ > =20 > #endif /* GDBSUPPORT_EINTR_H */ >=20 > base-commit: 87a37e5e078f506fa9905b74e9238593c537fcd5 >=20 --yX9380I3bu6dZYWxWf61RI0LvQ81evj7Z-- --2g2xZ7BLZFGsmyvMLQW4cHeFvK7PLrwyZ Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEELaxVpweEzw+lMDwuS7MI6bAudmwFAl+Fv7MACgkQS7MI6bAu dmxrDw//egfiA8YBGnYWnW1Vg7oNIZvnhBAzKS5o4zE74E+GV5Dqk0xLLsevNiXG z99VQor7Sqa7CnHT++hYQp1zNXgmeBnF166g3hkYoLvlyNgj5q3Kit90ylU2iNae wF8iPFR7BnPdRXV/GAWiyCIn90QUROo+g4+k/amyp9KKCjeAdtdMiJXJPWIeb1bo +JxFCwWSMrMS6yCNkrj9zYS7Q5O1gFw+YNWMHA/5GTUx/vKi4IWgzO0nPnG/1rVo JWnot5xa+Ip80WKMnaromqAckU3IWzft5LSm0mCr+7+6OWDB31O5xp/76jIW3Bfh VY3DeeRlmK23X6X4sfZCCbdVVGXvx5iGQsjepd0Trldon/RJAAo06B9P3A6rzbeu 3+ZenWtLAryX6rWz65KJVT0/MT9Dh2GRTxE2QDeWs4K6Wixl2NDifUj+dQmIIp8X eLDVmcwok6L7sfmdGhecbnGMHGe+LcJn5dmHCdUvrq/dFfpv3I0OuMlg+Cu9AMbq 8p4MSONlOomMyEMGYMiPbDGwCFZ33+VAZKCMt7n1WjdS43keTZ2c3m74s4w8izpg 45VLwkcy32rPxDHvAQGpvjdHGlJUIFN7ONxcZIOL9Mv8GVJy4xNck3rg4qEBHtGg WLFXMVFwZeZaKG8e7Up9jepa0CL7jo652qIKHB8liRf3OO/ZYwY= =UX6k -----END PGP SIGNATURE----- --2g2xZ7BLZFGsmyvMLQW4cHeFvK7PLrwyZ--