From patchwork Sun Feb 26 18:58:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 65655 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4A4143850841 for ; Sun, 26 Feb 2023 19:00:48 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from gproxy3-pub.mail.unifiedlayer.com (gproxy3-pub.mail.unifiedlayer.com [69.89.30.42]) by sourceware.org (Postfix) with ESMTPS id C9DB7385781A for ; Sun, 26 Feb 2023 18:58:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C9DB7385781A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com Received: from cmgw12.mail.unifiedlayer.com (unknown [10.0.90.127]) by progateway5.mail.pro1.eigbox.com (Postfix) with ESMTP id 1C6641003EA0A for ; Sun, 26 Feb 2023 18:58:21 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id WME0pazNDJJo8WME0p8y5q; Sun, 26 Feb 2023 18:58:21 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=VekygHl9 c=1 sm=1 tr=0 ts=63fbabcd a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=m04uMKEZRckA:10:nop_rcvd_month_year a=Qbun_eYptAEA:10:endurance_base64_authed_username_1 a=hJhsXwNmcqrSC2dvuwcA:9 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=3mK2nSxsaRJKQHQ6Q8jpOvpEI6f+C20iNAHLYmkUCPk=; b=kCDu3S3V6CN0M1BQLXX8uzohhb jLw3kkYo48elpVdnLnVbYy7jfzs6zt9gKHzxsch3wu0zNWtUEgN9gezWp+LUOnC0YXEmTFMxRRl+e UIOOCavn5AUJ2IdF3Sq6N6QG4; Received: from 75-166-130-93.hlrn.qwest.net ([75.166.130.93]:55046 helo=localhost.localdomain) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pWME0-004Mg4-OD; Sun, 26 Feb 2023 11:58:20 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Remove OBJF_REORDERED Date: Sun, 26 Feb 2023 11:58:08 -0700 Message-Id: <20230226185808.2677822-1-tom@tromey.com> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 75.166.130.93 X-Source-L: No X-Exim-ID: 1pWME0-004Mg4-OD X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 75-166-130-93.hlrn.qwest.net (localhost.localdomain) [75.166.130.93]:55046 X-Source-Auth: tom+tromey.com X-Email-Count: 1 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3026.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" OBJF_REORDERED is set for nearly every object format. And, despite the ominous warnings here and there, it does not seem very expensive. This patch removes the flag entirely. Reviewed-By: Andrew Burgess --- gdb/buildsym.c | 20 ++++++++------------ gdb/coffread.c | 5 ----- gdb/elfread.c | 4 ---- gdb/machoread.c | 4 +--- gdb/mdebugread.c | 29 ----------------------------- gdb/objfile-flags.h | 22 +++++++--------------- gdb/psymtab.c | 3 +-- gdb/symfile.c | 2 +- gdb/symtab.c | 17 +++++------------ gdb/xcoffread.c | 5 ----- 10 files changed, 23 insertions(+), 88 deletions(-) diff --git a/gdb/buildsym.c b/gdb/buildsym.c index dbc81727cb1..8b6cb616d71 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -789,10 +789,7 @@ buildsym_compunit::end_compunit_symtab_get_static_block (CORE_ADDR end_addr, } } - /* Reordered executables may have out of order pending blocks; if - OBJF_REORDERED is true, then sort the pending blocks. */ - - if ((m_objfile->flags & OBJF_REORDERED) && m_pending_blocks) + if (m_pending_blocks != nullptr) { struct pending_block *pb; @@ -903,15 +900,14 @@ buildsym_compunit::end_compunit_symtab_with_blockvector return (ln1.pc < ln2.pc); }; - /* Like the pending blocks, the line table may be scrambled in - reordered executables. Sort it if OBJF_REORDERED is true. It - is important to preserve the order of lines at the same - address, as this maintains the inline function caller/callee + /* Like the pending blocks, the line table may be scrambled + in reordered executables. Sort it. It is important to + preserve the order of lines at the same address, as this + maintains the inline function caller/callee relationships, this is why std::stable_sort is used. */ - if (m_objfile->flags & OBJF_REORDERED) - std::stable_sort (subfile->line_vector_entries.begin (), - subfile->line_vector_entries.end (), - lte_is_less_than); + std::stable_sort (subfile->line_vector_entries.begin (), + subfile->line_vector_entries.end (), + lte_is_less_than); } /* Allocate a symbol table if necessary. */ diff --git a/gdb/coffread.c b/gdb/coffread.c index 45542bc2432..8be9a50076d 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -485,11 +485,6 @@ coff_symfile_init (struct objfile *objfile) { /* Allocate struct to keep track of the symfile. */ coff_objfile_data_key.emplace (objfile); - - /* COFF objects may be reordered, so set OBJF_REORDERED. If we - find this causes a significant slowdown in gdb then we could - set it in the debug symbol readers only when necessary. */ - objfile->flags |= OBJF_REORDERED; } /* This function is called for every section; it finds the outer diff --git a/gdb/elfread.c b/gdb/elfread.c index ca684aab57e..e9b0844d9d9 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -1382,10 +1382,6 @@ elf_symfile_finish (struct objfile *objfile) static void elf_symfile_init (struct objfile *objfile) { - /* ELF objects may be reordered, so set OBJF_REORDERED. If we - find this causes a significant slowdown in gdb then we could - set it in the debug symbol readers only when necessary. */ - objfile->flags |= OBJF_REORDERED; } /* Implementation of `sym_get_probes', as documented in symfile.h. */ diff --git a/gdb/machoread.c b/gdb/machoread.c index 49cf4fd38fd..e8cae810788 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -81,7 +81,6 @@ macho_new_init (struct objfile *objfile) static void macho_symfile_init (struct objfile *objfile) { - objfile->flags |= OBJF_REORDERED; } /* Add symbol SYM to the minimal symbol table of OBJFILE. */ @@ -586,8 +585,7 @@ macho_add_oso_symfile (oso_el *oso, const gdb_bfd_ref_ptr &abfd, symbol_file_add_from_bfd (abfd, name, symfile_flags & ~(SYMFILE_MAINLINE | SYMFILE_VERBOSE), NULL, - main_objfile->flags & (OBJF_REORDERED | OBJF_SHARED - | OBJF_READNOW | OBJF_USERLOADED), + main_objfile->flags & (OBJF_SHARED | OBJF_READNOW | OBJF_USERLOADED), main_objfile); } diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 793795c903a..26735176e8d 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -3673,35 +3673,6 @@ parse_partial_symbols (minimal_symbol_reader &reader, textlow_not_set); includes_used = 0; dependencies_used = 0; - - /* The objfile has its functions reordered if this partial symbol - table overlaps any other partial symbol table. - We cannot assume a reordered objfile if a partial symbol table - is contained within another partial symbol table, as partial symbol - tables for include files with executable code are contained - within the partial symbol table for the including source file, - and we do not want to flag the objfile reordered for these cases. - - This strategy works well for Irix-5.2 shared libraries, but we - might have to use a more elaborate (and slower) algorithm for - other cases. */ - save_pst = fdr_to_pst[f_idx].pst; - if (save_pst != NULL - && save_pst->text_low_valid - && !(objfile->flags & OBJF_REORDERED)) - { - for (partial_symtab *iter : partial_symtabs->range ()) - { - if (save_pst != iter - && save_pst->raw_text_low () >= iter->raw_text_low () - && save_pst->raw_text_low () < iter->raw_text_high () - && save_pst->raw_text_high () > iter->raw_text_high ()) - { - objfile->flags |= OBJF_REORDERED; - break; - } - } - } } /* Now scan the FDRs for dependencies. */ diff --git a/gdb/objfile-flags.h b/gdb/objfile-flags.h index 7cc45684f66..9dee2ee51a0 100644 --- a/gdb/objfile-flags.h +++ b/gdb/objfile-flags.h @@ -27,22 +27,14 @@ enum objfile_flag : unsigned { - /* When an object file has its functions reordered (currently - Irix-5.2 shared libraries exhibit this behaviour), we will need - an expensive algorithm to locate a partial symtab or symtab via - an address. To avoid this penalty for normal object files, we - use this flag, whose setting is determined upon symbol table - read in. */ - OBJF_REORDERED = 1 << 0, /* Functions are reordered */ - /* Distinguish between an objfile for a shared library and a "vanilla" objfile. This may come from a target's implementation of the solib interface, from add-symbol-file, or any other mechanism that loads dynamic objects. */ - OBJF_SHARED = 1 << 1, /* From a shared library */ + OBJF_SHARED = 1 << 0, /* From a shared library */ /* User requested that this objfile be read in it's entirety. */ - OBJF_READNOW = 1 << 2, /* Immediate full read */ + OBJF_READNOW = 1 << 1, /* Immediate full read */ /* This objfile was created because the user explicitly caused it (e.g., used the add-symbol-file command). This bit offers a @@ -50,24 +42,24 @@ enum objfile_flag : unsigned longer valid (i.e., are associated with an old inferior), but to preserve ones that the user explicitly loaded via the add-symbol-file command. */ - OBJF_USERLOADED = 1 << 3, /* User loaded */ + OBJF_USERLOADED = 1 << 2, /* User loaded */ /* Set if we have tried to read partial symtabs for this objfile. This is used to allow lazy reading of partial symtabs. */ - OBJF_PSYMTABS_READ = 1 << 4, + OBJF_PSYMTABS_READ = 1 << 3, /* Set if this is the main symbol file (as opposed to symbol file for dynamically loaded code). */ - OBJF_MAINLINE = 1 << 5, + OBJF_MAINLINE = 1 << 4, /* ORIGINAL_NAME and OBFD->FILENAME correspond to text description unrelated to filesystem names. It can be for example "". */ - OBJF_NOT_FILENAME = 1 << 6, + OBJF_NOT_FILENAME = 1 << 5, /* User requested that we do not read this objfile's symbolic information. */ - OBJF_READNEVER = 1 << 7, + OBJF_READNEVER = 1 << 6, }; DEF_ENUM_FLAGS_TYPE (enum objfile_flag, objfile_flags); diff --git a/gdb/psymtab.c b/gdb/psymtab.c index c9fd6f5f20e..e88f30a946f 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -102,8 +102,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile, many partial symbol tables containing the PC, but we want the partial symbol table that contains the function containing the PC. */ - if (!(objfile->flags & OBJF_REORDERED) - && section == NULL) /* Can't validate section this way. */ + if (section == nullptr) /* Can't validate section this way. */ return pst; if (msymbol.minsym == NULL) diff --git a/gdb/symfile.c b/gdb/symfile.c index 373f5592107..bb9981a4634 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1149,7 +1149,7 @@ symbol_file_add_separate (const gdb_bfd_ref_ptr &bfd, const char *name, symbol_file_add_with_addrs (bfd, name, symfile_flags, &sap, - objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW + objfile->flags & (OBJF_SHARED | OBJF_READNOW | OBJF_USERLOADED | OBJF_MAINLINE), objfile); } diff --git a/gdb/symtab.c b/gdb/symtab.c index f26dd2cb187..507d7986727 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2842,18 +2842,11 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section) /* In order to better support objfiles that contain both stabs and coff debugging info, we continue on if a psymtab can't be found. */ - if ((obj_file->flags & OBJF_REORDERED) != 0) - { - struct compunit_symtab *result; - - result - = obj_file->find_pc_sect_compunit_symtab (msymbol, - pc, - section, - 0); - if (result != NULL) - return result; - } + struct compunit_symtab *result + = obj_file->find_pc_sect_compunit_symtab (msymbol, pc, + section, 0); + if (result != nullptr) + return result; if (section != 0) { diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index bd6f6521c4c..66a954bb8b1 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1789,11 +1789,6 @@ xcoff_symfile_init (struct objfile *objfile) { /* Allocate struct to keep track of the symfile. */ xcoff_objfile_data_key.emplace (objfile); - - /* XCOFF objects may be reordered, so set OBJF_REORDERED. If we - find this causes a significant slowdown in gdb then we could - set it in the debug symbol readers only when necessary. */ - objfile->flags |= OBJF_REORDERED; } /* Perform any local cleanups required when we are done with a particular