diff options
author | Pavel Labath <labath@google.com> | 2018-02-21 17:38:38 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2018-02-21 17:38:38 +0000 |
commit | 9391d98e7b26434b5e6bf05167497c2fde285439 (patch) | |
tree | 7869aa18aece93670e6dc7f0f11fab3b5487b8ae | |
parent | 33ef594c58990d04cc16b3138279b1fb0451ce23 (diff) | |
download | bcm5719-llvm-9391d98e7b26434b5e6bf05167497c2fde285439.tar.gz bcm5719-llvm-9391d98e7b26434b5e6bf05167497c2fde285439.zip |
llgs-tests: Fix r325511 for debugserver
Debugserver sends the thread-pcs field with leading zeroes omitted. Teach
parseRegisterValue to pad these as necessary.
llvm-svn: 325701
-rw-r--r-- | lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp | 13 | ||||
-rw-r--r-- | lldb/unittests/tools/lldb-server/tests/MessageObjects.h | 3 |
2 files changed, 13 insertions, 3 deletions
diff --git a/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp b/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp index 2ccd6f6123c..fbcb0000da9 100644 --- a/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp +++ b/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp @@ -203,7 +203,15 @@ Expected<RegisterInfo> RegisterInfoParser::create(StringRef Response) { Expected<RegisterValue> parseRegisterValue(const RegisterInfo &Info, StringRef HexValue, - llvm::support::endianness Endian) { + llvm::support::endianness Endian, + bool ZeroPad) { + SmallString<128> Storage; + if (ZeroPad && HexValue.size() < Info.byte_size * 2) { + Storage.insert(Storage.begin(), Info.byte_size * 2 - HexValue.size(), '0'); + Storage += HexValue; + HexValue = Storage; + } + SmallVector<uint8_t, 64> Bytes(HexValue.size() / 2); StringExtractor(HexValue).GetHexBytes(Bytes, '\xcc'); RegisterValue Value; @@ -301,7 +309,8 @@ StopReplyStop::create(StringRef Response, support::endianness Endian, return make_parsing_error("StopReply: Thread id '{0}'", std::get<0>(ThreadPc)); - auto PcOr = parseRegisterValue(*PcInfo, std::get<1>(ThreadPc), Endian); + auto PcOr = parseRegisterValue(*PcInfo, std::get<1>(ThreadPc), Endian, + /*ZeroPad*/ true); if (!PcOr) return PcOr.takeError(); ThreadPcs[Id] = std::move(*PcOr); diff --git a/lldb/unittests/tools/lldb-server/tests/MessageObjects.h b/lldb/unittests/tools/lldb-server/tests/MessageObjects.h index 4f540ec20e7..699f42d19d8 100644 --- a/lldb/unittests/tools/lldb-server/tests/MessageObjects.h +++ b/lldb/unittests/tools/lldb-server/tests/MessageObjects.h @@ -87,7 +87,8 @@ struct RegisterInfoParser : public Parser<lldb_private::RegisterInfo> { llvm::Expected<lldb_private::RegisterValue> parseRegisterValue(const lldb_private::RegisterInfo &Info, - llvm::StringRef HexValue, llvm::support::endianness Endian); + llvm::StringRef HexValue, llvm::support::endianness Endian, + bool ZeroPad = false); class StopReply { public: |