1*99451b44SJordan Rupprechtimport lldb 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprechtclass Resolver: 4*99451b44SJordan Rupprecht got_files = 0 5*99451b44SJordan Rupprecht func_list = [] 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprecht def __init__(self, bkpt, extra_args, dict): 8*99451b44SJordan Rupprecht self.bkpt = bkpt 9*99451b44SJordan Rupprecht self.extra_args = extra_args 10*99451b44SJordan Rupprecht 11*99451b44SJordan Rupprecht Resolver.func_list = [] 12*99451b44SJordan Rupprecht Resolver.got_files = 0 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprecht def __callback__(self, sym_ctx): 15*99451b44SJordan Rupprecht sym_name = "not_a_real_function_name" 16*99451b44SJordan Rupprecht sym_item = self.extra_args.GetValueForKey("symbol") 17*99451b44SJordan Rupprecht if sym_item.IsValid(): 18*99451b44SJordan Rupprecht sym_name = sym_item.GetStringValue(1000) 19*99451b44SJordan Rupprecht else: 20*99451b44SJordan Rupprecht print("Didn't have a value for key 'symbol'") 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht if sym_ctx.compile_unit.IsValid(): 23*99451b44SJordan Rupprecht Resolver.got_files = 1 24*99451b44SJordan Rupprecht else: 25*99451b44SJordan Rupprecht Resolver.got_files = 2 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht if sym_ctx.function.IsValid(): 28*99451b44SJordan Rupprecht Resolver.got_files = 3 29*99451b44SJordan Rupprecht func_name = sym_ctx.function.GetName() 30*99451b44SJordan Rupprecht Resolver.func_list.append(func_name) 31*99451b44SJordan Rupprecht if sym_name == func_name: 32*99451b44SJordan Rupprecht self.bkpt.AddLocation(sym_ctx.function.GetStartAddress()) 33*99451b44SJordan Rupprecht return 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht if sym_ctx.module.IsValid(): 36*99451b44SJordan Rupprecht sym = sym_ctx.module.FindSymbol(sym_name, lldb.eSymbolTypeCode) 37*99451b44SJordan Rupprecht if sym.IsValid(): 38*99451b44SJordan Rupprecht self.bkpt.AddLocation(sym.GetStartAddress()) 39*99451b44SJordan Rupprecht 40*99451b44SJordan Rupprecht def get_short_help(self): 41*99451b44SJordan Rupprecht return "I am a python breakpoint resolver" 42*99451b44SJordan Rupprecht 43*99451b44SJordan Rupprechtclass ResolverModuleDepth(Resolver): 44*99451b44SJordan Rupprecht def __get_depth__ (self): 45*99451b44SJordan Rupprecht return lldb.eSearchDepthModule 46*99451b44SJordan Rupprecht 47*99451b44SJordan Rupprechtclass ResolverCUDepth(Resolver): 48*99451b44SJordan Rupprecht def __get_depth__ (self): 49*99451b44SJordan Rupprecht return lldb.eSearchDepthCompUnit 50*99451b44SJordan Rupprecht 51*99451b44SJordan Rupprechtclass ResolverFuncDepth(Resolver): 52*99451b44SJordan Rupprecht def __get_depth__ (self): 53*99451b44SJordan Rupprecht return lldb.eSearchDepthFunction 54*99451b44SJordan Rupprecht 55*99451b44SJordan Rupprechtclass ResolverBadDepth(Resolver): 56*99451b44SJordan Rupprecht def __get_depth__ (self): 57*99451b44SJordan Rupprecht return lldb.kLastSearchDepthKind + 1 58