Skip to content

Commit c020be1

Browse files
committed
[lldb] Use a struct to pass function search options to Module::FindFunction
Rather than passing two booleans around, which is especially error prone with them being next to each other, use a struct with named fields instead. Differential revision: https://reviews.llvm.org/D107295
1 parent a756239 commit c020be1

File tree

16 files changed

+148
-111
lines changed

16 files changed

+148
-111
lines changed

lldb/include/lldb/Core/Module.h

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,15 @@ class TypeList;
5757
class TypeMap;
5858
class VariableList;
5959

60+
/// Options used by Module::FindFunctions. This cannot be a nested class
61+
/// because it must be forward-declared in ModuleList.h.
62+
struct ModuleFunctionSearchOptions {
63+
/// Include the symbol table.
64+
bool include_symbols = false;
65+
/// Include inlined functions.
66+
bool include_inlines = false;
67+
};
68+
6069
/// \class Module Module.h "lldb/Core/Module.h"
6170
/// A class that describes an executable image and its associated
6271
/// object and symbol files.
@@ -304,8 +313,9 @@ class Module : public std::enable_shared_from_this<Module>,
304313
/// matches.
305314
void FindFunctions(ConstString name,
306315
const CompilerDeclContext &parent_decl_ctx,
307-
lldb::FunctionNameType name_type_mask, bool symbols_ok,
308-
bool inlines_ok, SymbolContextList &sc_list);
316+
lldb::FunctionNameType name_type_mask,
317+
const ModuleFunctionSearchOptions &options,
318+
SymbolContextList &sc_list);
309319

310320
/// Find functions by name.
311321
///
@@ -319,8 +329,9 @@ class Module : public std::enable_shared_from_this<Module>,
319329
/// \param[out] sc_list
320330
/// A symbol context list that gets filled in with all of the
321331
/// matches.
322-
void FindFunctions(const RegularExpression &regex, bool symbols_ok,
323-
bool inlines_ok, SymbolContextList &sc_list);
332+
void FindFunctions(const RegularExpression &regex,
333+
const ModuleFunctionSearchOptions &options,
334+
SymbolContextList &sc_list);
324335

325336
/// Find addresses by file/line
326337
///

lldb/include/lldb/Core/ModuleList.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class Target;
4545
class TypeList;
4646
class UUID;
4747
class VariableList;
48+
struct ModuleFunctionSearchOptions;
4849

4950
class ModuleListProperties : public Properties {
5051
mutable llvm::sys::RWMutex m_symlink_paths_mutex;
@@ -252,7 +253,7 @@ class ModuleList {
252253

253254
/// \see Module::FindFunctions ()
254255
void FindFunctions(ConstString name, lldb::FunctionNameType name_type_mask,
255-
bool include_symbols, bool include_inlines,
256+
const ModuleFunctionSearchOptions &options,
256257
SymbolContextList &sc_list) const;
257258

258259
/// \see Module::FindFunctionSymbols ()
@@ -261,8 +262,9 @@ class ModuleList {
261262
SymbolContextList &sc_list);
262263

263264
/// \see Module::FindFunctions ()
264-
void FindFunctions(const RegularExpression &name, bool include_symbols,
265-
bool include_inlines, SymbolContextList &sc_list);
265+
void FindFunctions(const RegularExpression &name,
266+
const ModuleFunctionSearchOptions &options,
267+
SymbolContextList &sc_list);
266268

267269
/// Find global and static variables by name.
268270
///

lldb/source/API/SBModule.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -397,11 +397,13 @@ lldb::SBSymbolContextList SBModule::FindFunctions(const char *name,
397397
lldb::SBSymbolContextList sb_sc_list;
398398
ModuleSP module_sp(GetSP());
399399
if (name && module_sp) {
400-
const bool symbols_ok = true;
401-
const bool inlines_ok = true;
400+
401+
ModuleFunctionSearchOptions function_options;
402+
function_options.include_symbols = true;
403+
function_options.include_inlines = true;
402404
FunctionNameType type = static_cast<FunctionNameType>(name_type_mask);
403405
module_sp->FindFunctions(ConstString(name), CompilerDeclContext(), type,
404-
symbols_ok, inlines_ok, *sb_sc_list);
406+
function_options, *sb_sc_list);
405407
}
406408
return LLDB_RECORD_RESULT(sb_sc_list);
407409
}

lldb/source/API/SBTarget.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1831,11 +1831,13 @@ lldb::SBSymbolContextList SBTarget::FindFunctions(const char *name,
18311831
if (!target_sp)
18321832
return LLDB_RECORD_RESULT(sb_sc_list);
18331833

1834-
const bool symbols_ok = true;
1835-
const bool inlines_ok = true;
1834+
ModuleFunctionSearchOptions function_options;
1835+
function_options.include_symbols = true;
1836+
function_options.include_inlines = true;
1837+
18361838
FunctionNameType mask = static_cast<FunctionNameType>(name_type_mask);
1837-
target_sp->GetImages().FindFunctions(ConstString(name), mask, symbols_ok,
1838-
inlines_ok, *sb_sc_list);
1839+
target_sp->GetImages().FindFunctions(ConstString(name), mask,
1840+
function_options, *sb_sc_list);
18391841
return LLDB_RECORD_RESULT(sb_sc_list);
18401842
}
18411843

@@ -1851,20 +1853,25 @@ lldb::SBSymbolContextList SBTarget::FindGlobalFunctions(const char *name,
18511853
llvm::StringRef name_ref(name);
18521854
TargetSP target_sp(GetSP());
18531855
if (target_sp) {
1856+
ModuleFunctionSearchOptions function_options;
1857+
function_options.include_symbols = true;
1858+
function_options.include_inlines = true;
1859+
18541860
std::string regexstr;
18551861
switch (matchtype) {
18561862
case eMatchTypeRegex:
1857-
target_sp->GetImages().FindFunctions(RegularExpression(name_ref), true,
1858-
true, *sb_sc_list);
1863+
target_sp->GetImages().FindFunctions(RegularExpression(name_ref),
1864+
function_options, *sb_sc_list);
18591865
break;
18601866
case eMatchTypeStartsWith:
18611867
regexstr = llvm::Regex::escape(name) + ".*";
1862-
target_sp->GetImages().FindFunctions(RegularExpression(regexstr), true,
1863-
true, *sb_sc_list);
1868+
target_sp->GetImages().FindFunctions(RegularExpression(regexstr),
1869+
function_options, *sb_sc_list);
18641870
break;
18651871
default:
1866-
target_sp->GetImages().FindFunctions(
1867-
ConstString(name), eFunctionNameTypeAny, true, true, *sb_sc_list);
1872+
target_sp->GetImages().FindFunctions(ConstString(name),
1873+
eFunctionNameTypeAny,
1874+
function_options, *sb_sc_list);
18681875
break;
18691876
}
18701877
}

lldb/source/Breakpoint/BreakpointResolverName.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,10 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,
264264
bool filter_by_cu =
265265
(filter.GetFilterRequiredItems() & eSymbolContextCompUnit) != 0;
266266
bool filter_by_language = (m_language != eLanguageTypeUnknown);
267-
const bool include_symbols = !filter_by_cu;
268-
const bool include_inlines = true;
267+
268+
ModuleFunctionSearchOptions function_options;
269+
function_options.include_symbols = !filter_by_cu;
270+
function_options.include_inlines = true;
269271

270272
switch (m_match_type) {
271273
case Breakpoint::Exact:
@@ -274,8 +276,7 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,
274276
const size_t start_func_idx = func_list.GetSize();
275277
context.module_sp->FindFunctions(
276278
lookup.GetLookupName(), CompilerDeclContext(),
277-
lookup.GetNameTypeMask(), include_symbols, include_inlines,
278-
func_list);
279+
lookup.GetNameTypeMask(), function_options, func_list);
279280

280281
const size_t end_func_idx = func_list.GetSize();
281282

@@ -286,10 +287,7 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,
286287
break;
287288
case Breakpoint::Regexp:
288289
if (context.module_sp) {
289-
context.module_sp->FindFunctions(
290-
m_regex,
291-
!filter_by_cu, // include symbols only if we aren't filtering by CU
292-
include_inlines, func_list);
290+
context.module_sp->FindFunctions(m_regex, function_options, func_list);
293291
}
294292
break;
295293
case Breakpoint::Glob:

lldb/source/Commands/CommandCompletions.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,10 @@ class SymbolCompleter : public Completer {
213213
Address *addr) override {
214214
if (context.module_sp) {
215215
SymbolContextList sc_list;
216-
const bool include_symbols = true;
217-
const bool include_inlines = true;
218-
context.module_sp->FindFunctions(m_regex, include_symbols,
219-
include_inlines, sc_list);
216+
ModuleFunctionSearchOptions function_options;
217+
function_options.include_symbols = true;
218+
function_options.include_inlines = true;
219+
context.module_sp->FindFunctions(m_regex, function_options, sc_list);
220220

221221
SymbolContext sc;
222222
// Now add the functions & symbols to the list - only add if unique:

lldb/source/Commands/CommandObjectDisassemble.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -322,13 +322,15 @@ CommandObjectDisassemble::GetCurrentLineRanges() {
322322
llvm::Expected<std::vector<AddressRange>>
323323
CommandObjectDisassemble::GetNameRanges(CommandReturnObject &result) {
324324
ConstString name(m_options.func_name.c_str());
325-
const bool include_symbols = true;
326-
const bool include_inlines = true;
325+
326+
ModuleFunctionSearchOptions function_options;
327+
function_options.include_symbols = true;
328+
function_options.include_inlines = true;
327329

328330
// Find functions matching the given name.
329331
SymbolContextList sc_list;
330-
GetSelectedTarget().GetImages().FindFunctions(
331-
name, eFunctionNameTypeAuto, include_symbols, include_inlines, sc_list);
332+
GetSelectedTarget().GetImages().FindFunctions(name, eFunctionNameTypeAuto,
333+
function_options, sc_list);
332334

333335
std::vector<AddressRange> ranges;
334336
llvm::Error range_errs = llvm::Error::success();

lldb/source/Commands/CommandObjectSource.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -374,13 +374,16 @@ class CommandObjectSourceInfo : public CommandObjectParsed {
374374
Target *target = m_exe_ctx.GetTargetPtr();
375375
uint32_t addr_byte_size = target->GetArchitecture().GetAddressByteSize();
376376

377+
ModuleFunctionSearchOptions function_options;
378+
function_options.include_symbols = false;
379+
function_options.include_inlines = true;
380+
377381
// Note: module_list can't be const& because FindFunctionSymbols isn't
378382
// const.
379383
ModuleList module_list =
380384
(m_module_list.GetSize() > 0) ? m_module_list : target->GetImages();
381-
module_list.FindFunctions(name, eFunctionNameTypeAuto,
382-
/*include_symbols=*/false,
383-
/*include_inlines=*/true, sc_list_funcs);
385+
module_list.FindFunctions(name, eFunctionNameTypeAuto, function_options,
386+
sc_list_funcs);
384387
size_t num_matches = sc_list_funcs.GetSize();
385388

386389
if (!num_matches) {
@@ -874,12 +877,13 @@ class CommandObjectSourceList : public CommandObjectParsed {
874877
void FindMatchingFunctions(Target *target, ConstString name,
875878
SymbolContextList &sc_list) {
876879
// Displaying the source for a symbol:
877-
bool include_inlines = true;
878-
bool include_symbols = false;
879-
880880
if (m_options.num_lines == 0)
881881
m_options.num_lines = 10;
882882

883+
ModuleFunctionSearchOptions function_options;
884+
function_options.include_symbols = true;
885+
function_options.include_inlines = false;
886+
883887
const size_t num_modules = m_options.modules.size();
884888
if (num_modules > 0) {
885889
ModuleList matching_modules;
@@ -889,15 +893,14 @@ class CommandObjectSourceList : public CommandObjectParsed {
889893
ModuleSpec module_spec(module_file_spec);
890894
matching_modules.Clear();
891895
target->GetImages().FindModules(module_spec, matching_modules);
896+
892897
matching_modules.FindFunctions(name, eFunctionNameTypeAuto,
893-
include_symbols, include_inlines,
894-
sc_list);
898+
function_options, sc_list);
895899
}
896900
}
897901
} else {
898902
target->GetImages().FindFunctions(name, eFunctionNameTypeAuto,
899-
include_symbols, include_inlines,
900-
sc_list);
903+
function_options, sc_list);
901904
}
902905
}
903906

lldb/source/Commands/CommandObjectTarget.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,20 +1570,18 @@ static void DumpSymbolContextList(ExecutionContextScope *exe_scope,
15701570
static size_t LookupFunctionInModule(CommandInterpreter &interpreter,
15711571
Stream &strm, Module *module,
15721572
const char *name, bool name_is_regex,
1573-
bool include_inlines, bool include_symbols,
1573+
const ModuleFunctionSearchOptions &options,
15741574
bool verbose) {
15751575
if (module && name && name[0]) {
15761576
SymbolContextList sc_list;
15771577
size_t num_matches = 0;
15781578
if (name_is_regex) {
15791579
RegularExpression function_name_regex((llvm::StringRef(name)));
1580-
module->FindFunctions(function_name_regex, include_symbols,
1581-
include_inlines, sc_list);
1580+
module->FindFunctions(function_name_regex, options, sc_list);
15821581
} else {
15831582
ConstString function_name(name);
15841583
module->FindFunctions(function_name, CompilerDeclContext(),
1585-
eFunctionNameTypeAuto, include_symbols,
1586-
include_inlines, sc_list);
1584+
eFunctionNameTypeAuto, options, sc_list);
15871585
}
15881586
num_matches = sc_list.GetSize();
15891587
if (num_matches) {
@@ -3281,8 +3279,11 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
32813279

32823280
if (m_options.m_type == eLookupTypeFunctionOrSymbol) {
32833281
ConstString function_name(m_options.m_str.c_str());
3282+
ModuleFunctionSearchOptions function_options;
3283+
function_options.include_symbols = true;
3284+
function_options.include_inlines = false;
32843285
target->GetImages().FindFunctions(function_name, eFunctionNameTypeAuto,
3285-
true, false, sc_list);
3286+
function_options, sc_list);
32863287
} else if (m_options.m_type == eLookupTypeAddress && target) {
32873288
Address addr;
32883289
if (target->GetSectionLoadList().ResolveLoadAddress(m_options.m_addr,
@@ -3753,13 +3754,15 @@ class CommandObjectTargetModulesLookup : public CommandObjectParsed {
37533754
case eLookupTypeFunctionOrSymbol:
37543755
case eLookupTypeFunction:
37553756
if (!m_options.m_str.empty()) {
3756-
if (LookupFunctionInModule(
3757-
m_interpreter, result.GetOutputStream(), module,
3758-
m_options.m_str.c_str(), m_options.m_use_regex,
3759-
m_options.m_include_inlines,
3760-
m_options.m_type ==
3761-
eLookupTypeFunctionOrSymbol, // include symbols
3762-
m_options.m_verbose)) {
3757+
ModuleFunctionSearchOptions function_options;
3758+
function_options.include_symbols =
3759+
m_options.m_type == eLookupTypeFunctionOrSymbol;
3760+
function_options.include_inlines = m_options.m_include_inlines;
3761+
3762+
if (LookupFunctionInModule(m_interpreter, result.GetOutputStream(),
3763+
module, m_options.m_str.c_str(),
3764+
m_options.m_use_regex, function_options,
3765+
m_options.m_verbose)) {
37633766
result.SetStatus(eReturnStatusSuccessFinishResult);
37643767
return true;
37653768
}

lldb/source/Core/Module.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ void Module::LookupInfo::Prune(SymbolContextList &sc_list,
796796
void Module::FindFunctions(ConstString name,
797797
const CompilerDeclContext &parent_decl_ctx,
798798
FunctionNameType name_type_mask,
799-
bool include_symbols, bool include_inlines,
799+
const ModuleFunctionSearchOptions &options,
800800
SymbolContextList &sc_list) {
801801
const size_t old_size = sc_list.GetSize();
802802

@@ -808,12 +808,12 @@ void Module::FindFunctions(ConstString name,
808808

809809
if (symbols) {
810810
symbols->FindFunctions(lookup_info.GetLookupName(), parent_decl_ctx,
811-
lookup_info.GetNameTypeMask(), include_inlines,
812-
sc_list);
811+
lookup_info.GetNameTypeMask(),
812+
options.include_inlines, sc_list);
813813

814814
// Now check our symbol table for symbols that are code symbols if
815815
// requested
816-
if (include_symbols) {
816+
if (options.include_symbols) {
817817
Symtab *symtab = symbols->GetSymtab();
818818
if (symtab)
819819
symtab->FindFunctionSymbols(lookup_info.GetLookupName(),
@@ -828,11 +828,11 @@ void Module::FindFunctions(ConstString name,
828828
} else {
829829
if (symbols) {
830830
symbols->FindFunctions(name, parent_decl_ctx, name_type_mask,
831-
include_inlines, sc_list);
831+
options.include_inlines, sc_list);
832832

833833
// Now check our symbol table for symbols that are code symbols if
834834
// requested
835-
if (include_symbols) {
835+
if (options.include_symbols) {
836836
Symtab *symtab = symbols->GetSymtab();
837837
if (symtab)
838838
symtab->FindFunctionSymbols(name, name_type_mask, sc_list);
@@ -841,17 +841,17 @@ void Module::FindFunctions(ConstString name,
841841
}
842842
}
843843

844-
void Module::FindFunctions(const RegularExpression &regex, bool include_symbols,
845-
bool include_inlines,
844+
void Module::FindFunctions(const RegularExpression &regex,
845+
const ModuleFunctionSearchOptions &options,
846846
SymbolContextList &sc_list) {
847847
const size_t start_size = sc_list.GetSize();
848848

849849
if (SymbolFile *symbols = GetSymbolFile()) {
850-
symbols->FindFunctions(regex, include_inlines, sc_list);
850+
symbols->FindFunctions(regex, options.include_inlines, sc_list);
851851

852852
// Now check our symbol table for symbols that are code symbols if
853853
// requested
854-
if (include_symbols) {
854+
if (options.include_symbols) {
855855
Symtab *symtab = symbols->GetSymtab();
856856
if (symtab) {
857857
std::vector<uint32_t> symbol_indexes;

0 commit comments

Comments
 (0)