summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Core')
-rw-r--r--lldb/source/Core/Address.cpp20
-rw-r--r--lldb/source/Core/Broadcaster.cpp87
-rw-r--r--lldb/source/Core/FileSpec.cpp32
-rw-r--r--lldb/source/Core/Log.cpp1
-rw-r--r--lldb/source/Core/Module.cpp15
5 files changed, 81 insertions, 74 deletions
diff --git a/lldb/source/Core/Address.cpp b/lldb/source/Core/Address.cpp
index d8e1f2568a4..a038dd83edc 100644
--- a/lldb/source/Core/Address.cpp
+++ b/lldb/source/Core/Address.cpp
@@ -410,7 +410,8 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
break;
case DumpStyleModuleWithFileAddress:
- s->Printf("%s[", m_section->GetModule()->GetFileSpec().GetFilename().AsCString());
+ if (m_section)
+ s->Printf("%s[", m_section->GetModule()->GetFileSpec().GetFilename().AsCString());
// Fall through
case DumpStyleFileAddress:
{
@@ -422,7 +423,7 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
return false;
}
s->Address (file_addr, addr_size);
- if (style == DumpStyleModuleWithFileAddress)
+ if (style == DumpStyleModuleWithFileAddress && m_section)
s->PutChar(']');
}
break;
@@ -737,21 +738,6 @@ Address::CalculateSymbolContext (SymbolContext *sc)
}
}
-void
-Address::DumpDebug(Stream *s) const
-{
- *s << (void *)this << ": " << "Address";
- if (m_section != NULL)
- {
- *s << ", section = " << (void *)m_section << " (" << m_section->GetName() << "), offset = " << m_offset;
- }
- else
- {
- *s << ", vm_addr = " << m_offset;
- }
- s->EOL();
-}
-
int
Address::CompareFileAddress (const Address& a, const Address& b)
{
diff --git a/lldb/source/Core/Broadcaster.cpp b/lldb/source/Core/Broadcaster.cpp
index 484737329a6..28cd7cb294b 100644
--- a/lldb/source/Core/Broadcaster.cpp
+++ b/lldb/source/Core/Broadcaster.cpp
@@ -23,10 +23,10 @@ using namespace lldb_private;
Broadcaster::Broadcaster (const char *name) :
m_broadcaster_name (name),
- m_broadcaster_listeners (),
- m_broadcaster_listeners_mutex (Mutex::eMutexTypeRecursive),
+ m_listeners (),
+ m_listeners_mutex (Mutex::eMutexTypeRecursive),
m_hijacking_listener(NULL),
- m_hijack_mask(UINT32_MAX)
+ m_hijacking_mask(UINT32_MAX)
{
Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_OBJECT);
if (log)
@@ -42,17 +42,17 @@ Broadcaster::~Broadcaster()
// Scope for "listeners_locker"
{
- Mutex::Locker listeners_locker(m_broadcaster_listeners_mutex);
+ Mutex::Locker listeners_locker(m_listeners_mutex);
// Make sure the listener forgets about this broadcaster. We do
// this in the broadcaster in case the broadcaster object initiates
// the removal.
- collection::iterator pos, end = m_broadcaster_listeners.end();
- for (pos = m_broadcaster_listeners.begin(); pos != end; ++pos)
+ collection::iterator pos, end = m_listeners.end();
+ for (pos = m_listeners.begin(); pos != end; ++pos)
pos->first->BroadcasterWillDestruct (this);
- m_broadcaster_listeners.clear();
+ m_listeners.clear();
}
}
@@ -62,6 +62,37 @@ Broadcaster::GetBroadcasterName ()
return m_broadcaster_name;
}
+bool
+Broadcaster::GetEventNames (Stream &s, uint32_t event_mask, bool prefix_with_broadcaster_name) const
+{
+ uint32_t num_names_added = 0;
+ if (event_mask && !m_event_names.empty())
+ {
+ event_names_map::const_iterator end = m_event_names.end();
+ for (uint32_t bit=1u, mask=event_mask; mask != 0 && bit != 0; bit <<= 1, mask >>= 1)
+ {
+ if (mask & 1)
+ {
+ event_names_map::const_iterator pos = m_event_names.find(bit);
+ if (pos != end)
+ {
+ if (num_names_added > 0)
+ s.PutCString(", ");
+
+ if (prefix_with_broadcaster_name)
+ {
+ s.PutCString (m_broadcaster_name.GetCString());
+ s.PutChar('.');
+ }
+ s.PutCString(pos->second.c_str());
+ ++num_names_added;
+ }
+ }
+ }
+ }
+ return num_names_added > 0;
+}
+
void
Broadcaster::AddInitialEventsToListener (Listener *listener, uint32_t requested_events)
{
@@ -71,13 +102,13 @@ Broadcaster::AddInitialEventsToListener (Listener *listener, uint32_t requested_
uint32_t
Broadcaster::AddListener (Listener* listener, uint32_t event_mask)
{
- Mutex::Locker locker(m_broadcaster_listeners_mutex);
- collection::iterator pos, end = m_broadcaster_listeners.end();
+ Mutex::Locker locker(m_listeners_mutex);
+ collection::iterator pos, end = m_listeners.end();
collection::iterator existing_pos = end;
// See if we already have this listener, and if so, update its mask
uint32_t taken_event_types = 0;
- for (pos = m_broadcaster_listeners.begin(); pos != end; ++pos)
+ for (pos = m_listeners.begin(); pos != end; ++pos)
{
if (pos->first == listener)
existing_pos = pos;
@@ -96,7 +127,7 @@ Broadcaster::AddListener (Listener* listener, uint32_t event_mask)
if (existing_pos == end)
{
// Grant a new listener the available event bits
- m_broadcaster_listeners.push_back(std::make_pair(listener, available_event_types));
+ m_listeners.push_back(std::make_pair(listener, available_event_types));
}
else
{
@@ -117,16 +148,16 @@ Broadcaster::AddListener (Listener* listener, uint32_t event_mask)
bool
Broadcaster::EventTypeHasListeners (uint32_t event_type)
{
- Mutex::Locker locker (m_broadcaster_listeners_mutex);
+ Mutex::Locker locker (m_listeners_mutex);
- if (m_hijacking_listener != NULL && event_type & m_hijack_mask)
+ if (m_hijacking_listener != NULL && event_type & m_hijacking_mask)
return true;
- if (m_broadcaster_listeners.empty())
+ if (m_listeners.empty())
return false;
- collection::iterator pos, end = m_broadcaster_listeners.end();
- for (pos = m_broadcaster_listeners.begin(); pos != end; ++pos)
+ collection::iterator pos, end = m_listeners.end();
+ for (pos = m_listeners.begin(); pos != end; ++pos)
{
if (pos->second & event_type)
return true;
@@ -137,10 +168,10 @@ Broadcaster::EventTypeHasListeners (uint32_t event_type)
bool
Broadcaster::RemoveListener (Listener* listener, uint32_t event_mask)
{
- Mutex::Locker locker(m_broadcaster_listeners_mutex);
- collection::iterator pos, end = m_broadcaster_listeners.end();
+ Mutex::Locker locker(m_listeners_mutex);
+ collection::iterator pos, end = m_listeners.end();
// See if we already have this listener, and if so, update its mask
- for (pos = m_broadcaster_listeners.begin(); pos != end; ++pos)
+ for (pos = m_listeners.begin(); pos != end; ++pos)
{
if (pos->first == listener)
{
@@ -148,7 +179,7 @@ Broadcaster::RemoveListener (Listener* listener, uint32_t event_mask)
pos->second &= ~event_mask;
// If all bits have been relinquished then remove this listener
if (pos->second == 0)
- m_broadcaster_listeners.erase (pos);
+ m_listeners.erase (pos);
return true;
}
}
@@ -191,7 +222,7 @@ Broadcaster::PrivateBroadcastEvent (EventSP &event_sp, bool unique)
unique);
}
- if (m_hijacking_listener != NULL && m_hijack_mask & event_type)
+ if (m_hijacking_listener != NULL && m_hijacking_mask & event_type)
{
if (unique && m_hijacking_listener->PeekAtNextEventForBroadcasterWithType (this, event_type))
return;
@@ -199,12 +230,12 @@ Broadcaster::PrivateBroadcastEvent (EventSP &event_sp, bool unique)
}
else
{
- Mutex::Locker event_types_locker(m_broadcaster_listeners_mutex);
- collection::iterator pos, end = m_broadcaster_listeners.end();
+ Mutex::Locker event_types_locker(m_listeners_mutex);
+ collection::iterator pos, end = m_listeners.end();
// Iterate through all listener/mask pairs
- for (pos = m_broadcaster_listeners.begin(); pos != end; ++pos)
+ for (pos = m_listeners.begin(); pos != end; ++pos)
{
// If the listener's mask matches any bits that we just set, then
// put the new event on its event queue.
@@ -235,21 +266,21 @@ Broadcaster::BroadcastEventIfUnique (uint32_t event_type, EventData *event_data)
bool
Broadcaster::HijackBroadcaster (Listener *listener, uint32_t event_mask)
{
- Mutex::Locker event_types_locker(m_broadcaster_listeners_mutex);
+ Mutex::Locker event_types_locker(m_listeners_mutex);
if (m_hijacking_listener != NULL)
return false;
m_hijacking_listener = listener;
- m_hijack_mask = event_mask;
+ m_hijacking_mask = event_mask;
return true;
}
void
Broadcaster::RestoreBroadcaster ()
{
- Mutex::Locker event_types_locker(m_broadcaster_listeners_mutex);
-
+ Mutex::Locker event_types_locker(m_listeners_mutex);
m_hijacking_listener = NULL;
+ m_hijacking_mask = 0;
}
diff --git a/lldb/source/Core/FileSpec.cpp b/lldb/source/Core/FileSpec.cpp
index a2e994d4af7..c0129915dec 100644
--- a/lldb/source/Core/FileSpec.cpp
+++ b/lldb/source/Core/FileSpec.cpp
@@ -559,41 +559,27 @@ FileSpec::GetFilename() const
// needed as the directory and path are stored in separate string
// values.
//------------------------------------------------------------------
-bool
-FileSpec::GetPath(char *path, size_t max_path_length) const
+size_t
+FileSpec::GetPath(char *path, size_t path_max_len) const
{
- if (max_path_length)
+ if (path_max_len)
{
- const char *dirname = m_directory.AsCString();
- const char *filename = m_filename.AsCString();
+ const char *dirname = m_directory.GetCString();
+ const char *filename = m_filename.GetCString();
if (dirname)
{
if (filename)
- {
- return (size_t)::snprintf (path, max_path_length, "%s/%s", dirname, filename) < max_path_length;
- }
+ return ::snprintf (path, path_max_len, "%s/%s", dirname, filename);
else
- {
- size_t dir_len = m_directory.GetLength() + 1;
- if (dir_len < max_path_length)
- {
- ::memcpy (path, dirname, dir_len);
- return true;
- }
- }
+ return ::snprintf (path, path_max_len, "%s", dirname);
}
else if (filename)
{
- size_t filename_len = m_filename.GetLength() + 1;
- if (filename_len < max_path_length)
- {
- ::memcpy (path, filename, filename_len);
- return true;
- }
+ return ::snprintf (path, path_max_len, "%s", filename);
}
}
path[0] = '\0';
- return false;
+ return 0;
}
//------------------------------------------------------------------
diff --git a/lldb/source/Core/Log.cpp b/lldb/source/Core/Log.cpp
index 16063e483af..2b7b7175e4d 100644
--- a/lldb/source/Core/Log.cpp
+++ b/lldb/source/Core/Log.cpp
@@ -116,6 +116,7 @@ Log::PrintfWithFlagsVarArg (uint32_t flags, const char *format, va_list args)
const char *thread_name_str = Host::GetThreadName (getpid(), Host::GetCurrentThreadID());
if (thread_name_str)
header.Printf ("%s ", thread_name_str);
+
}
header.PrintfVarArg (format, args);
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp
index 4a04dedca88..02ed8652d78 100644
--- a/lldb/source/Core/Module.cpp
+++ b/lldb/source/Core/Module.cpp
@@ -380,13 +380,16 @@ Module::GetDescription (Stream *s)
{
Mutex::Locker locker (m_mutex);
- s->Printf("Module %s/%s%s%s%s\n",
- m_file.GetDirectory().AsCString(),
- m_file.GetFilename().AsCString(),
- m_object_name ? "(" : "",
- m_object_name ? m_object_name.GetCString() : "",
- m_object_name ? ")" : "");
+ if (m_arch.IsValid())
+ s->Printf("(%s) ", m_arch.AsCString());
+ char path[PATH_MAX];
+ if (m_file.GetPath(path, sizeof(path)))
+ s->PutCString(path);
+
+ const char *object_name = m_object_name.GetCString();
+ if (object_name)
+ s->Printf("(%s)", object_name);
}
void
OpenPOWER on IntegriCloud