summaryrefslogtreecommitdiffstats
path: root/lldb/test
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-12-15 23:30:05 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-12-15 23:30:05 +0000
commit6e55cd5e29130670545b448fe6ac485ac6a11153 (patch)
treeb0e5f0c7bb6989dfa58ed6cc4afaf76a50b324ee /lldb/test
parent6d37656c1a2c47b3d542e99388aeee1d26bd2a2d (diff)
downloadbcm5719-llvm-6e55cd5e29130670545b448fe6ac485ac6a11153.tar.gz
bcm5719-llvm-6e55cd5e29130670545b448fe6ac485ac6a11153.zip
Add test scenario for newly added SBProcess APIs: ReadCStringFromMemory() and ReadUnsignedFromMemory().
llvm-svn: 146704
Diffstat (limited to 'lldb/test')
-rw-r--r--lldb/test/python_api/process/TestProcessAPI.py45
-rw-r--r--lldb/test/python_api/process/main.cpp3
2 files changed, 48 insertions, 0 deletions
diff --git a/lldb/test/python_api/process/TestProcessAPI.py b/lldb/test/python_api/process/TestProcessAPI.py
index 2d68d85030e..c720d73b616 100644
--- a/lldb/test/python_api/process/TestProcessAPI.py
+++ b/lldb/test/python_api/process/TestProcessAPI.py
@@ -105,6 +105,51 @@ class ProcessAPITestCase(TestBase):
exe=False,
startstr = 'x')
+ # Get the SBValue for the global variable 'my_cstring'.
+ val = frame.FindValue("my_cstring", lldb.eValueTypeVariableGlobal)
+ self.DebugSBValue(val)
+
+ # If the variable does not have a load address, there's no sense continuing.
+ if not val.GetLocation().startswith("0x"):
+ return
+
+ # OK, let's get the hex location of the variable.
+ location = int(val.GetLocation(), 16)
+
+ # Due to the typemap magic (see lldb.swig), we pass in 256 to read at most 256 bytes
+ # from the address, and expect to get a Python string as the result object!
+ cstring = process.ReadCStringFromMemory(location, 256, error)
+ if not error.Success():
+ self.fail("SBProcess.ReadCStringFromMemory() failed")
+ if self.TraceOn():
+ print "cstring read is:", cstring
+
+ self.expect(cstring, "Result from SBProcess.ReadCStringFromMemory() matches our expected output",
+ exe=False,
+ startstr = 'lldb.SBProcess.ReadCStringFromMemory() works!')
+
+ # Get the SBValue for the global variable 'my_uint32'.
+ val = frame.FindValue("my_uint32", lldb.eValueTypeVariableGlobal)
+ self.DebugSBValue(val)
+
+ # If the variable does not have a load address, there's no sense continuing.
+ if not val.GetLocation().startswith("0x"):
+ return
+
+ # OK, let's get the hex location of the variable.
+ location = int(val.GetLocation(), 16)
+
+ # Due to the typemap magic (see lldb.swig), we pass in 4 to read at 4 bytes
+ # from the address, and expect to get an int as the result!
+ my_uint32 = process.ReadUnsignedFromMemory(location, 4, error)
+ if not error.Success():
+ self.fail("SBProcess.ReadCStringFromMemory() failed")
+ if self.TraceOn():
+ print "uint32 read is:", my_uint32
+
+ if my_uint32 != 12345:
+ self.fail("Result from SBProcess.ReadUnsignedFromMemory() does not match our expected output")
+
def write_memory(self):
"""Test Python SBProcess.WriteMemory() API."""
exe = os.path.join(os.getcwd(), "a.out")
diff --git a/lldb/test/python_api/process/main.cpp b/lldb/test/python_api/process/main.cpp
index 4d5b5e6d7e9..57da5748dda 100644
--- a/lldb/test/python_api/process/main.cpp
+++ b/lldb/test/python_api/process/main.cpp
@@ -7,10 +7,13 @@
//
//===----------------------------------------------------------------------===//
#include <stdio.h>
+#include <stdint.h>
// This simple program is to test the lldb Python API related to process.
char my_char = 'u';
+char my_cstring[] = "lldb.SBProcess.ReadCStringFromMemory() works!";
+uint32_t my_uint32 = 12345;
int my_int = 0;
int main (int argc, char const *argv[])
OpenPOWER on IntegriCloud