@@ -2737,10 +2737,19 @@ void SymbolFileDWARF::FindTypes(const TypeQuery &query, TypeResults &results) {
2737
2737
if (results.AlreadySearched (this ))
2738
2738
return ;
2739
2739
2740
+ auto type_basename = query.GetTypeBasename ();
2741
+
2742
+ Log *log = GetLog (DWARFLog::Lookups);
2743
+ if (log) {
2744
+ GetObjectFile ()->GetModule ()->LogMessage (
2745
+ log, " SymbolFileDWARF::FindTypes(type_basename=\" {0}\" )" ,
2746
+ type_basename);
2747
+ }
2748
+
2740
2749
std::lock_guard<std::recursive_mutex> guard (GetModuleMutex ());
2741
2750
2742
2751
bool have_index_match = false ;
2743
- m_index->GetTypes (query. GetTypeBasename () , [&](DWARFDIE die) {
2752
+ m_index->GetTypes (type_basename , [&](DWARFDIE die) {
2744
2753
// Check the language, but only if we have a language filter.
2745
2754
if (query.HasLanguage ()) {
2746
2755
if (!query.LanguageMatches (GetLanguageFamily (*die.GetCU ())))
@@ -2779,7 +2788,19 @@ void SymbolFileDWARF::FindTypes(const TypeQuery &query, TypeResults &results) {
2779
2788
return !results.Done (query); // Keep iterating if we aren't done.
2780
2789
});
2781
2790
2782
- if (results.Done (query))
2791
+ auto CheckIsDoneAndLog = [&results, &query, log, type_basename, this ] {
2792
+ if (results.Done (query)) {
2793
+ if (log) {
2794
+ GetObjectFile ()->GetModule ()->LogMessage (
2795
+ log, " SymbolFileDWARF::FindTypes(type_basename=\" {0}\" ) => {1}" ,
2796
+ type_basename, results.GetTypeMap ().GetSize ());
2797
+ }
2798
+ return true ;
2799
+ }
2800
+ return false ;
2801
+ };
2802
+
2803
+ if (CheckIsDoneAndLog ())
2783
2804
return ;
2784
2805
2785
2806
// With -gsimple-template-names, a templated type's DW_AT_name will not
@@ -2834,7 +2855,7 @@ void SymbolFileDWARF::FindTypes(const TypeQuery &query, TypeResults &results) {
2834
2855
}
2835
2856
return !results.Done (query); // Keep iterating if we aren't done.
2836
2857
});
2837
- if (results. Done (query ))
2858
+ if (CheckIsDoneAndLog ( ))
2838
2859
return ;
2839
2860
}
2840
2861
}
@@ -2847,8 +2868,11 @@ void SymbolFileDWARF::FindTypes(const TypeQuery &query, TypeResults &results) {
2847
2868
for (const auto &pair : m_external_type_modules) {
2848
2869
if (ModuleSP external_module_sp = pair.second ) {
2849
2870
external_module_sp->FindTypes (query, results);
2850
- if (results.Done (query))
2871
+ if (results.Done (query)) {
2872
+ // don't use CheckIsDoneAndLog because the results are already logged
2873
+ // in the nested FindTypes call
2851
2874
return ;
2875
+ }
2852
2876
}
2853
2877
}
2854
2878
}
0 commit comments