From 282a0691a725d1f6653840728449adb297c8c856 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 12 Jun 2016 20:45:29 -0600 Subject: [PATCH] PR python/18565 - make Frame.function work for inline frames PR python/18565 notes that calling frame filters don't work properly for inlined functions. This happens because Frame.function on an inline frame will yield the wrong result. This patch changes this code to use find_frame_funname instead, which handles inline frames properly. Built and regtested on x86-64 Fedora 24. 2016-08-03 Tom Tromey PR python/18565: * python/py-frame.c (frapy_function): Use find_frame_funname. 2016-08-03 Tom Tromey PR python/18565: * gdb.python/py-frame-inline.exp: Add Frame.function test. --- gdb/ChangeLog | 5 +++++ gdb/python/py-frame.c | 6 +++++- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.python/py-frame-inline.exp | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 48ecd6771c..24a53a5961 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2016-08-03 Tom Tromey + + PR python/18565: + * python/py-frame.c (frapy_function): Use find_frame_funname. + 2016-08-03 Tom Tromey * stack.c (find_frame_funname): Avoid any possible leak in case diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c index 98a7d7b5ed..6bdac08579 100644 --- a/gdb/python/py-frame.c +++ b/gdb/python/py-frame.c @@ -340,9 +340,13 @@ frapy_function (PyObject *self, PyObject *args) TRY { + char *funname; + enum language funlang; + FRAPY_REQUIRE_VALID (self, frame); - sym = find_pc_function (get_frame_address_in_block (frame)); + find_frame_funname (frame, &funname, &funlang, &sym); + xfree (funname); } CATCH (except, RETURN_MASK_ALL) { diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 51e8073ecc..9f336df109 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-08-03 Tom Tromey + + PR python/18565: + * gdb.python/py-frame-inline.exp: Add Frame.function test. + 2016-08-01 Yao Qi * gdb.threads/process-dies-while-detaching.exp (do_test): Set diff --git a/gdb/testsuite/gdb.python/py-frame-inline.exp b/gdb/testsuite/gdb.python/py-frame-inline.exp index 6306c8e6e6..1372ee0f63 100644 --- a/gdb/testsuite/gdb.python/py-frame-inline.exp +++ b/gdb/testsuite/gdb.python/py-frame-inline.exp @@ -51,3 +51,7 @@ gdb_test_no_output "set backtrace limit 1" gdb_continue_to_breakpoint "Block break here." gdb_test "python print (gdb.newest_frame())" ".*" + +# Regression test to verify that Frame.function works properly for +# inline frames. +gdb_test "python print (gdb.newest_frame().function())" "f"