1*f77bb46dSJim Ingham""" Adds the 'toggle-disassembly' command to switch you into a disassembly only mode """ 2*f77bb46dSJim Inghamimport lldb 3*f77bb46dSJim Ingham 4*f77bb46dSJim Inghamclass DisassemblyMode: 5*f77bb46dSJim Ingham def __init__(self, debugger, unused): 6*f77bb46dSJim Ingham self.dbg = debugger 7*f77bb46dSJim Ingham self.interp = debugger.GetCommandInterpreter() 8*f77bb46dSJim Ingham self.store_state() 9*f77bb46dSJim Ingham self.mode_off = True 10*f77bb46dSJim Ingham 11*f77bb46dSJim Ingham def store_state(self): 12*f77bb46dSJim Ingham self.dis_count = self.get_string_value("stop-disassembly-count") 13*f77bb46dSJim Ingham self.dis_display = self.get_string_value("stop-disassembly-display") 14*f77bb46dSJim Ingham self.before_count = self.get_string_value("stop-line-count-before") 15*f77bb46dSJim Ingham self.after_count = self.get_string_value("stop-line-count-after") 16*f77bb46dSJim Ingham 17*f77bb46dSJim Ingham def get_string_value(self, setting): 18*f77bb46dSJim Ingham result = lldb.SBCommandReturnObject() 19*f77bb46dSJim Ingham self.interp.HandleCommand("settings show " + setting, result) 20*f77bb46dSJim Ingham value = result.GetOutput().split(" = ")[1].rstrip("\n") 21*f77bb46dSJim Ingham return value 22*f77bb46dSJim Ingham 23*f77bb46dSJim Ingham def set_value(self, setting, value): 24*f77bb46dSJim Ingham result = lldb.SBCommandReturnObject() 25*f77bb46dSJim Ingham self.interp.HandleCommand("settings set " + setting + " " + value, result) 26*f77bb46dSJim Ingham 27*f77bb46dSJim Ingham def __call__(self, debugger, command, exe_ctx, result): 28*f77bb46dSJim Ingham if self.mode_off: 29*f77bb46dSJim Ingham self.mode_off = False 30*f77bb46dSJim Ingham self.store_state() 31*f77bb46dSJim Ingham self.set_value("stop-disassembly-display","always") 32*f77bb46dSJim Ingham self.set_value("stop-disassembly-count", "8") 33*f77bb46dSJim Ingham self.set_value("stop-line-count-before", "0") 34*f77bb46dSJim Ingham self.set_value("stop-line-count-after", "0") 35*f77bb46dSJim Ingham result.AppendMessage("Disassembly mode on.") 36*f77bb46dSJim Ingham else: 37*f77bb46dSJim Ingham self.mode_off = True 38*f77bb46dSJim Ingham self.set_value("stop-disassembly-display",self.dis_display) 39*f77bb46dSJim Ingham self.set_value("stop-disassembly-count", self.dis_count) 40*f77bb46dSJim Ingham self.set_value("stop-line-count-before", self.before_count) 41*f77bb46dSJim Ingham self.set_value("stop-line-count-after", self.after_count) 42*f77bb46dSJim Ingham result.AppendMessage("Disassembly mode off.") 43*f77bb46dSJim Ingham 44*f77bb46dSJim Ingham def get_short_help(self): 45*f77bb46dSJim Ingham return "Toggles between a disassembly only mode and normal source mode\n" 46*f77bb46dSJim Ingham 47*f77bb46dSJim Inghamdef __lldb_init_module(debugger, unused): 48*f77bb46dSJim Ingham debugger.HandleCommand("command script add -c disassembly_mode.DisassemblyMode toggle-disassembly") 49