mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
b98664d386
The complaint system seems to allow for multiple different complaint topics. However, in practice only symfile_complaints has ever been defined. Seeing that complaints.c dates to 1992, and that no new complaints have been added in the intervening years, I think it is reasonable to admit that complaints are specifically related to debuginfo reading. This patch removes symfile_complaints and updates all the callers. Some of these spots should perhaps be calls to warning instead, but I did not make that change. gdb/ChangeLog 2018-05-23 Tom Tromey <tom@tromey.com> * complaints.c (symfile_complaints): Remove. (complaint_internal): Remove "complaints" parameter. (clear_complaints, vcomplaint): Remove "c" parameter. (get_complaints): Remove. * dwarf2read.c (dwarf2_statement_list_fits_in_line_number_section_complaint) (dwarf2_debug_line_missing_file_complaint) (dwarf2_debug_line_missing_end_sequence_complaint) (dwarf2_complex_location_expr_complaint) (dwarf2_const_value_length_mismatch_complaint) (dwarf2_section_buffer_overflow_complaint) (dwarf2_macro_malformed_definition_complaint) (dwarf2_invalid_attrib_class_complaint) (create_addrmap_from_index, dw2_symtab_iter_next) (dw2_expand_marked_cus) (dw2_debug_names_iterator::find_vec_in_debug_names) (dw2_debug_names_iterator::next, dw2_debug_names_iterator::next) (create_debug_type_hash_table, init_cutu_and_read_dies) (partial_die_parent_scope, add_partial_enumeration) (skip_one_die, fixup_go_packaging, quirk_rust_enum, process_die) (dwarf2_compute_name, dwarf2_physname, read_namespace_alias) (read_import_statement, read_file_scope, create_dwo_cu_reader) (create_cus_hash_table, create_dwp_hash_table) (inherit_abstract_dies, read_func_scope, read_call_site_scope) (dwarf2_rnglists_process, dwarf2_ranges_process) (dwarf2_add_type_defn, dwarf2_attach_fields_to_type) (dwarf2_add_member_fn, get_alignment, maybe_set_alignment) (handle_struct_member_die, process_structure_scope) (read_array_type, read_common_block, read_module_type) (read_tag_pointer_type, read_typedef, read_base_type) (read_subrange_type, load_partial_dies, partial_die_info::read) (partial_die_info::read, partial_die_info::read) (partial_die_info::read, read_checked_initial_length_and_offset) (dwarf2_string_attr, read_formatted_entries) (dwarf_decode_line_header) (lnp_state_machine::check_line_address, dwarf_decode_lines_1) (new_symbol, dwarf2_const_value_attr, lookup_die_type) (read_type_die_1, determine_prefix, dwarf2_get_ref_die_offset) (dwarf2_get_attr_constant_value, dwarf2_fetch_constant_bytes) (get_signatured_type, get_DW_AT_signature_type) (decode_locdesc, file_file_name, consume_improper_spaces) (skip_form_bytes, skip_unknown_opcode, dwarf_parse_macro_header) (dwarf_decode_macro_bytes, dwarf_decode_macros) (dwarf2_symbol_mark_computed, set_die_type) (read_attribute_value): Update. * stap-probe.c (handle_stap_probe, get_stap_base_address): Update. * dbxread.c (unknown_symtype_complaint) (lbrac_mismatch_complaint, repeated_header_complaint) (set_namestring, function_outside_compilation_unit_complaint) (read_dbx_symtab, process_one_symbol): Update. * gdbtypes.c (stub_noname_complaint): Update. * windows-nat.c (handle_unload_dll): Update. * coffread.c (coff_symtab_read, enter_linenos, decode_type) (decode_base_type): Update. * xcoffread.c (bf_notfound_complaint, ef_complaint) (eb_complaint, record_include_begin, record_include_end) (enter_line_range, xcoff_next_symbol_text, read_xcoff_symtab) (process_xcoff_symbol, read_symbol) (function_outside_compilation_unit_complaint) (scan_xcoff_symtab): Update. * machoread.c (macho_symtab_read, macho_add_oso_symfile): Update. * buildsym.c (finish_block_internal, make_blockvector) (end_symtab_get_static_block, augment_type_symtab): Update. * dtrace-probe.c (dtrace_process_dof) (dtrace_static_probe_ops::get_probes): Update. * complaints.h (struct complaint): Don't declare. (symfile_complaints): Remove. (complaint_internal): Remove "complaints" parameter. (complaint): Likewise. (clear_complaints): Likewise. * symfile.c (syms_from_objfile_1, finish_new_objfile) (reread_symbols): Update. * dwarf2-frame.c (dwarf2_restore_rule, execute_cfa_program) (dwarf2_frame_cache, decode_frame_entry): Update. * dwarf2loc.c (dwarf_reg_to_regnum): Update. * objc-lang.c (lookup_objc_class, lookup_child_selector) (info_selectors_command): Update. * macrotab.c (macro_include, check_for_redefinition) (macro_undef): Update. * objfiles.c (filter_overlapping_sections): Update. * stabsread.c (invalid_cpp_abbrev_complaint) (reg_value_complaint, stabs_general_complaint, dbx_lookup_type) (define_symbol, error_type, read_type, rs6000_builtin_type) (stabs_method_name_from_physname, read_member_functions) (read_cpp_abbrev, read_baseclasses, read_tilde_fields) (attach_fields_to_type, complain_about_struct_wipeout) (read_range_type, read_args, common_block_start) (common_block_end, cleanup_undefined_types_1, scan_file_globals): Update. * mdebugread.c (index_complaint, unknown_ext_complaint) (basic_type_complaint, bad_tag_guess_complaint) (bad_rfd_entry_complaint, unexpected_type_code_complaint) (reg_value_complaint, parse_symbol, parse_type, upgrade_type) (parse_procedure, parse_lines) (function_outside_compilation_unit_complaint) (parse_partial_symbols, psymtab_to_symtab_1, cross_ref) (bad_tag_guess_complaint, reg_value_complaint): Update. * cp-support.c (demangled_name_complaint): Update. * macroscope.c (sal_macro_scope): Update. * dwarf-index-write.c (class debug_names): Update. gdb/testsuite/ChangeLog 2018-05-23 Tom Tromey <tom@tromey.com> * gdb.gdb/complaints.exp (test_initial_complaints): Don't mention symfile_complaints. (test_short_complaints): Likewise. (test_empty_complaints): Likewise. (test_initial_complaints): Update.
162 lines
5.3 KiB
C
162 lines
5.3 KiB
C
/* Functions for deciding which macros are currently in scope.
|
|
Copyright (C) 2002-2018 Free Software Foundation, Inc.
|
|
Contributed by Red Hat, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#include "defs.h"
|
|
|
|
#include "macroscope.h"
|
|
#include "symtab.h"
|
|
#include "source.h"
|
|
#include "target.h"
|
|
#include "frame.h"
|
|
#include "inferior.h"
|
|
#include "complaints.h"
|
|
|
|
/* A table of user-defined macros. Unlike the macro tables used for
|
|
symtabs, this one uses xmalloc for all its allocation, not an
|
|
obstack, and it doesn't bcache anything; it just xmallocs things. So
|
|
it's perfectly possible to remove things from this, or redefine
|
|
things. */
|
|
struct macro_table *macro_user_macros;
|
|
|
|
|
|
gdb::unique_xmalloc_ptr<struct macro_scope>
|
|
sal_macro_scope (struct symtab_and_line sal)
|
|
{
|
|
struct macro_source_file *main_file, *inclusion;
|
|
struct compunit_symtab *cust;
|
|
|
|
if (sal.symtab == NULL)
|
|
return NULL;
|
|
cust = SYMTAB_COMPUNIT (sal.symtab);
|
|
if (COMPUNIT_MACRO_TABLE (cust) == NULL)
|
|
return NULL;
|
|
|
|
gdb::unique_xmalloc_ptr<struct macro_scope> ms (XNEW (struct macro_scope));
|
|
|
|
main_file = macro_main (COMPUNIT_MACRO_TABLE (cust));
|
|
inclusion = macro_lookup_inclusion (main_file, sal.symtab->filename);
|
|
|
|
if (inclusion)
|
|
{
|
|
ms->file = inclusion;
|
|
ms->line = sal.line;
|
|
}
|
|
else
|
|
{
|
|
/* There are, unfortunately, cases where a compilation unit can
|
|
have a symtab for a source file that doesn't appear in the
|
|
macro table. For example, at the moment, Dwarf doesn't have
|
|
any way in the .debug_macinfo section to describe the effect
|
|
of #line directives, so if you debug a YACC parser you'll get
|
|
a macro table which only mentions the .c files generated by
|
|
YACC, but symtabs that mention the .y files consumed by YACC.
|
|
|
|
In the long run, we should extend the Dwarf macro info
|
|
representation to handle #line directives, and get GCC to
|
|
emit it.
|
|
|
|
For the time being, though, we'll just treat these as
|
|
occurring at the end of the main source file. */
|
|
ms->file = main_file;
|
|
ms->line = -1;
|
|
|
|
complaint (_("symtab found for `%s', but that file\n"
|
|
"is not covered in the compilation unit's macro information"),
|
|
symtab_to_filename_for_display (sal.symtab));
|
|
}
|
|
|
|
return ms;
|
|
}
|
|
|
|
|
|
gdb::unique_xmalloc_ptr<struct macro_scope>
|
|
user_macro_scope (void)
|
|
{
|
|
gdb::unique_xmalloc_ptr<struct macro_scope> ms (XNEW (struct macro_scope));
|
|
ms->file = macro_main (macro_user_macros);
|
|
ms->line = -1;
|
|
return ms;
|
|
}
|
|
|
|
gdb::unique_xmalloc_ptr<struct macro_scope>
|
|
default_macro_scope (void)
|
|
{
|
|
struct symtab_and_line sal;
|
|
gdb::unique_xmalloc_ptr<struct macro_scope> ms;
|
|
struct frame_info *frame;
|
|
CORE_ADDR pc;
|
|
|
|
/* If there's a selected frame, use its PC. */
|
|
frame = deprecated_safe_get_selected_frame ();
|
|
if (frame && get_frame_pc_if_available (frame, &pc))
|
|
sal = find_pc_line (pc, 0);
|
|
|
|
/* Fall back to the current listing position. */
|
|
else
|
|
{
|
|
/* Don't call select_source_symtab here. That can raise an
|
|
error if symbols aren't loaded, but GDB calls the expression
|
|
evaluator in all sorts of contexts.
|
|
|
|
For example, commands like `set width' call the expression
|
|
evaluator to evaluate their numeric arguments. If the
|
|
current language is C, then that may call this function to
|
|
choose a scope for macro expansion. If you don't have any
|
|
symbol files loaded, then get_current_or_default would raise an
|
|
error. But `set width' shouldn't raise an error just because
|
|
it can't decide which scope to macro-expand its argument in. */
|
|
struct symtab_and_line cursal =
|
|
get_current_source_symtab_and_line ();
|
|
|
|
sal.symtab = cursal.symtab;
|
|
sal.line = cursal.line;
|
|
}
|
|
|
|
ms = sal_macro_scope (sal);
|
|
if (! ms)
|
|
ms = user_macro_scope ();
|
|
|
|
return ms;
|
|
}
|
|
|
|
|
|
/* Look up the definition of the macro named NAME in scope at the source
|
|
location given by BATON, which must be a pointer to a `struct
|
|
macro_scope' structure. */
|
|
struct macro_definition *
|
|
standard_macro_lookup (const char *name, void *baton)
|
|
{
|
|
struct macro_scope *ms = (struct macro_scope *) baton;
|
|
struct macro_definition *result;
|
|
|
|
/* Give user-defined macros priority over all others. */
|
|
result = macro_lookup_definition (macro_main (macro_user_macros), -1, name);
|
|
if (! result)
|
|
result = macro_lookup_definition (ms->file, ms->line, name);
|
|
return result;
|
|
}
|
|
|
|
void
|
|
_initialize_macroscope (void)
|
|
{
|
|
macro_user_macros = new_macro_table (NULL, NULL, NULL);
|
|
macro_set_main (macro_user_macros, "<user-defined>");
|
|
macro_allow_redefinitions (macro_user_macros);
|
|
}
|