diff options
author | Greg Clayton <gclayton@apple.com> | 2011-12-15 03:14:23 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2011-12-15 03:14:23 +0000 |
commit | e91b7957b2d4ea2c880b303e543c711566cb7cd0 (patch) | |
tree | 976f5ea578018c47413a4e9382485ef863476505 /lldb/source/Target/Process.cpp | |
parent | 2c74eedbba4c278635345d7de58a02c3f9f36f07 (diff) | |
download | bcm5719-llvm-e91b7957b2d4ea2c880b303e543c711566cb7cd0.tar.gz bcm5719-llvm-e91b7957b2d4ea2c880b303e543c711566cb7cd0.zip |
Expose new read memory fucntion through python in SBProcess:
size_t
SBProcess::ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
uint64_t
SBProcess::ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error);
lldb::addr_t
SBProcess::ReadPointerFromMemory (addr_t addr, lldb::SBError &error);
These ReadCStringFromMemory() has some SWIG type magic that makes it return the
python string directly and the "buf" is not needed:
error = SBError()
max_cstr_len = 256
cstr = lldb.process.ReadCStringFromMemory (0x1000, max_cstr_len, error)
if error.Success():
....
The other two functions behave as expteced. This will make it easier to get integer values
from the inferior process that are correctly byte swapped. Also for pointers, the correct
pointer byte size will be used.
Also cleaned up a few printf style warnings for the 32 bit lldb build on darwin.
llvm-svn: 146636
Diffstat (limited to 'lldb/source/Target/Process.cpp')
-rw-r--r-- | lldb/source/Target/Process.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index a138f59f6ce..fdd6b1753c7 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -1856,11 +1856,12 @@ Process::ReadMemory (addr_t addr, void *buf, size_t size, Error &error) size_t -Process::ReadCStringFromMemory (addr_t addr, char *dst, size_t dst_max_len) +Process::ReadCStringFromMemory (addr_t addr, char *dst, size_t dst_max_len, Error &result_error) { size_t total_cstr_len = 0; if (dst && dst_max_len) { + result_error.Clear(); // NULL out everything just to be safe memset (dst, 0, dst_max_len); Error error; @@ -1877,6 +1878,7 @@ Process::ReadCStringFromMemory (addr_t addr, char *dst, size_t dst_max_len) if (bytes_read == 0) { + result_error = error; dst[total_cstr_len] = '\0'; break; } @@ -1892,6 +1894,13 @@ Process::ReadCStringFromMemory (addr_t addr, char *dst, size_t dst_max_len) bytes_left -= bytes_read; } } + else + { + if (dst == NULL) + result_error.SetErrorString("invalid arguments"); + else + result_error.Clear(); + } return total_cstr_len; } |