xref: /openbsd-src/gnu/llvm/lldb/examples/python/disassembly_mode.py (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick""" Adds the 'toggle-disassembly' command to switch you into a disassembly only mode """
2061da546Spatrickimport lldb
3061da546Spatrick
4061da546Spatrickclass DisassemblyMode:
5061da546Spatrick    def __init__(self, debugger, unused):
6061da546Spatrick        self.dbg = debugger
7061da546Spatrick        self.interp = debugger.GetCommandInterpreter()
8061da546Spatrick        self.store_state()
9061da546Spatrick        self.mode_off = True
10061da546Spatrick
11061da546Spatrick    def store_state(self):
12061da546Spatrick        self.dis_count = self.get_string_value("stop-disassembly-count")
13061da546Spatrick        self.dis_display = self.get_string_value("stop-disassembly-display")
14061da546Spatrick        self.before_count = self.get_string_value("stop-line-count-before")
15061da546Spatrick        self.after_count = self.get_string_value("stop-line-count-after")
16061da546Spatrick
17061da546Spatrick    def get_string_value(self, setting):
18061da546Spatrick        result = lldb.SBCommandReturnObject()
19061da546Spatrick        self.interp.HandleCommand("settings show " + setting, result)
20061da546Spatrick        value = result.GetOutput().split(" = ")[1].rstrip("\n")
21061da546Spatrick        return value
22061da546Spatrick
23061da546Spatrick    def set_value(self, setting, value):
24061da546Spatrick        result = lldb.SBCommandReturnObject()
25061da546Spatrick        self.interp.HandleCommand("settings set " + setting + " " + value, result)
26061da546Spatrick
27061da546Spatrick    def __call__(self, debugger, command, exe_ctx, result):
28061da546Spatrick        if self.mode_off:
29061da546Spatrick            self.mode_off = False
30061da546Spatrick            self.store_state()
31061da546Spatrick            self.set_value("stop-disassembly-display","always")
32061da546Spatrick            self.set_value("stop-disassembly-count", "8")
33061da546Spatrick            self.set_value("stop-line-count-before", "0")
34061da546Spatrick            self.set_value("stop-line-count-after", "0")
35061da546Spatrick            result.AppendMessage("Disassembly mode on.")
36061da546Spatrick        else:
37061da546Spatrick            self.mode_off = True
38061da546Spatrick            self.set_value("stop-disassembly-display",self.dis_display)
39061da546Spatrick            self.set_value("stop-disassembly-count", self.dis_count)
40061da546Spatrick            self.set_value("stop-line-count-before", self.before_count)
41061da546Spatrick            self.set_value("stop-line-count-after", self.after_count)
42061da546Spatrick            result.AppendMessage("Disassembly mode off.")
43061da546Spatrick
44061da546Spatrick    def get_short_help(self):
45061da546Spatrick        return "Toggles between a disassembly only mode and normal source mode\n"
46061da546Spatrick
47061da546Spatrickdef __lldb_init_module(debugger, unused):
48*f6aab3d8Srobert    debugger.HandleCommand("command script add -o -c disassembly_mode.DisassemblyMode toggle-disassembly")
49