59 """Register a disassembler. DISASSEMBLER is a sub-class of
60 gdb.disassembler.Disassembler. ARCHITECTURE is either None or a
61 string, the name of an architecture known to GDB.
63 DISASSEMBLER is registered as a disassembler for ARCHITECTURE, or
64 all architectures when ARCHITECTURE is None.
66 Returns the previous disassembler registered with this
70 if not isinstance(disassembler, Disassembler)
and disassembler
is not None:
71 raise TypeError(
"disassembler should sub-class gdb.disassembler.Disassembler")
74 if architecture
in _disassemblers_dict:
75 old = _disassemblers_dict[architecture]
76 del _disassemblers_dict[architecture]
77 if disassembler
is not None:
78 _disassemblers_dict[architecture] = disassembler
86 _gdb.disassembler._set_enabled(len(_disassemblers_dict) > 0)
139 if len(_disassemblers_dict) == 0:
140 print(
"No Python disassemblers registered.")
145 longest_arch_name = 0
146 for architecture
in _disassemblers_dict:
147 if architecture
is not None:
148 name = _disassemblers_dict[architecture].name
149 if len(name) > longest_arch_name:
150 longest_arch_name = len(name)
157 if gdb.selected_inferior()
is not None:
158 curr_arch = gdb.selected_inferior().architecture().
name()
162 match_tag =
"\t(Matches current architecture)"
163 fmt_len = max(longest_arch_name, len(
"Architecture"))
164 format_string =
"{:" + str(fmt_len) +
"s} {:s}"
165 print(format_string.format(
"Architecture",
"Disassember Name"))
166 for architecture
in _disassemblers_dict:
167 if architecture
is not None:
168 name = _disassemblers_dict[architecture].name
169 if architecture == curr_arch:
172 print(format_string.format(architecture, name))
173 if None in _disassemblers_dict:
174 name = _disassemblers_dict[
None].name + match_tag
175 print(format_string.format(
"GLOBAL", name))
invoke(self, args, from_tty)