Use the new add_psymbol_to_list overload

This changes the DWARF reader to use the new add_psymbol_to_list
overload.  There should be no visible changes due to this patch.

gdb/ChangeLog
2020-04-24  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (add_partial_symbol): Use new add_psymbol_to_list
	overload.
This commit is contained in:
Tom Tromey 2020-04-24 15:35:01 -06:00 committed by Tom Tromey
parent 2467f4f6a5
commit 76e288d1d2
2 changed files with 68 additions and 64 deletions

View File

@ -1,3 +1,8 @@
2020-04-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (add_partial_symbol): Use new add_psymbol_to_list
overload.
2020-04-24 Tom Tromey <tom@tromey.com> 2020-04-24 Tom Tromey <tom@tromey.com>
* psymtab.c (add_psymbol_to_bcache): Simplify calling convention. * psymtab.c (add_psymbol_to_bcache): Simplify calling convention.

View File

@ -8219,6 +8219,15 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
if (actual_name == NULL) if (actual_name == NULL)
actual_name = pdi->name; actual_name = pdi->name;
partial_symbol psymbol;
memset (&psymbol, 0, sizeof (psymbol));
psymbol.ginfo.set_language (cu->language, &objfile->objfile_obstack);
psymbol.ginfo.section = -1;
/* The code below indicates that the psymbol should be installed by
setting this. */
gdb::optional<psymbol_placement> where;
switch (pdi->tag) switch (pdi->tag)
{ {
case DW_TAG_inlined_subroutine: case DW_TAG_inlined_subroutine:
@ -8235,34 +8244,25 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
But in Ada and Fortran, we want to be able to access nested But in Ada and Fortran, we want to be able to access nested
procedures globally. So all Ada and Fortran subprograms are procedures globally. So all Ada and Fortran subprograms are
stored in the global scope. */ stored in the global scope. */
add_psymbol_to_list (actual_name, where = psymbol_placement::GLOBAL;
built_actual_name != NULL,
VAR_DOMAIN, LOC_BLOCK,
SECT_OFF_TEXT (objfile),
psymbol_placement::GLOBAL,
addr,
cu->language, objfile);
} }
else else
{ where = psymbol_placement::STATIC;
add_psymbol_to_list (actual_name,
built_actual_name != NULL, psymbol.domain = VAR_DOMAIN;
VAR_DOMAIN, LOC_BLOCK, psymbol.aclass = LOC_BLOCK;
SECT_OFF_TEXT (objfile), psymbol.ginfo.section = SECT_OFF_TEXT (objfile);
psymbol_placement::STATIC, psymbol.ginfo.value.address = addr;
addr, cu->language, objfile);
}
if (pdi->main_subprogram && actual_name != NULL) if (pdi->main_subprogram && actual_name != NULL)
set_objfile_main_name (objfile, actual_name, cu->language); set_objfile_main_name (objfile, actual_name, cu->language);
break; break;
case DW_TAG_constant: case DW_TAG_constant:
add_psymbol_to_list (actual_name, psymbol.domain = VAR_DOMAIN;
built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC, psymbol.aclass = LOC_STATIC;
-1, (pdi->is_external where = (pdi->is_external
? psymbol_placement::GLOBAL ? psymbol_placement::GLOBAL
: psymbol_placement::STATIC), : psymbol_placement::STATIC);
0, cu->language, objfile);
break; break;
case DW_TAG_variable: case DW_TAG_variable:
if (pdi->d.locdesc) if (pdi->d.locdesc)
@ -8293,12 +8293,13 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
table building. */ table building. */
if (pdi->d.locdesc || pdi->has_type) if (pdi->d.locdesc || pdi->has_type)
add_psymbol_to_list (actual_name, {
built_actual_name != NULL, psymbol.domain = VAR_DOMAIN;
VAR_DOMAIN, LOC_STATIC, psymbol.aclass = LOC_STATIC;
SECT_OFF_TEXT (objfile), psymbol.ginfo.section = SECT_OFF_TEXT (objfile);
psymbol_placement::GLOBAL, psymbol.ginfo.value.address = addr;
addr, cu->language, objfile); where = psymbol_placement::GLOBAL;
}
} }
else else
{ {
@ -8309,42 +8310,37 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
if (!has_loc && !pdi->has_const_value) if (!has_loc && !pdi->has_const_value)
return; return;
add_psymbol_to_list (actual_name, psymbol.domain = VAR_DOMAIN;
built_actual_name != NULL, psymbol.aclass = LOC_STATIC;
VAR_DOMAIN, LOC_STATIC, psymbol.ginfo.section = SECT_OFF_TEXT (objfile);
SECT_OFF_TEXT (objfile), if (has_loc)
psymbol_placement::STATIC, psymbol.ginfo.value.address = addr;
has_loc ? addr : 0, where = psymbol_placement::STATIC;
cu->language, objfile);
} }
break; break;
case DW_TAG_typedef: case DW_TAG_typedef:
case DW_TAG_base_type: case DW_TAG_base_type:
case DW_TAG_subrange_type: case DW_TAG_subrange_type:
add_psymbol_to_list (actual_name, psymbol.domain = VAR_DOMAIN;
built_actual_name != NULL, psymbol.aclass = LOC_TYPEDEF;
VAR_DOMAIN, LOC_TYPEDEF, -1, where = psymbol_placement::STATIC;
psymbol_placement::STATIC,
0, cu->language, objfile);
break; break;
case DW_TAG_imported_declaration: case DW_TAG_imported_declaration:
case DW_TAG_namespace: case DW_TAG_namespace:
add_psymbol_to_list (actual_name, psymbol.domain = VAR_DOMAIN;
built_actual_name != NULL, psymbol.aclass = LOC_TYPEDEF;
VAR_DOMAIN, LOC_TYPEDEF, -1, where = psymbol_placement::GLOBAL;
psymbol_placement::GLOBAL,
0, cu->language, objfile);
break; break;
case DW_TAG_module: case DW_TAG_module:
/* With Fortran 77 there might be a "BLOCK DATA" module /* With Fortran 77 there might be a "BLOCK DATA" module
available without any name. If so, we skip the module as it available without any name. If so, we skip the module as it
doesn't bring any value. */ doesn't bring any value. */
if (actual_name != nullptr) if (actual_name != nullptr)
add_psymbol_to_list (actual_name, {
built_actual_name != NULL, psymbol.domain = MODULE_DOMAIN;
MODULE_DOMAIN, LOC_TYPEDEF, -1, psymbol.aclass = LOC_TYPEDEF;
psymbol_placement::GLOBAL, where = psymbol_placement::GLOBAL;
0, cu->language, objfile); }
break; break;
case DW_TAG_class_type: case DW_TAG_class_type:
case DW_TAG_interface_type: case DW_TAG_interface_type:
@ -8361,27 +8357,30 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
/* NOTE: carlton/2003-10-07: See comment in new_symbol about /* NOTE: carlton/2003-10-07: See comment in new_symbol about
static vs. global. */ static vs. global. */
add_psymbol_to_list (actual_name, psymbol.domain = STRUCT_DOMAIN;
built_actual_name != NULL, psymbol.aclass = LOC_TYPEDEF;
STRUCT_DOMAIN, LOC_TYPEDEF, -1, where = (cu->language == language_cplus
cu->language == language_cplus
? psymbol_placement::GLOBAL ? psymbol_placement::GLOBAL
: psymbol_placement::STATIC, : psymbol_placement::STATIC);
0, cu->language, objfile);
break; break;
case DW_TAG_enumerator: case DW_TAG_enumerator:
add_psymbol_to_list (actual_name, psymbol.domain = VAR_DOMAIN;
built_actual_name != NULL, psymbol.aclass = LOC_CONST;
VAR_DOMAIN, LOC_CONST, -1, where = (cu->language == language_cplus
cu->language == language_cplus
? psymbol_placement::GLOBAL ? psymbol_placement::GLOBAL
: psymbol_placement::STATIC, : psymbol_placement::STATIC);
0, cu->language, objfile);
break; break;
default: default:
break; break;
} }
if (where.has_value ())
{
psymbol.ginfo.compute_and_set_names (actual_name,
built_actual_name != nullptr,
objfile->per_bfd);
add_psymbol_to_list (psymbol, *where, objfile);
}
} }
/* Read a partial die corresponding to a namespace; also, add a symbol /* Read a partial die corresponding to a namespace; also, add a symbol