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]

gdb and binutils branch master updated. 9a9a76082919371f4ceb571f6c9892325b80a2e0


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  9a9a76082919371f4ceb571f6c9892325b80a2e0 (commit)
      from  e051745c838bf29e564fb2665339f97c8383b9e8 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

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

commit 9a9a76082919371f4ceb571f6c9892325b80a2e0
Author: Andrew Burgess <andrew.burgess@embecosm.com>
Date:   Mon Jul 7 19:22:36 2014 +0100

    Improve MI -var-info-path-expression for nested struct/union case.
    
      https://sourceware.org/ml/gdb-patches/2014-05/msg00383.html
    
    The MI command -var-info-path-expression currently does not handle
    non-anonymous structs / unions nested within other structs / unions,
    it will skip parts of the expression.  Consider this example:
    
      ## START EXAMPLE ##
      $ cat ex.c
      #include <string.h>
    
      int
      main ()
      {
        struct s1
        {
          int a;
        };
    
        struct ss
        {
          struct s1 x;
        };
    
        struct ss an_ss;
        memset (&an_ss, 0, sizeof (an_ss));
        return 0;
      }
      $ gcc -g -o ex.x ex.c
      $ gdb ex.x
      (gdb) break 18
      Breakpoint 1 at 0x80483ba: file ex.c, line 18.
      (gdb) run
      Starting program: /home/user/ex.x
    
      Breakpoint 1, main () at ex.c:18
      18	  return 0;
      (gdb) interpreter-exec mi "-var-create an_ss * an_ss"
      (gdb) interpreter-exec mi "-var-list-children an_ss"
      ^done,numchild="1",children=[child={name="an_ss.x",exp="x",numchild="1",type="struct s1",thread-id="1"}],has_more="0"
      (gdb) interpreter-exec mi "-var-list-children an_ss.x"
      ^done,numchild="1",children=[child={name="an_ss.x.a",exp="a",numchild="0",type="int",thread-id="1"}],has_more="0"
      (gdb) interpreter-exec mi "-var-list-children an_ss.x.a"
      ^done,numchild="0",has_more="0"
      (gdb) interpreter-exec mi "-var-info-path-expression an_ss.x.a"
      ^done,path_expr="(an_ss).a"
      (gdb) print (an_ss).a
      There is no member named a.
      ## END EXAMPLE ##
    
    Notice that the path expression returned is wrong, and as a result
    the print command fails.
    
    This patch adds a new method to the varobj_ops structure called
    is_path_expr_parent, to allow language specific control over finding
    the parent varobj, the current logic becomes the C/C++ version and is
    extended to handle the nested cases.  No other language currently uses
    this code, so all other languages just get a default method.
    
    With this patch, the above example now finishes like this:
    
      ## START EXAMPLE ##
      $ gdb ex.x
      (gdb) break 18
      Breakpoint 1 at 0x80483ba: file ex.c, line 18.
      (gdb) run
      Starting program: /home/user/ex.x
    
      Breakpoint 1, main () at ex.c:18
      18	  return 0;
      (gdb) interpreter-exec mi "-var-list-children an_ss"
      ^done,numchild="1",children=[child={name="an_ss.x",exp="x",numchild="1",type="struct s1",thread-id="1"}],has_more="0"
      (gdb) interpreter-exec mi "-var-list-children an_ss.x"
      ^done,numchild="1",children=[child={name="an_ss.x.a",exp="a",numchild="0",type="int",thread-id="1"}],has_more="0"
      (gdb) interpreter-exec mi "-var-list-children an_ss.x.a"
      ^done,numchild="0",has_more="0"
      (gdb) interpreter-exec mi "-var-info-path-expression an_ss.x.a"
      ^done,path_expr="((an_ss).x).a"
      (gdb) print ((an_ss).x).a
      $1 = 0
      ## END EXAMPLE ##
    
    Notice that the path expression is now correct, and the print is a
    success.
    
    gdb/ChangeLog:
    
    	* ada-varobj.c (ada_varobj_ops): Fill in is_path_expr_parent
    	field.
    	* c-varobj.c (c_is_path_expr_parent): New function, moved core
    	from varobj.c, with additional checks.
    	(c_varobj_ops): Fill in is_path_expr_parent field.
    	(cplus_varobj_ops): Fill in is_path_expr_parent field.
    	* jv-varobj.c (java_varobj_ops): Fill in is_path_expr_parent
    	field.
    	* varobj.c (is_path_expr_parent): Call is_path_expr_parent varobj
    	ops method.
    	(varobj_default_is_path_expr_parent): New function.
    	* varobj.h (lang_varobj_ops): Add is_path_expr_parent field.
    	(varobj_default_is_path_expr_parent): Declare new function.
    
    gdb/testsuite/ChangeLog:
    
    	* gdb.mi/var-cmd.c (do_nested_struct_union_tests): New function
    	setting up test structures.
    	(main): Call new test function.
    	* gdb.mi/mi2-var-child.exp: Create additional breakpoint in new
    	test function, continue into test function and walk test
    	structures.

-----------------------------------------------------------------------

Summary of changes:
 gdb/ChangeLog                          |   16 +++++++
 gdb/ada-varobj.c                       |    3 +-
 gdb/c-varobj.c                         |   56 ++++++++++++++++++++++-
 gdb/jv-varobj.c                        |    3 +-
 gdb/testsuite/ChangeLog                |    9 ++++
 gdb/testsuite/gdb.mi/mi2-var-child.exp |   76 ++++++++++++++++++++++++++++++++
 gdb/testsuite/gdb.mi/var-cmd.c         |   68 ++++++++++++++++++++++++++++
 gdb/varobj.c                           |   20 ++++----
 gdb/varobj.h                           |    9 ++++
 9 files changed, 246 insertions(+), 14 deletions(-)


hooks/post-receive
-- 
gdb and binutils


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