I have added a function to SBTarget that allows
clients to disassemble a series of raw bytes as
demonstrated by a new testcase.
In the future, this API will also allow clients
to provide a callback that adds comments for
addresses in the disassembly.
I also modified the SWIG harness to ensure that
Python ByteArrays work as well as strings as
sources of raw data.
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@146611 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/scripts/Python/interface/SBTarget.i b/scripts/Python/interface/SBTarget.i
index 04dcfbf..676a6c0 100644
--- a/scripts/Python/interface/SBTarget.i
+++ b/scripts/Python/interface/SBTarget.i
@@ -470,7 +470,10 @@
lldb::SBBroadcaster
GetBroadcaster () const;
-
+
+ lldb::SBInstructionList
+ GetInstructions (lldb::SBAddress base_addr, const void *buf, size_t size);
+
bool
GetDescription (lldb::SBStream &description, lldb::DescriptionLevel description_level);
};
diff --git a/scripts/Python/python-typemaps.swig b/scripts/Python/python-typemaps.swig
index 55f2819..86ce7af 100644
--- a/scripts/Python/python-typemaps.swig
+++ b/scripts/Python/python-typemaps.swig
@@ -69,30 +69,48 @@
// typemap for an outgoing buffer
// See also SBEvent::SBEvent(uint32_t event, const char *cstr, uint32_t cstr_len).
%typemap(in) (const char *cstr, uint32_t cstr_len) {
- if (!PyString_Check($input)) {
- PyErr_SetString(PyExc_ValueError, "Expecting a string");
- return NULL;
+ if (PyString_Check($input)) {
+ $1 = (char *) PyString_AsString($input);
+ $2 = PyString_Size($input);
}
- $1 = (char *) PyString_AsString($input);
- $2 = PyString_Size($input);
+ else if(PyByteArray_Check($input)) {
+ $1 = (char *) PyByteArray_AsString($input);
+ $2 = PyByteArray_Size($input);
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError, "Expecting a string");
+ return NULL;
+ }
}
// Ditto for SBProcess::PutSTDIN(const char *src, size_t src_len).
%typemap(in) (const char *src, size_t src_len) {
- if (!PyString_Check($input)) {
- PyErr_SetString(PyExc_ValueError, "Expecting a string");
- return NULL;
+ if (PyString_Check($input)) {
+ $1 = (char *) PyString_AsString($input);
+ $2 = PyString_Size($input);
}
- $1 = (char *) PyString_AsString($input);
- $2 = PyString_Size($input);
+ else if(PyByteArray_Check($input)) {
+ $1 = (char *) PyByteArray_AsString($input);
+ $2 = PyByteArray_Size($input);
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError, "Expecting a string");
+ return NULL;
+ }
}
// And SBProcess::WriteMemory.
%typemap(in) (const void *buf, size_t size) {
- if (!PyString_Check($input)) {
- PyErr_SetString(PyExc_ValueError, "Expecting a string");
- return NULL;
+ if (PyString_Check($input)) {
+ $1 = (void *) PyString_AsString($input);
+ $2 = PyString_Size($input);
}
- $1 = (void *) PyString_AsString($input);
- $2 = PyString_Size($input);
+ else if(PyByteArray_Check($input)) {
+ $1 = (void *) PyByteArray_AsString($input);
+ $2 = PyByteArray_Size($input);
+ }
+ else {
+ PyErr_SetString(PyExc_ValueError, "Expecting a string");
+ return NULL;
+ }
}
// typemap for an incoming buffer