From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic302-21.consmr.mail.ir2.yahoo.com (sonic302-21.consmr.mail.ir2.yahoo.com [87.248.110.84]) by sourceware.org (Postfix) with ESMTPS id 9F567388A406 for ; Tue, 29 Dec 2020 17:02:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9F567388A406 X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1609261374; bh=zZ0M/QdBJq382xOpJNc81158foy8keRuqhmIiB22Rg3=; h=From:To:Subject:Date:From:Subject; b=h/o5LG5MOF0L3QRlO8fvTlbQefiSmw8oA8zkwITK2f04za79StuJVx5sWoLudc64IBCNAMP7tmFuM/fFHsTf7+uxu6NXYFyqOHvYKFr1T37pwZBxSY7EM0CB/Sqz7IS88LkPvgRVl89uLnzRAh9PrBEEYCqZltANyWmU3ngQcpCUkpWn9gYXeIPPQzIBvs/4bwsJFoILn0CiuBUOQPe5TEG8oCF+Xblh9/pqy9kz7Kz5nJcpSdb/ktTL3vVsKIM2ODTWpjvtufDfQ8/qwb98ZFSqszCLXJIBlPCb4YF/5Qykst4b/2/gMIP49AMFRhJllj0mTZVszWnmTwGZD7lgiQ== X-YMail-OSG: j9eLDYoVM1ll.qfUthPkzU0Fr5ojaZuqptVeUxOsljUaWHnD8sj1U2yaXHmYyF7 NkbO6RwrGGu7NebbqOyezx609EvOr6B0Df87M3qCvY.vtI9klQE_HvNE4T7uEb8WMWdA.Jao4pxW UJ7Yipj3fQ5I7oJXawakcqbKqd9LNrN3NDTqk.LlkV0IaXmKSYT67KSGhI8SjbfqJYMlo86w4tqg 6M7pzMb4G5OmcOqqXu.IbYjOV2XekHjjEY_Og8pDfVna_dx4zUUUgR2RzNc2YPSJmdsujoXdApaB S0II8TEhpeXJiMgexsdQ2IfJ1arnjxhDbMaCKsJlJBhHG_LocX1LSmg3Qqe25PQm0WJp04U3m2Es bYq7h5z0hr4RtDxNGm96Qz76TWFe7Q85kUoejWtsdEgLWI4NPQsUNYIXafDaKmKNJ7eJ766gnDy1 sbpKzCFfaWXkUL2l3PGEPZhovICgjXBVhY_jnh.OGtELTLmRMezW5ChJKxGs_PZujh1SUA5a04F4 lG94y_6aZglpZArB55shUa.Vi9wLjiqkG1r3y_iCcEm0jHTZgc09IThH_OIFNnJMg0zgP78pstMP sNqNET3bkxxGqpkvcOyxub4hTGwyC.IIpOQ.7HVr12aG7Z2PIi2rdE9wE38a671DkzEidmVqLnKO B4DNUWXRws7t8pLBORDhSzQ30364zj10K.sC1Y0OgxmHjgJuQEDO0gjoyxawHeWrZLuzPt1aKX4D DZACSQHtUNfL4nQjxO1XX1eZAogWbdB5R2Is2elXUk4B7uZ_pqqbF.HQ3ZfyBnX4EEXmwMuuZ32y 694wKc32nZpnulKpEZkscdpSCaAc.E7KwG4CQoUTP8Acj5Zs4FiyLUzdAKnJO2GuQ1LCiRZXWkYA 4xJyA_jPlWrsKnGZwqdfnjSZevIGeqAual7zY1cyoZjCDLGe96IaisGfL2XDVsl96wubGRMX6jAU 69NTtBJcHhwRMYgYcFnSmq.31fMeOQTnfkBOdJF9LjsnVymeRZsy3NLD4aL7wVHImcO.yp.Cc4Hr Gn49T0yEIYOUFvakss.hUMDX6mKnsoYF.Owei0KDsqLQB42L2uuMILtRS_y0S9KORE3u0_yyUJU1 KH1pTskHdIAI4NrBGiJsoMwZnhcv2HgEHssPD09h3QjXnmARCc2pR0jai_pPms3EGKgUoO.sx0H1 t.kt87nNlWRSANsYruy53eoY3qYSqGfCLsz7QnOqoYjQVCkrvh4pjgu4SfMofmr5kw1WdMyfFlAQ 8zIBBCbGgFER0RiP3Qv9eFczivPorB6GKIs_5Z6qh.Ng71Om.0TAf7k1kZeHK5WBVZjW2Qn.vWTC PHsYrfD5TqT97YEE4ZIBhetKPTxEF3pgS.YINI7PyNXaUQa0TmyCFUxKYLSFoA4MwZcI.vrzQyRY x_2ko9g3O1DkUlsDGVHrNpDBPG0Z_fyuQQgIBGg.haVQ_bBd047meonXJ8vQhnNIM6arBX1IizzB grgg4_svWMwVvFl6t7v2fxGI7sy4BBm6J8i9edxExOxLPCfOslFiRw16lybrHethBATZ2M3GGH.I g80roBS5KPWPOXlLyD3wFqotqKf7Ac0Sx_i1VoDcTyZlDdPQonwKenRBOgPpI0SLQN4K..ApVESW l_feoyabilOGR1MjqKxzyTVORHf_sf2aUhPFMRL6Dkr7PfO4zVgZhBWh3O6pRK8FTeorY8MkQ4TR THOUMQv1Hl_CYLNFP5tncy9cs3H7cb.gd57bqPQU3DY5iQGMHXfcO8GJDJ.3FuDx7pEWw.vb5CHx r5POa.mUdbFIOQtUo7MxHvbjvtXjaL.3CLIzikLNqHtKgR7W7Y7BgvNrBeoeD65n3dS1uD7NTcfX oWAe9RY4Onjo9pXuzrIiXXHrnY9ZgV0PsaEqogqK6ETkNcpg3j_g_1TtKISUpfd6ejx69u6XwF_C KN1qtMNSOhEj76nGf0NI70ZcZM9hIiNerMCdSlDFESEHKR26gHlcdEv_qMCsGZWVt17ce3oVdVfY lsITtHaQf8zFiZQn8dqSGbclpzmITi2ESz3pSiRrDWvpY_rTarJfQarf64DEdjXMeQz6J1R4G_nL uFrMr9rOPnZg5sIRX7yfiV3B264wLI2bV1VRt2AC7e1RbeLxksPd87f11DSxn9EID_Jbu6w75Rc8 3Gotx9SBn6Tj3kHWMPLQspWBRwmjwPYK462se2fjBEZFO5bG3s.by5nDX.R7patBAnaB91.HtE8A c5zqxkqR9LwViZZO8xkz3VRKgYO_H_oEOjqL3mL_9R8nUeom2JB5ZijKKayyU.C6KNdrYJwuftdh ete.Sh8sG_KDoSagdt.UAKYOhIrHOprXSC_8XQOgiKN96gH6BHmLGj3j9yJh1LUYUXRpVyyKbHPw RoU2GQSD8vtSpj5AWV.KbYCUopojHXAz7uzilL4CVfyq8DD.v1oeRkk5yo4MCfc9Rf_05EsUByMM 8NnSh Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.ir2.yahoo.com with HTTP; Tue, 29 Dec 2020 17:02:54 +0000 Received: by smtp411.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 1076516e444f24a80d67c937a4f3cedd; Tue, 29 Dec 2020 17:02:49 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH 4/4] Fix raw-frame-arguments in combination with frame-filters Date: Tue, 29 Dec 2020 18:02:27 +0100 Message-Id: <20201229170227.821-4-ssbssa@yahoo.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201229170227.821-1-ssbssa@yahoo.de> References: <20201229170227.821-1-ssbssa@yahoo.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 201229-2, 12/29/2020), Outbound message X-Antivirus-Status: Clean X-Spam-Status: No, score=-10.9 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: Tue, 29 Dec 2020 17:02:57 -0000 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. 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. gdb/ChangeLog: 2020-12-29 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: 2020-12-29 Hannes Domani * gdb.python/py-frame-args.exp: Add bt raw-frame-arguments tests. * gdb.python/py-frame-args.py: Add basic frame-filter. --- gdb/extension.h | 4 ++++ gdb/python/py-framefilter.c | 14 ++++++++++---- gdb/stack.c | 2 ++ gdb/testsuite/gdb.python/py-frame-args.exp | 22 ++++++++++++++++++++++ gdb/testsuite/gdb.python/py-frame-args.py | 13 +++++++++++++ 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/gdb/extension.h b/gdb/extension.h index c840dbc704..f3ec61b163 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 944a0eee50..c61bfa4c2e 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 943b3db087..07abdea8c1 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 fd9c1f4342..7c621e1302 100644 --- a/gdb/testsuite/gdb.python/py-frame-args.exp +++ b/gdb/testsuite/gdb.python/py-frame-args.exp @@ -34,6 +34,28 @@ 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 filtered [list "enable" "disable"] { + gdb_test_no_output "$filtered frame-filter global BasicFrameFilter" + + gdb_test "bt 1" \ + ".*foo \\(x=42, ss=super struct = {\[.\]{3}}\\).*" \ + "bt frame-filter=$filtered,pretty" + + gdb_test "bt -raw-frame-arguments on 1" \ + ".*foo \\(x=42, ss=\[.\]{3}\\).*" \ + "bt frame-filter=$filtered,raw" + + # "set print raw-values" should not affect frame arguments + gdb_test_no_output "set print raw-values on" \ + "raw-values-on,frame-filter=$filtered" + gdb_test "bt 1" \ + ".*foo \\(x=42, ss=super struct = {\[.\]{3}}\\).*" \ + "bt frame-filter=$filtered,pretty,raw-values" + gdb_test_no_output "set print raw-values off" \ + "raw-values-off,frame-filter=$filtered" +} + # 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 c2908829c5..aed2070d94 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 () -- 2.29.2