From: Tom Tromey Date: Wed, 10 Apr 2019 02:26:09 +0000 (-0600) Subject: Convert main_info to type-safe registry API X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a32ad8c55c5c6bcdbc6773b6b825c4505fd44c16;p=binutils-gdb.git Convert main_info to type-safe registry API This changes main_info to use the type-safe registry API. gdb/ChangeLog 2019-05-08 Tom Tromey * symtab.c (struct main_info): Add destructor and initializers. (main_progspace_key): Move. Change type. (get_main_info): Update. (main_info_cleanup): Remove. (_initialize_symtab): Update. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b5e4422da6d..2642249cc30 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2019-05-08 Tom Tromey + + * symtab.c (struct main_info): Add destructor and initializers. + (main_progspace_key): Move. Change type. + (get_main_info): Update. + (main_info_cleanup): Remove. + (_initialize_symtab): Update. + 2019-05-08 Tom Tromey * registry.h (DECLARE_REGISTRY): Define the _key class. diff --git a/gdb/symtab.c b/gdb/symtab.c index 0e1f7ead294..5d1c14b9874 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -95,23 +95,30 @@ static struct block_symbol lookup_symbol_in_objfile (struct objfile *objfile, int block_index, const char *name, const domain_enum domain); -/* Program space key for finding name and language of "main". */ - -static const struct program_space_data *main_progspace_key; - /* Type of the data stored on the program space. */ struct main_info { + main_info () = default; + + ~main_info () + { + xfree (name_of_main); + } + /* Name of "main". */ - char *name_of_main; + char *name_of_main = nullptr; /* Language of "main". */ - enum language language_of_main; + enum language language_of_main = language_unknown; }; +/* Program space key for finding name and language of "main". */ + +static const program_space_key main_progspace_key; + /* Program space key for finding its symbol cache. */ static const struct program_space_data *symbol_cache_key; @@ -5665,9 +5672,7 @@ make_source_files_completion_list (const char *text, const char *word) static struct main_info * get_main_info (void) { - struct main_info *info - = (struct main_info *) program_space_data (current_program_space, - main_progspace_key); + struct main_info *info = main_progspace_key.get (current_program_space); if (info == NULL) { @@ -5677,28 +5682,12 @@ get_main_info (void) gdb returned "main" as the name even if no function named "main" was defined the program; and this approach lets us keep compatibility. */ - info = XCNEW (struct main_info); - info->language_of_main = language_unknown; - set_program_space_data (current_program_space, main_progspace_key, - info); + info = main_progspace_key.emplace (current_program_space); } return info; } -/* A cleanup to destroy a struct main_info when a progspace is - destroyed. */ - -static void -main_info_cleanup (struct program_space *pspace, void *data) -{ - struct main_info *info = (struct main_info *) data; - - if (info != NULL) - xfree (info->name_of_main); - xfree (info); -} - static void set_main_name (const char *name, enum language lang) { @@ -6048,9 +6037,6 @@ _initialize_symtab (void) { initialize_ordinary_address_classes (); - main_progspace_key - = register_program_space_data_with_cleanup (NULL, main_info_cleanup); - symbol_cache_key = register_program_space_data_with_cleanup (NULL, symbol_cache_cleanup);