Skip to content

Commit

Permalink
[NFC] Turn "load dependent files" boolean into an enum
Browse files Browse the repository at this point in the history
This is an NFC commit to refactor the "load dependent files" parameter
from a boolean to an enum value. We want to be able to specify a
default, in which case we decide whether or not to load the dependent
files based on whether the target is an executable or not (i.e. a
dylib).

This is a dependency for D51934.

Differential revision: https://reviews.llvm.org/D51859

llvm-svn: 342633
  • Loading branch information
JDevlieghere committed Sep 20, 2018
1 parent cd53b7f commit f9a07e9
Show file tree
Hide file tree
Showing 25 changed files with 88 additions and 64 deletions.
19 changes: 13 additions & 6 deletions lldb/include/lldb/Target/Target.h
Expand Up @@ -61,6 +61,12 @@ typedef enum LoadCWDlldbinitFile {
eLoadCWDlldbinitWarn
} LoadCWDlldbinitFile;

typedef enum LoadDependentFiles {
eLoadDependentsDefault,
eLoadDependentsYes,
eLoadDependentsNo,
} LoadDependentFiles;

//----------------------------------------------------------------------
// TargetProperties
//----------------------------------------------------------------------
Expand Down Expand Up @@ -682,7 +688,6 @@ class Target : public std::enable_shared_from_this<Target>,
const BreakpointOptions &options,
const BreakpointName::Permissions &permissions);
void ApplyNameToBreakpoints(BreakpointName &bp_name);


// This takes ownership of the name obj passed in.
void AddBreakpointName(BreakpointName *bp_name);
Expand Down Expand Up @@ -770,9 +775,9 @@ class Target : public std::enable_shared_from_this<Target>,
/// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
/// returned.
//------------------------------------------------------------------
lldb::addr_t GetOpcodeLoadAddress(
lldb::addr_t load_addr,
AddressClass addr_class = AddressClass::eInvalid) const;
lldb::addr_t
GetOpcodeLoadAddress(lldb::addr_t load_addr,
AddressClass addr_class = AddressClass::eInvalid) const;

// Get load_addr as breakable load address for this target. Take a addr and
// check if for any reason there is a better address than this to put a
Expand Down Expand Up @@ -843,14 +848,16 @@ class Target : public std::enable_shared_from_this<Target>,
/// A shared pointer reference to the module that will become
/// the main executable for this process.
///
/// @param[in] get_dependent_files
/// @param[in] load_dependent_files
/// If \b true then ask the object files to track down any
/// known dependent files.
///
/// @see ObjectFile::GetDependentModules (FileSpecList&)
/// @see Process::GetImages()
//------------------------------------------------------------------
void SetExecutableModule(lldb::ModuleSP &module_sp, bool get_dependent_files);
void SetExecutableModule(
lldb::ModuleSP &module_sp,
LoadDependentFiles load_dependent_files = eLoadDependentsDefault);

bool LoadScriptingResources(std::list<Status> &errors,
Stream *feedback_stream = nullptr,
Expand Down
11 changes: 7 additions & 4 deletions lldb/include/lldb/Target/TargetList.h
Expand Up @@ -92,7 +92,8 @@ class TargetList : public Broadcaster {
/// An error object that indicates success or failure
//------------------------------------------------------------------
Status CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path,
llvm::StringRef triple_str, bool get_dependent_modules,
llvm::StringRef triple_str,
LoadDependentFiles get_dependent_modules,
const OptionGroupPlatform *platform_options,
lldb::TargetSP &target_sp);

Expand All @@ -103,7 +104,8 @@ class TargetList : public Broadcaster {
/// platform you will be using
//------------------------------------------------------------------
Status CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path,
const ArchSpec &arch, bool get_dependent_modules,
const ArchSpec &arch,
LoadDependentFiles get_dependent_modules,
lldb::PlatformSP &platform_sp, lldb::TargetSP &target_sp);

//------------------------------------------------------------------
Expand Down Expand Up @@ -217,12 +219,13 @@ class TargetList : public Broadcaster {

Status CreateTargetInternal(Debugger &debugger, llvm::StringRef user_exe_path,
llvm::StringRef triple_str,
bool get_dependent_files,
LoadDependentFiles load_dependent_files,
const OptionGroupPlatform *platform_options,
lldb::TargetSP &target_sp, bool is_dummy_target);

Status CreateTargetInternal(Debugger &debugger, llvm::StringRef user_exe_path,
const ArchSpec &arch, bool get_dependent_modules,
const ArchSpec &arch,
LoadDependentFiles get_dependent_modules,
lldb::PlatformSP &platform_sp,
lldb::TargetSP &target_sp, bool is_dummy_target);

Expand Down
13 changes: 9 additions & 4 deletions lldb/source/API/SBDebugger.cpp
Expand Up @@ -558,7 +558,8 @@ lldb::SBTarget SBDebugger::CreateTarget(const char *filename,
platform_options.SetPlatformName(platform_name);

sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget(
*m_opaque_sp, filename, target_triple, add_dependent_modules,
*m_opaque_sp, filename, target_triple,
add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo,
&platform_options, target_sp);

if (sb_error.Success())
Expand Down Expand Up @@ -587,7 +588,8 @@ SBDebugger::CreateTargetWithFileAndTargetTriple(const char *filename,
if (m_opaque_sp) {
const bool add_dependent_modules = true;
Status error(m_opaque_sp->GetTargetList().CreateTarget(
*m_opaque_sp, filename, target_triple, add_dependent_modules, nullptr,
*m_opaque_sp, filename, target_triple,
add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
target_sp));
sb_target.SetSP(target_sp);
}
Expand All @@ -613,7 +615,8 @@ SBTarget SBDebugger::CreateTargetWithFileAndArch(const char *filename,
const bool add_dependent_modules = true;

error = m_opaque_sp->GetTargetList().CreateTarget(
*m_opaque_sp, filename, arch_cstr, add_dependent_modules, nullptr,
*m_opaque_sp, filename, arch_cstr,
add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
target_sp);

if (error.Success()) {
Expand All @@ -638,7 +641,9 @@ SBTarget SBDebugger::CreateTarget(const char *filename) {
Status error;
const bool add_dependent_modules = true;
error = m_opaque_sp->GetTargetList().CreateTarget(
*m_opaque_sp, filename, "", add_dependent_modules, nullptr, target_sp);
*m_opaque_sp, filename, "",
add_dependent_modules ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
target_sp);

if (error.Success()) {
m_opaque_sp->GetTargetList().SetSelectedTarget(target_sp.get());
Expand Down
2 changes: 1 addition & 1 deletion lldb/source/Commands/CommandObjectProcess.cpp
Expand Up @@ -459,7 +459,7 @@ class CommandObjectProcessAttach : public CommandObjectProcessLaunchOrAttach {
Status error;

error = m_interpreter.GetDebugger().GetTargetList().CreateTarget(
m_interpreter.GetDebugger(), "", "", false,
m_interpreter.GetDebugger(), "", "", eLoadDependentsNo,
nullptr, // No platform options
new_target_sp);
target = new_target_sp.get();
Expand Down
3 changes: 2 additions & 1 deletion lldb/source/Commands/CommandObjectTarget.cpp
Expand Up @@ -262,7 +262,8 @@ class CommandObjectTargetCreate : public CommandObjectParsed {
const bool get_dependent_files =
m_add_dependents.GetOptionValue().GetCurrentValue();
Status error(debugger.GetTargetList().CreateTarget(
debugger, file_path, arch_cstr, get_dependent_files, nullptr,
debugger, file_path, arch_cstr,
get_dependent_files ? eLoadDependentsYes : eLoadDependentsNo, nullptr,
target_sp));

if (target_sp) {
Expand Down
3 changes: 1 addition & 2 deletions lldb/source/Core/DynamicLoader.cpp
Expand Up @@ -101,8 +101,7 @@ ModuleSP DynamicLoader::GetTargetExecutable() {
if (executable.get() != target.GetExecutableModulePointer()) {
// Don't load dependent images since we are in dyld where we will
// know and find out about all images that are loaded
const bool get_dependent_images = false;
target.SetExecutableModule(executable, get_dependent_images);
target.SetExecutableModule(executable, eLoadDependentsNo);
}
}
}
Expand Down
Expand Up @@ -848,7 +848,7 @@ bool DynamicLoaderDarwinKernel::KextImageInfo::LoadImageUsingMemoryModule(
target.GetImages().AppendIfNeeded(m_module_sp);
if (IsKernel() &&
target.GetExecutableModulePointer() != m_module_sp.get()) {
target.SetExecutableModule(m_module_sp, false);
target.SetExecutableModule(m_module_sp, eLoadDependentsNo);
}
}
}
Expand Down
Expand Up @@ -205,8 +205,7 @@ ModuleSP DynamicLoaderHexagonDYLD::GetTargetExecutable() {
if (executable.get() != target.GetExecutableModulePointer()) {
// Don't load dependent images since we are in dyld where we will know and
// find out about all images that are loaded
const bool get_dependent_images = false;
target.SetExecutableModule(executable, get_dependent_images);
target.SetExecutableModule(executable, eLoadDependentsNo);
}

return executable;
Expand Down
Expand Up @@ -555,8 +555,7 @@ void DynamicLoaderDarwin::UpdateSpecialBinariesFromNewImageInfos(
target.GetImages().AppendIfNeeded(exe_module_sp);
UpdateImageLoadAddress(exe_module_sp.get(), image_infos[exe_idx]);
if (exe_module_sp.get() != target.GetExecutableModulePointer()) {
const bool get_dependent_images = false;
target.SetExecutableModule(exe_module_sp, get_dependent_images);
target.SetExecutableModule(exe_module_sp, eLoadDependentsNo);
}
}
}
Expand Down
Expand Up @@ -975,9 +975,8 @@ void DynamicLoaderMacOSXDYLD::UpdateImageInfosHeaderAndLoadCommands(
// re-add it back to make sure it is always in the list.
ModuleSP dyld_module_sp(GetDYLDModule());

const bool get_dependent_images = false;
m_process->GetTarget().SetExecutableModule(exe_module_sp,
get_dependent_images);
eLoadDependentsNo);

if (dyld_module_sp) {
if (target.GetImages().AppendIfNeeded(dyld_module_sp)) {
Expand Down
Expand Up @@ -756,7 +756,7 @@ void DynamicLoaderPOSIXDYLD::ResolveExecutableModule(
return;
}

target.SetExecutableModule(module_sp, false);
target.SetExecutableModule(module_sp, eLoadDependentsNo);
}

bool DynamicLoaderPOSIXDYLD::AlwaysRelyOnEHUnwindInfo(
Expand Down
6 changes: 3 additions & 3 deletions lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp
Expand Up @@ -274,9 +274,9 @@ lldb::ProcessSP PlatformFreeBSD::Attach(ProcessAttachInfo &attach_info,
TargetSP new_target_sp;
ArchSpec emptyArchSpec;

error = debugger.GetTargetList().CreateTarget(debugger, "", emptyArchSpec,
false, m_remote_platform_sp,
new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", emptyArchSpec, eLoadDependentsNo, m_remote_platform_sp,
new_target_sp);
target = new_target_sp.get();
} else
error.Clear();
Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp
Expand Up @@ -302,8 +302,8 @@ PlatformLinux::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger,
if (target == nullptr) {
LLDB_LOG(log, "creating new target");
TargetSP new_target_sp;
error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
nullptr, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, nullptr, new_target_sp);
if (error.Fail()) {
LLDB_LOG(log, "failed to create new target: {0}", error);
return process_sp;
Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp
Expand Up @@ -271,8 +271,8 @@ PlatformNetBSD::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger,
if (target == nullptr) {
LLDB_LOG(log, "creating new target");
TargetSP new_target_sp;
error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
nullptr, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, nullptr, new_target_sp);
if (error.Fail()) {
LLDB_LOG(log, "failed to create new target: {0}", error);
return process_sp;
Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
Expand Up @@ -813,8 +813,8 @@ lldb::ProcessSP PlatformPOSIX::Attach(ProcessAttachInfo &attach_info,
if (target == NULL) {
TargetSP new_target_sp;

error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
NULL, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, NULL, new_target_sp);
target = new_target_sp.get();
if (log)
log->Printf("PlatformPOSIX::%s created new target", __FUNCTION__);
Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Platform/Windows/PlatformWindows.cpp
Expand Up @@ -470,8 +470,8 @@ lldb::ProcessSP PlatformWindows::Attach(ProcessAttachInfo &attach_info,
FileSpec emptyFileSpec;
ArchSpec emptyArchSpec;

error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
nullptr, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, nullptr, new_target_sp);
target = new_target_sp.get();
}

Expand Down
Expand Up @@ -488,8 +488,8 @@ lldb::ProcessSP PlatformRemoteGDBServer::DebugProcess(
if (target == NULL) {
TargetSP new_target_sp;

error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
NULL, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, NULL, new_target_sp);
target = new_target_sp.get();
} else
error.Clear();
Expand Down Expand Up @@ -574,8 +574,8 @@ lldb::ProcessSP PlatformRemoteGDBServer::Attach(
if (target == NULL) {
TargetSP new_target_sp;

error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
NULL, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, NULL, new_target_sp);
target = new_target_sp.get();
} else
error.Clear();
Expand Down
2 changes: 1 addition & 1 deletion lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
Expand Up @@ -319,7 +319,7 @@ Status ProcessKDP::DoConnectRemote(Stream *strm, llvm::StringRef remote_url) {
// Make sure you don't already have the right module loaded
// and they will be uniqued
if (exe_module_sp.get() != module_sp.get())
target.SetExecutableModule(module_sp, false);
target.SetExecutableModule(module_sp, eLoadDependentsNo);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
Expand Up @@ -254,7 +254,7 @@ Status ProcessElfCore::DoLoadCore() {
if (exe_module_spec.GetFileSpec()) {
exe_module_sp = GetTarget().GetSharedModule(exe_module_spec);
if (exe_module_sp)
GetTarget().SetExecutableModule(exe_module_sp, false);
GetTarget().SetExecutableModule(exe_module_sp, eLoadDependentsNo);
}
}
}
Expand Down
Expand Up @@ -4802,7 +4802,7 @@ size_t ProcessGDBRemote::LoadModules(LoadedModuleInfoList &module_list) {
return true;

lldb::ModuleSP module_copy_sp = module_sp;
target.SetExecutableModule(module_copy_sp, false);
target.SetExecutableModule(module_copy_sp, eLoadDependentsNo);
return false;
});

Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Target/Platform.cpp
Expand Up @@ -1822,8 +1822,8 @@ lldb::ProcessSP Platform::ConnectProcess(llvm::StringRef connect_url,

if (!target) {
TargetSP new_target_sp;
error = debugger.GetTargetList().CreateTarget(debugger, "", "", false,
nullptr, new_target_sp);
error = debugger.GetTargetList().CreateTarget(
debugger, "", "", eLoadDependentsNo, nullptr, new_target_sp);
target = new_target_sp.get();
}

Expand Down
3 changes: 2 additions & 1 deletion lldb/source/Target/Process.cpp
Expand Up @@ -3215,7 +3215,8 @@ void Process::CompleteAttach() {
}
}
if (new_executable_module_sp) {
GetTarget().SetExecutableModule(new_executable_module_sp, false);
GetTarget().SetExecutableModule(new_executable_module_sp,
eLoadDependentsNo);
if (log) {
ModuleSP exe_module_sp = GetTarget().GetExecutableModule();
log->Printf(
Expand Down
20 changes: 16 additions & 4 deletions lldb/source/Target/Target.cpp
Expand Up @@ -1422,7 +1422,7 @@ void Target::DidExec() {
}

void Target::SetExecutableModule(ModuleSP &executable_sp,
bool get_dependent_files) {
LoadDependentFiles load_dependent_files) {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_TARGET));
ClearModules(false);

Expand All @@ -1446,8 +1446,20 @@ void Target::SetExecutableModule(ModuleSP &executable_sp,

FileSpecList dependent_files;
ObjectFile *executable_objfile = executable_sp->GetObjectFile();
bool load_dependens;
switch (load_dependent_files) {
case eLoadDependentsDefault:
load_dependens = executable_sp->IsExecutable();
break;
case eLoadDependentsYes:
load_dependens = true;
break;
case eLoadDependentsNo:
load_dependens = false;
break;
}

if (executable_objfile && get_dependent_files) {
if (executable_objfile && load_dependens) {
executable_objfile->GetDependentModules(dependent_files);
for (uint32_t i = 0; i < dependent_files.GetSize(); i++) {
FileSpec dependent_file_spec(
Expand Down Expand Up @@ -1552,7 +1564,7 @@ bool Target::SetArchitecture(const ArchSpec &arch_spec, bool set_platform) {
nullptr, nullptr);

if (!error.Fail() && executable_sp) {
SetExecutableModule(executable_sp, true);
SetExecutableModule(executable_sp, eLoadDependentsYes);
return true;
}
}
Expand Down Expand Up @@ -2122,7 +2134,7 @@ void Target::ImageSearchPathsChanged(const PathMappingList &path_list,
Target *target = (Target *)baton;
ModuleSP exe_module_sp(target->GetExecutableModule());
if (exe_module_sp)
target->SetExecutableModule(exe_module_sp, true);
target->SetExecutableModule(exe_module_sp, eLoadDependentsYes);
}

TypeSystem *Target::GetScratchTypeSystemForLanguage(Status *error,
Expand Down

0 comments on commit f9a07e9

Please sign in to comment.