xref: /llvm-project/lldb/examples/python/disassembly_mode.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
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