PR python/18565 - make Frame.function work for inline frames
authorTom Tromey <tom@tromey.com>
Mon, 13 Jun 2016 02:45:29 +0000 (20:45 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 3 Aug 2016 15:04:08 +0000 (09:04 -0600)
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  <tom@tromey.com>

PR python/18565:
* python/py-frame.c (frapy_function): Use find_frame_funname.

2016-08-03  Tom Tromey  <tom@tromey.com>

PR python/18565:
* gdb.python/py-frame-inline.exp: Add Frame.function test.

gdb/ChangeLog
gdb/python/py-frame.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/py-frame-inline.exp

index 48ecd6771cac993f1775927879e897822171c691..24a53a5961016a2aef5aae6d71974173fb0a9c69 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-03  Tom Tromey  <tom@tromey.com>
+
+       PR python/18565:
+       * python/py-frame.c (frapy_function): Use find_frame_funname.
+
 2016-08-03  Tom Tromey  <tom@tromey.com>
 
        * stack.c (find_frame_funname): Avoid any possible leak in case
index 98a7d7b5edb5c539ca8121bf57ed3e8552491d3f..6bdac08579f3639ef47a1b524b63f039d42dd07b 100644 (file)
@@ -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)
     {
index 51e8073eccd3e4707c1b35d55ebb82a9a05e43fc..9f336df109a7e546d0edff94a557b60d21e26fc2 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-03  Tom Tromey  <tom@tromey.com>
+
+       PR python/18565:
+       * gdb.python/py-frame-inline.exp: Add Frame.function test.
+
 2016-08-01  Yao Qi  <yao.qi@linaro.org>
 
        * gdb.threads/process-dies-while-detaching.exp (do_test): Set
index 6306c8e6e635188a5b22fba23ba32d831d98e6ec..1372ee0f63e9f2681b33a71e52a777f515a82602 100644 (file)
@@ -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"