| """ |
| Test things related to the fission debug information style where the main object |
| file contains a skeleton compile unit and the main debug info is in .dwo files. |
| """ |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| import os |
| |
| |
| class ExecTestCase(TestBase): |
| NO_DEBUG_INFO_TESTCASE = True |
| |
| def test_zero_dwo_id(self): |
| """ |
| Test that we can load a .o file that has a skeleton compile unit |
| with a DWO ID of zero. We do this by hacking up the yaml to emit |
| zero as a DWO ID is both the .o file and .dwo file. Then we make |
| sure we can resolve something in the debug information to verify |
| that we were able to load the .dwo file corrrectly since that is |
| the only place that has this information. |
| """ |
| src_dir = self.getSourceDir() |
| dwo_yaml_path = os.path.join(src_dir, "main.dwo.yaml") |
| obj_yaml_path = os.path.join(src_dir, "main.o.yaml") |
| dwo_path = self.getBuildArtifact("main.dwo") |
| obj_path = self.getBuildArtifact("main.o") |
| self.yaml2obj(dwo_yaml_path, dwo_path) |
| self.yaml2obj(obj_yaml_path, obj_path) |
| |
| # We need the current working directory to be set to the build directory |
| os.chdir(self.getBuildDir()) |
| # Create a target with the object file we just created from YAML |
| target = self.dbg.CreateTarget(obj_path) |
| self.assertTrue(target, VALID_TARGET) |
| |
| # Set a breakpoint by file and line, this doesn't require anything from |
| # the .dwo file. |
| bp = target.BreakpointCreateByLocation("main.cpp", 6) |
| self.assertEqual(bp.GetNumLocations(), 1) |
| bp_loc = bp.GetLocationAtIndex(0) |
| self.assertTrue(bp_loc.IsValid()) |
| |
| # We will use the address of the location to resolve the function "main" |
| # to make sure we were able to open the .dwo file since this is the only |
| # place that contains debug info for the function. |
| self.assertTrue(bp_loc.GetAddress().GetFunction().IsValid()) |