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