summaryrefslogtreecommitdiff
path: root/lldb
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2019-01-14 22:40:41 +0000
committerZachary Turner <zturner@google.com>2019-01-14 22:40:41 +0000
commit48457b85d1b59afd913990e0e737138194ecc11b (patch)
tree8d833d0aad16ab93a43372eba18b8423a3377ac9 /lldb
parent9c8f85821bf463458c981bfc2ffc7e197c953f1f (diff)
[SymbolFile] Rename ParseFunctionBlocks to ParseBlocksRecursive.
This method took a SymbolContext but only actually cared about the case where the m_function member was set. Furthermore, it was intended to be implemented to parse blocks recursively despite not documenting this in its name. So we change the name to indicate that it should be recursive, while also limiting the function parameter to be a Function&. This lets the caller know what is required to use it, as well as letting new implementers know what kind of inputs they need to be prepared to handle.
Diffstat (limited to 'lldb')
-rw-r--r--lldb/include/lldb/Symbol/SymbolFile.h2
-rw-r--r--lldb/include/lldb/Symbol/SymbolVendor.h2
-rw-r--r--lldb/source/Core/Module.cpp5
-rw-r--r--lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h2
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp40
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h10
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp10
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h2
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp5
-rw-r--r--lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h2
-rw-r--r--lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp20
-rw-r--r--lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h2
-rw-r--r--lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp4
-rw-r--r--lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h2
-rw-r--r--lldb/source/Symbol/Function.cpp14
-rw-r--r--lldb/source/Symbol/SymbolVendor.cpp4
16 files changed, 63 insertions, 63 deletions
diff --git a/lldb/include/lldb/Symbol/SymbolFile.h b/lldb/include/lldb/Symbol/SymbolFile.h
index 424e5f498ea..9967815b02a 100644
--- a/lldb/include/lldb/Symbol/SymbolFile.h
+++ b/lldb/include/lldb/Symbol/SymbolFile.h
@@ -137,7 +137,7 @@ public:
virtual bool
ParseImportedModules(const SymbolContext &sc,
std::vector<ConstString> &imported_modules) = 0;
- virtual size_t ParseFunctionBlocks(const SymbolContext &sc) = 0;
+ virtual size_t ParseBlocksRecursive(Function &func) = 0;
virtual size_t ParseVariablesForContext(const SymbolContext &sc) = 0;
virtual Type *ResolveTypeUID(lldb::user_id_t type_uid) = 0;
diff --git a/lldb/include/lldb/Symbol/SymbolVendor.h b/lldb/include/lldb/Symbol/SymbolVendor.h
index 1dcd028dcc3..b0329265498 100644
--- a/lldb/include/lldb/Symbol/SymbolVendor.h
+++ b/lldb/include/lldb/Symbol/SymbolVendor.h
@@ -64,7 +64,7 @@ public:
virtual bool ParseImportedModules(const SymbolContext &sc,
std::vector<ConstString> &imported_modules);
- virtual size_t ParseFunctionBlocks(const SymbolContext &sc);
+ virtual size_t ParseBlocksRecursive(Function &func);
virtual size_t ParseVariablesForContext(const SymbolContext &sc);
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp
index 6595d134079..3e3a1e0c3de 100644
--- a/lldb/source/Core/Module.cpp
+++ b/lldb/source/Core/Module.cpp
@@ -373,9 +373,10 @@ void Module::ParseAllDebugSymbols() {
symbols->ParseFunctions(*sc.comp_unit);
sc.comp_unit->ForeachFunction([&sc, &symbols](const FunctionSP &f) {
- sc.function = f.get();
- symbols->ParseFunctionBlocks(sc);
+ symbols->ParseBlocksRecursive(*f);
+
// Parse the variables for this function and all its blocks
+ sc.function = f.get();
symbols->ParseVariablesForContext(sc);
return false;
});
diff --git a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
index 7ad10c6ffca..e32479594c4 100644
--- a/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
+++ b/lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h
@@ -75,7 +75,7 @@ public:
return false;
}
- size_t ParseFunctionBlocks(const SymbolContext &sc) override { return 0; }
+ size_t ParseBlocksRecursive(Function &func) override { return 0; }
uint32_t FindGlobalVariables(const ConstString &name,
const CompilerDeclContext *parent_decl_ctx,
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index c8295e32555..a765724d623 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -1159,11 +1159,9 @@ bool SymbolFileDWARF::ParseDebugMacros(CompileUnit &comp_unit) {
return true;
}
-size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc,
- Block *parent_block,
- const DWARFDIE &orig_die,
- addr_t subprogram_low_pc,
- uint32_t depth) {
+size_t SymbolFileDWARF::ParseBlocksRecursive(
+ lldb_private::CompileUnit &comp_unit, Block *parent_block,
+ const DWARFDIE &orig_die, addr_t subprogram_low_pc, uint32_t depth) {
size_t blocks_added = 0;
DWARFDIE die = orig_die;
while (die) {
@@ -1242,13 +1240,13 @@ size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc,
std::unique_ptr<Declaration> decl_ap;
if (decl_file != 0 || decl_line != 0 || decl_column != 0)
decl_ap.reset(new Declaration(
- sc.comp_unit->GetSupportFiles().GetFileSpecAtIndex(decl_file),
+ comp_unit.GetSupportFiles().GetFileSpecAtIndex(decl_file),
decl_line, decl_column));
std::unique_ptr<Declaration> call_ap;
if (call_file != 0 || call_line != 0 || call_column != 0)
call_ap.reset(new Declaration(
- sc.comp_unit->GetSupportFiles().GetFileSpecAtIndex(call_file),
+ comp_unit.GetSupportFiles().GetFileSpecAtIndex(call_file),
call_line, call_column));
block->SetInlinedFunctionInfo(name, mangled_name, decl_ap.get(),
@@ -1258,8 +1256,9 @@ size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc,
++blocks_added;
if (die.HasChildren()) {
- blocks_added += ParseFunctionBlocks(sc, block, die.GetFirstChild(),
- subprogram_low_pc, depth + 1);
+ blocks_added +=
+ ParseBlocksRecursive(comp_unit, block, die.GetFirstChild(),
+ subprogram_low_pc, depth + 1);
}
}
} break;
@@ -3125,18 +3124,21 @@ size_t SymbolFileDWARF::ParseTypes(const SymbolContext &sc,
return types_added;
}
-size_t SymbolFileDWARF::ParseFunctionBlocks(const SymbolContext &sc) {
+size_t SymbolFileDWARF::ParseBlocksRecursive(Function &func) {
ASSERT_MODULE_LOCK(this);
- assert(sc.comp_unit && sc.function);
+ CompileUnit *comp_unit = func.GetCompileUnit();
+ lldbassert(comp_unit);
+
+ DWARFUnit *dwarf_cu = GetDWARFCompileUnit(comp_unit);
+ if (!dwarf_cu)
+ return 0;
+
size_t functions_added = 0;
- DWARFUnit *dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
- if (dwarf_cu) {
- const dw_offset_t function_die_offset = sc.function->GetID();
- DWARFDIE function_die = dwarf_cu->GetDIE(function_die_offset);
- if (function_die) {
- ParseFunctionBlocks(sc, &sc.function->GetBlock(false), function_die,
- LLDB_INVALID_ADDRESS, 0);
- }
+ const dw_offset_t function_die_offset = func.GetID();
+ DWARFDIE function_die = dwarf_cu->GetDIE(function_die_offset);
+ if (function_die) {
+ ParseBlocksRecursive(*comp_unit, &func.GetBlock(false), function_die,
+ LLDB_INVALID_ADDRESS, 0);
}
return functions_added;
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
index 411f791cc97..4791c49c8fd 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
@@ -126,7 +126,7 @@ public:
const lldb_private::SymbolContext &sc,
std::vector<lldb_private::ConstString> &imported_modules) override;
- size_t ParseFunctionBlocks(const lldb_private::SymbolContext &sc) override;
+ size_t ParseBlocksRecursive(lldb_private::Function &func) override;
size_t
ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
@@ -359,10 +359,10 @@ protected:
lldb_private::Function *ParseFunction(lldb_private::CompileUnit &comp_unit,
const DWARFDIE &die);
- size_t ParseFunctionBlocks(const lldb_private::SymbolContext &sc,
- lldb_private::Block *parent_block,
- const DWARFDIE &die,
- lldb::addr_t subprogram_low_pc, uint32_t depth);
+ size_t ParseBlocksRecursive(lldb_private::CompileUnit &comp_unit,
+ lldb_private::Block *parent_block,
+ const DWARFDIE &die,
+ lldb::addr_t subprogram_low_pc, uint32_t depth);
size_t ParseTypes(const lldb_private::SymbolContext &sc, const DWARFDIE &die,
bool parse_siblings, bool parse_children);
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
index c2b84694bd2..48677102a49 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
@@ -677,10 +677,14 @@ bool SymbolFileDWARFDebugMap::ParseImportedModules(
return false;
}
-size_t SymbolFileDWARFDebugMap::ParseFunctionBlocks(const SymbolContext &sc) {
- SymbolFileDWARF *oso_dwarf = GetSymbolFile(sc);
+size_t SymbolFileDWARFDebugMap::ParseBlocksRecursive(Function &func) {
+ CompileUnit *comp_unit = func.GetCompileUnit();
+ if (!comp_unit)
+ return 0;
+
+ SymbolFileDWARF *oso_dwarf = GetSymbolFile(*comp_unit);
if (oso_dwarf)
- return oso_dwarf->ParseFunctionBlocks(sc);
+ return oso_dwarf->ParseBlocksRecursive(func);
return 0;
}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
index f8bef7e369b..31c0dbc51ef 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
@@ -74,7 +74,7 @@ public:
bool ParseImportedModules(
const lldb_private::SymbolContext &sc,
std::vector<lldb_private::ConstString> &imported_modules) override;
- size_t ParseFunctionBlocks(const lldb_private::SymbolContext &sc) override;
+ size_t ParseBlocksRecursive(lldb_private::Function &func) override;
size_t
ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
index 7c770b65e4c..698de0e1f54 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp
@@ -1142,9 +1142,8 @@ bool SymbolFileNativePDB::ParseImportedModules(
return false;
}
-size_t SymbolFileNativePDB::ParseFunctionBlocks(const SymbolContext &sc) {
- lldbassert(sc.comp_unit && sc.function);
- GetOrCreateBlock(PdbSymUid(sc.function->GetID()).asCompilandSym());
+size_t SymbolFileNativePDB::ParseBlocksRecursive(Function &func) {
+ GetOrCreateBlock(PdbSymUid(func.GetID()).asCompilandSym());
// FIXME: Parse child blocks
return 1;
}
diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
index d12313aa380..bb95056ffde 100644
--- a/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
+++ b/lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h
@@ -99,7 +99,7 @@ public:
ParseImportedModules(const SymbolContext &sc,
std::vector<ConstString> &imported_modules) override;
- size_t ParseFunctionBlocks(const SymbolContext &sc) override;
+ size_t ParseBlocksRecursive(Function &func) override;
uint32_t FindGlobalVariables(const ConstString &name,
const CompilerDeclContext *parent_decl_ctx,
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
index 1878671662a..72766a1e553 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
@@ -384,9 +384,8 @@ bool SymbolFilePDB::ParseImportedModules(
}
static size_t ParseFunctionBlocksForPDBSymbol(
- const lldb_private::SymbolContext &sc, uint64_t func_file_vm_addr,
- const llvm::pdb::PDBSymbol *pdb_symbol, lldb_private::Block *parent_block,
- bool is_top_parent) {
+ uint64_t func_file_vm_addr, const llvm::pdb::PDBSymbol *pdb_symbol,
+ lldb_private::Block *parent_block, bool is_top_parent) {
assert(pdb_symbol && parent_block);
size_t num_added = 0;
@@ -425,7 +424,7 @@ static size_t ParseFunctionBlocksForPDBSymbol(
break;
while (auto symbol_up = results_up->getNext()) {
num_added += ParseFunctionBlocksForPDBSymbol(
- sc, func_file_vm_addr, symbol_up.get(), block, false);
+ func_file_vm_addr, symbol_up.get(), block, false);
}
} break;
default:
@@ -434,18 +433,15 @@ static size_t ParseFunctionBlocksForPDBSymbol(
return num_added;
}
-size_t
-SymbolFilePDB::ParseFunctionBlocks(const lldb_private::SymbolContext &sc) {
- lldbassert(sc.comp_unit && sc.function);
+size_t SymbolFilePDB::ParseBlocksRecursive(Function &func) {
size_t num_added = 0;
- auto uid = sc.function->GetID();
+ auto uid = func.GetID();
auto pdb_func_up = m_session_up->getConcreteSymbolById<PDBSymbolFunc>(uid);
if (!pdb_func_up)
return 0;
- Block &parent_block = sc.function->GetBlock(false);
- num_added =
- ParseFunctionBlocksForPDBSymbol(sc, pdb_func_up->getVirtualAddress(),
- pdb_func_up.get(), &parent_block, true);
+ Block &parent_block = func.GetBlock(false);
+ num_added = ParseFunctionBlocksForPDBSymbol(
+ pdb_func_up->getVirtualAddress(), pdb_func_up.get(), &parent_block, true);
return num_added;
}
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
index 10fa3b4ea24..68c4ed7408c 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
+++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h
@@ -77,7 +77,7 @@ public:
const lldb_private::SymbolContext &sc,
std::vector<lldb_private::ConstString> &imported_modules) override;
- size_t ParseFunctionBlocks(const lldb_private::SymbolContext &sc) override;
+ size_t ParseBlocksRecursive(lldb_private::Function &func) override;
size_t
ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
diff --git a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
index 81d4bc1fd44..08778bd1ba7 100644
--- a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
+++ b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
@@ -223,9 +223,7 @@ bool SymbolFileSymtab::ParseImportedModules(
return false;
}
-size_t SymbolFileSymtab::ParseFunctionBlocks(const SymbolContext &sc) {
- return 0;
-}
+size_t SymbolFileSymtab::ParseBlocksRecursive(Function &func) { return 0; }
size_t SymbolFileSymtab::ParseVariablesForContext(const SymbolContext &sc) {
return 0;
diff --git a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
index 3535e20bf93..e4ec7a18133 100644
--- a/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
+++ b/lldb/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
@@ -66,7 +66,7 @@ public:
const lldb_private::SymbolContext &sc,
std::vector<lldb_private::ConstString> &imported_modules) override;
- size_t ParseFunctionBlocks(const lldb_private::SymbolContext &sc) override;
+ size_t ParseBlocksRecursive(lldb_private::Function &func) override;
size_t
ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
diff --git a/lldb/source/Symbol/Function.cpp b/lldb/source/Symbol/Function.cpp
index 8b2cfb43bc0..f792a5c5213 100644
--- a/lldb/source/Symbol/Function.cpp
+++ b/lldb/source/Symbol/Function.cpp
@@ -286,14 +286,14 @@ llvm::MutableArrayRef<CallEdge> Function::GetTailCallingEdges() {
Block &Function::GetBlock(bool can_create) {
if (!m_block.BlockInfoHasBeenParsed() && can_create) {
- SymbolContext sc;
- CalculateSymbolContext(&sc);
- if (sc.module_sp) {
- sc.module_sp->GetSymbolVendor()->ParseFunctionBlocks(sc);
+ ModuleSP module_sp = CalculateSymbolContextModule();
+ if (module_sp) {
+ module_sp->GetSymbolVendor()->ParseBlocksRecursive(*this);
} else {
- Host::SystemLog(Host::eSystemLogError, "error: unable to find module "
- "shared pointer for function '%s' "
- "in %s\n",
+ Host::SystemLog(Host::eSystemLogError,
+ "error: unable to find module "
+ "shared pointer for function '%s' "
+ "in %s\n",
GetName().GetCString(), m_comp_unit->GetPath().c_str());
}
m_block.SetBlockInfoHasBeenParsed(true, true);
diff --git a/lldb/source/Symbol/SymbolVendor.cpp b/lldb/source/Symbol/SymbolVendor.cpp
index 803011f69db..fda2f23e656 100644
--- a/lldb/source/Symbol/SymbolVendor.cpp
+++ b/lldb/source/Symbol/SymbolVendor.cpp
@@ -189,12 +189,12 @@ bool SymbolVendor::ParseImportedModules(
return false;
}
-size_t SymbolVendor::ParseFunctionBlocks(const SymbolContext &sc) {
+size_t SymbolVendor::ParseBlocksRecursive(Function &func) {
ModuleSP module_sp(GetModule());
if (module_sp) {
std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex());
if (m_sym_file_ap.get())
- return m_sym_file_ap->ParseFunctionBlocks(sc);
+ return m_sym_file_ap->ParseBlocksRecursive(func);
}
return 0;
}