Author: zturner Date: Fri Mar 3 19:28:55 2017 New Revision: 296941 URL: http://llvm.org/viewvc/llvm-project?rev=296941&view=rev Log: Move UUID from Core -> Utility.
Added: lldb/trunk/include/lldb/Utility/UUID.h lldb/trunk/source/Utility/UUID.cpp Removed: lldb/trunk/include/lldb/Core/UUID.h lldb/trunk/source/Core/UUID.cpp Modified: lldb/trunk/include/lldb/Core/Module.h lldb/trunk/include/lldb/Core/ModuleSpec.h lldb/trunk/include/lldb/Interpreter/OptionValueUUID.h lldb/trunk/include/lldb/Target/DynamicLoader.h lldb/trunk/source/Core/CMakeLists.txt lldb/trunk/source/Core/DataExtractor.cpp lldb/trunk/source/Host/common/Symbols.cpp lldb/trunk/source/Host/macosx/Symbols.cpp lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.h lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h lldb/trunk/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp lldb/trunk/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp lldb/trunk/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h lldb/trunk/source/Utility/CMakeLists.txt Modified: lldb/trunk/include/lldb/Core/Module.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Module.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/Module.h (original) +++ lldb/trunk/include/lldb/Core/Module.h Fri Mar 3 19:28:55 2017 @@ -14,7 +14,7 @@ // Project includes #include "lldb/Core/ArchSpec.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Symbol/TypeSystem.h" #include "lldb/Target/PathMappingList.h" Modified: lldb/trunk/include/lldb/Core/ModuleSpec.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ModuleSpec.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/ModuleSpec.h (original) +++ lldb/trunk/include/lldb/Core/ModuleSpec.h Fri Mar 3 19:28:55 2017 @@ -12,7 +12,7 @@ // Project includes #include "lldb/Core/ArchSpec.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/PathMappingList.h" #include "lldb/Utility/Stream.h" Removed: lldb/trunk/include/lldb/Core/UUID.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/UUID.h?rev=296940&view=auto ============================================================================== --- lldb/trunk/include/lldb/Core/UUID.h (original) +++ lldb/trunk/include/lldb/Core/UUID.h (removed) @@ -1,96 +0,0 @@ -//===-- UUID.h --------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef liblldb_UUID_h_ -#define liblldb_UUID_h_ - -// C Includes -// C++ Includes -#include <string> - -// Other libraries and framework includes -// Project includes -#include "lldb/lldb-private.h" - -namespace lldb_private { - -class UUID { -public: - // Most UUIDs are 16 bytes, but some Linux build-ids (SHA1) are 20. - typedef uint8_t ValueType[20]; - - //------------------------------------------------------------------ - // Constructors and Destructors - //------------------------------------------------------------------ - UUID(); - UUID(const UUID &rhs); - UUID(const void *uuid_bytes, uint32_t num_uuid_bytes); - - ~UUID(); - - const UUID &operator=(const UUID &rhs); - - void Clear(); - - void Dump(Stream *s) const; - - const void *GetBytes() const; - - size_t GetByteSize(); - - bool IsValid() const; - - bool SetBytes(const void *uuid_bytes, uint32_t num_uuid_bytes = 16); - - std::string GetAsString(const char *separator = nullptr) const; - - size_t SetFromCString(const char *c_str, uint32_t num_uuid_bytes = 16); - - // Decode as many UUID bytes (up to 16) as possible from the C string "cstr" - // This is used for auto completion where a partial UUID might have been - // typed in. It - //------------------------------------------------------------------ - /// Decode as many UUID bytes (up to 16) as possible from the C - /// string \a cstr. - /// - /// @param[in] cstr - /// A NULL terminate C string that points at a UUID string value - /// (no leading spaces). The string must contain only hex - /// characters and optionally can contain the '-' sepearators. - /// - /// @param[in] uuid_bytes - /// A buffer of bytes that will contain a full or patially - /// decoded UUID. - /// - /// @return - /// The original string, with all decoded bytes removed. - //------------------------------------------------------------------ - static llvm::StringRef - DecodeUUIDBytesFromString(llvm::StringRef str, ValueType &uuid_bytes, - uint32_t &bytes_decoded, - uint32_t num_uuid_bytes = 16); - -protected: - //------------------------------------------------------------------ - // Classes that inherit from UUID can see and modify these - //------------------------------------------------------------------ - uint32_t m_num_uuid_bytes; // Should be 16 or 20 - ValueType m_uuid; -}; - -bool operator==(const UUID &lhs, const UUID &rhs); -bool operator!=(const UUID &lhs, const UUID &rhs); -bool operator<(const UUID &lhs, const UUID &rhs); -bool operator<=(const UUID &lhs, const UUID &rhs); -bool operator>(const UUID &lhs, const UUID &rhs); -bool operator>=(const UUID &lhs, const UUID &rhs); - -} // namespace lldb_private - -#endif // liblldb_UUID_h_ Modified: lldb/trunk/include/lldb/Interpreter/OptionValueUUID.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/OptionValueUUID.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/include/lldb/Interpreter/OptionValueUUID.h (original) +++ lldb/trunk/include/lldb/Interpreter/OptionValueUUID.h Fri Mar 3 19:28:55 2017 @@ -14,7 +14,7 @@ // C++ Includes // Other libraries and framework includes // Project includes -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Interpreter/OptionValue.h" namespace lldb_private { Modified: lldb/trunk/include/lldb/Target/DynamicLoader.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/DynamicLoader.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/DynamicLoader.h (original) +++ lldb/trunk/include/lldb/Target/DynamicLoader.h Fri Mar 3 19:28:55 2017 @@ -12,7 +12,7 @@ // Project includes #include "lldb/Core/PluginInterface.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Utility/Error.h" #include "lldb/lldb-private.h" Added: lldb/trunk/include/lldb/Utility/UUID.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/UUID.h?rev=296941&view=auto ============================================================================== --- lldb/trunk/include/lldb/Utility/UUID.h (added) +++ lldb/trunk/include/lldb/Utility/UUID.h Fri Mar 3 19:28:55 2017 @@ -0,0 +1,99 @@ +//===-- UUID.h --------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_UTILITY_UUID_H +#define LLDB_UTILITY_UUID_H + +// C Includes +// C++ Includes +#include <stdint.h> +#include <string> + +namespace llvm { + class StringRef; +} + +namespace lldb_private { + + class Stream; + +class UUID { +public: + // Most UUIDs are 16 bytes, but some Linux build-ids (SHA1) are 20. + typedef uint8_t ValueType[20]; + + //------------------------------------------------------------------ + // Constructors and Destructors + //------------------------------------------------------------------ + UUID(); + UUID(const UUID &rhs); + UUID(const void *uuid_bytes, uint32_t num_uuid_bytes); + + ~UUID(); + + const UUID &operator=(const UUID &rhs); + + void Clear(); + + void Dump(Stream *s) const; + + const void *GetBytes() const; + + size_t GetByteSize(); + + bool IsValid() const; + + bool SetBytes(const void *uuid_bytes, uint32_t num_uuid_bytes = 16); + + std::string GetAsString(const char *separator = nullptr) const; + + size_t SetFromCString(const char *c_str, uint32_t num_uuid_bytes = 16); + + // Decode as many UUID bytes (up to 16) as possible from the C string "cstr" + // This is used for auto completion where a partial UUID might have been + // typed in. It + //------------------------------------------------------------------ + /// Decode as many UUID bytes (up to 16) as possible from the C + /// string \a cstr. + /// + /// @param[in] cstr + /// A NULL terminate C string that points at a UUID string value + /// (no leading spaces). The string must contain only hex + /// characters and optionally can contain the '-' sepearators. + /// + /// @param[in] uuid_bytes + /// A buffer of bytes that will contain a full or patially + /// decoded UUID. + /// + /// @return + /// The original string, with all decoded bytes removed. + //------------------------------------------------------------------ + static llvm::StringRef + DecodeUUIDBytesFromString(llvm::StringRef str, ValueType &uuid_bytes, + uint32_t &bytes_decoded, + uint32_t num_uuid_bytes = 16); + +protected: + //------------------------------------------------------------------ + // Classes that inherit from UUID can see and modify these + //------------------------------------------------------------------ + uint32_t m_num_uuid_bytes; // Should be 16 or 20 + ValueType m_uuid; +}; + +bool operator==(const UUID &lhs, const UUID &rhs); +bool operator!=(const UUID &lhs, const UUID &rhs); +bool operator<(const UUID &lhs, const UUID &rhs); +bool operator<=(const UUID &lhs, const UUID &rhs); +bool operator>(const UUID &lhs, const UUID &rhs); +bool operator>=(const UUID &lhs, const UUID &rhs); + +} // namespace lldb_private + +#endif // LLDB_UTILITY_UUID_H Modified: lldb/trunk/source/Core/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/CMakeLists.txt?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Core/CMakeLists.txt (original) +++ lldb/trunk/source/Core/CMakeLists.txt Fri Mar 3 19:28:55 2017 @@ -47,7 +47,6 @@ add_lldb_library(lldbCore Timer.cpp UserID.cpp UserSettingsController.cpp - UUID.cpp Value.cpp ValueObject.cpp ValueObjectCast.cpp Modified: lldb/trunk/source/Core/DataExtractor.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/DataExtractor.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Core/DataExtractor.cpp (original) +++ lldb/trunk/source/Core/DataExtractor.cpp Fri Mar 3 19:28:55 2017 @@ -24,7 +24,7 @@ #include "lldb/Core/DataBuffer.h" #include "lldb/Core/DataBufferHeap.h" #include "lldb/Core/DataExtractor.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Utility/Endian.h" #include "lldb/Utility/Log.h" #include "lldb/Utility/Stream.h" Removed: lldb/trunk/source/Core/UUID.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/UUID.cpp?rev=296940&view=auto ============================================================================== --- lldb/trunk/source/Core/UUID.cpp (original) +++ lldb/trunk/source/Core/UUID.cpp (removed) @@ -1,224 +0,0 @@ -//===-- UUID.cpp ------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "lldb/Core/UUID.h" -// C Includes -#include <ctype.h> -#include <stdio.h> -#include <string.h> - -// C++ Includes -#include <string> - -// Other libraries and framework includes -// Project includes -#include "lldb/Utility/Stream.h" - -namespace lldb_private { - -UUID::UUID() : m_num_uuid_bytes(16) { ::memset(m_uuid, 0, sizeof(m_uuid)); } - -UUID::UUID(const UUID &rhs) { - m_num_uuid_bytes = rhs.m_num_uuid_bytes; - ::memcpy(m_uuid, rhs.m_uuid, sizeof(m_uuid)); -} - -UUID::UUID(const void *uuid_bytes, uint32_t num_uuid_bytes) { - SetBytes(uuid_bytes, num_uuid_bytes); -} - -const UUID &UUID::operator=(const UUID &rhs) { - if (this != &rhs) { - m_num_uuid_bytes = rhs.m_num_uuid_bytes; - ::memcpy(m_uuid, rhs.m_uuid, sizeof(m_uuid)); - } - return *this; -} - -UUID::~UUID() {} - -void UUID::Clear() { - m_num_uuid_bytes = 16; - ::memset(m_uuid, 0, sizeof(m_uuid)); -} - -const void *UUID::GetBytes() const { return m_uuid; } - -std::string UUID::GetAsString(const char *separator) const { - std::string result; - char buf[256]; - if (!separator) - separator = "-"; - const uint8_t *u = (const uint8_t *)GetBytes(); - if (sizeof(buf) > - (size_t)snprintf(buf, sizeof(buf), "%2.2X%2.2X%2.2X%2.2X%s%2.2X%2.2X%s%2." - "2X%2.2X%s%2.2X%2.2X%s%2.2X%2.2X%2.2X%" - "2.2X%2.2X%2.2X", - u[0], u[1], u[2], u[3], separator, u[4], u[5], separator, - u[6], u[7], separator, u[8], u[9], separator, u[10], - u[11], u[12], u[13], u[14], u[15])) { - result.append(buf); - if (m_num_uuid_bytes == 20) { - if (sizeof(buf) > (size_t)snprintf(buf, sizeof(buf), - "%s%2.2X%2.2X%2.2X%2.2X", separator, - u[16], u[17], u[18], u[19])) - result.append(buf); - } - } - return result; -} - -void UUID::Dump(Stream *s) const { - const uint8_t *u = (const uint8_t *)GetBytes(); - s->Printf("%2.2X%2.2X%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X%" - "2.2X%2.2X%2.2X%2.2X", - u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7], u[8], u[9], u[10], - u[11], u[12], u[13], u[14], u[15]); - if (m_num_uuid_bytes == 20) { - s->Printf("-%2.2X%2.2X%2.2X%2.2X", u[16], u[17], u[18], u[19]); - } -} - -bool UUID::SetBytes(const void *uuid_bytes, uint32_t num_uuid_bytes) { - if (uuid_bytes) { - switch (num_uuid_bytes) { - case 20: - m_num_uuid_bytes = 20; - break; - case 16: - m_num_uuid_bytes = 16; - m_uuid[16] = m_uuid[17] = m_uuid[18] = m_uuid[19] = 0; - break; - default: - // Unsupported UUID byte size - m_num_uuid_bytes = 0; - break; - } - - if (m_num_uuid_bytes > 0) { - ::memcpy(m_uuid, uuid_bytes, m_num_uuid_bytes); - return true; - } - } - ::memset(m_uuid, 0, sizeof(m_uuid)); - return false; -} - -size_t UUID::GetByteSize() { return m_num_uuid_bytes; } - -bool UUID::IsValid() const { - return m_uuid[0] || m_uuid[1] || m_uuid[2] || m_uuid[3] || m_uuid[4] || - m_uuid[5] || m_uuid[6] || m_uuid[7] || m_uuid[8] || m_uuid[9] || - m_uuid[10] || m_uuid[11] || m_uuid[12] || m_uuid[13] || m_uuid[14] || - m_uuid[15] || m_uuid[16] || m_uuid[17] || m_uuid[18] || m_uuid[19]; -} - -static inline int xdigit_to_int(char ch) { - ch = tolower(ch); - if (ch >= 'a' && ch <= 'f') - return 10 + ch - 'a'; - return ch - '0'; -} - -llvm::StringRef UUID::DecodeUUIDBytesFromString(llvm::StringRef p, - ValueType &uuid_bytes, - uint32_t &bytes_decoded, - uint32_t num_uuid_bytes) { - ::memset(uuid_bytes, 0, sizeof(uuid_bytes)); - size_t uuid_byte_idx = 0; - while (!p.empty()) { - if (isxdigit(p[0]) && isxdigit(p[1])) { - int hi_nibble = xdigit_to_int(p[0]); - int lo_nibble = xdigit_to_int(p[1]); - // Translate the two hex nibble characters into a byte - uuid_bytes[uuid_byte_idx] = (hi_nibble << 4) + lo_nibble; - - // Skip both hex digits - p = p.drop_front(2); - - // Increment the byte that we are decoding within the UUID value - // and break out if we are done - if (++uuid_byte_idx == num_uuid_bytes) - break; - } else if (p.front() == '-') { - // Skip dashes - p = p.drop_front(); - } else { - // UUID values can only consist of hex characters and '-' chars - break; - } - } - - // Clear trailing bytes to 0. - for (uint32_t i = uuid_byte_idx; i < sizeof(ValueType); i++) - uuid_bytes[i] = 0; - bytes_decoded = uuid_byte_idx; - return p; -} -size_t UUID::SetFromCString(const char *cstr, uint32_t num_uuid_bytes) { - if (cstr == NULL) - return 0; - - llvm::StringRef orig(cstr); - llvm::StringRef p = orig; - - // Skip leading whitespace characters - p = p.ltrim(); - - uint32_t bytes_decoded = 0; - llvm::StringRef rest = - UUID::DecodeUUIDBytesFromString(p, m_uuid, bytes_decoded, num_uuid_bytes); - - // If we successfully decoded a UUID, return the amount of characters that - // were consumed - if (bytes_decoded == num_uuid_bytes) { - m_num_uuid_bytes = num_uuid_bytes; - return orig.size() - rest.size(); - } - - // Else return zero to indicate we were not able to parse a UUID value - return 0; -} -} - -bool lldb_private::operator==(const lldb_private::UUID &lhs, - const lldb_private::UUID &rhs) { - return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), - sizeof(lldb_private::UUID::ValueType)) == 0; -} - -bool lldb_private::operator!=(const lldb_private::UUID &lhs, - const lldb_private::UUID &rhs) { - return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), - sizeof(lldb_private::UUID::ValueType)) != 0; -} - -bool lldb_private::operator<(const lldb_private::UUID &lhs, - const lldb_private::UUID &rhs) { - return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), - sizeof(lldb_private::UUID::ValueType)) < 0; -} - -bool lldb_private::operator<=(const lldb_private::UUID &lhs, - const lldb_private::UUID &rhs) { - return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), - sizeof(lldb_private::UUID::ValueType)) <= 0; -} - -bool lldb_private::operator>(const lldb_private::UUID &lhs, - const lldb_private::UUID &rhs) { - return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), - sizeof(lldb_private::UUID::ValueType)) > 0; -} - -bool lldb_private::operator>=(const lldb_private::UUID &lhs, - const lldb_private::UUID &rhs) { - return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), - sizeof(lldb_private::UUID::ValueType)) >= 0; -} Modified: lldb/trunk/source/Host/common/Symbols.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/Symbols.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Host/common/Symbols.cpp (original) +++ lldb/trunk/source/Host/common/Symbols.cpp Fri Mar 3 19:28:55 2017 @@ -14,7 +14,7 @@ #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" #include "lldb/Core/Timer.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Target/Target.h" #include "lldb/Utility/Log.h" Modified: lldb/trunk/source/Host/macosx/Symbols.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Symbols.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Host/macosx/Symbols.cpp (original) +++ lldb/trunk/source/Host/macosx/Symbols.cpp Fri Mar 3 19:28:55 2017 @@ -29,7 +29,7 @@ #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" #include "lldb/Core/Timer.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/Host.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Utility/CleanUp.h" Modified: lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h (original) +++ lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h Fri Mar 3 19:28:55 2017 @@ -18,7 +18,7 @@ // Other libraries and framework includes // Project includes -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/DynamicLoader.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h (original) +++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderDarwin.h Fri Mar 3 19:28:55 2017 @@ -19,7 +19,7 @@ // Other libraries and framework includes // Project includes #include "lldb/Core/StructuredData.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/DynamicLoader.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h (original) +++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h Fri Mar 3 19:28:55 2017 @@ -26,7 +26,7 @@ // Other libraries and framework includes // Project includes #include "lldb/Core/StructuredData.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/DynamicLoader.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h (original) +++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h Fri Mar 3 19:28:55 2017 @@ -29,7 +29,7 @@ // Other libraries and framework includes // Project includes #include "lldb/Core/StructuredData.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/DynamicLoader.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.h (original) +++ lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.h Fri Mar 3 19:28:55 2017 @@ -14,7 +14,7 @@ // C++ Includes // Other libraries and framework includes // Project includes -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/DynamicLoader.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h (original) +++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.h Fri Mar 3 19:28:55 2017 @@ -20,7 +20,7 @@ // Other libraries and framework includes // Project includes #include "lldb/Core/ArchSpec.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/lldb-private.h" Modified: lldb/trunk/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp (original) +++ lldb/trunk/source/Plugins/ObjectFile/JIT/ObjectFileJIT.cpp Fri Mar 3 19:28:55 2017 @@ -23,7 +23,7 @@ #include "lldb/Core/Section.h" #include "lldb/Core/StreamFile.h" #include "lldb/Core/Timer.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Host/Host.h" #include "lldb/Symbol/ObjectFile.h" Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original) +++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Fri Mar 3 19:28:55 2017 @@ -28,7 +28,7 @@ #include "lldb/Core/Section.h" #include "lldb/Core/StreamFile.h" #include "lldb/Core/Timer.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Host/Host.h" #include "lldb/Symbol/DWARFCallFrameInfo.h" Modified: lldb/trunk/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp (original) +++ lldb/trunk/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp Fri Mar 3 19:28:55 2017 @@ -22,7 +22,7 @@ #include "lldb/Core/Section.h" #include "lldb/Core/StreamFile.h" #include "lldb/Core/Timer.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp (original) +++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp Fri Mar 3 19:28:55 2017 @@ -21,7 +21,7 @@ #include "lldb/Core/DataExtractor.h" #include "lldb/Core/DumpDataExtractor.h" #include "lldb/Core/State.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Host/Host.h" #include "lldb/Target/Process.h" Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp (original) +++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp Fri Mar 3 19:28:55 2017 @@ -20,7 +20,7 @@ #include "lldb/Core/ModuleSpec.h" #include "lldb/Core/PluginManager.h" #include "lldb/Core/State.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/ConnectionFileDescriptor.h" #include "lldb/Host/Host.h" #include "lldb/Host/Symbols.h" Modified: lldb/trunk/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h (original) +++ lldb/trunk/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h Fri Mar 3 19:28:55 2017 @@ -20,7 +20,7 @@ // Project includes #include "lldb/Core/ModuleList.h" #include "lldb/Core/StructuredData.h" -#include "lldb/Core/UUID.h" +#include "lldb/Utility/UUID.h" #include "lldb/Host/FileSpec.h" #include "lldb/Target/Process.h" #include "lldb/Target/QueueItem.h" Modified: lldb/trunk/source/Utility/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/CMakeLists.txt?rev=296941&r1=296940&r2=296941&view=diff ============================================================================== --- lldb/trunk/source/Utility/CMakeLists.txt (original) +++ lldb/trunk/source/Utility/CMakeLists.txt Fri Mar 3 19:28:55 2017 @@ -17,6 +17,7 @@ add_lldb_library(lldbUtility StringLexer.cpp TaskPool.cpp UriParser.cpp + UUID.cpp VASprintf.cpp LINK_LIBS Added: lldb/trunk/source/Utility/UUID.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/UUID.cpp?rev=296941&view=auto ============================================================================== --- lldb/trunk/source/Utility/UUID.cpp (added) +++ lldb/trunk/source/Utility/UUID.cpp Fri Mar 3 19:28:55 2017 @@ -0,0 +1,227 @@ +//===-- UUID.cpp ------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "lldb/Utility/UUID.h" + +// C Includes +#include <ctype.h> +#include <stdio.h> +#include <string.h> + +// C++ Includes +#include <string> + +// Other libraries and framework includes +// Project includes +#include "lldb/Utility/Stream.h" + +#include "llvm/ADT/StringRef.h" + +namespace lldb_private { + +UUID::UUID() : m_num_uuid_bytes(16) { ::memset(m_uuid, 0, sizeof(m_uuid)); } + +UUID::UUID(const UUID &rhs) { + m_num_uuid_bytes = rhs.m_num_uuid_bytes; + ::memcpy(m_uuid, rhs.m_uuid, sizeof(m_uuid)); +} + +UUID::UUID(const void *uuid_bytes, uint32_t num_uuid_bytes) { + SetBytes(uuid_bytes, num_uuid_bytes); +} + +const UUID &UUID::operator=(const UUID &rhs) { + if (this != &rhs) { + m_num_uuid_bytes = rhs.m_num_uuid_bytes; + ::memcpy(m_uuid, rhs.m_uuid, sizeof(m_uuid)); + } + return *this; +} + +UUID::~UUID() {} + +void UUID::Clear() { + m_num_uuid_bytes = 16; + ::memset(m_uuid, 0, sizeof(m_uuid)); +} + +const void *UUID::GetBytes() const { return m_uuid; } + +std::string UUID::GetAsString(const char *separator) const { + std::string result; + char buf[256]; + if (!separator) + separator = "-"; + const uint8_t *u = (const uint8_t *)GetBytes(); + if (sizeof(buf) > + (size_t)snprintf(buf, sizeof(buf), "%2.2X%2.2X%2.2X%2.2X%s%2.2X%2.2X%s%2." + "2X%2.2X%s%2.2X%2.2X%s%2.2X%2.2X%2.2X%" + "2.2X%2.2X%2.2X", + u[0], u[1], u[2], u[3], separator, u[4], u[5], separator, + u[6], u[7], separator, u[8], u[9], separator, u[10], + u[11], u[12], u[13], u[14], u[15])) { + result.append(buf); + if (m_num_uuid_bytes == 20) { + if (sizeof(buf) > (size_t)snprintf(buf, sizeof(buf), + "%s%2.2X%2.2X%2.2X%2.2X", separator, + u[16], u[17], u[18], u[19])) + result.append(buf); + } + } + return result; +} + +void UUID::Dump(Stream *s) const { + const uint8_t *u = (const uint8_t *)GetBytes(); + s->Printf("%2.2X%2.2X%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X-%2.2X%2.2X%" + "2.2X%2.2X%2.2X%2.2X", + u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7], u[8], u[9], u[10], + u[11], u[12], u[13], u[14], u[15]); + if (m_num_uuid_bytes == 20) { + s->Printf("-%2.2X%2.2X%2.2X%2.2X", u[16], u[17], u[18], u[19]); + } +} + +bool UUID::SetBytes(const void *uuid_bytes, uint32_t num_uuid_bytes) { + if (uuid_bytes) { + switch (num_uuid_bytes) { + case 20: + m_num_uuid_bytes = 20; + break; + case 16: + m_num_uuid_bytes = 16; + m_uuid[16] = m_uuid[17] = m_uuid[18] = m_uuid[19] = 0; + break; + default: + // Unsupported UUID byte size + m_num_uuid_bytes = 0; + break; + } + + if (m_num_uuid_bytes > 0) { + ::memcpy(m_uuid, uuid_bytes, m_num_uuid_bytes); + return true; + } + } + ::memset(m_uuid, 0, sizeof(m_uuid)); + return false; +} + +size_t UUID::GetByteSize() { return m_num_uuid_bytes; } + +bool UUID::IsValid() const { + return m_uuid[0] || m_uuid[1] || m_uuid[2] || m_uuid[3] || m_uuid[4] || + m_uuid[5] || m_uuid[6] || m_uuid[7] || m_uuid[8] || m_uuid[9] || + m_uuid[10] || m_uuid[11] || m_uuid[12] || m_uuid[13] || m_uuid[14] || + m_uuid[15] || m_uuid[16] || m_uuid[17] || m_uuid[18] || m_uuid[19]; +} + +static inline int xdigit_to_int(char ch) { + ch = tolower(ch); + if (ch >= 'a' && ch <= 'f') + return 10 + ch - 'a'; + return ch - '0'; +} + +llvm::StringRef UUID::DecodeUUIDBytesFromString(llvm::StringRef p, + ValueType &uuid_bytes, + uint32_t &bytes_decoded, + uint32_t num_uuid_bytes) { + ::memset(uuid_bytes, 0, sizeof(uuid_bytes)); + size_t uuid_byte_idx = 0; + while (!p.empty()) { + if (isxdigit(p[0]) && isxdigit(p[1])) { + int hi_nibble = xdigit_to_int(p[0]); + int lo_nibble = xdigit_to_int(p[1]); + // Translate the two hex nibble characters into a byte + uuid_bytes[uuid_byte_idx] = (hi_nibble << 4) + lo_nibble; + + // Skip both hex digits + p = p.drop_front(2); + + // Increment the byte that we are decoding within the UUID value + // and break out if we are done + if (++uuid_byte_idx == num_uuid_bytes) + break; + } else if (p.front() == '-') { + // Skip dashes + p = p.drop_front(); + } else { + // UUID values can only consist of hex characters and '-' chars + break; + } + } + + // Clear trailing bytes to 0. + for (uint32_t i = uuid_byte_idx; i < sizeof(ValueType); i++) + uuid_bytes[i] = 0; + bytes_decoded = uuid_byte_idx; + return p; +} +size_t UUID::SetFromCString(const char *cstr, uint32_t num_uuid_bytes) { + if (cstr == NULL) + return 0; + + llvm::StringRef orig(cstr); + llvm::StringRef p = orig; + + // Skip leading whitespace characters + p = p.ltrim(); + + uint32_t bytes_decoded = 0; + llvm::StringRef rest = + UUID::DecodeUUIDBytesFromString(p, m_uuid, bytes_decoded, num_uuid_bytes); + + // If we successfully decoded a UUID, return the amount of characters that + // were consumed + if (bytes_decoded == num_uuid_bytes) { + m_num_uuid_bytes = num_uuid_bytes; + return orig.size() - rest.size(); + } + + // Else return zero to indicate we were not able to parse a UUID value + return 0; +} +} + +bool lldb_private::operator==(const lldb_private::UUID &lhs, + const lldb_private::UUID &rhs) { + return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), + sizeof(lldb_private::UUID::ValueType)) == 0; +} + +bool lldb_private::operator!=(const lldb_private::UUID &lhs, + const lldb_private::UUID &rhs) { + return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), + sizeof(lldb_private::UUID::ValueType)) != 0; +} + +bool lldb_private::operator<(const lldb_private::UUID &lhs, + const lldb_private::UUID &rhs) { + return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), + sizeof(lldb_private::UUID::ValueType)) < 0; +} + +bool lldb_private::operator<=(const lldb_private::UUID &lhs, + const lldb_private::UUID &rhs) { + return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), + sizeof(lldb_private::UUID::ValueType)) <= 0; +} + +bool lldb_private::operator>(const lldb_private::UUID &lhs, + const lldb_private::UUID &rhs) { + return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), + sizeof(lldb_private::UUID::ValueType)) > 0; +} + +bool lldb_private::operator>=(const lldb_private::UUID &lhs, + const lldb_private::UUID &rhs) { + return ::memcmp(lhs.GetBytes(), rhs.GetBytes(), + sizeof(lldb_private::UUID::ValueType)) >= 0; +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits