mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 05:12:33 +08:00
dwarf2_physname patchset:
Based on work from Daniel Jacobowitz <dan@codesourcery.com> * c-typeprint.c (cp_type_print_method_args): For non-static methods, print out const or volatile qualifiers, too. (c_type_print_args): Add parameters show_artificial and language. Skip artificial parameters when requested. Use the appropriate language printer. (c_type_print_varspec): Tell c_type_print_args to skip artificial parameters and pass language_c. * dwarf2read.c (die_list): New file global. (struct partial_die_info): Update comments for name field. (pdi_needs_namespace): Renamed to ... (die_needs_namespace): ... this. Rewrite. (dwarf2_linkage_name): Remove. (add_partial_symbol): Do not predicate the call to partial_die_full_name based on pdi_needs_namespace. Remove call to cp_check_possible_namespace_symbols and associated outdated comments. (guess_structure_name): Do not inspect child subprogram DIEs. (dwarf2_fullname): Update comments. Use die_needs_namespace to assist in computing the name. (read_func_scope): Use dwarf2_name to get the DIE's name. Use dwarf2_physname to get the "linkage name" of the DIE. (dwarf2_add_member_field): Use dwarf2_physname instead of dwarf2_linkage_name. (read_structure_type): For structs and classes, set TYPE_NAME, too. (determine_class): Remove. (read_partial_die): Ignore DW_AT_MIPS_linkage_name for all languages except Ada. (new_symbol): Unconditionally call dwarf2_name. Compute the "linkage name" using dwarf2_physname. Use dwarf2_name instead of dwarf2_full_name for enumerator DIEs. When determining to scan for anonymous C++ namespaces, ignore the linkage name. (dwarf2_physname): New function. (dwarf2_full_name): Move content to new function and call that. (dwarf2_compute_name): "New" function. (_initialize_dwarf2_read): Initialize die_list. * gnu-v3-eabi.c (gnu_v3_find_method_in): Remove unused variable physname. (gnu_v3_print_method_ptr): Use the physname for virtual methods without a demangled name. Print out type information for non-virtual methods. * linespec.c (decode_line_1): Force ANY string using "::" (or "." for java) to use decode_compound, and clean up any stray quoting. If we found a file symtab, re-evaluate whether the remainder is_quoted. (decode_compound): Stop consuming at an open parenthesis. Keep template parameters. Keep any overload information. Keep keywords like "const". Remove paren_pointer. Move is_quoted check from set_flags to here. Remove #if 0 code from 2000. Ten years is long enough. (find_method): Before comparing symbol names, canonicalize the string from the user. If a specific overload is requested, find it. Otherwise throw an error. (find_method_overload_end): New function. (set_flags): Remove. (decode_compound): Assume that parentheses are matched. It's a lot easier. * symtab.c (symbol_find_demangled_name): Add DMGL_VERBOSE flag to cplus_demangle. * linespec.c (decode_line_1): Keep important keywords like "const" and "volatile". * symtab.h (SYMBOL_CPLUS_DEMANGLED_NAME): Remove. * typeprint.h (c_type_print_args): Add declaration. * ui-file.c (do_ui_file_obsavestring): New function. (ui_file_obsavestring): New function. * ui-file.h (ui_file_obsavestring): Add declaration. * valops.c (find_overload_match): Resolve the object to a non-pointer type. If the object is a data member, search the object for the member and return with staticp set. Use SYMBOL_NATURAL_NAME instead of SYMBOL_CPLUS_DEMANGLED_NAME. Do not attempt to extract a function name from non-function types. If the extracted function name and the original name are the same, we don't have a C++ method. From Jan Kratochvil <jan.kratochvil@redhat.com>: * dwarf2read.c (new_symbol <DW_TAG_enumerator>): Call dwarf2_full_name. * ada-lang.c (ada_lookup_symbol): Remove linkage_name parameters and arguments from symbol lookups. * ax-gdb.c (gen_expr): Likewise. * cp-namespace.c (cp_lookup_symbol_nonlocal, lookup_namespace_scope, cp_lookup_symbol_namespace, lookup_symbol_file, lookup_nested_type, lookup_possible_namespace_symbol): Likewise. * cp-support.c (read_in_psymtabs): Likewise. * cp-support.h (cp_lookup_symbol_nonlocal): Likewise. * language.h (la_lookup_symbol_nonlocal): Likewise. * scm-valprint.c (scm_inferior_print): Likewise. * solib-darwin.c (darwin_relocate_section_addresses): Likewise. * solib-svr.c (elf_lookup_lib): Likewise. * solib.c (show_auto_solib_add): Likewise. * solist.h (lookup_lib_global, solib_global_lookup): Likewise. * symmisc.c (maintenance_check_symtabs): Likewise. * symtab.c (lookup_symbol_in_language, lookup_symbol_aux, lookup_symbol_aux_local, lookup_symbol_aux_block, lookup_symbol_from_objfile, lookup_symbol_aux_symtabs, lookup_symbol_aux_psymtabs,basic_lookup_symbol_nonlocal, lookup_symbol_static, lookup_symbol_global, symbol_matches_domain, basic_lookup_transparent_type, find_main_psymtab, lookup_block_symbol): Likewise. * symtab.h (basic_lookp_symbol_nonlocal, lookup_symbol_static, lookup_symbol_global, lookup_symbol_aux_block, lookup_symbol_partial_symbol, lookup_block_symbol, lookup_global_symbol, value_maybe_namespace_elt): Likewise.
This commit is contained in:
@ -34,14 +34,12 @@
|
||||
#include "buildsym.h"
|
||||
|
||||
static struct symbol *lookup_namespace_scope (const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain,
|
||||
const char *scope,
|
||||
int scope_len);
|
||||
|
||||
static struct symbol *lookup_symbol_file (const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain,
|
||||
int anonymous_namespace);
|
||||
@ -231,26 +229,23 @@ cp_add_using (const char *dest,
|
||||
/* The C++-specific version of name lookup for static and global
|
||||
names. This makes sure that names get looked for in all namespaces
|
||||
that are in scope. NAME is the natural name of the symbol that
|
||||
we're looking for, LINKAGE_NAME (which is optional) is its linkage
|
||||
name, BLOCK is the block that we're searching within, DOMAIN says
|
||||
what kind of symbols we're looking for, and if SYMTAB is non-NULL,
|
||||
we should store the symtab where we found the symbol in it. */
|
||||
we're looking for, BLOCK is the block that we're searching within,
|
||||
DOMAIN says what kind of symbols we're looking for, and if SYMTAB is
|
||||
non-NULL, we should store the symtab where we found the symbol in it. */
|
||||
|
||||
struct symbol *
|
||||
cp_lookup_symbol_nonlocal (const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain)
|
||||
{
|
||||
struct symbol *sym;
|
||||
const char *scope = block_scope (block);
|
||||
|
||||
sym = lookup_namespace_scope (name, linkage_name, block, domain, scope, 0);
|
||||
sym = lookup_namespace_scope (name, block, domain, scope, 0);
|
||||
if (sym != NULL)
|
||||
return sym;
|
||||
|
||||
return cp_lookup_symbol_namespace (scope, name, linkage_name, block, domain,
|
||||
1);
|
||||
return cp_lookup_symbol_namespace (scope, name, block, domain, 1);
|
||||
}
|
||||
|
||||
/* Look up NAME in the C++ namespace NAMESPACE. Other arguments are as in
|
||||
@ -259,14 +254,12 @@ cp_lookup_symbol_nonlocal (const char *name,
|
||||
static struct symbol *
|
||||
cp_lookup_symbol_in_namespace (const char *namespace,
|
||||
const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain)
|
||||
{
|
||||
if (namespace[0] == '\0')
|
||||
{
|
||||
return lookup_symbol_file (name, linkage_name, block,
|
||||
domain, 0);
|
||||
return lookup_symbol_file (name, block, domain, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -275,8 +268,8 @@ cp_lookup_symbol_in_namespace (const char *namespace,
|
||||
strcpy (concatenated_name, namespace);
|
||||
strcat (concatenated_name, "::");
|
||||
strcat (concatenated_name, name);
|
||||
return lookup_symbol_file (concatenated_name, linkage_name,
|
||||
block, domain,cp_is_anonymous (namespace));
|
||||
return lookup_symbol_file (concatenated_name, block,
|
||||
domain,cp_is_anonymous (namespace));
|
||||
}
|
||||
}
|
||||
|
||||
@ -310,7 +303,6 @@ reset_directive_searched (void *data)
|
||||
static struct symbol *
|
||||
cp_lookup_symbol_imports (const char *scope,
|
||||
const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain,
|
||||
const int search_parents)
|
||||
@ -322,8 +314,7 @@ cp_lookup_symbol_imports (const char *scope,
|
||||
struct cleanup *searched_cleanup;
|
||||
|
||||
/* First, try to find the symbol in the given namespace. */
|
||||
sym = cp_lookup_symbol_in_namespace (scope, name, linkage_name, block,
|
||||
domain);
|
||||
sym = cp_lookup_symbol_in_namespace (scope, name, block, domain);
|
||||
if (sym != NULL)
|
||||
return sym;
|
||||
|
||||
@ -359,7 +350,6 @@ cp_lookup_symbol_imports (const char *scope,
|
||||
{
|
||||
sym = cp_lookup_symbol_in_namespace (scope,
|
||||
current->import_src,
|
||||
linkage_name,
|
||||
block,
|
||||
domain);
|
||||
}
|
||||
@ -369,7 +359,6 @@ cp_lookup_symbol_imports (const char *scope,
|
||||
NAMESPACE to direct the search towards the imported namespace. */
|
||||
sym = cp_lookup_symbol_imports (current->import_src,
|
||||
name,
|
||||
linkage_name,
|
||||
block,
|
||||
domain,
|
||||
0);
|
||||
@ -392,7 +381,6 @@ cp_lookup_symbol_imports (const char *scope,
|
||||
struct symbol*
|
||||
cp_lookup_symbol_namespace (const char *scope,
|
||||
const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain,
|
||||
const int search_parents)
|
||||
@ -402,7 +390,7 @@ cp_lookup_symbol_namespace (const char *scope,
|
||||
/* Search for name in namespaces imported to this and parent blocks. */
|
||||
while (block != NULL)
|
||||
{
|
||||
sym = cp_lookup_symbol_imports (scope, name, linkage_name, block, domain,
|
||||
sym = cp_lookup_symbol_imports (scope, name, block, domain,
|
||||
search_parents);
|
||||
|
||||
if (sym)
|
||||
@ -431,7 +419,6 @@ cp_lookup_symbol_namespace (const char *scope,
|
||||
|
||||
static struct symbol *
|
||||
lookup_namespace_scope (const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain,
|
||||
const char *scope,
|
||||
@ -453,8 +440,7 @@ lookup_namespace_scope (const char *name,
|
||||
new_scope_len += 2;
|
||||
}
|
||||
new_scope_len += cp_find_first_component (scope + new_scope_len);
|
||||
sym = lookup_namespace_scope (name, linkage_name, block,
|
||||
domain, scope, new_scope_len);
|
||||
sym = lookup_namespace_scope (name, block, domain, scope, new_scope_len);
|
||||
if (sym != NULL)
|
||||
return sym;
|
||||
}
|
||||
@ -465,8 +451,7 @@ lookup_namespace_scope (const char *name,
|
||||
namespace = alloca (scope_len + 1);
|
||||
strncpy (namespace, scope, scope_len);
|
||||
namespace[scope_len] = '\0';
|
||||
return cp_lookup_symbol_in_namespace (namespace, name, linkage_name,
|
||||
block, domain);
|
||||
return cp_lookup_symbol_in_namespace (namespace, name, block, domain);
|
||||
}
|
||||
|
||||
/* Look up NAME in BLOCK's static block and in global blocks. If
|
||||
@ -476,14 +461,13 @@ lookup_namespace_scope (const char *name,
|
||||
|
||||
static struct symbol *
|
||||
lookup_symbol_file (const char *name,
|
||||
const char *linkage_name,
|
||||
const struct block *block,
|
||||
const domain_enum domain,
|
||||
int anonymous_namespace)
|
||||
{
|
||||
struct symbol *sym = NULL;
|
||||
|
||||
sym = lookup_symbol_static (name, linkage_name, block, domain);
|
||||
sym = lookup_symbol_static (name, block, domain);
|
||||
if (sym != NULL)
|
||||
return sym;
|
||||
|
||||
@ -496,12 +480,11 @@ lookup_symbol_file (const char *name,
|
||||
const struct block *global_block = block_global_block (block);
|
||||
|
||||
if (global_block != NULL)
|
||||
sym = lookup_symbol_aux_block (name, linkage_name, global_block,
|
||||
domain);
|
||||
sym = lookup_symbol_aux_block (name, global_block, domain);
|
||||
}
|
||||
else
|
||||
{
|
||||
sym = lookup_symbol_global (name, linkage_name, block, domain);
|
||||
sym = lookup_symbol_global (name, block, domain);
|
||||
}
|
||||
|
||||
if (sym != NULL)
|
||||
@ -552,7 +535,6 @@ cp_lookup_nested_type (struct type *parent_type,
|
||||
const char *parent_name = TYPE_TAG_NAME (parent_type);
|
||||
struct symbol *sym = cp_lookup_symbol_in_namespace (parent_name,
|
||||
nested_name,
|
||||
NULL,
|
||||
block,
|
||||
VAR_DOMAIN);
|
||||
if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
|
||||
@ -798,7 +780,7 @@ check_one_possible_namespace_symbol (const char *name, int len,
|
||||
|
||||
memcpy (name_copy, name, len);
|
||||
name_copy[len] = '\0';
|
||||
sym = lookup_block_symbol (block, name_copy, NULL, VAR_DOMAIN);
|
||||
sym = lookup_block_symbol (block, name_copy, VAR_DOMAIN);
|
||||
|
||||
if (sym == NULL)
|
||||
{
|
||||
@ -839,7 +821,7 @@ lookup_possible_namespace_symbol (const char *name)
|
||||
struct symbol *sym;
|
||||
|
||||
sym = lookup_block_symbol (get_possible_namespace_block (objfile),
|
||||
name, NULL, VAR_DOMAIN);
|
||||
name, VAR_DOMAIN);
|
||||
|
||||
if (sym != NULL)
|
||||
return sym;
|
||||
|
Reference in New Issue
Block a user