From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3774 invoked by alias); 12 Jan 2019 22:28:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 3696 invoked by uid 89); 12 Jan 2019 22:28:53 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mailsec106.isp.belgacom.be Received: from mailsec106.isp.belgacom.be (HELO mailsec106.isp.belgacom.be) (195.238.20.102) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 12 Jan 2019 22:28:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=securemail; t=1547332131; x=1578868131; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jDzrC9Z337j51GC+ZxsXFx9ERY+q21ejazpOVESY2mU=; b=vja0rdml2OZqdx2xp0RN6Z2C2RRFEMgVUReVuWb/FJIzx+hrgPGOTeKo Z/3AXqfe2Z9cUNgjxMDuqASOFGkxdA==; Received: from 184.205-67-87.adsl-dyn.isp.belgacom.be (HELO md.home) ([87.67.205.184]) by relay.skynet.be with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 12 Jan 2019 23:28:42 +0100 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFAv2 3/3] Make symtab.c better styled. Date: Sat, 12 Jan 2019 22:28:00 -0000 Message-Id: <20190112222835.16932-4-philippe.waroquiers@skynet.be> In-Reply-To: <20190112222835.16932-1-philippe.waroquiers@skynet.be> References: <20190112222835.16932-1-philippe.waroquiers@skynet.be> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2019-01/txt/msg00299.txt.bz2 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-01-12 Philippe Waroquiers * 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. (msymbol_type_data_p): New function. (msymbol_type_text_p): New function. (expand_symtab_containing_pc): Use msymbol_type_data_p. (find_pc_sect_compunit_symtab): Likewise. --- gdb/symtab.c | 57 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/gdb/symtab.c b/gdb/symtab.c index 29b24328fb..cc24ba81f4 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,33 @@ compunit_language (const struct compunit_symtab *cust) return SYMTAB_LANGUAGE (symtab); } +/* True if MSYMBOL is of some data type. */ + +static bool +msymbol_type_data_p (struct bound_minimal_symbol msymbol) +{ + return 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); +} + +/* True if MSYMBOL is of some text type. */ + +static bool +msymbol_type_text_p (struct bound_minimal_symbol msymbol) +{ + return msymbol.minsym + && (MSYMBOL_TYPE (msymbol.minsym) == mst_text + || MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc + || MSYMBOL_TYPE (msymbol.minsym) == mst_data_gnu_ifunc + || MSYMBOL_TYPE (msymbol.minsym) == mst_slot_got_plt + || MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline + || MSYMBOL_TYPE (msymbol.minsym) == 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 +1067,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_type_data_p (msymbol)) return; for (objfile *objfile : all_objfiles (current_program_space)) @@ -2879,12 +2902,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_type_data_p (msymbol)) return NULL; /* Search all symtabs for the one whose file contains our address, and which @@ -4168,7 +4186,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 +4638,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 +4685,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_type_text_p (msymbol)) + 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 -- 2.20.1