summaryrefslogtreecommitdiff
path: root/lldb/test/functionalities/return-value/TestReturnValue.py
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/test/functionalities/return-value/TestReturnValue.py')
-rw-r--r--lldb/test/functionalities/return-value/TestReturnValue.py219
1 files changed, 0 insertions, 219 deletions
diff --git a/lldb/test/functionalities/return-value/TestReturnValue.py b/lldb/test/functionalities/return-value/TestReturnValue.py
deleted file mode 100644
index 0559cba3354a..000000000000
--- a/lldb/test/functionalities/return-value/TestReturnValue.py
+++ /dev/null
@@ -1,219 +0,0 @@
-"""
-Test getting return-values correctly when stepping out
-"""
-
-import os, time
-import re
-import unittest2
-import lldb, lldbutil
-from lldbtest import *
-
-class ReturnValueTestCase(TestBase):
-
- mydir = os.path.join("functionalities", "return-value")
-
- @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
- @expectedFailurei386
- @python_api_test
- @dsym_test
- def test_with_dsym_python(self):
- """Test getting return values from stepping out with dsyms."""
- self.buildDsym()
- self.do_return_value()
-
- @expectedFailurei386
- @python_api_test
- @dwarf_test
- def test_with_dwarf_python(self):
- """Test getting return values from stepping out."""
- self.buildDwarf()
- self.do_return_value()
-
- def return_and_test_struct_value (self, func_name):
- """Pass in the name of the function to return from - takes in value, returns value."""
-
- # Set the breakpoint, run to it, finish out.
- bkpt = self.target.BreakpointCreateByName (func_name)
- self.assertTrue (bkpt.GetNumResolvedLocations() > 0)
-
- self.process.Continue ()
-
- thread_list = lldbutil.get_threads_stopped_at_breakpoint (self.process, bkpt)
-
- self.assertTrue (len(thread_list) == 1)
- thread = thread_list[0]
-
- self.target.BreakpointDelete (bkpt.GetID())
-
- in_value = thread.GetFrameAtIndex(0).FindVariable ("value")
-
- self.assertTrue (in_value.IsValid())
- num_in_children = in_value.GetNumChildren()
-
- # This is a little hokey, but if we don't get all the children now, then
- # once we've stepped we won't be able to get them?
-
- for idx in range(0, num_in_children):
- in_child = in_value.GetChildAtIndex (idx)
- in_child_str = in_child.GetValue()
-
- thread.StepOut()
-
- self.assertTrue (self.process.GetState() == lldb.eStateStopped)
- self.assertTrue (thread.GetStopReason() == lldb.eStopReasonPlanComplete)
-
- # Assuming all these functions step out to main. Could figure out the caller dynamically
- # if that would add something to the test.
- frame = thread.GetFrameAtIndex(0)
- fun_name = frame.GetFunctionName()
- self.assertTrue (fun_name == "main")
-
- frame = thread.GetFrameAtIndex(0)
- ret_value = thread.GetStopReturnValue()
-
- self.assertTrue (ret_value.IsValid())
-
- num_ret_children = ret_value.GetNumChildren()
- self.assertTrue (num_in_children == num_ret_children)
- for idx in range(0, num_ret_children):
- in_child = in_value.GetChildAtIndex(idx)
- ret_child = ret_value.GetChildAtIndex(idx)
- in_child_str = in_child.GetValue()
- ret_child_str = ret_child.GetValue()
-
- self.assertTrue (in_child_str == ret_child_str)
-
- def do_return_value(self):
- """Test getting return values from stepping out."""
- exe = os.path.join(os.getcwd(), "a.out")
- error = lldb.SBError()
-
- self.target = self.dbg.CreateTarget(exe)
- self.assertTrue(self.target, VALID_TARGET)
-
- inner_sint_bkpt = self.target.BreakpointCreateByName("inner_sint", exe)
- self.assertTrue(inner_sint_bkpt, VALID_BREAKPOINT)
-
- # Now launch the process, and do not stop at entry point.
- self.process = self.target.LaunchSimple(None, None, os.getcwd())
-
- self.assertTrue(self.process, PROCESS_IS_VALID)
-
- # The stop reason of the thread should be breakpoint.
- self.assertTrue(self.process.GetState() == lldb.eStateStopped,
- STOPPED_DUE_TO_BREAKPOINT)
-
- # Now finish, and make sure the return value is correct.
- thread = lldbutil.get_stopped_thread (self.process, lldb.eStopReasonBreakpoint)
-
- # inner_sint returns the variable value, so capture that here:
- in_int = thread.GetFrameAtIndex(0).FindVariable ("value").GetValueAsSigned(error)
- self.assertTrue (error.Success())
-
- thread.StepOut();
-
- self.assertTrue (self.process.GetState() == lldb.eStateStopped)
- self.assertTrue (thread.GetStopReason() == lldb.eStopReasonPlanComplete)
-
- frame = thread.GetFrameAtIndex(0)
- fun_name = frame.GetFunctionName()
- self.assertTrue (fun_name == "outer_sint")
-
- return_value = thread.GetStopReturnValue()
- self.assertTrue (return_value.IsValid())
-
- ret_int = return_value.GetValueAsSigned(error)
- self.assertTrue (error.Success())
- self.assertTrue (in_int == ret_int)
-
- # Run again and we will stop in inner_sint the second time outer_sint is called.
- #Then test stepping out two frames at once:
-
- self.process.Continue()
- thread_list = lldbutil.get_threads_stopped_at_breakpoint (self.process, inner_sint_bkpt)
- self.assertTrue(len(thread_list) == 1)
- thread = thread_list[0]
-
- # We are done with the inner_sint breakpoint:
- self.target.BreakpointDelete (inner_sint_bkpt.GetID())
-
- frame = thread.GetFrameAtIndex(1)
- fun_name = frame.GetFunctionName ()
- self.assertTrue (fun_name == "outer_sint")
- in_int = frame.FindVariable ("value").GetValueAsSigned(error)
- self.assertTrue (error.Success())
-
- thread.StepOutOfFrame (frame)
-
- self.assertTrue (self.process.GetState() == lldb.eStateStopped)
- self.assertTrue (thread.GetStopReason() == lldb.eStopReasonPlanComplete)
- frame = thread.GetFrameAtIndex(0)
- fun_name = frame.GetFunctionName()
- self.assertTrue (fun_name == "main")
-
- ret_value = thread.GetStopReturnValue()
- self.assertTrue (return_value.IsValid())
- ret_int = ret_value.GetValueAsSigned (error)
- self.assertTrue (error.Success())
- self.assertTrue (2 * in_int == ret_int)
-
- # Now try some simple returns that have different types:
- inner_float_bkpt = self.target.BreakpointCreateByName("inner_float", exe)
- self.assertTrue(inner_float_bkpt, VALID_BREAKPOINT)
- self.process.Continue()
- thread_list = lldbutil.get_threads_stopped_at_breakpoint (self.process, inner_float_bkpt)
- self.assertTrue (len(thread_list) == 1)
- thread = thread_list[0]
-
- self.target.BreakpointDelete (inner_float_bkpt.GetID())
-
- frame = thread.GetFrameAtIndex(0)
- in_value = frame.FindVariable ("value")
- in_float = float (in_value.GetValue())
- thread.StepOut()
-
- self.assertTrue (self.process.GetState() == lldb.eStateStopped)
- self.assertTrue (thread.GetStopReason() == lldb.eStopReasonPlanComplete)
-
- frame = thread.GetFrameAtIndex(0)
- fun_name = frame.GetFunctionName()
- self.assertTrue (fun_name == "outer_float")
-
- return_value = thread.GetStopReturnValue()
- self.assertTrue (return_value.IsValid())
- return_float = float (return_value.GetValue())
-
- self.assertTrue(in_float == return_float)
-
- self.return_and_test_struct_value ("return_one_int")
- self.return_and_test_struct_value ("return_two_int")
- self.return_and_test_struct_value ("return_three_int")
- self.return_and_test_struct_value ("return_four_int")
- self.return_and_test_struct_value ("return_five_int")
-
- self.return_and_test_struct_value ("return_two_double")
- self.return_and_test_struct_value ("return_one_double_two_float")
- self.return_and_test_struct_value ("return_one_int_one_float_one_int")
-
- self.return_and_test_struct_value ("return_one_pointer")
- self.return_and_test_struct_value ("return_two_pointer")
- self.return_and_test_struct_value ("return_one_float_one_pointer")
- self.return_and_test_struct_value ("return_one_int_one_pointer")
- self.return_and_test_struct_value ("return_three_short_one_float")
-
- self.return_and_test_struct_value ("return_one_int_one_double")
- self.return_and_test_struct_value ("return_one_int_one_double_one_int")
- self.return_and_test_struct_value ("return_one_short_one_double_one_short")
- self.return_and_test_struct_value ("return_one_float_one_int_one_float")
- self.return_and_test_struct_value ("return_two_float")
- # I am leaving out the packed test until we have a way to tell CLANG
- # about alignment when reading DWARF for packed types.
- #self.return_and_test_struct_value ("return_one_int_one_double_packed")
- self.return_and_test_struct_value ("return_one_int_one_long")
-
-
-if __name__ == '__main__':
- import atexit
- lldb.SBDebugger.Initialize()
- atexit.register(lambda: lldb.SBDebugger.Terminate())
- unittest2.main()