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:
+10
-12
@@ -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. */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user