xref: /llvm-project/lldb/test/API/functionalities/unwind/ehframe/TestEhFrameUnwind.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest that we can backtrace correctly from Non ABI functions on the stack
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport lldb
799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprechtclass EHFrameBasedUnwind(TestBase):
13*2238dcc3SJonas Devlieghere    @skipUnlessPlatform(["linux"])
1499451b44SJordan Rupprecht    @skipIf(archs=["aarch64", "arm", "i386", "i686"])
1599451b44SJordan Rupprecht    def test(self):
1699451b44SJordan Rupprecht        """Test that we can backtrace correctly from Non ABI  functions on the stack"""
1799451b44SJordan Rupprecht        self.build()
1899451b44SJordan Rupprecht        self.setTearDownCleanup()
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
2199451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
2299451b44SJordan Rupprecht
2399451b44SJordan Rupprecht        self.assertTrue(target, VALID_TARGET)
2499451b44SJordan Rupprecht
2599451b44SJordan Rupprecht        lldbutil.run_break_set_by_symbol(self, "func")
2699451b44SJordan Rupprecht
2799451b44SJordan Rupprecht        process = target.LaunchSimple(
28*2238dcc3SJonas Devlieghere            ["abc", "xyz"], None, self.get_process_working_directory()
29*2238dcc3SJonas Devlieghere        )
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht        if not process:
3299451b44SJordan Rupprecht            self.fail("SBTarget.Launch() failed")
3399451b44SJordan Rupprecht
3499451b44SJordan Rupprecht        if process.GetState() != lldb.eStateStopped:
35*2238dcc3SJonas Devlieghere            self.fail(
36*2238dcc3SJonas Devlieghere                "Process should be in the 'stopped' state, "
37*2238dcc3SJonas Devlieghere                "instead the actual state is: '%s'"
38*2238dcc3SJonas Devlieghere                % lldbutil.state_type_to_str(process.GetState())
39*2238dcc3SJonas Devlieghere            )
4099451b44SJordan Rupprecht
4199451b44SJordan Rupprecht        stacktraces = lldbutil.print_stacktraces(process, string_buffer=True)
42*2238dcc3SJonas Devlieghere        self.expect(stacktraces, exe=False, substrs=["(int)argc=3"])
4399451b44SJordan Rupprecht
4499451b44SJordan Rupprecht        self.runCmd("thread step-inst")
4599451b44SJordan Rupprecht
4699451b44SJordan Rupprecht        stacktraces = lldbutil.print_stacktraces(process, string_buffer=True)
47*2238dcc3SJonas Devlieghere        self.expect(stacktraces, exe=False, substrs=["(int)argc=3"])
48