diff options
-rw-r--r-- | gdb/ChangeLog | 48 | ||||
-rw-r--r-- | gdb/ada-lang.c | 4 | ||||
-rw-r--r-- | gdb/c-lang.c | 19 | ||||
-rw-r--r-- | gdb/completer.c | 8 | ||||
-rw-r--r-- | gdb/d-lang.c | 4 | ||||
-rw-r--r-- | gdb/defs.h | 3 | ||||
-rw-r--r-- | gdb/f-lang.c | 4 | ||||
-rw-r--r-- | gdb/go-lang.c | 4 | ||||
-rw-r--r-- | gdb/language.c | 248 | ||||
-rw-r--r-- | gdb/language.h | 23 | ||||
-rw-r--r-- | gdb/m2-lang.c | 4 | ||||
-rw-r--r-- | gdb/objc-lang.c | 3 | ||||
-rw-r--r-- | gdb/opencl-lang.c | 3 | ||||
-rw-r--r-- | gdb/p-lang.c | 11 | ||||
-rw-r--r-- | gdb/rust-lang.c | 10 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/default.exp | 2 | ||||
-rw-r--r-- | gdb/utils.h | 8 |
18 files changed, 184 insertions, 226 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a9ae09f..62f3bfb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,53 @@ 2017-07-20 Pedro Alves <palves@redhat.com> + * ada-lang.c (ada_language_defn): Make extern. + (_initialize_ada_language): Remove add_language call. + * c-lang.c (c_language_defn, cplus_language_defn) + (asm_language_defn, minimal_language_defn): Make extern. + (_initialize_c_language): Delete. + * completer.c (compare_cstrings): Delete, moved to utils.h. + * d-lang.c (d_language_defn): Make extern. + (_initialize_d_language): Remove add_language calls. + * defs.h (enum language): Add comment. + * f-lang.c (f_language_defn): Make extern. + (_initialize_f_language): Remove add_language call. + * go-lang.c (go_language_defn): Make extern. + (_initialize_go_language): Remove add_language call. + * language.c: Include <algorithm>. + (languages): Redefine as const array. + (languages_size, languages_allocsize, DEFAULT_ALLOCSIZE): Delete. + (set_language_command): Handle "local". Use for-range loop. + (set_language): Remove loop. + (language_enum): Rewrite. + (language_def, language_str): Remove loops. + (add_language): Delete. + (add_set_language_command): New, based on add_languages. + (skip_language_trampoline): Adjust. + (local_language_defn): Delete. + (language_gdbarch_post_init): Adjust. + (_initialize_language): Remove add_language calls. Call + add_set_language_command. + * language.h (add_language): Delete. + (auto_language_defn) + (unknown_language_defn, minimal_language_defn, ada_language_defn) + (asm_language_defn, c_language_defn, cplus_language_defn) + (d_language_defn, f_language_defn, go_language_defn) + (m2_language_defn, objc_language_defn, opencl_language_defn) + (pascal_language_defn, rust_language_defn): Declare. + * m2-lang.c (m2_language_defn): Make extern. + (_initialize_m2_language): Remove add_language call. + * objc-lang.c (objc_language_defn): Make extern. + (_initialize_objc_language): Remove add_language call. + * opencl-lang.c (opencl_language_defn): Make extern. + (_initialize_opencl_language): Remove add_language call. + * p-lang.c (pascal_language_defn): Make extern. + (_initialize_pascal_language): Delete. + * rust-lang.c (rust_language_defn): Make extern. + (_initialize_rust_language): Delete. + * utils.h (compare_cstrings): New static inline function. + +2017-07-20 Pedro Alves <palves@redhat.com> + * ada-lang.c (ada_to_fixed_type_1): Adjust. (get_var_value): Constify parameters. (get_int_var_value): Change prototype. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 1dd30b7..280247b 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -13960,7 +13960,7 @@ static const char *ada_extensions[] = ".adb", ".ads", ".a", ".ada", ".dg", NULL }; -const struct language_defn ada_language_defn = { +extern const struct language_defn ada_language_defn = { "ada", /* Language name */ "Ada", language_ada, @@ -14090,8 +14090,6 @@ ada_free_objfile_observer (struct objfile *objfile) void _initialize_ada_language (void) { - add_language (&ada_language_defn); - initialize_ada_catchpoint_ops (); add_prefix_cmd ("ada", no_class, set_ada_command, diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 695b237..f86e26e 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -35,8 +35,6 @@ #include <ctype.h> #include "gdbcore.h" -extern void _initialize_c_language (void); - /* Given a C string type, STR_TYPE, return the corresponding target character set name. */ @@ -831,7 +829,7 @@ static const char *c_extensions[] = ".c", NULL }; -const struct language_defn c_language_defn = +extern const struct language_defn c_language_defn = { "c", /* Language name */ "C", @@ -975,7 +973,7 @@ static const char *cplus_extensions[] = ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL }; -const struct language_defn cplus_language_defn = +extern const struct language_defn cplus_language_defn = { "c++", /* Language name */ "C++", @@ -1028,7 +1026,7 @@ static const char *asm_extensions[] = ".s", ".sx", ".S", NULL }; -const struct language_defn asm_language_defn = +extern const struct language_defn asm_language_defn = { "asm", /* Language name */ "assembly", @@ -1081,7 +1079,7 @@ const struct language_defn asm_language_defn = to do some simple operations when debugging applications that use a language currently not supported by GDB. */ -const struct language_defn minimal_language_defn = +extern const struct language_defn minimal_language_defn = { "minimal", /* Language name */ "Minimal", @@ -1128,12 +1126,3 @@ const struct language_defn minimal_language_defn = NULL, LANG_MAGIC }; - -void -_initialize_c_language (void) -{ - add_language (&c_language_defn); - add_language (&cplus_language_defn); - add_language (&asm_language_defn); - add_language (&minimal_language_defn); -} diff --git a/gdb/completer.c b/gdb/completer.c index ba2e860..a029263 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -2026,14 +2026,6 @@ completion_result::release_match_list () return ret; } -/* Compare C strings for std::sort. */ - -static bool -compare_cstrings (const char *str1, const char *str2) -{ - return strcmp (str1, str2) < 0; -} - /* See completer.h */ void diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 74cceaa..941d3ed 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -204,7 +204,7 @@ static const char *d_extensions[] = ".d", NULL }; -static const struct language_defn d_language_defn = +extern const struct language_defn d_language_defn = { "d", "D", @@ -349,6 +349,4 @@ void _initialize_d_language (void) { d_type_data = gdbarch_data_register_post_init (build_d_types); - - add_language (&d_language_defn); } @@ -203,7 +203,8 @@ extern void quit_serial_event_clear (void); several languages. For that reason, the constants here are sorted in the order we'll attempt demangling them. For example: Rust uses C++ mangling, so must come after C++; Ada must come last (see - ada_sniff_from_mangled_name). */ + ada_sniff_from_mangled_name). (Keep this order in sync with the + 'languages' array in language.c.) */ enum language { diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 937ebff..903cfd1 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -245,7 +245,7 @@ static const char *f_extensions[] = NULL }; -const struct language_defn f_language_defn = +extern const struct language_defn f_language_defn = { "fortran", "Fortran", @@ -369,6 +369,4 @@ void _initialize_f_language (void) { f_type_data = gdbarch_data_register_post_init (build_fortran_types); - - add_language (&f_language_defn); } diff --git a/gdb/go-lang.c b/gdb/go-lang.c index f3b4f5c..60bb3c5 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -565,7 +565,7 @@ go_language_arch_info (struct gdbarch *gdbarch, lai->bool_type_default = builtin->builtin_bool; } -static const struct language_defn go_language_defn = +extern const struct language_defn go_language_defn = { "go", "Go", @@ -676,6 +676,4 @@ void _initialize_go_language (void) { go_type_data = gdbarch_data_register_post_init (build_go_types); - - add_language (&go_language_defn); } diff --git a/gdb/language.c b/gdb/language.c index d30f4f0..073039e 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -44,6 +44,7 @@ #include "cp-support.h" #include "frame.h" #include "c-lang.h" +#include <algorithm> extern void _initialize_language (void); @@ -91,12 +92,26 @@ enum language_mode language_mode = language_mode_auto; const struct language_defn *expected_language; -/* The list of supported languages. The list itself is malloc'd. */ - -static const struct language_defn **languages; -static unsigned languages_size; -static unsigned languages_allocsize; -#define DEFAULT_ALLOCSIZE 4 +/* The list of supported languages. Keep this in the same order as + the 'enum language' values. */ + +static const struct language_defn *languages[] = { + &unknown_language_defn, + &auto_language_defn, + &c_language_defn, + &objc_language_defn, + &cplus_language_defn, + &d_language_defn, + &go_language_defn, + &f_language_defn, + &m2_language_defn, + &asm_language_defn, + &pascal_language_defn, + &opencl_language_defn, + &rust_language_defn, + &minimal_language_defn, + &ada_language_defn, +}; /* The current values of the "set language/type/range" enum commands. */ @@ -148,16 +163,19 @@ show_language_command (struct ui_file *file, int from_tty, static void set_language_command (char *ignore, int from_tty, struct cmd_list_element *c) { - int i; enum language flang = language_unknown; + /* "local" is a synonym of "auto". */ + if (strcmp (language, "local") == 0) + language = "auto"; + /* Search the list of languages for a match. */ - for (i = 0; i < languages_size; i++) + for (const auto &lang : languages) { - if (strcmp (languages[i]->la_name, language) == 0) + if (strcmp (lang->la_name, language) == 0) { /* Found it! Go into manual mode, and use this language. */ - if (languages[i]->la_language == language_auto) + if (lang->la_language == language_auto) { /* Enter auto mode. Set to the current frame's language, if known, or fallback to the initial language. */ @@ -186,7 +204,7 @@ set_language_command (char *ignore, int from_tty, struct cmd_list_element *c) { /* Enter manual mode. Set the specified language. */ language_mode = language_mode_manual; - current_language = languages[i]; + current_language = lang; set_range_case (); expected_language = current_language; return; @@ -364,21 +382,11 @@ set_range_case (void) enum language set_language (enum language lang) { - int i; enum language prev_language; prev_language = current_language->la_language; - - for (i = 0; i < languages_size; i++) - { - if (languages[i]->la_language == lang) - { - current_language = languages[i]; - set_range_case (); - break; - } - } - + current_language = languages[lang]; + set_range_case (); return prev_language; } @@ -474,11 +482,12 @@ range_error (const char *string,...) enum language language_enum (char *str) { - int i; + for (const auto &lang : languages) + if (strcmp (lang->la_name, str) == 0) + return lang->la_language; - for (i = 0; i < languages_size; i++) - if (strcmp (languages[i]->la_name, str) == 0) - return languages[i]->la_language; + if (strcmp (str, "local") == 0) + return language_auto; return language_unknown; } @@ -488,32 +497,15 @@ language_enum (char *str) const struct language_defn * language_def (enum language lang) { - int i; - - for (i = 0; i < languages_size; i++) - { - if (languages[i]->la_language == lang) - { - return languages[i]; - } - } - return NULL; + return languages[lang]; } /* Return the language as a string. */ + const char * language_str (enum language lang) { - int i; - - for (i = 0; i < languages_size; i++) - { - if (languages[i]->la_language == lang) - { - return languages[i]->la_name; - } - } - return "Unknown"; + return languages[lang]->la_name; } static void @@ -530,55 +522,45 @@ show_check (char *ignore, int from_tty) cmd_show_list (showchecklist, from_tty, ""); } -/* Add a language to the set of known languages. */ -void -add_language (const struct language_defn *lang) -{ - /* For the "set language" command. */ - static const char **language_names = NULL; - /* For the "help set language" command. */ +/* Build and install the "set language LANG" command. */ - if (lang->la_magic != LANG_MAGIC) - { - fprintf_unfiltered (gdb_stderr, - "Magic number of %s language struct wrong\n", - lang->la_name); - internal_error (__FILE__, __LINE__, - _("failed internal consistency check")); - } +static void +add_set_language_command () +{ + static const char **language_names; - if (!languages) - { - languages_allocsize = DEFAULT_ALLOCSIZE; - languages = XNEWVEC (const struct language_defn *, languages_allocsize); - } - if (languages_size >= languages_allocsize) + /* Build the language names array, to be used as enumeration in the + "set language" enum command. +1 for "local" and +1 for NULL + termination. */ + language_names = new const char *[ARRAY_SIZE (languages) + 2]; + + /* Display "auto", "local" and "unknown" first, and then the rest, + alpha sorted. */ + const char **language_names_p = language_names; + *language_names_p++ = auto_language_defn.la_name; + *language_names_p++ = "local"; + *language_names_p++ = unknown_language_defn.la_name; + const char **sort_begin = language_names_p; + for (const auto &lang : languages) { - languages_allocsize *= 2; - languages = (const struct language_defn **) xrealloc ((char *) languages, - languages_allocsize * sizeof (*languages)); + /* Already handled above. */ + if (lang->la_language == language_auto + || lang->la_language == language_unknown) + continue; + *language_names_p++ = lang->la_name; } - languages[languages_size++] = lang; - - /* Build the language names array, to be used as enumeration in the - set language" enum command. */ - language_names = XRESIZEVEC (const char *, language_names, - languages_size + 1); - - for (int i = 0; i < languages_size; ++i) - language_names[i] = languages[i]->la_name; - language_names[languages_size] = NULL; + *language_names_p = NULL; + std::sort (sort_begin, language_names_p, compare_cstrings); /* Add the filename extensions. */ - if (lang->la_filename_extensions != NULL) - { - int i; - - for (i = 0; lang->la_filename_extensions[i] != NULL; ++i) - add_filename_language (lang->la_filename_extensions[i], - lang->la_language); - } + for (const auto &lang : languages) + if (lang->la_filename_extensions != NULL) + { + for (size_t i = 0; lang->la_filename_extensions[i] != NULL; ++i) + add_filename_language (lang->la_filename_extensions[i], + lang->la_language); + } /* Build the "help set language" docs. */ string_file doc; @@ -587,24 +569,24 @@ add_language (const struct language_defn *lang) "The currently understood settings are:\n\nlocal or " "auto Automatic setting based on source file\n")); - for (int i = 0; i < languages_size; ++i) + for (const auto &lang : languages) { /* Already dealt with these above. */ - if (languages[i]->la_language == language_unknown - || languages[i]->la_language == language_auto) + if (lang->la_language == language_unknown + || lang->la_language == language_auto) continue; /* FIXME: i18n: for now assume that the human-readable name is just a capitalization of the internal name. */ doc.printf ("%-16s Use the %c%s language\n", - languages[i]->la_name, + lang->la_name, /* Capitalize first letter of language name. */ - toupper (languages[i]->la_name[0]), - languages[i]->la_name + 1); + toupper (lang->la_name[0]), + lang->la_name + 1); } add_setshow_enum_cmd ("language", class_support, - (const char **) language_names, + language_names, &language, doc.c_str (), _("Show the current source language."), @@ -620,13 +602,11 @@ add_language (const struct language_defn *lang) CORE_ADDR skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc) { - int i; - - for (i = 0; i < languages_size; i++) + for (const auto &lang : languages) { - if (languages[i]->skip_trampoline) + if (lang->skip_trampoline != NULL) { - CORE_ADDR real_pc = (languages[i]->skip_trampoline) (frame, pc); + CORE_ADDR real_pc = lang->skip_trampoline (frame, pc); if (real_pc) return real_pc; @@ -919,53 +899,6 @@ const struct language_defn auto_language_defn = LANG_MAGIC }; -const struct language_defn local_language_defn = -{ - "local", - "Local", - language_auto, - range_check_off, - case_sensitive_on, - array_row_major, - macro_expansion_no, - NULL, - &exp_descriptor_standard, - unk_lang_parser, - unk_lang_error, - null_post_parser, - unk_lang_printchar, /* Print character constant */ - unk_lang_printstr, - unk_lang_emit_char, - unk_lang_print_type, /* Print a type using appropriate syntax */ - default_print_typedef, /* Print a typedef using appropriate syntax */ - unk_lang_val_print, /* Print a value using appropriate syntax */ - unk_lang_value_print, /* Print a top-level value */ - default_read_var_value, /* la_read_var_value */ - unk_lang_trampoline, /* Language specific skip_trampoline */ - "this", /* name_of_this */ - basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */ - basic_lookup_transparent_type,/* lookup_transparent_type */ - unk_lang_demangle, /* Language specific symbol demangler */ - NULL, - unk_lang_class_name, /* Language specific - class_name_from_physname */ - unk_op_print_tab, /* expression operators for printing */ - 1, /* c-style arrays */ - 0, /* String lower bound */ - default_word_break_characters, - default_collect_symbol_completion_matches, - unknown_language_arch_info, /* la_language_arch_info. */ - 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_varobj_ops, - NULL, - NULL, - LANG_MAGIC -}; /* Per-architecture language information. */ @@ -982,16 +915,15 @@ static void * language_gdbarch_post_init (struct gdbarch *gdbarch) { struct language_gdbarch *l; - int i; l = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct language_gdbarch); - for (i = 0; i < languages_size; i++) - { - if (languages[i] != NULL - && languages[i]->la_language_arch_info != NULL) - languages[i]->la_language_arch_info - (gdbarch, l->arch_info + languages[i]->la_language); - } + for (const auto &lang : languages) + if (lang != NULL && lang->la_language_arch_info != NULL) + { + lang->la_language_arch_info (gdbarch, + l->arch_info + lang->la_language); + } + return l; } @@ -1205,9 +1137,7 @@ For Fortran the default is off; for other languages the default is on."), show_case_command, &setlist, &showlist); - add_language (&auto_language_defn); - add_language (&local_language_defn); - add_language (&unknown_language_defn); + add_set_language_command (); language = xstrdup ("auto"); type = xstrdup ("auto"); diff --git a/gdb/language.h b/gdb/language.h index 75b9438..f4852c1 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -568,10 +568,6 @@ extern const struct language_defn *language_def (enum language); extern const char *language_str (enum language); -/* Add a language to the set known by GDB (at initialization time). */ - -extern void add_language (const struct language_defn *); - /* Check for a language-specific trampoline. */ extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc); @@ -618,4 +614,23 @@ void default_get_string (struct value *value, gdb_byte **buffer, int *length, void c_get_string (struct value *value, gdb_byte **buffer, int *length, struct type **char_type, const char **charset); +/* The languages supported by GDB. */ + +extern const struct language_defn auto_language_defn; +extern const struct language_defn unknown_language_defn; +extern const struct language_defn minimal_language_defn; + +extern const struct language_defn ada_language_defn; +extern const struct language_defn asm_language_defn; +extern const struct language_defn c_language_defn; +extern const struct language_defn cplus_language_defn; +extern const struct language_defn d_language_defn; +extern const struct language_defn f_language_defn; +extern const struct language_defn go_language_defn; +extern const struct language_defn m2_language_defn; +extern const struct language_defn objc_language_defn; +extern const struct language_defn opencl_language_defn; +extern const struct language_defn pascal_language_defn; +extern const struct language_defn rust_language_defn; + #endif /* defined (LANGUAGE_H) */ diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 0035a52..b9ab2b3 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -354,7 +354,7 @@ const struct exp_descriptor exp_descriptor_modula2 = evaluate_subexp_modula2 }; -const struct language_defn m2_language_defn = +extern const struct language_defn m2_language_defn = { "modula-2", "Modula-2", @@ -439,6 +439,4 @@ void _initialize_m2_language (void) { m2_type_data = gdbarch_data_register_post_init (build_m2_types); - - add_language (&m2_language_defn); } diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index af27268..6ffe85e 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -364,7 +364,7 @@ static const char *objc_extensions[] = ".m", NULL }; -const struct language_defn objc_language_defn = { +extern const struct language_defn objc_language_defn = { "objective-c", /* Language name */ "Objective-C", language_objc, @@ -1377,7 +1377,6 @@ extern initialize_file_ftype _initialize_objc_language; void _initialize_objc_language (void) { - add_language (&objc_language_defn); add_info ("selectors", selectors_info, /* INFO SELECTORS command. */ _("All Objective-C selectors, or those matching REGEXP.")); add_info ("classes", classes_info, /* INFO CLASSES command. */ diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 116d107..9b0f015 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1043,7 +1043,7 @@ const struct exp_descriptor exp_descriptor_opencl = evaluate_subexp_opencl }; -const struct language_defn opencl_language_defn = +extern const struct language_defn opencl_language_defn = { "opencl", /* Language name */ "OpenCL C", @@ -1185,5 +1185,4 @@ void _initialize_opencl_language (void) { opencl_type_data = gdbarch_data_register_post_init (build_opencl_types); - add_language (&opencl_language_defn); } diff --git a/gdb/p-lang.c b/gdb/p-lang.c index 77913fc..439a377 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -32,9 +32,6 @@ #include <ctype.h> #include "c-lang.h" -extern void _initialize_pascal_language (void); - - /* All GPC versions until now (2007-09-27) also define a symbol called '_p_initialize'. Check for the presence of this symbol first. */ static const char GPC_P_INITIALIZE[] = "_p_initialize"; @@ -418,7 +415,7 @@ static const char *p_extensions[] = ".pas", ".p", ".pp", NULL }; -const struct language_defn pascal_language_defn = +extern const struct language_defn pascal_language_defn = { "pascal", /* Language name */ "Pascal", @@ -464,9 +461,3 @@ const struct language_defn pascal_language_defn = NULL, LANG_MAGIC }; - -void -_initialize_pascal_language (void) -{ - add_language (&pascal_language_defn); -} diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index ef41f56..817976a 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -35,8 +35,6 @@ #include <string> #include <vector> -extern initialize_file_ftype _initialize_rust_language; - /* Returns the last segment of a Rust path like foo::bar::baz. Will not handle cases where the last segment contains generics. This will return NULL if the last segment cannot be found. */ @@ -2150,7 +2148,7 @@ static const char *rust_extensions[] = ".rs", NULL }; -static const struct language_defn rust_language_defn = +extern const struct language_defn rust_language_defn = { "rust", "Rust", @@ -2197,9 +2195,3 @@ static const struct language_defn rust_language_defn = NULL, LANG_MAGIC }; - -void -_initialize_rust_language (void) -{ - add_language (&rust_language_defn); -} diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ac68fba..eef141d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2017-07-20 Pedro Alves <palves@redhat.com> + * gdb.base/default.exp (set language): Adjust expected output. + +2017-07-20 Pedro Alves <palves@redhat.com> + * gdb.base/dmsym.c (pck__foo__bar__minsym): Rename to ... (test_minsym): ... this, and make static. (get_pck__foo__bar__minsym): Rename to ... diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp index 8c0b29c..c25069a 100644 --- a/gdb/testsuite/gdb.base/default.exp +++ b/gdb/testsuite/gdb.base/default.exp @@ -511,7 +511,7 @@ gdb_test "set history size" "Argument required .integer to set it to.*" "set his #test set history gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history" #test set language -gdb_test "set language" "Requires an argument. Valid arguments are ada, c, c.., asm, minimal, d, fortran, go, auto, local, unknown, modula-2, objective-c, opencl, pascal, rust." "set language" +gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, asm, c, c.., d, fortran, go, minimal, modula-2, objective-c, opencl, pascal, rust." "set language" #test set listsize gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize" #test set print "p" abbreviation diff --git a/gdb/utils.h b/gdb/utils.h index 6df752f..48330a1 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -59,6 +59,14 @@ extern int subset_compare (const char *, const char *); int compare_positive_ints (const void *ap, const void *bp); int compare_strings (const void *ap, const void *bp); +/* Compare C strings for std::sort. */ + +static inline bool +compare_cstrings (const char *str1, const char *str2) +{ + return strcmp (str1, str2) < 0; +} + /* A wrapper for bfd_errmsg to produce a more helpful error message in the case of bfd_error_file_ambiguously recognized. MATCHING, if non-NULL, is the corresponding argument to |