[Lldb-commits] [lldb] Report only loaded debug info in statistics dump (PR #81706)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Feb 14 18:30:05 PST 2024
https://github.com/kusmour updated https://github.com/llvm/llvm-project/pull/81706
>From 0fec0afdbcfcb896a45c4ba837331aa2c0349f02 Mon Sep 17 00:00:00 2001
From: Wanyi Ye <wanyi at fb.com>
Date: Mon, 5 Feb 2024 11:33:03 -0800
Subject: [PATCH 1/4] Only report total currently loaded debug info
---
lldb/include/lldb/Symbol/SymbolFile.h | 14 +++++++++++---
lldb/include/lldb/Symbol/SymbolFileOnDemand.h | 2 +-
.../SymbolFile/Breakpad/SymbolFileBreakpad.cpp | 2 +-
.../SymbolFile/Breakpad/SymbolFileBreakpad.h | 2 +-
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp | 5 +++--
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h | 2 +-
.../Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp | 4 ++--
.../Plugins/SymbolFile/DWARF/SymbolFileDWARF.h | 14 +++++++++++++-
.../SymbolFile/DWARF/SymbolFileDWARFDwo.cpp | 2 +-
.../Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h | 2 +-
.../SymbolFile/NativePDB/SymbolFileNativePDB.cpp | 2 +-
.../SymbolFile/NativePDB/SymbolFileNativePDB.h | 2 +-
lldb/source/Symbol/SymbolFile.cpp | 2 +-
lldb/source/Symbol/SymbolFileOnDemand.cpp | 4 ++--
14 files changed, 40 insertions(+), 19 deletions(-)
diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h
index f356f7b789fa38..13a4d146d651ec 100644
--- a/lldb/include/lldb/Symbol/SymbolFile.h
+++ b/lldb/include/lldb/Symbol/SymbolFile.h
@@ -381,7 +381,8 @@ class SymbolFile : public PluginInterface {
/// Metrics gathering functions
- /// Return the size in bytes of all debug information in the symbol file.
+ /// Return the size in bytes of all loaded debug information or total possible
+ /// debug info in the symbol file.
///
/// If the debug information is contained in sections of an ObjectFile, then
/// this call should add the size of all sections that contain debug
@@ -391,7 +392,14 @@ class SymbolFile : public PluginInterface {
/// entire file should be returned. The default implementation of this
/// function will iterate over all sections in a module and add up their
/// debug info only section byte sizes.
- virtual uint64_t GetDebugInfoSize() = 0;
+ ///
+ /// \param load_if_needed
+ /// If true, force loading any symbol files if they are not yet loaded and
+ /// add to the total size
+ ///
+ /// \returns
+ /// Total currently loaded debug info size in bytes
+ virtual uint64_t GetDebugInfoSize(bool load_if_needed = false) = 0;
/// Return the time taken to parse the debug information.
///
@@ -534,7 +542,7 @@ class SymbolFileCommon : public SymbolFile {
void Dump(Stream &s) override;
- uint64_t GetDebugInfoSize() override;
+ uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
bool GetDebugInfoIndexWasLoadedFromCache() const override {
return m_index_was_loaded_from_cache;
diff --git a/lldb/include/lldb/Symbol/SymbolFileOnDemand.h b/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
index 4e3009941aa7d6..9b3512aa85cdd6 100644
--- a/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
+++ b/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
@@ -178,7 +178,7 @@ class SymbolFileOnDemand : public lldb_private::SymbolFile {
void PreloadSymbols() override;
- uint64_t GetDebugInfoSize() override;
+ uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
lldb_private::StatsDuration::Duration GetDebugInfoParseTime() override;
lldb_private::StatsDuration::Duration GetDebugInfoIndexTime() override;
diff --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
index b1f7397d6b0f00..ff0bba7bcab10c 100644
--- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
+++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
@@ -918,7 +918,7 @@ void SymbolFileBreakpad::ParseUnwindData() {
m_unwind_data->win.Sort();
}
-uint64_t SymbolFileBreakpad::GetDebugInfoSize() {
+uint64_t SymbolFileBreakpad::GetDebugInfoSize(bool load_if_needed) {
// Breakpad files are all debug info.
return m_objfile_sp->GetByteSize();
}
diff --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
index 41e4e3b258014c..609ed6ffc9ff96 100644
--- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
+++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
@@ -141,7 +141,7 @@ class SymbolFileBreakpad : public SymbolFileCommon {
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
- uint64_t GetDebugInfoSize() override;
+ uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
private:
// A class representing a position in the breakpad file. Useful for
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
index 23e0b8a7f2c06b..4e822742780f8d 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
@@ -896,8 +896,9 @@ void DWARFUnit::ComputeAbsolutePath() {
m_file_spec->MakeAbsolute(GetCompilationDirectory());
}
-SymbolFileDWARFDwo *DWARFUnit::GetDwoSymbolFile() {
- ExtractUnitDIEIfNeeded();
+SymbolFileDWARFDwo *DWARFUnit::GetDwoSymbolFile(bool load_if_needed) {
+ if (load_if_needed)
+ ExtractUnitDIEIfNeeded();
if (m_dwo)
return &llvm::cast<SymbolFileDWARFDwo>(m_dwo->GetSymbolFileDWARF());
return nullptr;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
index 9f6d127056fa56..5a8a23e37738c6 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
@@ -241,7 +241,7 @@ class DWARFUnit : public UserID {
FileSpec GetFile(size_t file_idx);
FileSpec::Style GetPathStyle();
- SymbolFileDWARFDwo *GetDwoSymbolFile();
+ SymbolFileDWARFDwo *GetDwoSymbolFile(bool load_if_needed = false);
die_iterator_range dies() {
ExtractDIEsIfNeeded();
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 781f5c5a436778..d8bbfa339ee4c0 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -2672,7 +2672,7 @@ static bool UpdateCompilerContextForSimpleTemplateNames(TypeQuery &match) {
return any_context_updated;
}
-uint64_t SymbolFileDWARF::GetDebugInfoSize() {
+uint64_t SymbolFileDWARF::GetDebugInfoSize(bool load_if_needed) {
DWARFDebugInfo &info = DebugInfo();
uint32_t num_comp_units = info.GetNumUnits();
@@ -2687,7 +2687,7 @@ uint64_t SymbolFileDWARF::GetDebugInfoSize() {
if (cu == nullptr)
continue;
- SymbolFileDWARFDwo *dwo = cu->GetDwoSymbolFile();
+ SymbolFileDWARFDwo *dwo = cu->GetDwoSymbolFile(load_if_needed);
if (dwo)
debug_info_size += dwo->GetDebugInfoSize();
}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index 01518b26ca669e..63114da66b4e37 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -186,7 +186,19 @@ class SymbolFileDWARF : public SymbolFileCommon {
GetMangledNamesForFunction(const std::string &scope_qualified_name,
std::vector<ConstString> &mangled_names) override;
- uint64_t GetDebugInfoSize() override;
+ /// Get total currently loaded debug info size or total possible debug info
+ /// size.
+ ///
+ /// For cases like .dwo files, the debug info = skeleton debug info +
+ /// all dwo debug info where .dwo files might not be loaded yet. Calling this
+ /// function by default will NOT force the loading of any .dwo files.
+ ///
+ /// \param load_if_needed
+ /// If true, force loading any .dwo files associated and add to the size
+ ///
+ /// \return
+ /// Returns total currently loaded debug info size
+ uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
void FindTypes(const lldb_private::TypeQuery &match,
lldb_private::TypeResults &results) override;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
index ea23b75c3d708d..950d43bdb51adb 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
@@ -85,7 +85,7 @@ lldb::offset_t SymbolFileDWARFDwo::GetVendorDWARFOpcodeSize(
return GetBaseSymbolFile().GetVendorDWARFOpcodeSize(data, data_offset, op);
}
-uint64_t SymbolFileDWARFDwo::GetDebugInfoSize() {
+uint64_t SymbolFileDWARFDwo::GetDebugInfoSize(bool load_if_needed) {
// Directly get debug info from current dwo object file's section list
// instead of asking SymbolFileCommon::GetDebugInfo() which parses from
// owning module which is wrong.
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
index d5f48f2a8ed4e2..daa591f460fa87 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
@@ -47,7 +47,7 @@ class SymbolFileDWARFDwo : public SymbolFileDWARF {
const lldb::offset_t data_offset,
const uint8_t op) const override;
- uint64_t GetDebugInfoSize() override;
+ uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
bool ParseVendorDWARFOpcode(uint8_t op, const DataExtractor &opcodes,
lldb::offset_t &offset,
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index 745685a1b31d05..a434195614fcc9 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -2156,7 +2156,7 @@ SymbolFileNativePDB::GetTypeSystemForLanguage(lldb::LanguageType language) {
return type_system_or_err;
}
-uint64_t SymbolFileNativePDB::GetDebugInfoSize() {
+uint64_t SymbolFileNativePDB::GetDebugInfoSize(bool load_if_needed) {
// PDB files are a separate file that contains all debug info.
return m_index->pdb().getFileSize();
}
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
index 82577771f355c8..588021f233904f 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
@@ -77,7 +77,7 @@ class SymbolFileNativePDB : public SymbolFileCommon {
void InitializeObject() override;
- uint64_t GetDebugInfoSize() override;
+ uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
// Compile Unit function calls
diff --git a/lldb/source/Symbol/SymbolFile.cpp b/lldb/source/Symbol/SymbolFile.cpp
index e318e2beb6547b..dba589c43a3cca 100644
--- a/lldb/source/Symbol/SymbolFile.cpp
+++ b/lldb/source/Symbol/SymbolFile.cpp
@@ -227,7 +227,7 @@ SymbolFileCommon::GetTypeSystemForLanguage(lldb::LanguageType language) {
return type_system_or_err;
}
-uint64_t SymbolFileCommon::GetDebugInfoSize() {
+uint64_t SymbolFileCommon::GetDebugInfoSize(bool load_if_needed) {
if (!m_objfile_sp)
return 0;
ModuleSP module_sp(m_objfile_sp->GetModule());
diff --git a/lldb/source/Symbol/SymbolFileOnDemand.cpp b/lldb/source/Symbol/SymbolFileOnDemand.cpp
index bdb1951d51259d..65e6f19fc33b18 100644
--- a/lldb/source/Symbol/SymbolFileOnDemand.cpp
+++ b/lldb/source/Symbol/SymbolFileOnDemand.cpp
@@ -535,11 +535,11 @@ void SymbolFileOnDemand::PreloadSymbols() {
return m_sym_file_impl->PreloadSymbols();
}
-uint64_t SymbolFileOnDemand::GetDebugInfoSize() {
+uint64_t SymbolFileOnDemand::GetDebugInfoSize(bool load_if_needed) {
// Always return the real debug info size.
LLDB_LOG(GetLog(), "[{0}] {1} is not skipped", GetSymbolFileName(),
__FUNCTION__);
- return m_sym_file_impl->GetDebugInfoSize();
+ return m_sym_file_impl->GetDebugInfoSize(load_if_needed);
}
StatsDuration::Duration SymbolFileOnDemand::GetDebugInfoParseTime() {
>From 2cfc96130ddb21e0b434b807d621c3f007f68ac3 Mon Sep 17 00:00:00 2001
From: Wanyi Ye <wanyi at fb.com>
Date: Tue, 13 Feb 2024 13:34:41 -0800
Subject: [PATCH 2/4] Add statistics option to force loading debug info
---
lldb/bindings/interface/SBStatisticsOptionsDocstrings.i | 6 ++++++
lldb/include/lldb/API/SBStatisticsOptions.h | 3 +++
lldb/include/lldb/Target/Statistics.h | 1 +
lldb/source/API/SBStatisticsOptions.cpp | 6 ++++++
lldb/source/Commands/CommandObjectStats.cpp | 3 +++
lldb/source/Commands/Options.td | 6 +++++-
lldb/source/Target/Statistics.cpp | 3 ++-
7 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i b/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i
index f72cf84319e19b..a15feb2b2b2f5d 100644
--- a/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i
+++ b/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i
@@ -6,3 +6,9 @@
) lldb::SBStatisticsOptions::SetSummaryOnly;
%feature("docstring", "Gets whether the statistics only dump a summary."
) lldb::SBStatisticsOptions::GetSummaryOnly;
+%feature("docstring", "
+ Sets whether the statistics will force loading all possible debug info."
+) lldb::SBStatisticsOptions::SetForceLoading;
+%feature("docstring", "
+ Gets whether the statistics will force loading all possible debug info."
+) lldb::SBStatisticsOptions::GetForceLoading;
diff --git a/lldb/include/lldb/API/SBStatisticsOptions.h b/lldb/include/lldb/API/SBStatisticsOptions.h
index 8019ed4315ca21..8244dbcee72c23 100644
--- a/lldb/include/lldb/API/SBStatisticsOptions.h
+++ b/lldb/include/lldb/API/SBStatisticsOptions.h
@@ -24,6 +24,9 @@ class LLDB_API SBStatisticsOptions {
void SetSummaryOnly(bool b);
bool GetSummaryOnly();
+
+ void SetForceLoading(bool b);
+ bool GetForceLoading();
protected:
friend class SBTarget;
diff --git a/lldb/include/lldb/Target/Statistics.h b/lldb/include/lldb/Target/Statistics.h
index f838fa17f80c24..9f17834ab08f48 100644
--- a/lldb/include/lldb/Target/Statistics.h
+++ b/lldb/include/lldb/Target/Statistics.h
@@ -132,6 +132,7 @@ struct ConstStringStats {
struct StatisticsOptions {
bool summary_only = false;
+ bool force_loading = false;
};
/// A class that represents statistics for a since lldb_private::Target.
diff --git a/lldb/source/API/SBStatisticsOptions.cpp b/lldb/source/API/SBStatisticsOptions.cpp
index 77a7e26a6bd4b5..1111c5ddb5f783 100644
--- a/lldb/source/API/SBStatisticsOptions.cpp
+++ b/lldb/source/API/SBStatisticsOptions.cpp
@@ -44,6 +44,12 @@ void SBStatisticsOptions::SetSummaryOnly(bool b) {
bool SBStatisticsOptions::GetSummaryOnly() { return m_opaque_up->summary_only; }
+void SBStatisticsOptions::SetForceLoading(bool b) {
+ m_opaque_up->force_loading = b;
+}
+
+bool SBStatisticsOptions::GetForceLoading() { return m_opaque_up->force_loading; }
+
const lldb_private::StatisticsOptions &SBStatisticsOptions::ref() const {
return *m_opaque_up;
}
diff --git a/lldb/source/Commands/CommandObjectStats.cpp b/lldb/source/Commands/CommandObjectStats.cpp
index b23b7024c82176..7135d65b069a57 100644
--- a/lldb/source/Commands/CommandObjectStats.cpp
+++ b/lldb/source/Commands/CommandObjectStats.cpp
@@ -78,6 +78,9 @@ class CommandObjectStatsDump : public CommandObjectParsed {
case 's':
m_stats_options.summary_only = true;
break;
+ case 'f':
+ m_stats_options.force_loading = true;
+ break;
default:
llvm_unreachable("Unimplemented option");
}
diff --git a/lldb/source/Commands/Options.td b/lldb/source/Commands/Options.td
index dd732e35220287..fc607a5338fac7 100644
--- a/lldb/source/Commands/Options.td
+++ b/lldb/source/Commands/Options.td
@@ -1419,6 +1419,10 @@ let Command = "statistics dump" in {
def statistics_dump_all: Option<"all-targets", "a">, Group<1>,
Desc<"Include statistics for all targets.">;
def statistics_dump_summary: Option<"summary", "s">, Group<1>,
- Desc<"Dump only high-level summary statistics."
+ Desc<"Dump only high-level summary statistics. "
"Exclude targets, modules, breakpoints etc... details.">;
+ def statistics_dump_force: Option<"force", "f">, Group<1>,
+ Desc<"Dump the total possible debug info statistics. "
+ "Force loading the debug information if not yet loaded, and collect "
+ "statistics with those.">;
}
diff --git a/lldb/source/Target/Statistics.cpp b/lldb/source/Target/Statistics.cpp
index ec0a4c84692dea..5035194f0d24e4 100644
--- a/lldb/source/Target/Statistics.cpp
+++ b/lldb/source/Target/Statistics.cpp
@@ -224,6 +224,7 @@ llvm::json::Value DebuggerStats::ReportStatistics(
const lldb_private::StatisticsOptions &options) {
const bool summary_only = options.summary_only;
+ const bool force_laoding = options.force_loading;
json::Array json_targets;
json::Array json_modules;
@@ -280,7 +281,7 @@ llvm::json::Value DebuggerStats::ReportStatistics(
++debug_index_saved;
module_stat.debug_index_time = sym_file->GetDebugInfoIndexTime().count();
module_stat.debug_parse_time = sym_file->GetDebugInfoParseTime().count();
- module_stat.debug_info_size = sym_file->GetDebugInfoSize();
+ module_stat.debug_info_size = sym_file->GetDebugInfoSize(force_laoding);
module_stat.symtab_stripped = module->GetObjectFile()->IsStripped();
if (module_stat.symtab_stripped)
++num_stripped_modules;
>From 27a1b265656b082c370a695e5b92d3c5f956487f Mon Sep 17 00:00:00 2001
From: Wanyi Ye <wanyi at fb.com>
Date: Tue, 13 Feb 2024 20:40:23 -0800
Subject: [PATCH 3/4] Add test
---
.../stats_api/TestStatisticsAPI.py | 35 +++
.../functionalities/stats_api/main.dwo.yaml | 37 +++
.../API/functionalities/stats_api/main.o.yaml | 212 ++++++++++++++++++
3 files changed, 284 insertions(+)
create mode 100644 lldb/test/API/functionalities/stats_api/main.dwo.yaml
create mode 100644 lldb/test/API/functionalities/stats_api/main.o.yaml
diff --git a/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py b/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py
index 457a2022fe4b8f..f7f8e67f9d2889 100644
--- a/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py
+++ b/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py
@@ -117,3 +117,38 @@ def test_command_stats_api(self):
self.assertNotIn("bt", command_stats)
# Verify bt's regex command is not duplicatedly captured.
self.assertNotIn("_regexp-bt", command_stats)
+
+ def test_command_stats_force(self):
+ """
+ Test reporting all pssible debug info stats by force loading all debug
+ info. For example, dwo files
+ """
+ src_dir = self.getSourceDir()
+ dwo_yaml_path = os.path.join(src_dir, "main.dwo.yaml")
+ obj_yaml_path = os.path.join(src_dir, "main.o.yaml")
+ dwo_path = self.getBuildArtifact("main.dwo")
+ obj_path = self.getBuildArtifact("main.o")
+ self.yaml2obj(dwo_yaml_path, dwo_path)
+ self.yaml2obj(obj_yaml_path, obj_path)
+
+ # We need the current working directory to be set to the build directory
+ os.chdir(self.getBuildDir())
+ # Create a target with the object file we just created from YAML
+ target = self.dbg.CreateTarget(obj_path)
+ self.assertTrue(target, VALID_TARGET)
+
+ # Get statistics
+ stats_options = lldb.SBStatisticsOptions()
+ stats = target.GetStatistics(stats_options)
+ stream = lldb.SBStream()
+ stats.GetAsJSON(stream)
+ debug_stats = json.loads(stream.GetData())
+ self.assertEqual(debug_stats["totalDebugInfoByteSize"], 188)
+
+ # Get statistics with force loading
+ stats_options.SetForceLoading(True)
+ stats_force = target.GetStatistics(stats_options)
+ stream_force = lldb.SBStream()
+ stats_force.GetAsJSON(stream_force)
+ debug_stats_force = json.loads(stream_force.GetData())
+ self.assertEqual(debug_stats_force["totalDebugInfoByteSize"], 435)
diff --git a/lldb/test/API/functionalities/stats_api/main.dwo.yaml b/lldb/test/API/functionalities/stats_api/main.dwo.yaml
new file mode 100644
index 00000000000000..02396ba33f82f0
--- /dev/null
+++ b/lldb/test/API/functionalities/stats_api/main.dwo.yaml
@@ -0,0 +1,37 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+ SectionHeaderStringTable: .strtab
+Sections:
+ - Name: .debug_str.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE, SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 5F5A33666F6F7600666F6F006D61696E00696E7400636C616E672076657273696F6E2031372E302E36202843656E744F532031372E302E362D342E656C3929006D61696E2E637070006D61696E2E64776F00
+ - Name: .debug_str_offsets.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: 00000000080000000C00000011000000150000004000000049000000
+ - Name: .debug_info.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: 3500000004000000000008010421000506939F5FCB7816797B02000600000001560001010103011C0000000156020105340000000403050400
+ - Name: .debug_abbrev.dwo
+ Type: SHT_PROGBITS
+ Flags: [ SHF_EXCLUDE ]
+ AddressAlign: 0x1
+ Content: 01110125823E130503823EB042823EB142070000022E0011813E120640186E823E03823E3A0B3B0B3F190000032E0011813E1206401803823E3A0B3B0B49133F19000004240003823E3E0B0B0B000000
+ - Type: SectionHeaderTable
+ Sections:
+ - Name: .strtab
+ - Name: .debug_str.dwo
+ - Name: .debug_str_offsets.dwo
+ - Name: .debug_info.dwo
+ - Name: .debug_abbrev.dwo
+...
diff --git a/lldb/test/API/functionalities/stats_api/main.o.yaml b/lldb/test/API/functionalities/stats_api/main.o.yaml
new file mode 100644
index 00000000000000..a90b0b3f80e1f6
--- /dev/null
+++ b/lldb/test/API/functionalities/stats_api/main.o.yaml
@@ -0,0 +1,212 @@
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+ SectionHeaderStringTable: .strtab
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+ AddressAlign: 0x10
+ Content: 554889E55DC3662E0F1F840000000000554889E54883EC10C745FC00000000E80000000031C04883C4105DC3
+ - Name: .debug_abbrev
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 01110010171B0EB44219B0420EB1420711011206B34217000000
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 2C0000000400000000000801000000000000000000000000939F5FCB7816797B00000000000000002C00000000000000
+ - Name: .debug_addr
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: '00000000000000000000000000000000'
+ - Name: .debug_gnu_pubnames
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 21000000020000000000300000001900000030666F6F0025000000306D61696E0000000000
+ - Name: .debug_gnu_pubtypes
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: '17000000020000000000300000003400000090696E740000000000'
+ - Name: .comment
+ Type: SHT_PROGBITS
+ Flags: [ SHF_MERGE, SHF_STRINGS ]
+ AddressAlign: 0x1
+ EntSize: 0x1
+ Content: 00636C616E672076657273696F6E2031372E302E36202843656E744F532031372E302E362D342E656C392900
+ - Name: .note.GNU-stack
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ - Name: .eh_frame
+ Type: SHT_X86_64_UNWIND
+ Flags: [ SHF_ALLOC ]
+ AddressAlign: 0x8
+ Content: 1400000000000000017A5200017810011B0C0708900100001C0000001C000000000000000600000000410E108602430D06410C07080000001C0000003C000000000000001C00000000410E108602430D06570C0708000000
+ - Name: .debug_line
+ Type: SHT_PROGBITS
+ AddressAlign: 0x1
+ Content: 47000000040020000000010101FB0E0D000101010100000001000001006D61696E2E637070000000000000090200000000000000000105050A0B4B0500BD05050AE559060B2E0206000101
+ - Name: .rela.text
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .text
+ Relocations:
+ - Offset: 0x20
+ Symbol: _Z3foov
+ Type: R_X86_64_PLT32
+ Addend: -4
+ - Name: .rela.debug_info
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .debug_info
+ Relocations:
+ - Offset: 0x6
+ Symbol: .debug_abbrev
+ Type: R_X86_64_32
+ - Offset: 0xC
+ Symbol: .debug_line
+ Type: R_X86_64_32
+ - Offset: 0x10
+ Symbol: .debug_str
+ Type: R_X86_64_32
+ - Offset: 0x14
+ Symbol: .debug_str
+ Type: R_X86_64_32
+ Addend: 14
+ - Offset: 0x20
+ Symbol: .text
+ Type: R_X86_64_64
+ - Offset: 0x2C
+ Symbol: .debug_addr
+ Type: R_X86_64_32
+ - Name: .rela.debug_addr
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .debug_addr
+ Relocations:
+ - Symbol: .text
+ Type: R_X86_64_64
+ - Offset: 0x8
+ Symbol: .text
+ Type: R_X86_64_64
+ Addend: 16
+ - Name: .rela.debug_gnu_pubnames
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .debug_gnu_pubnames
+ Relocations:
+ - Offset: 0x6
+ Symbol: .debug_info
+ Type: R_X86_64_32
+ - Name: .rela.debug_gnu_pubtypes
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .debug_gnu_pubtypes
+ Relocations:
+ - Offset: 0x6
+ Symbol: .debug_info
+ Type: R_X86_64_32
+ - Name: .rela.eh_frame
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .eh_frame
+ Relocations:
+ - Offset: 0x20
+ Symbol: .text
+ Type: R_X86_64_PC32
+ - Offset: 0x40
+ Symbol: .text
+ Type: R_X86_64_PC32
+ Addend: 16
+ - Name: .rela.debug_line
+ Type: SHT_RELA
+ Flags: [ SHF_INFO_LINK ]
+ Link: .symtab
+ AddressAlign: 0x8
+ Info: .debug_line
+ Relocations:
+ - Offset: 0x2D
+ Symbol: .text
+ Type: R_X86_64_64
+ - Name: .llvm_addrsig
+ Type: SHT_LLVM_ADDRSIG
+ Flags: [ SHF_EXCLUDE ]
+ Link: .symtab
+ AddressAlign: 0x1
+ Symbols: [ _Z3foov ]
+ - Type: SectionHeaderTable
+ Sections:
+ - Name: .strtab
+ - Name: .text
+ - Name: .rela.text
+ - Name: .debug_abbrev
+ - Name: .debug_info
+ - Name: .rela.debug_info
+ - Name: .debug_str
+ - Name: .debug_addr
+ - Name: .rela.debug_addr
+ - Name: .debug_gnu_pubnames
+ - Name: .rela.debug_gnu_pubnames
+ - Name: .debug_gnu_pubtypes
+ - Name: .rela.debug_gnu_pubtypes
+ - Name: .comment
+ - Name: .note.GNU-stack
+ - Name: .eh_frame
+ - Name: .rela.eh_frame
+ - Name: .debug_line
+ - Name: .rela.debug_line
+ - Name: .llvm_addrsig
+ - Name: .symtab
+Symbols:
+ - Name: main.cpp
+ Type: STT_FILE
+ Index: SHN_ABS
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .debug_abbrev
+ Type: STT_SECTION
+ Section: .debug_abbrev
+ - Name: .debug_info
+ Type: STT_SECTION
+ Section: .debug_info
+ - Name: .debug_str
+ Type: STT_SECTION
+ Section: .debug_str
+ - Name: .debug_addr
+ Type: STT_SECTION
+ Section: .debug_addr
+ - Name: .debug_line
+ Type: STT_SECTION
+ Section: .debug_line
+ - Name: _Z3foov
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Size: 0x6
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
+ Value: 0x10
+ Size: 0x1C
+DWARF:
+ debug_str:
+ - '/tmp/test_dwo'
+ - main.dwo
+...
>From f1daed3798752d41622f1cfb2627878e9ee29240 Mon Sep 17 00:00:00 2001
From: Wanyi Ye <wanyi at fb.com>
Date: Wed, 14 Feb 2024 18:25:55 -0800
Subject: [PATCH 4/4] Address method/var name changes
---
lldb/bindings/interface/SBStatisticsOptionsDocstrings.i | 4 ++--
lldb/include/lldb/API/SBStatisticsOptions.h | 9 +++++++--
lldb/include/lldb/Symbol/SymbolFile.h | 8 ++++----
lldb/include/lldb/Symbol/SymbolFileOnDemand.h | 2 +-
lldb/include/lldb/Target/Statistics.h | 2 +-
lldb/source/API/SBStatisticsOptions.cpp | 6 +++---
lldb/source/Commands/CommandObjectStats.cpp | 2 +-
lldb/source/Commands/Options.td | 4 ++--
.../Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp | 2 +-
.../Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h | 2 +-
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp | 4 ++--
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h | 2 +-
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp | 4 ++--
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h | 4 ++--
.../Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp | 2 +-
.../source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h | 2 +-
.../Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp | 2 +-
.../Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h | 2 +-
lldb/source/Symbol/SymbolFile.cpp | 2 +-
lldb/source/Symbol/SymbolFileOnDemand.cpp | 4 ++--
lldb/source/Target/Statistics.cpp | 4 ++--
.../API/functionalities/stats_api/TestStatisticsAPI.py | 2 +-
22 files changed, 40 insertions(+), 35 deletions(-)
diff --git a/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i b/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i
index a15feb2b2b2f5d..087f6ab8786630 100644
--- a/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i
+++ b/lldb/bindings/interface/SBStatisticsOptionsDocstrings.i
@@ -8,7 +8,7 @@
) lldb::SBStatisticsOptions::GetSummaryOnly;
%feature("docstring", "
Sets whether the statistics will force loading all possible debug info."
-) lldb::SBStatisticsOptions::SetForceLoading;
+) lldb::SBStatisticsOptions::SetReportAllAvailableDebugInfo;
%feature("docstring", "
Gets whether the statistics will force loading all possible debug info."
-) lldb::SBStatisticsOptions::GetForceLoading;
+) lldb::SBStatisticsOptions::GetReportAllAvailableDebugInfo;
diff --git a/lldb/include/lldb/API/SBStatisticsOptions.h b/lldb/include/lldb/API/SBStatisticsOptions.h
index 8244dbcee72c23..e7c3c4c6c0e043 100644
--- a/lldb/include/lldb/API/SBStatisticsOptions.h
+++ b/lldb/include/lldb/API/SBStatisticsOptions.h
@@ -25,8 +25,13 @@ class LLDB_API SBStatisticsOptions {
void SetSummaryOnly(bool b);
bool GetSummaryOnly();
- void SetForceLoading(bool b);
- bool GetForceLoading();
+ /// If set to true, the debugger will load all debug info that is available
+ /// and report statistics on the total amount. If this is set to false, then
+ /// only report statistics on the currently loaded debug information.
+ /// This can avoid loading debug info from separate files just so it can
+ /// report the total size which can slow down statistics reporting.
+ void SetReportAllAvailableDebugInfo(bool b);
+ bool GetReportAllAvailableDebugInfo();
protected:
friend class SBTarget;
diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h
index 13a4d146d651ec..d20766788192f7 100644
--- a/lldb/include/lldb/Symbol/SymbolFile.h
+++ b/lldb/include/lldb/Symbol/SymbolFile.h
@@ -393,13 +393,13 @@ class SymbolFile : public PluginInterface {
/// function will iterate over all sections in a module and add up their
/// debug info only section byte sizes.
///
- /// \param load_if_needed
+ /// \param load_all_debug_info
/// If true, force loading any symbol files if they are not yet loaded and
- /// add to the total size
+ /// add to the total size. Default to false.
///
/// \returns
/// Total currently loaded debug info size in bytes
- virtual uint64_t GetDebugInfoSize(bool load_if_needed = false) = 0;
+ virtual uint64_t GetDebugInfoSize(bool load_all_debug_info = false) = 0;
/// Return the time taken to parse the debug information.
///
@@ -542,7 +542,7 @@ class SymbolFileCommon : public SymbolFile {
void Dump(Stream &s) override;
- uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
+ uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
bool GetDebugInfoIndexWasLoadedFromCache() const override {
return m_index_was_loaded_from_cache;
diff --git a/lldb/include/lldb/Symbol/SymbolFileOnDemand.h b/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
index 9b3512aa85cdd6..8073d1816860e3 100644
--- a/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
+++ b/lldb/include/lldb/Symbol/SymbolFileOnDemand.h
@@ -178,7 +178,7 @@ class SymbolFileOnDemand : public lldb_private::SymbolFile {
void PreloadSymbols() override;
- uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
+ uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
lldb_private::StatsDuration::Duration GetDebugInfoParseTime() override;
lldb_private::StatsDuration::Duration GetDebugInfoIndexTime() override;
diff --git a/lldb/include/lldb/Target/Statistics.h b/lldb/include/lldb/Target/Statistics.h
index 9f17834ab08f48..c4f17b503a1f99 100644
--- a/lldb/include/lldb/Target/Statistics.h
+++ b/lldb/include/lldb/Target/Statistics.h
@@ -132,7 +132,7 @@ struct ConstStringStats {
struct StatisticsOptions {
bool summary_only = false;
- bool force_loading = false;
+ bool load_all_debug_info = false;
};
/// A class that represents statistics for a since lldb_private::Target.
diff --git a/lldb/source/API/SBStatisticsOptions.cpp b/lldb/source/API/SBStatisticsOptions.cpp
index 1111c5ddb5f783..8cb4b98b8549cd 100644
--- a/lldb/source/API/SBStatisticsOptions.cpp
+++ b/lldb/source/API/SBStatisticsOptions.cpp
@@ -44,11 +44,11 @@ void SBStatisticsOptions::SetSummaryOnly(bool b) {
bool SBStatisticsOptions::GetSummaryOnly() { return m_opaque_up->summary_only; }
-void SBStatisticsOptions::SetForceLoading(bool b) {
- m_opaque_up->force_loading = b;
+void SBStatisticsOptions::SetReportAllAvailableDebugInfo(bool b) {
+ m_opaque_up->load_all_debug_info = b;
}
-bool SBStatisticsOptions::GetForceLoading() { return m_opaque_up->force_loading; }
+bool SBStatisticsOptions::GetReportAllAvailableDebugInfo() { return m_opaque_up->load_all_debug_info; }
const lldb_private::StatisticsOptions &SBStatisticsOptions::ref() const {
return *m_opaque_up;
diff --git a/lldb/source/Commands/CommandObjectStats.cpp b/lldb/source/Commands/CommandObjectStats.cpp
index 7135d65b069a57..a92bb5d1165ee6 100644
--- a/lldb/source/Commands/CommandObjectStats.cpp
+++ b/lldb/source/Commands/CommandObjectStats.cpp
@@ -79,7 +79,7 @@ class CommandObjectStatsDump : public CommandObjectParsed {
m_stats_options.summary_only = true;
break;
case 'f':
- m_stats_options.force_loading = true;
+ m_stats_options.load_all_debug_info = true;
break;
default:
llvm_unreachable("Unimplemented option");
diff --git a/lldb/source/Commands/Options.td b/lldb/source/Commands/Options.td
index fc607a5338fac7..ad4321d9a386cc 100644
--- a/lldb/source/Commands/Options.td
+++ b/lldb/source/Commands/Options.td
@@ -1421,8 +1421,8 @@ let Command = "statistics dump" in {
def statistics_dump_summary: Option<"summary", "s">, Group<1>,
Desc<"Dump only high-level summary statistics. "
"Exclude targets, modules, breakpoints etc... details.">;
- def statistics_dump_force: Option<"force", "f">, Group<1>,
+ def statistics_dump_force: Option<"load-all-debug-info", "f">, Group<1>,
Desc<"Dump the total possible debug info statistics. "
- "Force loading the debug information if not yet loaded, and collect "
+ "Force loading all the debug information if not yet loaded, and collect "
"statistics with those.">;
}
diff --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
index ff0bba7bcab10c..3977dc3a6d67c5 100644
--- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
+++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.cpp
@@ -918,7 +918,7 @@ void SymbolFileBreakpad::ParseUnwindData() {
m_unwind_data->win.Sort();
}
-uint64_t SymbolFileBreakpad::GetDebugInfoSize(bool load_if_needed) {
+uint64_t SymbolFileBreakpad::GetDebugInfoSize(bool load_all_debug_info) {
// Breakpad files are all debug info.
return m_objfile_sp->GetByteSize();
}
diff --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
index 609ed6ffc9ff96..83215bf3c87e4a 100644
--- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
+++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
@@ -141,7 +141,7 @@ class SymbolFileBreakpad : public SymbolFileCommon {
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
- uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
+ uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
private:
// A class representing a position in the breakpad file. Useful for
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
index 4e822742780f8d..e28036d34b34a6 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
@@ -896,8 +896,8 @@ void DWARFUnit::ComputeAbsolutePath() {
m_file_spec->MakeAbsolute(GetCompilationDirectory());
}
-SymbolFileDWARFDwo *DWARFUnit::GetDwoSymbolFile(bool load_if_needed) {
- if (load_if_needed)
+SymbolFileDWARFDwo *DWARFUnit::GetDwoSymbolFile(bool load_all_debug_info) {
+ if (load_all_debug_info)
ExtractUnitDIEIfNeeded();
if (m_dwo)
return &llvm::cast<SymbolFileDWARFDwo>(m_dwo->GetSymbolFileDWARF());
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
index 5a8a23e37738c6..1326fec629fb27 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
@@ -241,7 +241,7 @@ class DWARFUnit : public UserID {
FileSpec GetFile(size_t file_idx);
FileSpec::Style GetPathStyle();
- SymbolFileDWARFDwo *GetDwoSymbolFile(bool load_if_needed = false);
+ SymbolFileDWARFDwo *GetDwoSymbolFile(bool load_all_debug_info = false);
die_iterator_range dies() {
ExtractDIEsIfNeeded();
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index d8bbfa339ee4c0..42211b9a21b0e3 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -2672,7 +2672,7 @@ static bool UpdateCompilerContextForSimpleTemplateNames(TypeQuery &match) {
return any_context_updated;
}
-uint64_t SymbolFileDWARF::GetDebugInfoSize(bool load_if_needed) {
+uint64_t SymbolFileDWARF::GetDebugInfoSize(bool load_all_debug_info) {
DWARFDebugInfo &info = DebugInfo();
uint32_t num_comp_units = info.GetNumUnits();
@@ -2687,7 +2687,7 @@ uint64_t SymbolFileDWARF::GetDebugInfoSize(bool load_if_needed) {
if (cu == nullptr)
continue;
- SymbolFileDWARFDwo *dwo = cu->GetDwoSymbolFile(load_if_needed);
+ SymbolFileDWARFDwo *dwo = cu->GetDwoSymbolFile(load_all_debug_info);
if (dwo)
debug_info_size += dwo->GetDebugInfoSize();
}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index 63114da66b4e37..3b17729e6b9cc7 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -193,12 +193,12 @@ class SymbolFileDWARF : public SymbolFileCommon {
/// all dwo debug info where .dwo files might not be loaded yet. Calling this
/// function by default will NOT force the loading of any .dwo files.
///
- /// \param load_if_needed
+ /// \param load_all_debug_info
/// If true, force loading any .dwo files associated and add to the size
///
/// \return
/// Returns total currently loaded debug info size
- uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
+ uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
void FindTypes(const lldb_private::TypeQuery &match,
lldb_private::TypeResults &results) override;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
index 950d43bdb51adb..a0a7012dfaf0d7 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
@@ -85,7 +85,7 @@ lldb::offset_t SymbolFileDWARFDwo::GetVendorDWARFOpcodeSize(
return GetBaseSymbolFile().GetVendorDWARFOpcodeSize(data, data_offset, op);
}
-uint64_t SymbolFileDWARFDwo::GetDebugInfoSize(bool load_if_needed) {
+uint64_t SymbolFileDWARFDwo::GetDebugInfoSize(bool load_all_debug_info) {
// Directly get debug info from current dwo object file's section list
// instead of asking SymbolFileCommon::GetDebugInfo() which parses from
// owning module which is wrong.
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
index daa591f460fa87..c2c420f711d345 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h
@@ -47,7 +47,7 @@ class SymbolFileDWARFDwo : public SymbolFileDWARF {
const lldb::offset_t data_offset,
const uint8_t op) const override;
- uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
+ uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
bool ParseVendorDWARFOpcode(uint8_t op, const DataExtractor &opcodes,
lldb::offset_t &offset,
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index a434195614fcc9..7fded6a31a3af5 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -2156,7 +2156,7 @@ SymbolFileNativePDB::GetTypeSystemForLanguage(lldb::LanguageType language) {
return type_system_or_err;
}
-uint64_t SymbolFileNativePDB::GetDebugInfoSize(bool load_if_needed) {
+uint64_t SymbolFileNativePDB::GetDebugInfoSize(bool load_all_debug_info) {
// PDB files are a separate file that contains all debug info.
return m_index->pdb().getFileSize();
}
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
index 588021f233904f..669c44aa131edc 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
@@ -77,7 +77,7 @@ class SymbolFileNativePDB : public SymbolFileCommon {
void InitializeObject() override;
- uint64_t GetDebugInfoSize(bool load_if_needed = false) override;
+ uint64_t GetDebugInfoSize(bool load_all_debug_info = false) override;
// Compile Unit function calls
diff --git a/lldb/source/Symbol/SymbolFile.cpp b/lldb/source/Symbol/SymbolFile.cpp
index dba589c43a3cca..16ed98d7840f78 100644
--- a/lldb/source/Symbol/SymbolFile.cpp
+++ b/lldb/source/Symbol/SymbolFile.cpp
@@ -227,7 +227,7 @@ SymbolFileCommon::GetTypeSystemForLanguage(lldb::LanguageType language) {
return type_system_or_err;
}
-uint64_t SymbolFileCommon::GetDebugInfoSize(bool load_if_needed) {
+uint64_t SymbolFileCommon::GetDebugInfoSize(bool load_all_debug_info) {
if (!m_objfile_sp)
return 0;
ModuleSP module_sp(m_objfile_sp->GetModule());
diff --git a/lldb/source/Symbol/SymbolFileOnDemand.cpp b/lldb/source/Symbol/SymbolFileOnDemand.cpp
index 65e6f19fc33b18..c6d9f0071c392b 100644
--- a/lldb/source/Symbol/SymbolFileOnDemand.cpp
+++ b/lldb/source/Symbol/SymbolFileOnDemand.cpp
@@ -535,11 +535,11 @@ void SymbolFileOnDemand::PreloadSymbols() {
return m_sym_file_impl->PreloadSymbols();
}
-uint64_t SymbolFileOnDemand::GetDebugInfoSize(bool load_if_needed) {
+uint64_t SymbolFileOnDemand::GetDebugInfoSize(bool load_all_debug_info) {
// Always return the real debug info size.
LLDB_LOG(GetLog(), "[{0}] {1} is not skipped", GetSymbolFileName(),
__FUNCTION__);
- return m_sym_file_impl->GetDebugInfoSize(load_if_needed);
+ return m_sym_file_impl->GetDebugInfoSize(load_all_debug_info);
}
StatsDuration::Duration SymbolFileOnDemand::GetDebugInfoParseTime() {
diff --git a/lldb/source/Target/Statistics.cpp b/lldb/source/Target/Statistics.cpp
index 5035194f0d24e4..619f79104a7c2e 100644
--- a/lldb/source/Target/Statistics.cpp
+++ b/lldb/source/Target/Statistics.cpp
@@ -224,7 +224,7 @@ llvm::json::Value DebuggerStats::ReportStatistics(
const lldb_private::StatisticsOptions &options) {
const bool summary_only = options.summary_only;
- const bool force_laoding = options.force_loading;
+ const bool load_all_debug_info = options.load_all_debug_info;
json::Array json_targets;
json::Array json_modules;
@@ -281,7 +281,7 @@ llvm::json::Value DebuggerStats::ReportStatistics(
++debug_index_saved;
module_stat.debug_index_time = sym_file->GetDebugInfoIndexTime().count();
module_stat.debug_parse_time = sym_file->GetDebugInfoParseTime().count();
- module_stat.debug_info_size = sym_file->GetDebugInfoSize(force_laoding);
+ module_stat.debug_info_size = sym_file->GetDebugInfoSize(load_all_debug_info);
module_stat.symtab_stripped = module->GetObjectFile()->IsStripped();
if (module_stat.symtab_stripped)
++num_stripped_modules;
diff --git a/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py b/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py
index f7f8e67f9d2889..75a361ef3c7b4a 100644
--- a/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py
+++ b/lldb/test/API/functionalities/stats_api/TestStatisticsAPI.py
@@ -146,7 +146,7 @@ def test_command_stats_force(self):
self.assertEqual(debug_stats["totalDebugInfoByteSize"], 188)
# Get statistics with force loading
- stats_options.SetForceLoading(True)
+ stats_options.SetReportAllAvailableDebugInfo(True)
stats_force = target.GetStatistics(stats_options)
stream_force = lldb.SBStream()
stats_force.GetAsJSON(stream_force)
More information about the lldb-commits
mailing list