summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2016-08-30 21:33:47 +0000
committerEnrico Granata <egranata@apple.com>2016-08-30 21:33:47 +0000
commitb9bddc4c7feffb49202ac9a96ae6bb550733f951 (patch)
tree8894b2bb8921836e5cc794048dc94816de7fddb7 /lldb/source
parentd6a007803925164fdb40fd4efd647e9d32b2d67b (diff)
downloadbcm5719-llvm-b9bddc4c7feffb49202ac9a96ae6bb550733f951.tar.gz
bcm5719-llvm-b9bddc4c7feffb49202ac9a96ae6bb550733f951.zip
Teach ValueObject::ReadPointedString how to read char[] in host memory
llvm-svn: 280166
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Core/ValueObject.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp
index 3e0a31833ef..609c518b2e3 100644
--- a/lldb/source/Core/ValueObject.cpp
+++ b/lldb/source/Core/ValueObject.cpp
@@ -1224,7 +1224,8 @@ ValueObject::ReadPointedString (lldb::DataBufferSP& buffer_sp,
size_t cstr_len = 0;
bool capped_data = false;
- if (type_flags.Test (eTypeIsArray))
+ const bool is_array = type_flags.Test (eTypeIsArray);
+ if (is_array)
{
// We have an array
uint64_t array_size = 0;
@@ -1247,10 +1248,20 @@ ValueObject::ReadPointedString (lldb::DataBufferSP& buffer_sp,
if (cstr_address == 0 || cstr_address == LLDB_INVALID_ADDRESS)
{
- s << "<invalid address>";
- error.SetErrorString("invalid address");
- CopyStringDataToBufferSP(s, buffer_sp);
- return {0,was_capped};
+ if (cstr_address_type == eAddressTypeHost && is_array)
+ {
+ const char* cstr = GetDataExtractor().PeekCStr(0);
+ buffer_sp.reset(new DataBufferHeap(cstr_len, 0));
+ memcpy(buffer_sp->GetBytes(), cstr, cstr_len);
+ return {cstr_len,was_capped};
+ }
+ else
+ {
+ s << "<invalid address>";
+ error.SetErrorString("invalid address");
+ CopyStringDataToBufferSP(s, buffer_sp);
+ return {0,was_capped};
+ }
}
Address cstr_so_addr (cstr_address);
OpenPOWER on IntegriCloud