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