From: Keith Seitz Date: Wed, 31 May 2017 17:57:08 +0000 (-0700) Subject: Update w/HEAD. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fc31fb04a8fe0088a7a5e322a17bec7fbb6162a;p=thirdparty%2Fbinutils-gdb.git Update w/HEAD. Problems: gdb/c-lang.c gdb/language.c --- 8fc31fb04a8fe0088a7a5e322a17bec7fbb6162a diff --cc gdb/ada-lang.c index cf20ee3088c,25c49c589fc..34e087e828d --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@@ -14047,9 -14047,9 +14047,10 @@@ const struct language_defn ada_language ada_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, ada_get_symbol_name_cmp, /* la_get_symbol_name_cmp */ ada_iterate_over_symbols, + default_compute_string_hash, &ada_varobj_ops, NULL, NULL, diff --cc gdb/c-lang.c index e2df25ecc52,a6d533d082f..3628ebed33d --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@@ -715,69 -712,18 +715,80 @@@ evaluate_subexp_c (struct type *expect_ } return evaluate_subexp_standard (expect_type, exp, pos, noside); } + + /* la_watch_location_expression for C. */ + + gdb::unique_xmalloc_ptr + c_watch_location_expression (struct type *type, CORE_ADDR addr) + { + type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type))); + std::string name = type_to_string (type); + return gdb::unique_xmalloc_ptr + (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr))); + } +/* Compute the C++ hash for STRING0. + + For dictionaries, we group like-symbols together. + That means that all templates with the same unparameterized names + must yield the same hash. Likewise, overloaded functions must also + yield the same hash. + + The following code deals largely with templates. The dreaded + strcmp_iw already enforces overloads to be grouped. */ + +static unsigned int +cplus_compute_string_hash (const char *string0) +{ + /* If '<' doesn't appear at all in STRING), there is no way we could + be dealing with a template name. */ + if (find_toplevel_char (string0, '<') == NULL) + return default_compute_string_hash (string0); + + /* Locate the last qualified component of STRING0. */ + const char *p = find_toplevel_string (string0, "::"); + const char *last_scope = NULL; + + while (p != NULL) + { + last_scope = p; + p = find_toplevel_string (p + 2, "::"); + } + + /* last_scope points to the last "::". If NULL, then no scope operator + was seen in STRING0, and we use the entire string. */ + if (last_scope == NULL) + last_scope = string0; + + /* Find a possible template parameter list. Valid operators will be + dealt with later. */ + p = find_toplevel_char (last_scope, '<'); + + /* P points to toplevel '<', but it could still be a valid operator + and not be a template at all. */ + if ((p - last_scope) > 8 && strncmp (p - 8, "operator", 8) == 0) + { + /* Skip <,=. */ + while (strchr ("<=", *p) != NULL) + ++p; + + /* Check if this operator contains a template parameter list marker. */ + p = find_toplevel_char (p, '<'); + } + + /* If NULL, the string represents an operator (<, <=, <<, <<=) and is not + a template function itself. */ + if (p == NULL) + return default_compute_string_hash (string0); + + char *copy = ASTRDUP (string0); + + copy[p - string0] = '\0'; + + /* It is a template, compute the hash based only until P. */ + return default_compute_string_hash (copy); +} + /* Table mapping opcodes into strings for printing operators and precedences of the operators. */ @@@ -929,9 -875,9 +940,10 @@@ const struct language_defn c_language_d default_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &c_varobj_ops, c_get_compile_context, c_compute_program, @@@ -1073,12 -1019,12 +1085,13 @@@ const struct language_defn cplus_langua default_print_array_index, cp_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + cplus_compute_string_hash, &cplus_varobj_ops, - NULL, - NULL, + cplus_get_compile_context, + cplus_compute_program, LANG_MAGIC }; @@@ -1126,9 -1072,9 +1139,10 @@@ const struct language_defn asm_language default_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, @@@ -1179,9 -1125,9 +1193,10 @@@ const struct language_defn minimal_lang default_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/d-lang.c index 30731b75017,434b2e6ba5f..44163432f6f --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@@ -244,9 -244,9 +244,10 @@@ static const struct language_defn d_lan default_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/f-lang.c index c2807a12bc9,a9663d415bc..b623f19593d --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@@ -287,9 -287,9 +287,10 @@@ const struct language_defn f_language_d default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/go-lang.c index 03aba11bdee,3b80cec4452..f38e8454a50 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@@ -605,9 -605,9 +605,10 @@@ static const struct language_defn go_la default_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/language.c index ed441f1de20,e9d9803aeee..844ed7ed6c5 --- a/gdb/language.c +++ b/gdb/language.c @@@ -43,7 -43,7 +43,8 @@@ #include "symfile.h" #include "cp-support.h" #include "frame.h" + #include "c-lang.h" +#include "dictionary.h" /* for dict_hash */ extern void _initialize_language (void); @@@ -868,9 -860,9 +869,10 @@@ const struct language_defn unknown_lang default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, @@@ -918,9 -910,9 +920,10 @@@ const struct language_defn auto_languag default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, @@@ -966,9 -958,9 +969,10 @@@ const struct language_defn local_langua default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/m2-lang.c index 684393f24e4,35840bf56f9..d9c8b1f38d0 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@@ -393,9 -393,9 +393,10 @@@ const struct language_defn m2_language_ default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/objc-lang.c index e81cba809cb,934d9c6d168..b20e0888d20 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@@ -402,9 -402,9 +402,10 @@@ const struct language_defn objc_languag default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/opencl-lang.c index bd2c8380115,df57b615299..54c19af9442 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@@ -1082,9 -1082,9 +1082,10 @@@ const struct language_defn opencl_langu default_print_array_index, default_pass_by_reference, c_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/p-lang.c index 89ba27d7cb9,c4fe2f6c2a0..5ff9c22d518 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@@ -455,9 -456,9 +456,10 @@@ const struct language_defn pascal_langu default_print_array_index, default_pass_by_reference, default_get_string, + c_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/rust-lang.c index 1141f2b5623,d4cda1fc257..4b1e3ec51dd --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@@ -2176,9 -2189,9 +2189,10 @@@ static const struct language_defn rust_ default_print_array_index, default_pass_by_reference, c_get_string, + rust_watch_location_expression, NULL, /* la_get_symbol_name_cmp */ iterate_over_symbols, + default_compute_string_hash, &default_varobj_ops, NULL, NULL, diff --cc gdb/symtab.h index d464e593854,341deca56fc..78a0cfc8ead --- a/gdb/symtab.h +++ b/gdb/symtab.h @@@ -1648,7 -1626,7 +1648,7 @@@ std::vector find_pcs_for_sym true to indicate that LA_ITERATE_OVER_SYMBOLS should continue iterating, or false to indicate that the iteration should end. */ - typedef bool (symbol_found_callback_ftype) (struct block_symbol *sym); -typedef bool (symbol_found_callback_ftype) (symbol *sym); ++typedef bool (symbol_found_callback_ftype) (struct block_symbol *bsym); void iterate_over_symbols (const struct block *block, const char *name, const domain_enum domain,