diff options
author | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2019-01-10 22:34:23 +0100 |
---|---|---|
committer | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2019-02-12 20:02:32 +0100 |
commit | 1ed9f74e85b7ace7debad5ade4775684a1fa99f9 (patch) | |
tree | 2bfb77198769d27eb1b557f66199d7ca5f98d7b6 /gdb | |
parent | 2636d81d80ad34653d05d0d94207d62720bfd6aa (diff) | |
download | gdb-1ed9f74e85b7ace7debad5ade4775684a1fa99f9.zip gdb-1ed9f74e85b7ace7debad5ade4775684a1fa99f9.tar.gz gdb-1ed9f74e85b7ace7debad5ade4775684a1fa99f9.tar.bz2 |
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 <philippe.waroquiers@skynet.be>
* 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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/symtab.c | 55 | ||||
-rw-r--r-- | gdb/symtab.h | 8 |
3 files changed, 59 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e8545ae..194ae46 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,17 @@ 2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be> + * 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 <philippe.waroquiers@skynet.be> + * breakpoint.c (describe_other_breakpoints): Use address style to print addresses. (say_where): Likewise. diff --git a/gdb/symtab.c b/gdb/symtab.c index a2bd4dd..ad2a159 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 72c9164..d354c95 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 |