diff options
Diffstat (limited to 'lldb')
4 files changed, 53 insertions, 74 deletions
diff --git a/lldb/lldb.xcodeproj/project.pbxproj b/lldb/lldb.xcodeproj/project.pbxproj index befe088ed10..21619b5cef4 100644 --- a/lldb/lldb.xcodeproj/project.pbxproj +++ b/lldb/lldb.xcodeproj/project.pbxproj @@ -8712,8 +8712,7 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - LLDB_COMPRESSION_CFLAGS = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_COVERAGE_CFLAGS = "$(LLDB_COVERAGE_CFLAGS_$(LLDB_ENABLE_COVERAGE))"; LLDB_COVERAGE_CFLAGS_1 = "-fprofile-instr-generate -fcoverage-mapping"; LLDB_COVERAGE_LDFLAGS = "$(LLDB_COVERAGE_LDFLAGS_$(LLDB_ENABLE_COVERAGE))"; @@ -8734,12 +8733,11 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", ); OTHER_LDFLAGS = ( - "$(LLDB_COMPRESSION_LDFLAGS)", + "-lcompression", "$(LLDB_ZLIB_LDFLAGS)", "$(LLDB_COVERAGE_LDFLAGS)", ); @@ -8802,8 +8800,7 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - LLDB_COMPRESSION_CFLAGS = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_COVERAGE_CFLAGS = "$(LLDB_COVERAGE_CFLAGS_$(LLDB_ENABLE_COVERAGE))"; LLDB_COVERAGE_CFLAGS_1 = "-fprofile-instr-generate -fcoverage-mapping"; LLDB_COVERAGE_LDFLAGS = "$(LLDB_COVERAGE_LDFLAGS_$(LLDB_ENABLE_COVERAGE))"; @@ -8824,12 +8821,11 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", ); OTHER_LDFLAGS = ( - "$(LLDB_COMPRESSION_LDFLAGS)", + "-lcompression", "$(LLDB_ZLIB_LDFLAGS)", "$(LLDB_COVERAGE_LDFLAGS)", ); @@ -8965,7 +8961,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9007,7 +9002,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9049,7 +9043,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9091,7 +9084,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9133,7 +9125,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9177,7 +9168,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9221,7 +9211,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9265,7 +9254,6 @@ "-fno-rtti", "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_GTESTS_CFLAGS)", "-DGTEST_HAS_RTTI=0", ); @@ -9357,10 +9345,7 @@ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)", "$(inherited)", ); - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; OTHER_CPLUSPLUSFLAGS = ( @@ -9430,10 +9415,7 @@ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)", "$(inherited)", ); - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; OTHER_CPLUSPLUSFLAGS = ( @@ -9765,10 +9747,7 @@ "LLDB_VERSION_STRING=lldb-${CURRENT_PROJECT_VERSION}", ); HEADER_SEARCH_PATHS = /usr/include/libxml2; - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; MACH_O_TYPE = staticlib; @@ -9822,10 +9801,7 @@ "LLDB_VERSION_STRING=lldb-${CURRENT_PROJECT_VERSION}", ); HEADER_SEARCH_PATHS = /usr/include/libxml2; - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; MACH_O_TYPE = staticlib; @@ -9879,10 +9855,7 @@ "LLDB_VERSION_STRING=lldb-${CURRENT_PROJECT_VERSION}", ); HEADER_SEARCH_PATHS = /usr/include/libxml2; - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; MACH_O_TYPE = staticlib; @@ -9958,8 +9931,7 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - LLDB_COMPRESSION_CFLAGS = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_COVERAGE_CFLAGS = "$(LLDB_COVERAGE_CFLAGS_$(LLDB_ENABLE_COVERAGE))"; LLDB_COVERAGE_CFLAGS_1 = "-fprofile-instr-generate -fcoverage-mapping"; LLDB_COVERAGE_LDFLAGS = "$(LLDB_COVERAGE_LDFLAGS_$(LLDB_ENABLE_COVERAGE))"; @@ -9981,13 +9953,12 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", "-DNDEBUG", ); OTHER_LDFLAGS = ( - "$(LLDB_COMPRESSION_LDFLAGS)", + "-lcompression", "$(LLDB_ZLIB_LDFLAGS)", "$(LLDB_COVERAGE_LDFLAGS)", ); @@ -10020,7 +9991,6 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", "-fno-rtti", @@ -10089,10 +10059,7 @@ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)", "$(inherited)", ); - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; OTHER_CPLUSPLUSFLAGS = ( @@ -10598,7 +10565,6 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", "-fno-rtti", @@ -10639,7 +10605,6 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", "-fno-rtti", @@ -10713,8 +10678,7 @@ GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - LLDB_COMPRESSION_CFLAGS = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_COVERAGE_CFLAGS = "$(LLDB_COVERAGE_CFLAGS_$(LLDB_ENABLE_COVERAGE))"; LLDB_COVERAGE_CFLAGS_1 = "-fprofile-instr-generate -fcoverage-mapping"; LLDB_COVERAGE_LDFLAGS = "$(LLDB_COVERAGE_LDFLAGS_$(LLDB_ENABLE_COVERAGE))"; @@ -10735,12 +10699,11 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", ); OTHER_LDFLAGS = ( - "$(LLDB_COMPRESSION_LDFLAGS)", + "-lcompression", "$(LLDB_ZLIB_LDFLAGS)", "$(LLDB_COVERAGE_LDFLAGS)", ); @@ -10797,7 +10760,6 @@ OTHER_CFLAGS = ( "-Wparentheses", "$(LLDB_ZLIB_CFLAGS)", - "$(LLDB_COMPRESSION_CFLAGS)", "$(LLDB_COVERAGE_CFLAGS)", "-Wimplicit-fallthrough", "-fno-rtti", @@ -10848,10 +10810,7 @@ "$(LLVM_BUILD_DIR)/$(LLVM_BUILD_DIR_ARCH)", "$(inherited)", ); - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; OTHER_CPLUSPLUSFLAGS = ( @@ -10934,10 +10893,7 @@ "LLDB_VERSION_STRING=lldb-${CURRENT_PROJECT_VERSION}", ); HEADER_SEARCH_PATHS = /usr/include/libxml2; - LLDB_COMPRESSION_CFLAGS = ""; - "LLDB_COMPRESSION_CFLAGS[sdk=macosx10.11]" = "-DHAVE_LIBCOMPRESSION=1"; - LLDB_COMPRESSION_LDFLAGS = ""; - "LLDB_COMPRESSION_LDFLAGS[sdk=macosx10.11]" = "-weak-lcompression"; + LLDB_COMPRESSION_LDFLAGS = "-lcompression"; LLDB_ZLIB_CFLAGS = "-DHAVE_LIBZ=1"; LLDB_ZLIB_LDFLAGS = "-lz"; MACH_O_TYPE = staticlib; diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp index 4605bd2e90e..e63b51e49be 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp @@ -42,7 +42,8 @@ #define DEBUGSERVER_BASENAME "lldb-server" #endif -#if defined(HAVE_LIBCOMPRESSION) +#if defined(__APPLE__) +#define HAVE_LIBCOMPRESSION #include <compression.h> #endif @@ -67,7 +68,9 @@ GDBRemoteCommunication::GDBRemoteCommunication(const char *comm_name, #endif m_echo_number(0), m_supports_qEcho(eLazyBoolCalculate), m_history(512), m_send_acks(true), m_compression_type(CompressionType::None), - m_listen_url() { + m_listen_url(), m_decompression_scratch_type(CompressionType::None), + m_decompression_scratch(nullptr) +{ } //---------------------------------------------------------------------- @@ -532,7 +535,7 @@ bool GDBRemoteCommunication::DecompressPacket() { size_t decompressed_bytes = 0; if (decompressed_bufsize != ULONG_MAX) { - decompressed_buffer = (uint8_t *)malloc(decompressed_bufsize + 1); + decompressed_buffer = (uint8_t *)malloc(decompressed_bufsize); if (decompressed_buffer == nullptr) { m_bytes.erase(0, size_of_first_packet); return false; @@ -540,11 +543,10 @@ bool GDBRemoteCommunication::DecompressPacket() { } #if defined(HAVE_LIBCOMPRESSION) - // libcompression is weak linked so check that compression_decode_buffer() is - // available if (m_compression_type == CompressionType::ZlibDeflate || m_compression_type == CompressionType::LZFSE || - m_compression_type == CompressionType::LZ4) { + m_compression_type == CompressionType::LZ4 || + m_compression_type == CompressionType::LZMA) { compression_algorithm compression_type; if (m_compression_type == CompressionType::LZFSE) compression_type = COMPRESSION_LZFSE; @@ -555,16 +557,33 @@ bool GDBRemoteCommunication::DecompressPacket() { else if (m_compression_type == CompressionType::LZMA) compression_type = COMPRESSION_LZMA; - // If we have the expected size of the decompressed payload, we can - // allocate the right-sized buffer and do it. If we don't have that - // information, we'll need to try decoding into a big buffer and if the - // buffer wasn't big enough, increase it and try again. + if (m_decompression_scratch_type != m_compression_type) { + if (m_decompression_scratch) { + free (m_decompression_scratch); + m_decompression_scratch = nullptr; + } + size_t scratchbuf_size = 0; + if (m_compression_type == CompressionType::LZFSE) + scratchbuf_size = compression_decode_scratch_buffer_size (COMPRESSION_LZFSE); + else if (m_compression_type == CompressionType::LZ4) + scratchbuf_size = compression_decode_scratch_buffer_size (COMPRESSION_LZ4_RAW); + else if (m_compression_type == CompressionType::ZlibDeflate) + scratchbuf_size = compression_decode_scratch_buffer_size (COMPRESSION_ZLIB); + else if (m_compression_type == CompressionType::LZMA) + scratchbuf_size = compression_decode_scratch_buffer_size (COMPRESSION_LZMA); + else if (m_compression_type == CompressionType::LZFSE) + scratchbuf_size = compression_decode_scratch_buffer_size (COMPRESSION_LZFSE); + if (scratchbuf_size > 0) { + m_decompression_scratch = (void*) malloc (scratchbuf_size); + m_decompression_scratch_type = m_compression_type; + } + } if (decompressed_bufsize != ULONG_MAX && decompressed_buffer != nullptr) { decompressed_bytes = compression_decode_buffer( - decompressed_buffer, decompressed_bufsize + 10, - (uint8_t *)unescaped_content.data(), unescaped_content.size(), NULL, - compression_type); + decompressed_buffer, decompressed_bufsize, + (uint8_t *)unescaped_content.data(), unescaped_content.size(), + m_decompression_scratch, compression_type); } } #endif diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h index d2e21f4b2ab..369eb25b1df 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.h @@ -218,6 +218,9 @@ private: HostThread m_listen_thread; std::string m_listen_url; + CompressionType m_decompression_scratch_type; + void *m_decompression_scratch; + DISALLOW_COPY_AND_ASSIGN(GDBRemoteCommunication); }; diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index 92bde0323a9..1e12ea6b2d5 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -37,7 +37,8 @@ #include "llvm/ADT/StringSwitch.h" -#if defined(HAVE_LIBCOMPRESSION) +#if defined(__APPLE__) +#define HAVE_LIBCOMPRESSION #include <compression.h> #endif |