arm, objdump: print obsolote warning when 26-bit set in instructions
[binutils-gdb.git] / gdb / python / py-cmd.c
blob2bb9b8290212732558aee4ba72bd586992a577fe
1 /* gdb commands implemented in Python
3 Copyright (C) 2008-2024 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 #include "arch-utils.h"
22 #include "value.h"
23 #include "python-internal.h"
24 #include "charset.h"
25 #include "cli/cli-cmds.h"
26 #include "cli/cli-decode.h"
27 #include "completer.h"
28 #include "language.h"
30 /* Struct representing built-in completion types. */
31 struct cmdpy_completer
33 /* Python symbol name. */
34 const char *name;
35 /* Completion function. */
36 completer_ftype *completer;
39 static const struct cmdpy_completer completers[] =
41 { "COMPLETE_NONE", noop_completer },
42 { "COMPLETE_FILENAME", filename_maybe_quoted_completer },
43 { "COMPLETE_LOCATION", location_completer },
44 { "COMPLETE_COMMAND", command_completer },
45 { "COMPLETE_SYMBOL", symbol_completer },
46 { "COMPLETE_EXPRESSION", expression_completer },
49 #define N_COMPLETERS (sizeof (completers) / sizeof (completers[0]))
51 /* A gdb command. For the time being only ordinary commands (not
52 set/show commands) are allowed. */
53 struct cmdpy_object
55 PyObject_HEAD
57 /* The corresponding gdb command object, or NULL if the command is
58 no longer installed. */
59 struct cmd_list_element *command;
61 /* A prefix command requires storage for a list of its sub-commands.
62 A pointer to this is passed to add_prefix_command, and to add_cmd
63 for sub-commands of that prefix. If this Command is not a prefix
64 command, then this field is unused. */
65 struct cmd_list_element *sub_list;
68 extern PyTypeObject cmdpy_object_type
69 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("cmdpy_object");
71 /* Constants used by this module. */
72 static PyObject *invoke_cst;
73 static PyObject *complete_cst;
77 /* Python function which wraps dont_repeat. */
78 static PyObject *
79 cmdpy_dont_repeat (PyObject *self, PyObject *args)
81 dont_repeat ();
82 Py_RETURN_NONE;
87 /* Called if the gdb cmd_list_element is destroyed. */
89 static void
90 cmdpy_destroyer (struct cmd_list_element *self, void *context)
92 gdbpy_enter enter_py;
94 /* Release our hold on the command object. */
95 gdbpy_ref<cmdpy_object> cmd ((cmdpy_object *) context);
96 cmd->command = NULL;
99 /* Called by gdb to invoke the command. */
101 static void
102 cmdpy_function (const char *args, int from_tty, cmd_list_element *command)
104 cmdpy_object *obj = (cmdpy_object *) command->context ();
106 gdbpy_enter enter_py;
108 if (! obj)
109 error (_("Invalid invocation of Python command object."));
110 if (! PyObject_HasAttr ((PyObject *) obj, invoke_cst))
112 if (obj->command->is_prefix ())
114 /* A prefix command does not need an invoke method. */
115 return;
117 error (_("Python command object missing 'invoke' method."));
120 if (! args)
121 args = "";
122 gdbpy_ref<> argobj (PyUnicode_Decode (args, strlen (args), host_charset (),
123 NULL));
124 if (argobj == NULL)
126 gdbpy_print_stack ();
127 error (_("Could not convert arguments to Python string."));
130 gdbpy_ref<> ttyobj (PyBool_FromLong (from_tty));
131 gdbpy_ref<> result (PyObject_CallMethodObjArgs ((PyObject *) obj, invoke_cst,
132 argobj.get (), ttyobj.get (),
133 NULL));
135 if (result == NULL)
136 gdbpy_handle_exception ();
139 /* Helper function for the Python command completers (both "pure"
140 completer and brkchar handler). This function takes COMMAND, TEXT
141 and WORD and tries to call the Python method for completion with
142 these arguments.
144 This function is usually called twice: once when we are figuring out
145 the break characters to be used, and another to perform the real
146 completion itself. The reason for this two step dance is that we
147 need to know the set of "brkchars" to use early on, before we
148 actually try to perform the completion. But if a Python command
149 supplies a "complete" method then we have to call that method
150 first: it may return as its result the kind of completion to
151 perform and that will in turn specify which brkchars to use. IOW,
152 we need the result of the "complete" method before we actually
153 perform the completion. The only situation when this function is
154 not called twice is when the user uses the "complete" command: in
155 this scenario, there is no call to determine the "brkchars".
157 Ideally, it would be nice to cache the result of the first call (to
158 determine the "brkchars") and return this value directly in the
159 second call (to perform the actual completion). However, due to
160 the peculiarity of the "complete" command mentioned above, it is
161 possible to put GDB in a bad state if you perform a TAB-completion
162 and then a "complete"-completion sequentially. Therefore, we just
163 recalculate everything twice for TAB-completions.
165 This function returns a reference to the PyObject representing the
166 Python method call. */
168 static gdbpy_ref<>
169 cmdpy_completer_helper (struct cmd_list_element *command,
170 const char *text, const char *word)
172 cmdpy_object *obj = (cmdpy_object *) command->context ();
174 if (obj == NULL)
175 error (_("Invalid invocation of Python command object."));
176 if (!PyObject_HasAttr ((PyObject *) obj, complete_cst))
178 /* If there is no complete method, don't error. */
179 return NULL;
182 gdbpy_ref<> textobj (PyUnicode_Decode (text, strlen (text), host_charset (),
183 NULL));
184 if (textobj == NULL)
186 gdbpy_print_stack ();
187 error (_("Could not convert argument to Python string."));
190 gdbpy_ref<> wordobj;
191 if (word == NULL)
193 /* "brkchars" phase. */
194 wordobj = gdbpy_ref<>::new_reference (Py_None);
196 else
198 wordobj.reset (PyUnicode_Decode (word, strlen (word), host_charset (),
199 NULL));
200 if (wordobj == NULL)
202 gdbpy_print_stack ();
203 error (_("Could not convert argument to Python string."));
207 gdbpy_ref<> resultobj (PyObject_CallMethodObjArgs ((PyObject *) obj,
208 complete_cst,
209 textobj.get (),
210 wordobj.get (), NULL));
212 /* Check if an exception was raised by the Command.complete method. */
213 if (resultobj == nullptr)
215 gdbpy_print_stack_or_quit ();
216 error (_("exception raised during Command.complete method"));
219 return resultobj;
222 /* Python function called to determine the break characters of a
223 certain completer. We are only interested in knowing if the
224 completer registered by the user will return one of the integer
225 codes (see COMPLETER_* symbols). */
227 static void
228 cmdpy_completer_handle_brkchars (struct cmd_list_element *command,
229 completion_tracker &tracker,
230 const char *text, const char *word)
232 gdbpy_enter enter_py;
234 /* Calling our helper to obtain a reference to the PyObject of the Python
235 function. */
236 gdbpy_ref<> resultobj = cmdpy_completer_helper (command, text, word);
238 /* Check if there was an error. */
239 if (resultobj == NULL)
240 return;
242 if (PyLong_Check (resultobj.get ()))
244 /* User code may also return one of the completion constants,
245 thus requesting that sort of completion. We are only
246 interested in this kind of return. */
247 long value;
249 if (!gdb_py_int_as_long (resultobj.get (), &value))
250 gdbpy_print_stack ();
251 else if (value >= 0 && value < (long) N_COMPLETERS)
253 completer_handle_brkchars_ftype *brkchars_fn;
255 /* This is the core of this function. Depending on which
256 completer type the Python function returns, we have to
257 adjust the break characters accordingly. */
258 brkchars_fn = (completer_handle_brkchars_func_for_completer
259 (completers[value].completer));
260 brkchars_fn (command, tracker, text, word);
265 /* Called by gdb for command completion. */
267 static void
268 cmdpy_completer (struct cmd_list_element *command,
269 completion_tracker &tracker,
270 const char *text, const char *word)
272 gdbpy_enter enter_py;
274 /* Calling our helper to obtain a reference to the PyObject of the Python
275 function. */
276 gdbpy_ref<> resultobj = cmdpy_completer_helper (command, text, word);
278 /* If the result object of calling the Python function is NULL, it
279 means that there was an error. In this case, just give up. */
280 if (resultobj == NULL)
281 return;
283 if (PyLong_Check (resultobj.get ()))
285 /* User code may also return one of the completion constants,
286 thus requesting that sort of completion. */
287 long value;
289 if (! gdb_py_int_as_long (resultobj.get (), &value))
290 gdbpy_print_stack ();
291 else if (value >= 0 && value < (long) N_COMPLETERS)
292 completers[value].completer (command, tracker, text, word);
294 else if (PySequence_Check (resultobj.get ()))
296 gdbpy_ref<> iter (PyObject_GetIter (resultobj.get ()));
298 if (iter == NULL)
300 gdbpy_print_stack ();
301 return;
304 while (true)
306 gdbpy_ref<> elt (PyIter_Next (iter.get ()));
307 if (elt == NULL)
309 if (PyErr_Occurred() != nullptr)
310 gdbpy_print_stack ();
311 break;
314 if (! gdbpy_is_string (elt.get ()))
316 /* Skip problem elements. */
317 continue;
320 gdb::unique_xmalloc_ptr<char>
321 item (python_string_to_host_string (elt.get ()));
322 if (item == NULL)
324 gdbpy_print_stack ();
325 continue;
327 tracker.add_completion (std::move (item));
332 /* Helper for cmdpy_init which locates the command list to use and
333 pulls out the command name.
335 NAME is the command name list. The final word in the list is the
336 name of the new command. All earlier words must be existing prefix
337 commands.
339 *BASE_LIST is set to the final prefix command's list of
340 *sub-commands.
342 START_LIST is the list in which the search starts.
344 This function returns the name of the new command. On error sets the Python
345 error and returns NULL. */
347 gdb::unique_xmalloc_ptr<char>
348 gdbpy_parse_command_name (const char *name,
349 struct cmd_list_element ***base_list,
350 struct cmd_list_element **start_list)
352 struct cmd_list_element *elt;
353 int len = strlen (name);
354 int i, lastchar;
355 const char *prefix_text2;
357 /* Skip trailing whitespace. */
358 for (i = len - 1; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
360 if (i < 0)
362 PyErr_SetString (PyExc_RuntimeError, _("No command name found."));
363 return NULL;
365 lastchar = i;
367 /* Find first character of the final word. */
368 for (; i > 0 && valid_cmd_char_p (name[i - 1]); --i)
371 gdb::unique_xmalloc_ptr<char> result ((char *) xmalloc (lastchar - i + 2));
372 memcpy (result.get (), &name[i], lastchar - i + 1);
373 result.get ()[lastchar - i + 1] = '\0';
375 /* Skip whitespace again. */
376 for (--i; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
378 if (i < 0)
380 *base_list = start_list;
381 return result;
384 std::string prefix_text (name, i + 1);
386 prefix_text2 = prefix_text.c_str ();
387 elt = lookup_cmd_1 (&prefix_text2, *start_list, NULL, NULL, 1);
388 if (elt == NULL || elt == CMD_LIST_AMBIGUOUS)
390 PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."),
391 prefix_text.c_str ());
392 return NULL;
395 if (elt->is_prefix ())
397 *base_list = elt->subcommands;
398 return result;
401 PyErr_Format (PyExc_RuntimeError, _("'%s' is not a prefix command."),
402 prefix_text.c_str ());
403 return NULL;
406 /* Object initializer; sets up gdb-side structures for command.
408 Use: __init__(NAME, COMMAND_CLASS [, COMPLETER_CLASS][, PREFIX]]).
410 NAME is the name of the command. It may consist of multiple words,
411 in which case the final word is the name of the new command, and
412 earlier words must be prefix commands.
414 COMMAND_CLASS is the kind of command. It should be one of the COMMAND_*
415 constants defined in the gdb module.
417 COMPLETER_CLASS is the kind of completer. If not given, the
418 "complete" method will be used. Otherwise, it should be one of the
419 COMPLETE_* constants defined in the gdb module.
421 If PREFIX is True, then this command is a prefix command.
423 The documentation for the command is taken from the doc string for
424 the python class. */
426 static int
427 cmdpy_init (PyObject *self, PyObject *args, PyObject *kw)
429 cmdpy_object *obj = (cmdpy_object *) self;
430 const char *name;
431 int cmdtype;
432 int completetype = -1;
433 struct cmd_list_element **cmd_list;
434 static const char *keywords[] = { "name", "command_class", "completer_class",
435 "prefix", NULL };
436 PyObject *is_prefix_obj = NULL;
437 bool is_prefix = false;
439 if (obj->command)
441 /* Note: this is apparently not documented in Python. We return
442 0 for success, -1 for failure. */
443 PyErr_Format (PyExc_RuntimeError,
444 _("Command object already initialized."));
445 return -1;
448 if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "si|iO",
449 keywords, &name, &cmdtype,
450 &completetype, &is_prefix_obj))
451 return -1;
453 if (cmdtype != no_class && cmdtype != class_run
454 && cmdtype != class_vars && cmdtype != class_stack
455 && cmdtype != class_files && cmdtype != class_support
456 && cmdtype != class_info && cmdtype != class_breakpoint
457 && cmdtype != class_trace && cmdtype != class_obscure
458 && cmdtype != class_maintenance && cmdtype != class_user
459 && cmdtype != class_tui)
461 PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument."));
462 return -1;
465 if (completetype < -1 || completetype >= (int) N_COMPLETERS)
467 PyErr_Format (PyExc_RuntimeError,
468 _("Invalid completion type argument."));
469 return -1;
472 gdb::unique_xmalloc_ptr<char> cmd_name
473 = gdbpy_parse_command_name (name, &cmd_list, &cmdlist);
474 if (cmd_name == nullptr)
475 return -1;
477 if (is_prefix_obj != NULL)
479 int cmp = PyObject_IsTrue (is_prefix_obj);
480 if (cmp < 0)
481 return -1;
483 is_prefix = cmp > 0;
486 gdb::unique_xmalloc_ptr<char> docstring = nullptr;
487 if (PyObject_HasAttr (self, gdbpy_doc_cst))
489 gdbpy_ref<> ds_obj (PyObject_GetAttr (self, gdbpy_doc_cst));
491 if (ds_obj != NULL && gdbpy_is_string (ds_obj.get ()))
493 docstring = python_string_to_host_string (ds_obj.get ());
494 if (docstring == nullptr)
495 return -1;
496 docstring = gdbpy_fix_doc_string_indentation (std::move (docstring));
499 if (docstring == nullptr)
500 docstring = make_unique_xstrdup (_("This command is not documented."));
502 gdbpy_ref<> self_ref = gdbpy_ref<>::new_reference (self);
506 struct cmd_list_element *cmd;
508 if (is_prefix)
510 int allow_unknown;
512 /* If we have our own "invoke" method, then allow unknown
513 sub-commands. */
514 allow_unknown = PyObject_HasAttr (self, invoke_cst);
515 cmd = add_prefix_cmd (cmd_name.get (),
516 (enum command_class) cmdtype,
517 NULL, docstring.release (), &obj->sub_list,
518 allow_unknown, cmd_list);
520 else
521 cmd = add_cmd (cmd_name.get (), (enum command_class) cmdtype,
522 docstring.release (), cmd_list);
524 /* If successful, the above takes ownership of the name, since we set
525 name_allocated, so release it. */
526 cmd_name.release ();
528 /* There appears to be no API to set this. */
529 cmd->func = cmdpy_function;
530 cmd->destroyer = cmdpy_destroyer;
531 cmd->doc_allocated = 1;
532 cmd->name_allocated = 1;
534 obj->command = cmd;
535 cmd->set_context (self_ref.release ());
536 set_cmd_completer (cmd, ((completetype == -1) ? cmdpy_completer
537 : completers[completetype].completer));
538 if (completetype == -1)
539 set_cmd_completer_handle_brkchars (cmd,
540 cmdpy_completer_handle_brkchars);
542 catch (const gdb_exception &except)
544 return gdbpy_handle_gdb_exception (-1, except);
547 return 0;
552 /* Initialize the 'commands' code. */
554 static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
555 gdbpy_initialize_commands (void)
557 int i;
559 cmdpy_object_type.tp_new = PyType_GenericNew;
560 if (gdbpy_type_ready (&cmdpy_object_type) < 0)
561 return -1;
563 /* Note: alias and user are special. */
564 if (PyModule_AddIntConstant (gdb_module, "COMMAND_NONE", no_class) < 0
565 || PyModule_AddIntConstant (gdb_module, "COMMAND_RUNNING", class_run) < 0
566 || PyModule_AddIntConstant (gdb_module, "COMMAND_DATA", class_vars) < 0
567 || PyModule_AddIntConstant (gdb_module, "COMMAND_STACK", class_stack) < 0
568 || PyModule_AddIntConstant (gdb_module, "COMMAND_FILES", class_files) < 0
569 || PyModule_AddIntConstant (gdb_module, "COMMAND_SUPPORT",
570 class_support) < 0
571 || PyModule_AddIntConstant (gdb_module, "COMMAND_STATUS", class_info) < 0
572 || PyModule_AddIntConstant (gdb_module, "COMMAND_BREAKPOINTS",
573 class_breakpoint) < 0
574 || PyModule_AddIntConstant (gdb_module, "COMMAND_TRACEPOINTS",
575 class_trace) < 0
576 || PyModule_AddIntConstant (gdb_module, "COMMAND_OBSCURE",
577 class_obscure) < 0
578 || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE",
579 class_maintenance) < 0
580 || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0
581 || PyModule_AddIntConstant (gdb_module, "COMMAND_TUI", class_tui) < 0)
582 return -1;
584 for (i = 0; i < N_COMPLETERS; ++i)
586 if (PyModule_AddIntConstant (gdb_module, completers[i].name, i) < 0)
587 return -1;
590 invoke_cst = PyUnicode_FromString ("invoke");
591 if (invoke_cst == NULL)
592 return -1;
593 complete_cst = PyUnicode_FromString ("complete");
594 if (complete_cst == NULL)
595 return -1;
597 return 0;
600 GDBPY_INITIALIZE_FILE (gdbpy_initialize_commands);
604 static PyMethodDef cmdpy_object_methods[] =
606 { "dont_repeat", cmdpy_dont_repeat, METH_NOARGS,
607 "Prevent command repetition when user enters empty line." },
609 { 0 }
612 PyTypeObject cmdpy_object_type =
614 PyVarObject_HEAD_INIT (NULL, 0)
615 "gdb.Command", /*tp_name*/
616 sizeof (cmdpy_object), /*tp_basicsize*/
617 0, /*tp_itemsize*/
618 0, /*tp_dealloc*/
619 0, /*tp_print*/
620 0, /*tp_getattr*/
621 0, /*tp_setattr*/
622 0, /*tp_compare*/
623 0, /*tp_repr*/
624 0, /*tp_as_number*/
625 0, /*tp_as_sequence*/
626 0, /*tp_as_mapping*/
627 0, /*tp_hash */
628 0, /*tp_call*/
629 0, /*tp_str*/
630 0, /*tp_getattro*/
631 0, /*tp_setattro*/
632 0, /*tp_as_buffer*/
633 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
634 "GDB command object", /* tp_doc */
635 0, /* tp_traverse */
636 0, /* tp_clear */
637 0, /* tp_richcompare */
638 0, /* tp_weaklistoffset */
639 0, /* tp_iter */
640 0, /* tp_iternext */
641 cmdpy_object_methods, /* tp_methods */
642 0, /* tp_members */
643 0, /* tp_getset */
644 0, /* tp_base */
645 0, /* tp_dict */
646 0, /* tp_descr_get */
647 0, /* tp_descr_set */
648 0, /* tp_dictoffset */
649 cmdpy_init, /* tp_init */
650 0, /* tp_alloc */
655 /* Utility to build a buildargv-like result from ARGS.
656 This intentionally parses arguments the way libiberty/argv.c:buildargv
657 does. It splits up arguments in a reasonable way, and we want a standard
658 way of parsing arguments. Several gdb commands use buildargv to parse their
659 arguments. Plus we want to be able to write compatible python
660 implementations of gdb commands. */
662 PyObject *
663 gdbpy_string_to_argv (PyObject *self, PyObject *args)
665 const char *input;
667 if (!PyArg_ParseTuple (args, "s", &input))
668 return NULL;
670 gdbpy_ref<> py_argv (PyList_New (0));
671 if (py_argv == NULL)
672 return NULL;
674 /* buildargv uses NULL to represent an empty argument list, but we can't use
675 that in Python. Instead, if ARGS is "" then return an empty list.
676 This undoes the NULL -> "" conversion that cmdpy_function does. */
678 if (*input != '\0')
680 gdb_argv c_argv (input);
682 for (char *arg : c_argv)
684 gdbpy_ref<> argp (PyUnicode_FromString (arg));
686 if (argp == NULL
687 || PyList_Append (py_argv.get (), argp.get ()) < 0)
688 return NULL;
692 return py_argv.release ();