brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 9586848 Raw
86 lines · python
1import lldb2 3 4class Resolver:5    got_files = 06    func_list = []7 8    def __init__(self, bkpt, extra_args, dict):9        self.bkpt = bkpt10        self.extra_args = extra_args11 12        Resolver.func_list = []13        Resolver.got_files = 014 15    def __callback__(self, sym_ctx):16        print("Resolver callback called")17        sym_name = "not_a_real_function_name"18        sym_item = self.extra_args.GetValueForKey("symbol")19        if sym_item.IsValid():20            sym_name = sym_item.GetStringValue(1000)21        else:22            print("Didn't have a value for key 'symbol'")23 24        if sym_ctx.compile_unit.IsValid():25            Resolver.got_files = 126        else:27            Resolver.got_files = 228 29        if sym_ctx.function.IsValid():30            Resolver.got_files = 331            func_name = sym_ctx.function.GetName()32            Resolver.func_list.append(func_name)33            if sym_name == func_name:34                self.bkpt.AddLocation(sym_ctx.function.GetStartAddress())35            return36 37        if sym_ctx.module.IsValid():38            print(f"Looking for {sym_name}")39            sym = sym_ctx.module.FindSymbol(sym_name, lldb.eSymbolTypeCode)40            if sym.IsValid():41                print(f"Adding location at {sym.GetStartAddress()} to {self.bkpt}")42                self.bkpt.AddLocation(sym.GetStartAddress())43                print(f"After addition: {self.bkpt}")44            else:45                print("Didn't find it, however...")46 47        print(f"GotFiles: {Resolver.got_files}")48        for func in Resolver.func_list:49            print(f"Function: func")50 51    def get_short_help(self):52        return "I am a python breakpoint resolver"53 54class ResolverModuleDepth(Resolver):55    def __get_depth__(self):56        return lldb.eSearchDepthModule57 58    def __callback__(self, sym_ctx):59        print(f"About to call the Resolver callback for {self.bkpt}")60        Resolver.__callback__(self, sym_ctx)61        print("Called the callback for ResolverModuleDepth")62 63 64class ResolverCUDepth(Resolver):65    def __get_depth__(self):66        return lldb.eSearchDepthCompUnit67 68    def __callback__(self, sym_ctx):69        Resolver.__callback__(self, sym_ctx)70 71 72class ResolverFuncDepth(Resolver):73    def __get_depth__(self):74        return lldb.eSearchDepthFunction75 76    def __callback__(self, sym_ctx):77        Resolver.__callback__(self, sym_ctx)78 79 80class ResolverBadDepth(Resolver):81    def __get_depth__(self):82        return lldb.kLastSearchDepthKind + 183 84    def __callback__(self, sym_ctx):85        Resolver.__callback__(self, sym_ctx)86