This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb/gdb-7.12-branch] PR python/18565 - make Frame.function work for inline frames


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ff4a25a115a0f477174eb0b4763d186a590c035a

commit ff4a25a115a0f477174eb0b4763d186a590c035a
Author: Tom Tromey <tom@tromey.com>
Date:   Sun Jun 12 20:45:29 2016 -0600

    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  <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.

Diff:
---
 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 2c19801..0dfb654 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 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
 	cp_remove_params can throw.
 
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c
index 98a7d7b..6bdac08 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 51e8073..9f336df 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/gdb.python/py-frame-inline.exp b/gdb/testsuite/gdb.python/py-frame-inline.exp
index 6306c8e..1372ee0 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"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]