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