diff options
Diffstat (limited to 'lldb/source/Core')
-rw-r--r-- | lldb/source/Core/Address.cpp | 20 | ||||
-rw-r--r-- | lldb/source/Core/Broadcaster.cpp | 87 | ||||
-rw-r--r-- | lldb/source/Core/FileSpec.cpp | 32 | ||||
-rw-r--r-- | lldb/source/Core/Log.cpp | 1 | ||||
-rw-r--r-- | lldb/source/Core/Module.cpp | 15 |
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 |