Remove OBJF_REORDERED

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 <aburgess@redhat.com>
This commit is contained in:
Tom Tromey
2023-02-26 10:29:22 -07:00
parent 5992fb8541
commit 100e393531
10 changed files with 25 additions and 88 deletions
+10 -12
View File
@@ -789,10 +789,9 @@ 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)
/* Executables may have out of order pending blocks; sort the
pending blocks. */
if (m_pending_blocks != nullptr)
{
struct pending_block *pb;
@@ -903,15 +902,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. */
-5
View File
@@ -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
-4
View File
@@ -1392,10 +1392,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. */
+1 -3
View File
@@ -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);
}
-29
View File
@@ -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. */
+7 -15
View File
@@ -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
"<image in memory>". */
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);
+1 -2
View File
@@ -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)
return pst;
if (msymbol.minsym == NULL)
+1 -1
View File
@@ -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);
}
+5 -12
View File
@@ -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)
{
-5
View File
@@ -1788,11 +1788,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