From 1ed9f74e85b7ace7debad5ade4775684a1fa99f9 Mon Sep 17 00:00:00 2001 From: Philippe Waroquiers Date: Thu, 10 Jan 2019 22:34:23 +0100 Subject: [PATCH] Make symtab.c better styled. Note that print_msymbol_info does not (yet?) print data msymbol using variable_name_style, as otherwise 'info variables' would show the non debugging symbols in variable name style, but 'real' variables would be not styled. 2019-02-12 Philippe Waroquiers * symtab.h (struct minimal_symbol data_p): New const method. (struct minimal_symbol text_p): Likewise. * symtab.c (output_source_filename): Use file name style to print file name. (print_symbol_info): Likewise. (print_msymbol_info): Use address style to print addresses. Use function name style to print executable text symbols. (expand_symtab_containing_pc): Use data_p. (find_pc_sect_compunit_symtab): Likewise. --- gdb/ChangeLog | 12 +++++++++++ gdb/symtab.c | 55 ++++++++++++++++++++++++++++++++++++--------------- gdb/symtab.h | 8 ++++++++ 3 files changed, 59 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e8545aebfc0..194ae465769 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2019-02-12 Philippe Waroquiers + + * symtab.h (struct minimal_symbol data_p): New const method. + (struct minimal_symbol text_p): Likewise. + * symtab.c (output_source_filename): Use file name style + to print file name. + (print_symbol_info): Likewise. + (print_msymbol_info): Use address style to print addresses. + Use function name style to print executable text symbols. + (expand_symtab_containing_pc): Use data_p. + (find_pc_sect_compunit_symtab): Likewise. + 2019-02-12 Philippe Waroquiers * breakpoint.c (describe_other_breakpoints): Use address style diff --git a/gdb/symtab.c b/gdb/symtab.c index a2bd4dd54de..ad2a1599a3d 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -41,6 +41,7 @@ #include "p-lang.h" #include "addrmap.h" #include "cli/cli-utils.h" +#include "cli/cli-style.h" #include "fnmatch.h" #include "hashtab.h" #include "typeprint.h" @@ -311,6 +312,31 @@ compunit_language (const struct compunit_symtab *cust) return SYMTAB_LANGUAGE (symtab); } +/* See symtab.h. */ + +bool +minimal_symbol::data_p () const +{ + return type == mst_data + || type == mst_bss + || type == mst_abs + || type == mst_file_data + || type == mst_file_bss; +} + +/* See symtab.h. */ + +bool +minimal_symbol::text_p () const +{ + return type == mst_text + || type == mst_text_gnu_ifunc + || type == mst_data_gnu_ifunc + || type == mst_slot_got_plt + || type == mst_solib_trampoline + || type == mst_file_text; +} + /* See whether FILENAME matches SEARCH_NAME using the rule that we advertise to the user. (The manual's description of linespecs describes what we advertise). Returns true if they match, false @@ -1039,12 +1065,7 @@ expand_symtab_containing_pc (CORE_ADDR pc, struct obj_section *section) necessary because we loop based on texthigh and textlow, which do not include the data ranges. */ msymbol = lookup_minimal_symbol_by_pc_section (pc, section); - if (msymbol.minsym - && (MSYMBOL_TYPE (msymbol.minsym) == mst_data - || MSYMBOL_TYPE (msymbol.minsym) == mst_bss - || MSYMBOL_TYPE (msymbol.minsym) == mst_abs - || MSYMBOL_TYPE (msymbol.minsym) == mst_file_data - || MSYMBOL_TYPE (msymbol.minsym) == mst_file_bss)) + if (msymbol.minsym && msymbol.minsym->data_p ()) return; for (objfile *objfile : current_program_space->objfiles ()) @@ -2879,12 +2900,7 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section) we call find_pc_sect_psymtab which has a similar restriction based on the partial_symtab's texthigh and textlow. */ msymbol = lookup_minimal_symbol_by_pc_section (pc, section); - if (msymbol.minsym - && (MSYMBOL_TYPE (msymbol.minsym) == mst_data - || MSYMBOL_TYPE (msymbol.minsym) == mst_bss - || MSYMBOL_TYPE (msymbol.minsym) == mst_abs - || MSYMBOL_TYPE (msymbol.minsym) == mst_file_data - || MSYMBOL_TYPE (msymbol.minsym) == mst_file_bss)) + if (msymbol.minsym && msymbol.minsym->data_p ()) return NULL; /* Search all symtabs for the one whose file contains our address, and which @@ -4168,7 +4184,7 @@ output_source_filename (const char *name, data->first = 0; wrap_here (""); - fputs_filtered (name, gdb_stdout); + fputs_styled (name, file_name_style.style (), gdb_stdout); } /* A callback for map_partial_symbol_filenames. */ @@ -4620,7 +4636,7 @@ print_symbol_info (enum search_domain kind, if (filename_cmp (last, s_filename) != 0) { fputs_filtered ("\nFile ", gdb_stdout); - fputs_filtered (s_filename, gdb_stdout); + fputs_styled (s_filename, file_name_style.style (), gdb_stdout); fputs_filtered (":\n", gdb_stdout); } @@ -4667,8 +4683,15 @@ print_msymbol_info (struct bound_minimal_symbol msymbol) else tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol), 16); - printf_filtered ("%s %s\n", - tmp, MSYMBOL_PRINT_NAME (msymbol.minsym)); + fputs_styled (tmp, address_style.style (), gdb_stdout); + fputs_filtered (" ", gdb_stdout); + if (msymbol.minsym->text_p ()) + fputs_styled (MSYMBOL_PRINT_NAME (msymbol.minsym), + function_name_style.style (), + gdb_stdout); + else + fputs_filtered (MSYMBOL_PRINT_NAME (msymbol.minsym), gdb_stdout); + fputs_filtered ("\n", gdb_stdout); } /* This is the guts of the commands "info functions", "info types", and diff --git a/gdb/symtab.h b/gdb/symtab.h index 72c91643e44..d354c95800d 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -686,6 +686,14 @@ struct minimal_symbol the `next' pointer for the demangled hash table. */ struct minimal_symbol *demangled_hash_next; + +/* True if this symbol is of some data type. */ + + bool data_p () const; + + /* True if MSYMBOL is of some text type. */ + + bool text_p () const; }; #define MSYMBOL_TARGET_FLAG_1(msymbol) (msymbol)->target_flag_1 -- 2.30.2