From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic313-20.consmr.mail.ir2.yahoo.com (sonic313-20.consmr.mail.ir2.yahoo.com [77.238.179.187]) by sourceware.org (Postfix) with ESMTPS id 943BA3858C62 for ; Wed, 3 Jan 2024 10:37:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 943BA3858C62 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 943BA3858C62 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=77.238.179.187 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704278234; cv=none; b=U7eEVTE4sYL8vvHgB6A61K/81VQ98f0/GnvF5nnH5gaPNi+o374BoqlrxEpq+hAJ/U43kwC+G3blEpBTcPpofXmGzeTtH0YUy49CBgwPRjs0KvWoUjhbaHFJfAyFPvXz9kbjDo0Y/9R0u0xM6EnsLhvXiu+XSCQk6amxT/EYKrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704278234; c=relaxed/simple; bh=zs1/6rynTh+POwfnePvK1pSI/TXy1n4yzm9UHYCQAI4=; h=DKIM-Signature:Date:From:To:Message-ID:Subject:MIME-Version; b=gN/jhb2VdPD0OtQigRNaNQPRwDhA/Ltcw8RUmAxVXBUnFWpxFMlPiq/auJibaWRhrhG0oKl1Ge+ZC00XPBdFtBQrRuXPCA2rpy7NaKgeD/digALhxvno1sFgeoEBRWRamuY5T6zsgknnX6XMwIIdahbqSSBvr+DlHx3ESH84U6I= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1704278229; bh=zs1/6rynTh+POwfnePvK1pSI/TXy1n4yzm9UHYCQAI4=; h=Date:From:To:Cc:In-Reply-To:References:Subject:From:Subject:Reply-To; b=ivOGoOe0pAXE3VS2JKjJtgQPObTuNECC0pO9MWLvsYP+EMUcoPiKnjqslOGU0kVpH727ZlaQsTqQMkrjBRiLF6EQHxalQim8uc2dNwgDqKdlvGeTkA8Qk1ka0AS1apVKGipIFSZ1VleTsGkSOZglnsrHI8Dv65kYXRLMl2vOMSO1VMvnppUVoMImqRzNYQzNbOCtTjrpf3LBlK6MWVm0/Vad/Hd0w7giLkpKXudTx7RYudgqL/Wc/qVTTLteSK8IJKM8ulGW3RTsaQL2pdbV9kR66tcBbfxG+S/5HKzKlzJ2N0nZb6iGdLaQd7hz6Y4QtLByhcWYqbgA934o7wxoVg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1704278229; bh=w/K17J1YmarI1PZp/VaExNDrQypkEzlRDCMmKNjhFAP=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=fBaI9WH+9ZhkIb+hKn7eKnnWTCcIZVoAT5HXpFq47ivb1IvA2xr54U03UMrSwSFVvKqyf23JYXB31QUq8ySdUeQ21F/SbRgYNpDZ6ttML1qiKncb7syxz6kYzDoLVN/PVF9jLLyoF54IHIGVuACQ0AnkDMiEyUjhlJ8uq58r0MxiDXh2/Davg23aW+aF63P4y41RK/8xOEPwQQShUVPvkVGhSCL2IV3medLLfdvHLzKex7tDfnsTKw4/BxNA4JxgxAyg4YL1fzOnDmxYT5MzmQL/EOxtP3uJ8A2btHtb2s+KT6Qx36HHu29a7bkHBAgwP2/ICy4YwWhfdKZyttmx4A== X-YMail-OSG: Kxu59hMVM1leUjUNzdn3uKa01zlLEHWBSj_X4BpZdGL3Mlv1E2xcg1KfP4exWb4 XmgUhvDRTtQTLV0fkUHaWJfMECFvkJZy2Ay3UR5RM_66zlvEtwina9c84vEMC23DFYmQkk3xez64 2L_snthmah7LLOJUngAcRyY4ZdD9HOPbAmi0ZogjrKCdEyEme3QGEm9nPKBQ4_0Jx48J3T9QfNCa a3yYZkJy7ih0MQ0sUrJsP6G4bBK4_JS8dR_m99F2FC1kJ8ZV0Ua84pIb.yYPyAjy1OAgwBXOjjtq NXNs3MGbm8IDN_HZI6DijkWaNrGROoOpxLwkY2p6pVhdVsgkzPfi8M.88z1xl8rArFekLxftzeXi 1_TVegCU5Y6D4tZoyhkQ85e0mIMqPgp5JIl8p_ujW6k1JDgYpcmP8b6c3ilM1kwGqAmCTLQBvV91 Mmc4xtA3DpWR61k2etY5NmYltNul5a1IKSigjYm5ApMTR5oq.G9krsPX5Yauy8iTnpjU8rh1FMZ3 XRtKcTHas5uJLbd4aRjUs.i9iVowiSRXH32tH_n6NRbmuUi0PCY_0eEppsLi4y0SWvgNDOhzDoYw WgoGeSgz44DBwr_BEdRBFbJrHQ_h3ZxORFrDJxYtfKL2Vx.0PgWchh4WWD4aWlHKsRgOCH6fwEOR cur1OxOfXt2EnJRd9vyUWXAJOh7Qw5CvGPBPx.sff52UtUHyYesmXdjWakeZViaOxpgJeqqBNj7T HcV_lFy2rwxhNYinDKdB6DKTmJk20f7rNv4l9zvJPWRUfwngRaLn24zfQLs6OnPwj1y7_jeWXP5m O8ShsBZTAkm.aFzIvP09kDcLFvMdAJJCqaU09x7LiRxFD0km4V7JJ28rZCsOoVNVDIizqk.4RvF_ Khz076dUEK96B8LUuIYXEOqmMR6CtgSJSNXFnGd2HXLlyqVy1K7NN0Bj1SqVAzi0pb6OSC6SXBqs NGXSgQ5KGkVVLMAl61E4AL.owdcpZE7OEKflZ7GnDt0xQ5SiUcvKao1CE8lD7ZSQGWZhrkbgJpH3 5dRZnyAmytcy7WQf0HXVVQ5r16exz3IYw3RWPGeU7bz0DE4ptmepZQSCt9siNeKB2SSpJVNZXvQl MjYfZbO5nWft_7jMwzua9xbQwiU8OwyS.KIKzMjLwHdS8TLEX3PJQYwuDVGNTcA0Aew6Df2HFzUZ B_R0tXv2tj5urNSvBmRU2KPCDtnN4URysvothzLPrT3ZXfoUsY_C0NFwmhIsczq70CPZ6Zhco61Z rSioCiExPzlwDv7Fmkszj4UAir5FALuuX3IkEqQf0G.MI6TaozrIN1gytrrRzZCtRDmYj7fQFioJ eiro6OgmqReraYPMfmURqSMvCZ2LeoL22TcvNqg1sj9m2E629y6b5b.4W_8RFKGftnDd17Totayy KDdMlR71QwH1O.67PRphuaLH8RH4yt8OAtsf3j2qz38VWT.JKdqdyGL9aXHD2QqHWMzpqM4E3oij gdFngqdcDWWZbe.yOSbVKljWG8b5UuH_jKladg9h1DO7VWQ7VfTe0vF.gU_J2vAYUe.0wuzRw5wr nVd7fNQ_DzJG9o0oo3OKEmGF_C_H5PCJ1No8FndZbpmxGA5I0Awe5yd2cSC17YIHQtrG7qUTIuvP emRkzUaMEaDqzwMArneUEUeg_8b4OA3kQKZ.ijmwq2cEGKphqpoxwVSwUpDeTAIExzNeTlj9hRJp ZEFvd24Hwn7W1290z7vnMzchClLXW_Yv8umy31VgvFBgW4in4NzXmElu.R1wtrD4RFr7PhTAikUE a4dULI.KwniwunWqrG6OHDWbKZ3neiWomdMwvGRFZ9d.euxb1lOPeAlReHk88KDYtQU6d_QDG1es O1hoYIIFFQ7pEfYgNuqFMBxFDKHF78.DTTKzKON9nBfU4uTT4oXlqatJYAmH7do1FcECYqTv0zqL wX.nGygf6lw4M0qObQ.6i0sBW99.l5Cfnp.Tl6Au14qiyfwf9vPkN64bLrTfaHy9v_FKp7DtCChr 1LS6elHSF.M1oGMjIbB53ZxGjzB0X33nDFTi3jzug1OGPpr4e92S9UF_zIEoC4jimn1tt2CKf31Y 6Y8QK_ODKyyatH1rxWyQWFnA9WJ083Mafrvjvcoq3tkiPrFj8StkCwW1D.xCb52dx8c.oPAzD0RZ REcrRz0t72iQG3KV0hNcb9NGKNVbrDl9Rh_h58fNMHlCusQpBgLA5yV6435U.844F7dR0aPU66lK ENeTsZ4I66c1IMM8hkcvVxjhUAaQ8UM_4rVp.AwQ1dhoE2MqaPCt4.2yh X-Sonic-MF: X-Sonic-ID: 383c7dd5-03ea-4f45-aba1-b07cd24f373f Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Wed, 3 Jan 2024 10:37:09 +0000 Date: Wed, 3 Jan 2024 10:37:05 +0000 (UTC) From: Hannes Domani To: "gdb-patches@sourceware.org" Cc: "aburgess@redhat.com" Message-ID: <1069495428.11467591.1704278225922@mail.yahoo.com> In-Reply-To: <20231210151811.4649-1-ssbssa@yahoo.de> References: <20231210151811.4649-1-ssbssa.ref@yahoo.de> <20231210151811.4649-1-ssbssa@yahoo.de> Subject: Re: [PATCH] Fix raw-frame-arguments in combination with frame-filters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Mailer: WebService/1.1.21952 YMailNorrin X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: Ping. Am Sonntag, 10. Dezember 2023, 16:19:17 MEZ hat Hannes Domani Folgendes geschrieben: > Currently, if frame-filters are active, raw-values is used instead of > raw-frame-arguments to decide if a pretty-printer should be invoked for > frame arguments in a backtrace. > > In this example, "super struct" is the output of the pretty-printer: > >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) disable frame-filter global BasicFrameFilte= r >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3Dsuper struct =3D {...}= ) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > > If no frame-filter is active, then the raw-values print option does not > affect the backtrace output: > >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) set print raw-values on >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3Dsuper struct =3D {...}= ) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) set print raw-values off > > Instead, the raw-frame-arguments option disables the pretty-printer in th= e > backtrace: > >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt -raw-frame-arguments on >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3D...) at C:/src/repos/g= db-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > > But if a frame-filter is active, the same rules don't apply. > The option raw-frame-arguments is ignored, but raw-values decides if the > pretty-printer is used: > >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) enable frame-filter global BasicFrameFilter >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3Dsuper struct =3D {...}= ) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) set print raw-values on >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3D...) at C:/src/repos/g= db-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) set print raw-values off >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt -raw-frame-arguments on >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3Dsuper struct =3D {...}= ) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > > So this adds the PRINT_RAW_FRAME_ARGUMENTS flag to frame_filter_flag, whi= ch > is then used in the frame-filter to override the raw flag in enumerate_ar= gs. > > Then the output is the same if a frame-filter is active, the pretty-print= er > for backtraces is only disabled with the raw-frame-arguments option: > >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) enable frame-filter global BasicFrameFilter >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3Dsuper struct =3D {...}= ) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) set print raw-values on >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3Dsuper struct =3D {...}= ) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) set print raw-values off >=C2=A0=C2=A0=C2=A0=C2=A0 (gdb) bt -raw-frame-arguments on >=C2=A0=C2=A0=C2=A0=C2=A0 #0=C2=A0 foo (x=3D42, ss=3D...) at C:/src/repos/g= db-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 >=C2=A0=C2=A0=C2=A0=C2=A0 #1=C2=A0 0x004016aa in main () at C:/src/repos/gd= b-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > > Co-Authored-By: Andrew Burgess > --- > v3: > - Incorporated Andrews changes related to MI. > - Made raw-frame-arguments also work with disabled frame-filter for MI. > - Added some tests for MI as well. > > v2: > - More detailed commit message describing the problem. > --- > gdb/extension.h=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 4 +++ > gdb/mi/mi-cmd-stack.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= | 15 +++++++-- > gdb/python/py-framefilter.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | 22 ++++++++----- > gdb/stack.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 2 ++ > gdb/testsuite/gdb.python/py-frame-args.exp | 36 ++++++++++++++++++++++ > gdb/testsuite/gdb.python/py-frame-args.py=C2=A0 | 14 +++++++++ > 6 files changed, 83 insertions(+), 10 deletions(-) > > diff --git a/gdb/extension.h b/gdb/extension.h > index 530f6ce72ac..1e3df081afb 100644 > --- a/gdb/extension.h > +++ b/gdb/extension.h > @@ -103,6 +103,10 @@ enum frame_filter_flag > >=C2=A0=C2=A0=C2=A0=C2=A0 /* Set this flag if elided frames should not be p= rinted.=C2=A0 */ >=C2=A0=C2=A0=C2=A0=C2=A0 PRINT_HIDE =3D 1 << 5, > + > +=C2=A0=C2=A0=C2=A0 /* Set this flag if pretty printers for frame argumen= ts should not > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 be invoked.=C2=A0 */ > +=C2=A0=C2=A0=C2=A0 PRINT_RAW_FRAME_ARGUMENTS =3D 1 << 6, >=C2=A0=C2=A0 }; > > DEF_ENUM_FLAGS_TYPE (enum frame_filter_flag, frame_filter_flags); > diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c > index 401e7c40726..a7c8f80464c 100644 > --- a/gdb/mi/mi-cmd-stack.c > +++ b/gdb/mi/mi-cmd-stack.c > @@ -372,6 +372,8 @@ mi_cmd_stack_list_args (const char *command, const ch= ar *const *argv, int argc) >=C2=A0=C2=A0 if (! raw_arg && frame_filters) >=C2=A0=C2=A0=C2=A0=C2=A0 { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 frame_filter_flags flags =3D PRINT_LE= VEL | PRINT_ARGS; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (user_frame_print_options.print_raw_fr= ame_arguments) > +=C2=A0=C2=A0=C2=A0 flags |=3D PRINT_RAW_FRAME_ARGUMENTS; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int py_frame_low =3D frame_low; > >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* We cannot pass -1 to frame_low, as= that would signify a > @@ -466,6 +468,8 @@ mi_cmd_stack_list_variables (const char *command, con= st char *const *argv, >=C2=A0=C2=A0=C2=A0=C2=A0 if (! raw_arg && frame_filters) >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 { >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 frame_filter_flags flags = =3D PRINT_LEVEL | PRINT_ARGS | PRINT_LOCALS; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (user_frame_print_options.print_raw_fr= ame_arguments) > +=C2=A0=C2=A0=C2=A0 flags |=3D PRINT_RAW_FRAME_ARGUMENTS; > >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 result =3D mi_apply_ext_l= ang_frame_filter (frame, flags, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 pr= int_value, > @@ -491,7 +495,8 @@ mi_cmd_stack_list_variables (const char *command, con= st char *const *argv, > > static void > list_arg_or_local (const struct frame_arg *arg, enum what_to_list what, > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 enum print_values= values, int skip_unavailable) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 enum print_values= values, int skip_unavailable, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 const frame_print= _options &fp_opts) > { >=C2=A0=C2=A0 struct ui_out *uiout =3D current_uiout; > > @@ -548,6 +553,8 @@ list_arg_or_local (const struct frame_arg *arg, enum = what_to_list what, > >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 get_no_pretty= format_print_options (&opts); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 opts.deref_re= f =3D true; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (arg->sym->is_= argument ()) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 opts.raw =3D fp_opts.print_ra= w_frame_arguments; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 common_val_pr= int (arg->val, &stb, 0, &opts, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 language_def (arg->sym->language ())); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } > @@ -663,9 +670,11 @@ list_args_or_locals (const frame_print_options &fp_o= pts, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } > >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (arg.entry= _kind !=3D print_entry_values_only) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 list_arg_or_local (&arg, what= , values, skip_unavailable); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 list_arg_or_local (&arg, what= , values, skip_unavailable, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fp_opts); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (entryarg.= entry_kind !=3D print_entry_values_no) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 list_arg_or_local (&entryarg,= what, values, skip_unavailable); > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 list_arg_or_local (&entryarg,= what, values, skip_unavailable, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 fp_opts); >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0=C2=A0=C2=A0 } > > diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c > index dc7e47d70f0..ba4f3298d32 100644 > --- a/gdb/python/py-framefilter.c > +++ b/gdb/python/py-framefilter.c > @@ -414,12 +414,14 @@ static enum ext_lang_bt_status > enumerate_args (PyObject *iter, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct ui_out *out, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 enum ext_lang_frame_args = args_type, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bool raw_frame_args, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int print_args_field, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 frame_info_ptr frame) > { >=C2=A0=C2=A0 struct value_print_options opts; > >=C2=A0=C2=A0 get_user_print_options (&opts); > +=C2=A0 opts.raw =3D raw_frame_args; > >=C2=A0=C2=A0 if (args_type =3D=3D CLI_SCALAR_VALUES) >=C2=A0=C2=A0=C2=A0=C2=A0 { > @@ -634,7 +636,8 @@ static enum ext_lang_bt_status > py_mi_print_variables (PyObject *filter, struct ui_out *out, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 struct value_print_options *opts, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 enum ext_lang_frame_args args_type, > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 frame_info_ptr frame) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 frame_info_ptr frame, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 bool raw_frame_args_p) > { >=C2=A0=C2=A0 gdbpy_ref<> args_iter (get_py_iter_from_func (filter, "frame_= args")); >=C2=A0=C2=A0 if (args_iter =3D=3D NULL) > @@ -647,8 +650,8 @@ py_mi_print_variables (PyObject *filter, struct ui_ou= t *out, >=C2=A0=C2=A0 ui_out_emit_list list_emitter (out, "variables"); > >=C2=A0=C2=A0 if (args_iter !=3D Py_None > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 && (enumerate_args (args_iter.get (), out= , args_type, 1, frame) > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D=3D EXT_LANG_BT_ERROR)) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 && (enumerate_args (args_iter.get (), out= , args_type, raw_frame_args_p, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 1, frame) =3D=3D EXT_LANG_BT_ERROR)) >=C2=A0=C2=A0=C2=A0=C2=A0 return EXT_LANG_BT_ERROR; > >=C2=A0=C2=A0 if (locals_iter !=3D Py_None > @@ -693,6 +696,7 @@ static enum ext_lang_bt_status > py_print_args (PyObject *filter, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct ui_out= *out, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 enum ext_lang= _frame_args args_type, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bool raw_frame_ar= gs, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 frame_info_pt= r frame) > { >=C2=A0=C2=A0 gdbpy_ref<> args_iter (get_py_iter_from_func (filter, "frame_= args")); > @@ -718,7 +722,8 @@ py_print_args (PyObject *filter, >=C2=A0=C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0=C2=A0=C2=A0 } >=C2=A0=C2=A0 else if (args_iter !=3D Py_None > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 && (enumerate_args (args_iter.get (), out= , args_type, 0, frame) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 && (enumerate_args (args_iter.get (), out= , args_type, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 raw_frame_args, 0, frame) >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D=3D EXT_LA= NG_BT_ERROR)) >=C2=A0=C2=A0=C2=A0=C2=A0 return EXT_LANG_BT_ERROR; > > @@ -802,8 +807,9 @@ py_print_frame (PyObject *filter, frame_filter_flags = flags, >=C2=A0=C2=A0 /* stack-list-variables.=C2=A0 */ >=C2=A0=C2=A0 if (print_locals && print_args && ! print_frame_info) >=C2=A0=C2=A0=C2=A0=C2=A0 { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (py_mi_print_variables (filter, out, &= opts, > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 args_type, frame) =3D=3D EXT_LANG_BT_ERROR) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bool raw_frame_args =3D (flags & PRINT_RA= W_FRAME_ARGUMENTS) !=3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (py_mi_print_variables (filter, out, &= opts, args_type, frame, > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 raw_frame_args) =3D=3D EXT_LANG_BT_ERROR) >=C2=A0=C2=A0=C2=A0=C2=A0 return EXT_LANG_BT_ERROR; >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return EXT_LANG_BT_OK; >=C2=A0=C2=A0=C2=A0=C2=A0 } > @@ -949,7 +955,9 @@ py_print_frame (PyObject *filter, frame_filter_flags = flags, >=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wrong.=C2=A0 */ >=C2=A0=C2=A0 if (print_args && (location_print || out->is_mi_like_p ())) >=C2=A0=C2=A0=C2=A0=C2=A0 { > -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (py_print_args (filter, out, args_type= , frame) =3D=3D EXT_LANG_BT_ERROR) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bool raw_frame_args =3D (flags & PRINT_RA= W_FRAME_ARGUMENTS) !=3D 0; > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (py_print_args (filter, out, args_type= , raw_frame_args, frame) > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D=3D EXT_LANG_BT_ERROR) >=C2=A0=C2=A0=C2=A0=C2=A0 return EXT_LANG_BT_ERROR; >=C2=A0=C2=A0=C2=A0=C2=A0 } > > diff --git a/gdb/stack.c b/gdb/stack.c > index 20bb85efd19..e0c3bcddb2b 100644 > --- a/gdb/stack.c > +++ b/gdb/stack.c > @@ -2006,6 +2006,8 @@ backtrace_command_1 (const frame_print_options &fp_= opts, >=C2=A0=C2=A0=C2=A0=C2=A0 flags |=3D PRINT_LOCALS; >=C2=A0=C2=A0 if (bt_opts.hide) >=C2=A0=C2=A0=C2=A0=C2=A0 flags |=3D PRINT_HIDE; > +=C2=A0 if (fp_opts.print_raw_frame_arguments) > +=C2=A0=C2=A0=C2=A0 flags |=3D PRINT_RAW_FRAME_ARGUMENTS; > >=C2=A0=C2=A0 if (!bt_opts.no_filters) >=C2=A0=C2=A0=C2=A0=C2=A0 { > diff --git a/gdb/testsuite/gdb.python/py-frame-args.exp b/gdb/testsuite/g= db.python/py-frame-args.exp > index 5c099e01264..1609989aa3b 100644 > --- a/gdb/testsuite/gdb.python/py-frame-args.exp > +++ b/gdb/testsuite/gdb.python/py-frame-args.exp > @@ -33,6 +33,42 @@ gdb_test_no_output "source ${remote_python_file}" "loa= d python file" > gdb_breakpoint [gdb_get_line_number "break-here"] > gdb_continue_to_breakpoint "break-here" ".* break-here .*" > > +# Test raw-frame-arguments on backtrace with and without frame-filter > +gdb_test "interpreter-exec mi \"-enable-frame-filters\"" \ > +=C2=A0=C2=A0=C2=A0 "done" > +foreach_with_prefix filtered {enable disable} { > +=C2=A0=C2=A0=C2=A0 gdb_test_no_output "$filtered frame-filter global Bas= icFrameFilter" > + > +=C2=A0=C2=A0=C2=A0 gdb_test "bt 1" \ > +=C2=A0=C2=A0=C2=A0 ".*foo \\(x=3D42, ss=3Dsuper struct =3D {\[.\]{3}}\\)= .*" \ > +=C2=A0=C2=A0=C2=A0 "bt pretty" > + > +=C2=A0=C2=A0=C2=A0 gdb_test "bt -raw-frame-arguments on 1" \ > +=C2=A0=C2=A0=C2=A0 ".*foo \\(x=3D42, ss=3D\[.\]{3}\\).*" \ > +=C2=A0=C2=A0=C2=A0 "bt raw" > + > +=C2=A0=C2=A0=C2=A0 gdb_test "interpreter-exec mi \"-stack-list-arguments= 1\"" \ > +=C2=A0=C2=A0=C2=A0 ".*name=3D\"ss\",value=3D\"super struct =3D.*" \ > +=C2=A0=C2=A0=C2=A0 "mi bt pretty" > + > +=C2=A0=C2=A0=C2=A0 gdb_test_no_output "set print raw-frame-arguments on" > +=C2=A0=C2=A0=C2=A0 gdb_test "interpreter-exec mi \"-stack-list-arguments= 1\"" \ > +=C2=A0=C2=A0=C2=A0 ".*name=3D\"ss\",value=3D\".a =3D.*" \ > +=C2=A0=C2=A0=C2=A0 "mi bt raw" > +=C2=A0=C2=A0=C2=A0 gdb_test_no_output "set print raw-frame-arguments off= " > + > +=C2=A0=C2=A0=C2=A0 # "set print raw-values" should not affect frame argu= ments > +=C2=A0=C2=A0=C2=A0 gdb_test_no_output "set print raw-values on" > +=C2=A0=C2=A0=C2=A0 gdb_test "bt 1" \ > +=C2=A0=C2=A0=C2=A0 ".*foo \\(x=3D42, ss=3Dsuper struct =3D {\[.\]{3}}\\)= .*" \ > +=C2=A0=C2=A0=C2=A0 "bt pretty,raw-values" > + > +=C2=A0=C2=A0=C2=A0 gdb_test "interpreter-exec mi \"-stack-list-arguments= 1\"" \ > +=C2=A0=C2=A0=C2=A0 ".*name=3D\"ss\",value=3D\"super struct =3D.*" \ > +=C2=A0=C2=A0=C2=A0 "mi bt pretty,raw-values" > +=C2=A0=C2=A0=C2=A0 gdb_test_no_output "set print raw-values off" > +} > + > # Test all combinations with raw off. > > gdb_test_no_output "set print raw-frame-arguments off" > diff --git a/gdb/testsuite/gdb.python/py-frame-args.py b/gdb/testsuite/gd= b.python/py-frame-args.py > index 8cb85e059e2..ca3b7c62fa5 100644 > --- a/gdb/testsuite/gdb.python/py-frame-args.py > +++ b/gdb/testsuite/gdb.python/py-frame-args.py > @@ -76,3 +76,17 @@ pretty_printers_dict =3D {} > > register_pretty_printers() > gdb.pretty_printers.append(lookup_function) > + > + > +class BasicFrameFilter(object): > +=C2=A0=C2=A0=C2=A0 def __init__(self): > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 self.name =3D "BasicFrameFilt= er" > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 self.priority =3D 100 > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 self.enabled =3D True > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 gdb.frame_filters[self.name] = =3D self > + > +=C2=A0=C2=A0=C2=A0 def filter(self, frame_iter): > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return frame_iter > + > + > +BasicFrameFilter() > -- > 2.35.1