summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Commands/CommandObjectTarget.cpp2
-rw-r--r--lldb/source/DataFormatters/Cocoa.cpp13
-rw-r--r--lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h6
-rw-r--r--lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp15
-rw-r--r--lldb/source/Target/ObjCLanguageRuntime.cpp4
-rw-r--r--lldb/source/Target/Target.cpp18
6 files changed, 43 insertions, 15 deletions
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index 14a743a5c16..19b788258bb 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -4320,7 +4320,7 @@ protected:
// if it is currently loaded
ModuleList module_list;
module_list.Append (module_sp);
- target->ModulesDidLoad (module_list);
+ target->SymbolsDidLoad (module_list);
// Make sure we load any scripting resources that may be embedded
// in the debug info files in case the platform supports that.
diff --git a/lldb/source/DataFormatters/Cocoa.cpp b/lldb/source/DataFormatters/Cocoa.cpp
index 858bba98abc..e7f4def8d15 100644
--- a/lldb/source/DataFormatters/Cocoa.cpp
+++ b/lldb/source/DataFormatters/Cocoa.cpp
@@ -321,12 +321,10 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream&
if (!strcmp(class_name,"NSNumber") || !strcmp(class_name,"__NSCFNumber"))
{
- if (descriptor->IsTagged())
+ uint64_t value = 0;
+ uint64_t i_bits = 0;
+ if (descriptor->GetTaggedPointerInfo(&i_bits,&value))
{
- // we have a call to get info and value bits in the tagged descriptor. but we prefer not to cast and replicate them
- int64_t value = (valobj_addr & ~0x0000000000000000FFL) >> 8;
- uint64_t i_bits = (valobj_addr & 0xF0) >> 4;
-
switch (i_bits)
{
case 0:
@@ -515,10 +513,9 @@ lldb_private::formatters::NSDateSummaryProvider (ValueObject& valobj, Stream& st
strcmp(class_name,"__NSDate") == 0 ||
strcmp(class_name,"__NSTaggedDate") == 0)
{
- if (descriptor->IsTagged())
+ uint64_t info_bits=0,value_bits = 0;
+ if (descriptor->GetTaggedPointerInfo(&info_bits,&value_bits))
{
- uint64_t info_bits = (valobj_addr & 0xF0ULL) >> 4;
- uint64_t value_bits = (valobj_addr & ~0x0000000000000000FFULL) >> 8;
date_value_bits = ((value_bits << 8) | (info_bits << 4));
date_value = *((double*)&date_value_bits);
}
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
index 0de135d1874..419bae998b2 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h
@@ -46,10 +46,12 @@ public:
return m_valid;
}
+ // v1 does not support tagged pointers
virtual bool
- IsTagged ()
+ GetTaggedPointerInfo (uint64_t* info_bits = NULL,
+ uint64_t* value_bits = NULL)
{
- return false; // v1 runtime does not support tagged pointers
+ return false;
}
virtual uint64_t
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
index e46a1fd5002..31916937c0b 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -854,10 +854,12 @@ public:
return true; // any Objective-C v2 runtime class descriptor we vend is valid
}
+ // a custom descriptor is used for tagged pointers
virtual bool
- IsTagged ()
+ GetTaggedPointerInfo (uint64_t* info_bits = NULL,
+ uint64_t* value_bits = NULL)
{
- return false; // we use a special class for tagged descriptors
+ return false;
}
virtual uint64_t
@@ -1530,9 +1532,14 @@ public:
}
virtual bool
- IsTagged ()
+ GetTaggedPointerInfo (uint64_t* info_bits = NULL,
+ uint64_t* value_bits = NULL)
{
- return true; // we use this class to describe tagged pointers
+ if (info_bits)
+ *info_bits = GetInfoBits();
+ if (value_bits)
+ *value_bits = GetValueBits();
+ return true;
}
virtual uint64_t
diff --git a/lldb/source/Target/ObjCLanguageRuntime.cpp b/lldb/source/Target/ObjCLanguageRuntime.cpp
index 87dfc79289c..7e6685662b0 100644
--- a/lldb/source/Target/ObjCLanguageRuntime.cpp
+++ b/lldb/source/Target/ObjCLanguageRuntime.cpp
@@ -92,6 +92,9 @@ ObjCLanguageRuntime::LookupInCompleteClassCache (ConstString &name)
m_complete_class_cache.erase(name);
}
+ if (m_negative_complete_class_cache.count(name) > 0)
+ return TypeSP();
+
const ModuleList &modules = m_process->GetTarget().GetImages();
SymbolContextList sc_list;
@@ -139,6 +142,7 @@ ObjCLanguageRuntime::LookupInCompleteClassCache (ConstString &name)
}
}
}
+ m_negative_complete_class_cache.insert(name);
return TypeSP();
}
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index ba61678375b..ea97fd7d641 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -90,6 +90,7 @@ Target::Target(Debugger &debugger, const ArchSpec &target_arch, const lldb::Plat
SetEventName (eBroadcastBitModulesLoaded, "modules-loaded");
SetEventName (eBroadcastBitModulesUnloaded, "modules-unloaded");
SetEventName (eBroadcastBitWatchpointChanged, "watchpoint-changed");
+ SetEventName (eBroadcastBitSymbolsLoaded, "symbols-loaded");
CheckInWithManager();
@@ -1126,6 +1127,23 @@ Target::ModulesDidLoad (ModuleList &module_list)
}
void
+Target::SymbolsDidLoad (ModuleList &module_list)
+{
+ if (module_list.GetSize() == 0)
+ return;
+ if (m_process_sp)
+ {
+ LanguageRuntime* runtime = m_process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC);
+ if (runtime)
+ {
+ ObjCLanguageRuntime *objc_runtime = (ObjCLanguageRuntime*)runtime;
+ objc_runtime->SymbolsDidLoad(module_list);
+ }
+ }
+ BroadcastEvent(eBroadcastBitSymbolsLoaded, NULL);
+}
+
+void
Target::ModulesDidUnload (ModuleList &module_list)
{
if (module_list.GetSize())
OpenPOWER on IntegriCloud