From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic303-2.consmr.mail.bf2.yahoo.com (sonic303-2.consmr.mail.bf2.yahoo.com [74.6.131.41]) by sourceware.org (Postfix) with ESMTPS id 7B8E63870914 for ; Sun, 14 Feb 2021 15:51:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 7B8E63870914 X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1613317897; bh=s7pGQDohYefB14y3B4fKFU98ptx/xyMSAEMBcTndVMi=; h=X-Sonic-MF:Subject:To:From:Date:From:Subject; b=CwhSIxaLABbwLN7r685BYTdhj8t/nuWX0dXwgBOd3wyNbo9g3LIdOXydtjLBKyxRd32KZMAxwjYgYkeJ7emCrOm4wMS2D0KRQPi4LWXlSD+/tQ1qJ4QDdgBWKtT2aNyJtobka24iMhRVVcyP8QGHCo1Pkw41ph65Xi+sQiG4JU8YnX9DDQ/FeCslRPUdEBLPwgC2pWMoSSKG104k3UNwVexysb3G9b0FE8UfzPHD2HGAqNV4y5mDpeHznbEzu+Fxb/YWqLU24g+YnZ+fCTXClC9xoJRcMB4WDemQaTubyhsMpTlYF1TopgvCzRgW8RIy51Tp783xgRae+xCWc13vRg== X-YMail-OSG: 4oX0BBwVM1kxVEyPfEJpmhUaNcqVBw8KFu9iWLz31yv82xZIwNbzo6tkNPdwxYL qOZxmw2y4eXSYWPTxzOHGOqWRMJ9F.X4k.Umds3g_WmvXvnVzEL9r0YgvMgbXuLxNWHqmtodFoUM OojgyHJ9dxOh6YpZ_LAoH_w0EGneqFZ7eYHvfBssPE02RDTNWq_s2dlEQWa0hW_ElZSeBrpim9Sx UP9gviHJWMqf2U8L3qy4U1JvQ.5NrUYEkoWaZtRHoghAdb7awitEZVP0OBuVsn3a0KKa_UcaM6DU Eu1jZYLABceDbMb4GNusUL4kpH4Qof5G22mxmilwqCWXsAsvlQTPTAfeM8fyJHXvmcCNz1dWR1jH 3lC5eh6C._0EO2w.I2kv.KDRyFSPNmtjW8Mx3aue1YFBRdsQXVcfbhH5XHuIkaFhsh.znzhhGvr7 mWUFOWbbmWu8KoD9QLg6upCrq5nIhg803EmcmQyLAn_rrAmv8bSr.O6ENQqO3BBNG1Pa_Q3uXqJI 2J6grwr.ruEEVpg_dypjEe4Fa_ZeegdlNChRHXG4UmCEnJq7iSAhxxVnkn1yfr0Zd9QgcdC1BIv1 P2w9VELdTz.tDV.bJfTpwWjk2UUVh_HXruJM3WpcgVBWz1F_moza8vSoxCgQsZw6zZFXAEOuLn8s 5y7AQg900rYkub2xCjGPm2z_NndeREwk1MZvAy9RJTO1iEI4HTr.AbEF4BAhyZ2vSultXrIeNuNx LNmJg6s_DCdFBhy6tCVbHH6bTggZ4CQVLfW25T4ZL04RakzC23rhEszlbVlObw5BKX_s5CNVTL4M u2tKKo4QaDh4zrmAH8XCjqwzy38ISZdmcBM4nOuwODYIiCJDIgQ41u2EbVI2y0dsUpXsG.0yRfrS V1s5gW.pk6yUYiw.4A_ljG56AuwDWzN7.WXKSUZOONMMYfUApWHIQ_VzJt2YflppDqKPyjcxR1UX Ec1HH_yhG.RK2a1wsnNOA3XDl.6g.EaHSiAKCSgSWrZqqlEIuuGaaXJVHluhUL4KDGWzyk6QsJJE kusCddeoN1I9Hy7AxnxkBYghr.8wXXS32Xlf8DNPufyW.mB5H8F2dVhOZJT2rNioR627lbdHyukW roM3d61wFIEyU70QQWuDWmqnVxu7TLVA83aDOeP0aYQ8P10Du31fiEWQQ465CjT90zp8X2HGBqCQ wvDwvmCFhH7IauMs1bw07aj9OtPaxPPY7uoPsdXB9G.U9dP1sBAN2Du8y1JfiNz0WeVZVZ9.sjB_ ECF9t0RmefPILJoMaE6wfeuT1aAa3StpVw.AX3W0HWcd3Zo0W.i8k_UNJev0WnchG4sMRY.Ep.MV EWsNSnZ8eU1KRvGmQocgDQPSmvxbPj1m4jdRpij3aOTOYFRlcNopX9PW91QlTXwjMyHR3yOMVYU8 gv5Rfc1qyVdK.p0glYyfYbKGEjaAik0dgmXmVvWVreJT8ljPEhzY4IlNQU0nJssAnQWzeHgepJZm cX.92_UaAjYbpPujjLQGmVjmrvDoK9C1RcXlWGEBlDTfVsCNmSTKqxoTPeNXMG4WHgICq7VSMb_t E1YlMIqv9t6jTcc8HLPRw_yI3JB_XRqpc0MlpbthRWdn9OIgeBB9pIQ3lwpU0D6sjnHv1aWaBbRi FcKBphDxAvFyUEIaA.tN.LCFnHQT.It62HD1nSgQzMbQx7upsuR73kZ7L0U602lR3P7kHqLwmMEP pZvfKE.hAVcbcT2rDdsGtt1ufOLDd5cu23IGTRHTDWonkFSMqoPukEPzlCV8mvh_9casrKAtdbEy KkJFqpobRL3CwfEh0VPr7VPN88rPtMccAKcwPKQnYfv9Xk73DSiDgJSo9PlTDBbmi_mqih__q3nn 8OENs_jupQaX7pNJ86GiSnifZvtBHSIt0HHmseXFrrsyOihNIMw6sbJlxSBB_25IqInYepQz31CD 6xjsKmak2mfke8dLOAnvss37rI26Wq1xgfuCd9w0.KCP0powZl4_rprcjRKfklBW3QUCG_pLHWlF 4uV.IoOGNCbk01UcF4nC7SIQ7tTvuL374s9vvHKTceLUaXo0hyeNVtkVsrRupO_gVuGnXfehhYYC DCGOE9CCa9BHb.2n.cFjP7NbPBJlKdCiZpxiPieBqecb.YUlE82f0lRZ0W_OeaQN50ns0Xb3YKHw 6ZIlMvcBLgTIsqxbHagFZxpy1bsYcLcCyMR98jYujveVM3.ra7XrP.slFt8.RYXKhx6DZLbvv6zp fsmgf0Jzq1BFfsJjyrjnms95o0..iCWmU7O1nIK8EfDpFgdihcuzDsejvwXM1P46cP6EFtSAzZ_y z0Jl7HdwdK7XxdMR5xRXoJU5rEyN3TboAuT9JeBWPf0vdv2gsS9kfIJ3OfDFMgAkDnjQdirgyynZ V12UHJHfACS7TCaRP0O_z6X90DRQwwXsrDkPUwzzT3b4L.1qiHuKCt0ant.4- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.bf2.yahoo.com with HTTP; Sun, 14 Feb 2021 15:51:37 +0000 Received: by smtp419.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID c0bd0c21e976669efb986f16c609df97; Sun, 14 Feb 2021 15:51:34 +0000 (UTC) Subject: [PING] [PATCH v2] Fix raw-frame-arguments in combination with frame-filters To: gdb-patches@sourceware.org References: <20210131134611.3255-1-ssbssa.ref@yahoo.de> <20210131134611.3255-1-ssbssa@yahoo.de> From: Hannes Domani Message-ID: <10f75e27-2d3f-8f74-8447-dcef5d3c2e9b@yahoo.de> Date: Sun, 14 Feb 2021 16:51:25 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 MIME-Version: 1.0 In-Reply-To: <20210131134611.3255-1-ssbssa@yahoo.de> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-Antivirus: Avast (VPS 210214-0, 02/14/2021), Outbound message X-Antivirus-Status: Clean X-Mailer: WebService/1.1.17712 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Apache-HttpAsyncClient/4.1.4 (Java/11.0.9.1) X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00, 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 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: Sun, 14 Feb 2021 15:51:42 -0000 Ping. On 31.01.2021 14:46, Hannes Domani via Gdb-patches wrote: > 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: > > (gdb) disable frame-filter global BasicFrameFilter > (gdb) bt > #0 foo (x=42, ss=super struct = {...}) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-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: > > (gdb) set print raw-values on > (gdb) bt > #0 foo (x=42, ss=super struct = {...}) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > (gdb) set print raw-values off > > Instead, the raw-frame-arguments option disables the pretty-printer in the > backtrace: > > (gdb) bt -raw-frame-arguments on > #0 foo (x=42, ss=...) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-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: > > (gdb) enable frame-filter global BasicFrameFilter > (gdb) bt > #0 foo (x=42, ss=super struct = {...}) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > (gdb) set print raw-values on > (gdb) bt > #0 foo (x=42, ss=...) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > (gdb) set print raw-values off > (gdb) bt -raw-frame-arguments on > #0 foo (x=42, ss=super struct = {...}) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > > So this adds the PRINT_RAW_FRAME_ARGUMENTS flag to frame_filter_flag, which > is then used in the frame-filter to override the raw flag in enumerate_args. > > Then the output is the same if a frame-filter is active, the pretty-printer > for backtraces is only disabled with the raw-frame-arguments option: > > (gdb) enable frame-filter global BasicFrameFilter > (gdb) bt > #0 foo (x=42, ss=super struct = {...}) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > (gdb) set print raw-values on > (gdb) bt > #0 foo (x=42, ss=super struct = {...}) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > (gdb) set print raw-values off > (gdb) bt -raw-frame-arguments on > #0 foo (x=42, ss=...) at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:47 > #1 0x004016aa in main () at C:/src/repos/gdb-testsuite/gdb/testsuite/gdb.python/py-frame-args.c:57 > > gdb/ChangeLog: > > 2021-01-31 Hannes Domani > > * extension.h (enum frame_filter_flag): Add > PRINT_RAW_FRAME_ARGUMENTS. > * python/py-framefilter.c (enumerate_args): Override raw flag. > raw_frame_args argument. > (py_mi_print_variables): Forward raw flag. > (py_print_args): Forward raw_frame_args flag. > (py_print_frame): Handle PRINT_RAW_FRAME_ARGUMENTS. > * stack.c (backtrace_command_1): Set PRINT_RAW_FRAME_ARGUMENTS. > > gdb/testsuite/ChangeLog: > > 2021-01-31 Hannes Domani > > * gdb.python/py-frame-args.exp: Add bt raw-frame-arguments tests. > * gdb.python/py-frame-args.py: Add basic frame-filter. > --- > v2: > - More detailed commit message describing the problem. > --- > gdb/extension.h | 4 ++++ > gdb/python/py-framefilter.c | 14 ++++++++++---- > gdb/stack.c | 2 ++ > gdb/testsuite/gdb.python/py-frame-args.exp | 20 ++++++++++++++++++++ > gdb/testsuite/gdb.python/py-frame-args.py | 13 +++++++++++++ > 5 files changed, 49 insertions(+), 4 deletions(-) > > diff --git a/gdb/extension.h b/gdb/extension.h > index a505c68d25e..7067e232cd3 100644 > --- a/gdb/extension.h > +++ b/gdb/extension.h > @@ -103,6 +103,10 @@ enum frame_filter_flag > > /* Set this flag if elided frames should not be printed. */ > PRINT_HIDE = 1 << 5, > + > + /* Set this flag if pretty printers for frame arguments should not > + be invoked. */ > + PRINT_RAW_FRAME_ARGUMENTS = 1 << 6, > }; > > DEF_ENUM_FLAGS_TYPE (enum frame_filter_flag, frame_filter_flags); > diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c > index 6dd741ab704..e53e3409235 100644 > --- a/gdb/python/py-framefilter.c > +++ b/gdb/python/py-framefilter.c > @@ -422,12 +422,14 @@ static enum ext_lang_bt_status > enumerate_args (PyObject *iter, > struct ui_out *out, > enum ext_lang_frame_args args_type, > + bool raw_frame_args, > int print_args_field, > struct frame_info *frame) > { > struct value_print_options opts; > > get_user_print_options (&opts); > + opts.raw = raw_frame_args; > > if (args_type == CLI_SCALAR_VALUES) > { > @@ -655,8 +657,8 @@ py_mi_print_variables (PyObject *filter, struct ui_out *out, > ui_out_emit_list list_emitter (out, "variables"); > > if (args_iter != Py_None > - && (enumerate_args (args_iter.get (), out, args_type, 1, frame) > - == EXT_LANG_BT_ERROR)) > + && (enumerate_args (args_iter.get (), out, args_type, opts->raw, 1, > + frame) == EXT_LANG_BT_ERROR)) > return EXT_LANG_BT_ERROR; > > if (locals_iter != Py_None > @@ -701,6 +703,7 @@ static enum ext_lang_bt_status > py_print_args (PyObject *filter, > struct ui_out *out, > enum ext_lang_frame_args args_type, > + bool raw_frame_args, > struct frame_info *frame) > { > gdbpy_ref<> args_iter (get_py_iter_from_func (filter, "frame_args")); > @@ -726,7 +729,8 @@ py_print_args (PyObject *filter, > } > } > else if (args_iter != Py_None > - && (enumerate_args (args_iter.get (), out, args_type, 0, frame) > + && (enumerate_args (args_iter.get (), out, args_type, > + raw_frame_args, 0, frame) > == EXT_LANG_BT_ERROR)) > return EXT_LANG_BT_ERROR; > > @@ -957,7 +961,9 @@ py_print_frame (PyObject *filter, frame_filter_flags flags, > wrong. */ > if (print_args && (location_print || out->is_mi_like_p ())) > { > - if (py_print_args (filter, out, args_type, frame) == EXT_LANG_BT_ERROR) > + bool raw_frame_args = (flags & PRINT_RAW_FRAME_ARGUMENTS) != 0; > + if (py_print_args (filter, out, args_type, raw_frame_args, frame) > + == EXT_LANG_BT_ERROR) > return EXT_LANG_BT_ERROR; > } > > diff --git a/gdb/stack.c b/gdb/stack.c > index bce6a2f42f8..dbca5ade1c2 100644 > --- a/gdb/stack.c > +++ b/gdb/stack.c > @@ -2028,6 +2028,8 @@ backtrace_command_1 (const frame_print_options &fp_opts, > flags |= PRINT_LOCALS; > if (bt_opts.hide) > flags |= PRINT_HIDE; > + if (fp_opts.print_raw_frame_arguments) > + flags |= PRINT_RAW_FRAME_ARGUMENTS; > > if (!bt_opts.no_filters) > { > diff --git a/gdb/testsuite/gdb.python/py-frame-args.exp b/gdb/testsuite/gdb.python/py-frame-args.exp > index 5d35323c0e6..dae0c0ac29e 100644 > --- a/gdb/testsuite/gdb.python/py-frame-args.exp > +++ b/gdb/testsuite/gdb.python/py-frame-args.exp > @@ -34,6 +34,26 @@ gdb_test_no_output "source ${remote_python_file}" "load 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 > +foreach_with_prefix filtered {enable disable} { > + gdb_test_no_output "$filtered frame-filter global BasicFrameFilter" > + > + gdb_test "bt 1" \ > + ".*foo \\(x=42, ss=super struct = {\[.\]{3}}\\).*" \ > + "bt pretty" > + > + gdb_test "bt -raw-frame-arguments on 1" \ > + ".*foo \\(x=42, ss=\[.\]{3}\\).*" \ > + "bt raw" > + > + # "set print raw-values" should not affect frame arguments > + gdb_test_no_output "set print raw-values on" > + gdb_test "bt 1" \ > + ".*foo \\(x=42, ss=super struct = {\[.\]{3}}\\).*" \ > + "bt pretty,raw-values" > + 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/gdb.python/py-frame-args.py > index d80d761b995..3b65eed0dad 100644 > --- a/gdb/testsuite/gdb.python/py-frame-args.py > +++ b/gdb/testsuite/gdb.python/py-frame-args.py > @@ -73,3 +73,16 @@ pretty_printers_dict = {} > > register_pretty_printers () > gdb.pretty_printers.append (lookup_function) > + > + > +class BasicFrameFilter (object): > + def __init__ (self): > + self.name = "BasicFrameFilter" > + self.priority = 100 > + self.enabled = True > + gdb.frame_filters[self.name] = self > + > + def filter (self, frame_iter): > + return frame_iter > + > +BasicFrameFilter ()