summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2018-02-21 17:38:38 +0000
committerPavel Labath <labath@google.com>2018-02-21 17:38:38 +0000
commit9391d98e7b26434b5e6bf05167497c2fde285439 (patch)
tree7869aa18aece93670e6dc7f0f11fab3b5487b8ae
parent33ef594c58990d04cc16b3138279b1fb0451ce23 (diff)
downloadbcm5719-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.cpp13
-rw-r--r--lldb/unittests/tools/lldb-server/tests/MessageObjects.h3
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:
OpenPOWER on IntegriCloud