]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix bug in cooked index scanner
authorTom Tromey <tom@tromey.com>
Thu, 30 Mar 2023 16:21:59 +0000 (10:21 -0600)
committerTom Tromey <tom@tromey.com>
Sun, 28 Jan 2024 17:58:15 +0000 (10:58 -0700)
Testing this entire series pointed out that the cooked index scanner
disagrees with new_symbol about certain symbols.  In particular,
new_symbol has this comment:

    Ada and Fortran subprograms, whether marked external or
    not, are always stored as a global symbol, because we want

This patch updates the scanner to match.

I don't know why the current code does not cause failures.

It's maybe worth noting that incremental CU expansion -- creating
symtabs directly from the index -- would eliminate this sort of bug.

gdb/dwarf2/read.c

index 925a5ea4a5bca0b24b305ca170908270c80c866e..55a17358e660bae673732beac8323700a63afe8c 100644 (file)
@@ -16326,6 +16326,12 @@ cooked_indexer::scan_attributes (dwarf2_per_cu_data *scanning_per_cu,
              || abbrev->tag == DW_TAG_enumeration_type
              || abbrev->tag == DW_TAG_enumerator))
        *flags &= ~IS_STATIC;
+
+      /* Keep in sync with new_symbol.  */
+      if (abbrev->tag == DW_TAG_subprogram
+         && (m_language == language_ada
+             || m_language == language_fortran))
+       *flags &= ~IS_STATIC;
     }
 
   return info_ptr;