1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest that we can backtrace correctly from Non ABI functions on the stack 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprechtimport lldb 8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprechtclass EHFrameBasedUnwind(TestBase): 14*99451b44SJordan Rupprecht 15*99451b44SJordan Rupprecht @skipUnlessPlatform(['linux']) 16*99451b44SJordan Rupprecht @skipIf(archs=["aarch64", "arm", "i386", "i686"]) 17*99451b44SJordan Rupprecht def test(self): 18*99451b44SJordan Rupprecht """Test that we can backtrace correctly from Non ABI functions on the stack""" 19*99451b44SJordan Rupprecht self.build() 20*99451b44SJordan Rupprecht self.setTearDownCleanup() 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 23*99451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 24*99451b44SJordan Rupprecht 25*99451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht lldbutil.run_break_set_by_symbol(self, "func") 28*99451b44SJordan Rupprecht 29*99451b44SJordan Rupprecht process = target.LaunchSimple( 30*99451b44SJordan Rupprecht ["abc", "xyz"], None, self.get_process_working_directory()) 31*99451b44SJordan Rupprecht 32*99451b44SJordan Rupprecht if not process: 33*99451b44SJordan Rupprecht self.fail("SBTarget.Launch() failed") 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht if process.GetState() != lldb.eStateStopped: 36*99451b44SJordan Rupprecht self.fail("Process should be in the 'stopped' state, " 37*99451b44SJordan Rupprecht "instead the actual state is: '%s'" % 38*99451b44SJordan Rupprecht lldbutil.state_type_to_str(process.GetState())) 39*99451b44SJordan Rupprecht 40*99451b44SJordan Rupprecht stacktraces = lldbutil.print_stacktraces(process, string_buffer=True) 41*99451b44SJordan Rupprecht self.expect(stacktraces, exe=False, 42*99451b44SJordan Rupprecht substrs=['(int)argc=3']) 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht self.runCmd("thread step-inst") 45*99451b44SJordan Rupprecht 46*99451b44SJordan Rupprecht stacktraces = lldbutil.print_stacktraces(process, string_buffer=True) 47*99451b44SJordan Rupprecht self.expect(stacktraces, exe=False, 48*99451b44SJordan Rupprecht substrs=['(int)argc=3']) 49