brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 8d73a16 Raw
116 lines · python
1""" Testing symbol loading via JSON file. """2import lldb3from lldbsuite.test.decorators import *4from lldbsuite.test.lldbtest import *5from lldbsuite.test import lldbutil6 7import json8 9 10class TargetSymbolsFileJSON(TestBase):11    def setUp(self):12        TestBase.setUp(self)13        self.source = "main.c"14 15    @no_debug_info_test16    @skipIfWindows  # No 'strip'17    def test_symbol_file_json_address(self):18        """Test that 'target symbols add' can load the symbols from a JSON file using file addresses."""19 20        self.build()21        stripped = self.getBuildArtifact("stripped.out")22        unstripped = self.getBuildArtifact("a.out")23 24        # Create a JSON symbol file from the unstripped target.25        unstripped_target = self.dbg.CreateTarget(unstripped)26        self.assertTrue(unstripped_target, VALID_TARGET)27 28        unstripped_module = unstripped_target.GetModuleAtIndex(0)29        main_symbol = unstripped_module.FindSymbol("main")30        foo_symbol = unstripped_module.FindSymbol("foo")31 32        data = {33            "triple": unstripped_module.GetTriple(),34            "uuid": unstripped_module.GetUUIDString(),35            "symbols": list(),36        }37        data["symbols"].append(38            {39                "name": "main",40                "type": "code",41                "size": main_symbol.GetSize(),42                "address": main_symbol.addr.GetFileAddress(),43            }44        )45        data["symbols"].append(46            {47                "name": "foo",48                "type": "code",49                "size": foo_symbol.GetSize(),50                "address": foo_symbol.addr.GetFileAddress(),51            }52        )53        data["symbols"].append(54            {55                "name": "bar",56                "type": "code",57                "size": 0,58                "value": 0xFF,59            }60        )61 62        json_object = json.dumps(data, indent=4)63        json_symbol_file = self.getBuildArtifact("a.json")64        with open(json_symbol_file, "w") as outfile:65            outfile.write(json_object)66 67        # Create a stripped target.68        stripped_target = self.dbg.CreateTarget(stripped)69        self.assertTrue(stripped_target, VALID_TARGET)70 71        # Ensure there's no symbol for main and foo.72        stripped_module = stripped_target.GetModuleAtIndex(0)73        self.assertFalse(stripped_module.FindSymbol("main").IsValid())74        self.assertFalse(stripped_module.FindSymbol("foo").IsValid())75        self.assertFalse(stripped_module.FindSymbol("bar").IsValid())76 77        main_bp = stripped_target.BreakpointCreateByName("main", "stripped.out")78        self.assertTrue(main_bp, VALID_BREAKPOINT)79        self.assertEqual(main_bp.num_locations, 0)80 81        # Load the JSON symbol file.82        self.runCmd(83            "target symbols add -s %s %s" % (stripped, self.getBuildArtifact("a.json"))84        )85 86        stripped_main_symbol = stripped_module.FindSymbol("main")87        stripped_foo_symbol = stripped_module.FindSymbol("foo")88        stripped_bar_symbol = stripped_module.FindSymbol("bar")89 90        # Ensure main and foo are available now.91        self.assertTrue(stripped_main_symbol.IsValid())92        self.assertTrue(stripped_foo_symbol.IsValid())93        self.assertTrue(stripped_bar_symbol.IsValid())94        self.assertEqual(main_bp.num_locations, 1)95 96        # Ensure the file address matches between the stripped and unstripped target.97        self.assertEqual(98            stripped_main_symbol.addr.GetFileAddress(),99            main_symbol.addr.GetFileAddress(),100        )101        self.assertEqual(102            stripped_main_symbol.addr.GetFileAddress(),103            main_symbol.addr.GetFileAddress(),104        )105 106        # Ensure the size matches.107        self.assertEqual(stripped_main_symbol.GetSize(), main_symbol.GetSize())108        self.assertEqual(stripped_main_symbol.GetSize(), main_symbol.GetSize())109 110        # Ensure the type matches.111        self.assertEqual(stripped_main_symbol.GetType(), main_symbol.GetType())112        self.assertEqual(stripped_main_symbol.GetType(), main_symbol.GetType())113 114        # Ensure the bar symbol has a fixed value of 10.115        self.assertEqual(stripped_bar_symbol.GetValue(), 0xFF)116