summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/Python
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-01-25 23:21:18 +0000
committerZachary Turner <zturner@google.com>2016-01-25 23:21:18 +0000
commit4407396fb94dc3a1da5b51f9512381f9bb46ca64 (patch)
tree1117e1b13e0b664b9808a077d443c9d4f626f5ee /lldb/scripts/Python
parentbea3a85151ef5154f0c99722b5bad5bb56b2ac55 (diff)
downloadbcm5719-llvm-4407396fb94dc3a1da5b51f9512381f9bb46ca64.tar.gz
bcm5719-llvm-4407396fb94dc3a1da5b51f9512381f9bb46ca64.zip
Fix some issues with bytes and strings in Python 3.
SBProcess::ReadMemory and other related functions such as WriteMemory are returning Python string() objects. This means that in Python 3 that are returning Unicode objects. In reality they should be returning bytes objects which is the same as a string in Python 2, but different in Python 3. This patch updates the generated SWIG code to return Python bytes objects for all memory related functions. One quirk of this patch is that the C++ signature of ReadCStringFromMemory has it writing c-string data into a void*. This confuses our swig typemaps which expect that a void* means byte data. So I hacked up a custom typemap which maps this specific function to treat the void* as string data instead of byte data. llvm-svn: 258743
Diffstat (limited to 'lldb/scripts/Python')
-rw-r--r--lldb/scripts/Python/python-typemaps.swig11
1 files changed, 8 insertions, 3 deletions
diff --git a/lldb/scripts/Python/python-typemaps.swig b/lldb/scripts/Python/python-typemaps.swig
index 659199f1fd0..82e33e1bc60 100644
--- a/lldb/scripts/Python/python-typemaps.swig
+++ b/lldb/scripts/Python/python-typemaps.swig
@@ -93,6 +93,9 @@
}
$1 = (char *) malloc($2);
}
+// SBProcess::ReadCStringFromMemory() uses a void*, but needs to be treated
+// as char data instead of byte data.
+%typemap(in) (void *char_buf, size_t size) = (char *dst, size_t dst_len);
// Return the char buffer. Discarding any previous return result
// See also SBThread::GetStopDescription.
@@ -108,6 +111,9 @@
}
free($1);
}
+// SBProcess::ReadCStringFromMemory() uses a void*, but needs to be treated
+// as char data instead of byte data.
+%typemap(argout) (void *char_buf, size_t size) = (char *dst, size_t dst_len);
// typemap for an outgoing buffer
@@ -231,9 +237,8 @@
$result = Py_None;
Py_INCREF($result);
} else {
- llvm::StringRef ref(static_cast<const char*>($1), result);
- lldb_private::PythonString string(ref);
- $result = string.release();
+ lldb_private::PythonBytes bytes(static_cast<const uint8_t*>($1), result);
+ $result = bytes.release();
}
free($1);
}
OpenPOWER on IntegriCloud