Fix the process of getting the ObjC runtime - if we ask for it too early (in the process of handling the
load notification for the first load) then we will set it the runtime to NULL and won't re-search for it. Added a way for the dynamic loader to force a re-search, since it knows the world has changed. llvm-svn: 152453
This commit is contained in:
parent
da00aa80b6
commit
ab175242d9
|
@ -3033,14 +3033,14 @@ public:
|
|||
|
||||
|
||||
virtual LanguageRuntime *
|
||||
GetLanguageRuntime (lldb::LanguageType language);
|
||||
GetLanguageRuntime (lldb::LanguageType language, bool retry_if_null = true);
|
||||
|
||||
virtual CPPLanguageRuntime *
|
||||
GetCPPLanguageRuntime ();
|
||||
GetCPPLanguageRuntime (bool retry_if_null = true);
|
||||
|
||||
virtual ObjCLanguageRuntime *
|
||||
GetObjCLanguageRuntime ();
|
||||
|
||||
GetObjCLanguageRuntime (bool retry_if_null = true);
|
||||
|
||||
bool
|
||||
IsRunning () const;
|
||||
|
||||
|
|
|
@ -849,7 +849,7 @@ DynamicLoaderMacOSXDYLD::AddModulesUsingImageInfos (DYLDImageInfo::collection &i
|
|||
// to save time.
|
||||
// Also, I'm assuming there can be only one libobjc dylib loaded...
|
||||
|
||||
ObjCLanguageRuntime *objc_runtime = m_process->GetObjCLanguageRuntime();
|
||||
ObjCLanguageRuntime *objc_runtime = m_process->GetObjCLanguageRuntime(true);
|
||||
if (objc_runtime != NULL && !objc_runtime->HasReadObjCLibrary())
|
||||
{
|
||||
size_t num_modules = loaded_module_list.GetSize();
|
||||
|
|
|
@ -1462,35 +1462,34 @@ Process::GetABI()
|
|||
}
|
||||
|
||||
LanguageRuntime *
|
||||
Process::GetLanguageRuntime(lldb::LanguageType language)
|
||||
Process::GetLanguageRuntime(lldb::LanguageType language, bool retry_if_null)
|
||||
{
|
||||
LanguageRuntimeCollection::iterator pos;
|
||||
pos = m_language_runtimes.find (language);
|
||||
if (pos == m_language_runtimes.end())
|
||||
if (pos == m_language_runtimes.end() || (retry_if_null && !(*pos).second))
|
||||
{
|
||||
lldb::LanguageRuntimeSP runtime(LanguageRuntime::FindPlugin(this, language));
|
||||
lldb::LanguageRuntimeSP runtime_sp(LanguageRuntime::FindPlugin(this, language));
|
||||
|
||||
m_language_runtimes[language]
|
||||
= runtime;
|
||||
return runtime.get();
|
||||
m_language_runtimes[language] = runtime_sp;
|
||||
return runtime_sp.get();
|
||||
}
|
||||
else
|
||||
return (*pos).second.get();
|
||||
}
|
||||
|
||||
CPPLanguageRuntime *
|
||||
Process::GetCPPLanguageRuntime ()
|
||||
Process::GetCPPLanguageRuntime (bool retry_if_null)
|
||||
{
|
||||
LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeC_plus_plus);
|
||||
LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeC_plus_plus, retry_if_null);
|
||||
if (runtime != NULL && runtime->GetLanguageType() == eLanguageTypeC_plus_plus)
|
||||
return static_cast<CPPLanguageRuntime *> (runtime);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ObjCLanguageRuntime *
|
||||
Process::GetObjCLanguageRuntime ()
|
||||
Process::GetObjCLanguageRuntime (bool retry_if_null)
|
||||
{
|
||||
LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeObjC);
|
||||
LanguageRuntime *runtime = GetLanguageRuntime(eLanguageTypeObjC, retry_if_null);
|
||||
if (runtime != NULL && runtime->GetLanguageType() == eLanguageTypeObjC)
|
||||
return static_cast<ObjCLanguageRuntime *> (runtime);
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue