diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:06:29 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:06:29 +0000 | 
| commit | 94994d372d014ce4c8758b9605d63fae651bd8aa (patch) | |
| tree | 51c0b708bd59f205d6b35cb2a8c24d62f0c33d77 /packages/Python/lldbsuite/test/macosx/function-starts/TestFunctionStarts.py | |
| parent | 39be7ce23363d12ae3e49aeb1fdb2bfeb892e836 (diff) | |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/macosx/function-starts/TestFunctionStarts.py')
| -rw-r--r-- | packages/Python/lldbsuite/test/macosx/function-starts/TestFunctionStarts.py | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/packages/Python/lldbsuite/test/macosx/function-starts/TestFunctionStarts.py b/packages/Python/lldbsuite/test/macosx/function-starts/TestFunctionStarts.py new file mode 100644 index 0000000000000..ae3b825f95cbd --- /dev/null +++ b/packages/Python/lldbsuite/test/macosx/function-starts/TestFunctionStarts.py @@ -0,0 +1,76 @@ +""" +Test that we read the function starts section. +""" + +from __future__ import print_function + + +import os +import time +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +exe_name = "StripMe"  # Must match Makefile + +class FunctionStartsTestCase(TestBase): + +    mydir = TestBase.compute_mydir(__file__) + +    NO_DEBUG_INFO_TESTCASE = True + +    @skipIfRemote +    @skipUnlessDarwin +    def test_function_starts_binary(self): +        """Test that we make synthetic symbols when we have the binary.""" +        self.build() +        self.do_function_starts(False) + +    @skipIfRemote +    @skipUnlessDarwin +    def test_function_starts_no_binary(self): +        """Test that we make synthetic symbols when we don't have the binary""" +        self.build() +        self.do_function_starts(True) + +    def do_function_starts(self, in_memory): +        """Run the binary, stop at our unstripped function,  +           make sure the caller has synthetic symbols""" + +        exe = self.getBuildArtifact(exe_name) +        # Now strip the binary, but leave externals so we can break on dont_strip_me. +        try: +            fail_str = system([["strip", "-u", "-x", "-S", exe]]) +        except CalledProcessError as cmd_error: +            self.fail("Strip failed: %d"%(cmd_error.returncode)) + +        popen = self.spawnSubprocess(exe) +        self.addTearDownHook(self.cleanupSubprocesses) +        if in_memory: +          remove_file(exe)             + +        target = self.dbg.CreateTarget(None) +        self.assertTrue(target.IsValid(), "Got a vaid empty target.") +        error = lldb.SBError() +        attach_info = lldb.SBAttachInfo() +        attach_info.SetProcessID(popen.pid) +        attach_info.SetIgnoreExisting(False) +        process = target.Attach(attach_info, error) +        self.assertTrue(error.Success(), "Didn't attach successfully to %d: %s"%(popen.pid, error.GetCString())) +         +        bkpt = target.BreakpointCreateByName("dont_strip_me", exe) +        self.assertTrue(bkpt.GetNumLocations() > 0, "Didn't set the dont_strip_me bkpt.") +         +        threads = lldbutil.continue_to_breakpoint(process, bkpt) +        self.assertEqual(len(threads), 1, "Didn't hit my breakpoint.") + +        # Our caller frame should have been stripped.  Make sure we made a synthetic symbol +        # for it: +        thread = threads[0] +        self.assertTrue(thread.num_frames > 1, "Couldn't backtrace.") +        name = thread.frame[1].GetFunctionName() +        self.assertEqual("___lldb_unnamed_symbol1$$StripMe", name, "Frame name not synthetic") +         + +         | 
