1 /* gdb commands implemented in Python
2 
3    Copyright (C) 2008-2024 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
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.
11 
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.
16 
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/>.  */
19 
20 
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"
29 
30 /* Struct representing built-in completion types.  */
31 struct cmdpy_completer
32 {
33   /* Python symbol name.  */
34   const char *name;
35   /* Completion function.  */
36   completer_ftype *completer;
37 };
38 
39 static const struct cmdpy_completer completers[] =
40 {
41   { "COMPLETE_NONE", noop_completer },
42   { "COMPLETE_FILENAME", filename_completer },
43   { "COMPLETE_LOCATION", location_completer },
44   { "COMPLETE_COMMAND", command_completer },
45   { "COMPLETE_SYMBOL", symbol_completer },
46   { "COMPLETE_EXPRESSION", expression_completer },
47 };
48 
49 #define N_COMPLETERS (sizeof (completers) / sizeof (completers[0]))
50 
51 /* A gdb command.  For the time being only ordinary commands (not
52    set/show commands) are allowed.  */
53 struct cmdpy_object
54 {
55   PyObject_HEAD
56 
57   /* The corresponding gdb command object, or NULL if the command is
58      no longer installed.  */
59   struct cmd_list_element *command;
60 
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;
66 };
67 
68 extern PyTypeObject cmdpy_object_type
69     CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("cmdpy_object");
70 
71 /* Constants used by this module.  */
72 static PyObject *invoke_cst;
73 static PyObject *complete_cst;
74 
75 
76 
77 /* Python function which wraps dont_repeat.  */
78 static PyObject *
cmdpy_dont_repeat(PyObject * self,PyObject * args)79 cmdpy_dont_repeat (PyObject *self, PyObject *args)
80 {
81   dont_repeat ();
82   Py_RETURN_NONE;
83 }
84 
85 
86 
87 /* Called if the gdb cmd_list_element is destroyed.  */
88 
89 static void
cmdpy_destroyer(struct cmd_list_element * self,void * context)90 cmdpy_destroyer (struct cmd_list_element *self, void *context)
91 {
92   gdbpy_enter enter_py;
93 
94   /* Release our hold on the command object.  */
95   gdbpy_ref<cmdpy_object> cmd ((cmdpy_object *) context);
96   cmd->command = NULL;
97 }
98 
99 /* Called by gdb to invoke the command.  */
100 
101 static void
cmdpy_function(const char * args,int from_tty,cmd_list_element * command)102 cmdpy_function (const char *args, int from_tty, cmd_list_element *command)
103 {
104   cmdpy_object *obj = (cmdpy_object *) command->context ();
105 
106   gdbpy_enter enter_py;
107 
108   if (! obj)
109     error (_("Invalid invocation of Python command object."));
110   if (! PyObject_HasAttr ((PyObject *) obj, invoke_cst))
111     {
112       if (obj->command->is_prefix ())
113           {
114             /* A prefix command does not need an invoke method.  */
115             return;
116           }
117       error (_("Python command object missing 'invoke' method."));
118     }
119 
120   if (! args)
121     args = "";
122   gdbpy_ref<> argobj (PyUnicode_Decode (args, strlen (args), host_charset (),
123                                                   NULL));
124   if (argobj == NULL)
125     {
126       gdbpy_print_stack ();
127       error (_("Could not convert arguments to Python string."));
128     }
129 
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));
134 
135   if (result == NULL)
136     gdbpy_handle_exception ();
137 }
138 
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.
143 
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".
156 
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.
164 
165    This function returns a reference to the PyObject representing the
166    Python method call.  */
167 
168 static gdbpy_ref<>
cmdpy_completer_helper(struct cmd_list_element * command,const char * text,const char * word)169 cmdpy_completer_helper (struct cmd_list_element *command,
170                               const char *text, const char *word)
171 {
172   cmdpy_object *obj = (cmdpy_object *) command->context ();
173 
174   if (obj == NULL)
175     error (_("Invalid invocation of Python command object."));
176   if (!PyObject_HasAttr ((PyObject *) obj, complete_cst))
177     {
178       /* If there is no complete method, don't error.  */
179       return NULL;
180     }
181 
182   gdbpy_ref<> textobj (PyUnicode_Decode (text, strlen (text), host_charset (),
183                                                    NULL));
184   if (textobj == NULL)
185     {
186       gdbpy_print_stack ();
187       error (_("Could not convert argument to Python string."));
188     }
189 
190   gdbpy_ref<> wordobj;
191   if (word == NULL)
192     {
193       /* "brkchars" phase.  */
194       wordobj = gdbpy_ref<>::new_reference (Py_None);
195     }
196   else
197     {
198       wordobj.reset (PyUnicode_Decode (word, strlen (word), host_charset (),
199                                                NULL));
200       if (wordobj == NULL)
201           {
202             gdbpy_print_stack ();
203             error (_("Could not convert argument to Python string."));
204           }
205     }
206 
207   gdbpy_ref<> resultobj (PyObject_CallMethodObjArgs ((PyObject *) obj,
208                                                                  complete_cst,
209                                                                  textobj.get (),
210                                                                  wordobj.get (), NULL));
211 
212   /* Check if an exception was raised by the Command.complete method.  */
213   if (resultobj == nullptr)
214     {
215       gdbpy_print_stack_or_quit ();
216       error (_("exception raised during Command.complete method"));
217     }
218 
219   return resultobj;
220 }
221 
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).  */
226 
227 static void
cmdpy_completer_handle_brkchars(struct cmd_list_element * command,completion_tracker & tracker,const char * text,const char * word)228 cmdpy_completer_handle_brkchars (struct cmd_list_element *command,
229                                          completion_tracker &tracker,
230                                          const char *text, const char *word)
231 {
232   gdbpy_enter enter_py;
233 
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);
237 
238   /* Check if there was an error.  */
239   if (resultobj == NULL)
240     return;
241 
242   if (PyLong_Check (resultobj.get ()))
243     {
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;
248 
249       if (!gdb_py_int_as_long (resultobj.get (), &value))
250           gdbpy_print_stack ();
251       else if (value >= 0 && value < (long) N_COMPLETERS)
252           {
253             completer_handle_brkchars_ftype *brkchars_fn;
254 
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);
261           }
262     }
263 }
264 
265 /* Called by gdb for command completion.  */
266 
267 static void
cmdpy_completer(struct cmd_list_element * command,completion_tracker & tracker,const char * text,const char * word)268 cmdpy_completer (struct cmd_list_element *command,
269                      completion_tracker &tracker,
270                      const char *text, const char *word)
271 {
272   gdbpy_enter enter_py;
273 
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);
277 
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;
282 
283   if (PyLong_Check (resultobj.get ()))
284     {
285       /* User code may also return one of the completion constants,
286            thus requesting that sort of completion.  */
287       long value;
288 
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);
293     }
294   else if (PySequence_Check (resultobj.get ()))
295     {
296       gdbpy_ref<> iter (PyObject_GetIter (resultobj.get ()));
297 
298       if (iter == NULL)
299           {
300             gdbpy_print_stack ();
301             return;
302           }
303 
304       while (true)
305           {
306             gdbpy_ref<> elt (PyIter_Next (iter.get ()));
307             if (elt == NULL)
308               {
309                 if (PyErr_Occurred() != nullptr)
310                     gdbpy_print_stack ();
311                 break;
312               }
313 
314             if (! gdbpy_is_string (elt.get ()))
315               {
316                 /* Skip problem elements.  */
317                 continue;
318               }
319 
320             gdb::unique_xmalloc_ptr<char>
321               item (python_string_to_host_string (elt.get ()));
322             if (item == NULL)
323               {
324                 gdbpy_print_stack ();
325                 continue;
326               }
327             tracker.add_completion (std::move (item));
328           }
329     }
330 }
331 
332 /* Helper for cmdpy_init which locates the command list to use and
333    pulls out the command name.
334 
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.
338 
339    *BASE_LIST is set to the final prefix command's list of
340    *sub-commands.
341 
342    START_LIST is the list in which the search starts.
343 
344    This function returns the name of the new command.  On error sets the Python
345    error and returns NULL.  */
346 
347 gdb::unique_xmalloc_ptr<char>
gdbpy_parse_command_name(const char * name,struct cmd_list_element *** base_list,struct cmd_list_element ** start_list)348 gdbpy_parse_command_name (const char *name,
349                                 struct cmd_list_element ***base_list,
350                                 struct cmd_list_element **start_list)
351 {
352   struct cmd_list_element *elt;
353   int len = strlen (name);
354   int i, lastchar;
355   const char *prefix_text2;
356 
357   /* Skip trailing whitespace.  */
358   for (i = len - 1; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
359     ;
360   if (i < 0)
361     {
362       PyErr_SetString (PyExc_RuntimeError, _("No command name found."));
363       return NULL;
364     }
365   lastchar = i;
366 
367   /* Find first character of the final word.  */
368   for (; i > 0 && valid_cmd_char_p (name[i - 1]); --i)
369     ;
370 
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';
374 
375   /* Skip whitespace again.  */
376   for (--i; i >= 0 && (name[i] == ' ' || name[i] == '\t'); --i)
377     ;
378   if (i < 0)
379     {
380       *base_list = start_list;
381       return result;
382     }
383 
384   std::string prefix_text (name, i + 1);
385 
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)
389     {
390       PyErr_Format (PyExc_RuntimeError, _("Could not find command prefix %s."),
391                         prefix_text.c_str ());
392       return NULL;
393     }
394 
395   if (elt->is_prefix ())
396     {
397       *base_list = elt->subcommands;
398       return result;
399     }
400 
401   PyErr_Format (PyExc_RuntimeError, _("'%s' is not a prefix command."),
402                     prefix_text.c_str ());
403   return NULL;
404 }
405 
406 /* Object initializer; sets up gdb-side structures for command.
407 
408    Use: __init__(NAME, COMMAND_CLASS [, COMPLETER_CLASS][, PREFIX]]).
409 
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.
413 
414    COMMAND_CLASS is the kind of command.  It should be one of the COMMAND_*
415    constants defined in the gdb module.
416 
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.
420 
421    If PREFIX is True, then this command is a prefix command.
422 
423    The documentation for the command is taken from the doc string for
424    the python class.  */
425 
426 static int
cmdpy_init(PyObject * self,PyObject * args,PyObject * kw)427 cmdpy_init (PyObject *self, PyObject *args, PyObject *kw)
428 {
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;
438 
439   if (obj->command)
440     {
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;
446     }
447 
448   if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "si|iO",
449                                                   keywords, &name, &cmdtype,
450                                                   &completetype, &is_prefix_obj))
451     return -1;
452 
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)
460     {
461       PyErr_Format (PyExc_RuntimeError, _("Invalid command class argument."));
462       return -1;
463     }
464 
465   if (completetype < -1 || completetype >= (int) N_COMPLETERS)
466     {
467       PyErr_Format (PyExc_RuntimeError,
468                         _("Invalid completion type argument."));
469       return -1;
470     }
471 
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;
476 
477   if (is_prefix_obj != NULL)
478     {
479       int cmp = PyObject_IsTrue (is_prefix_obj);
480       if (cmp < 0)
481           return -1;
482 
483       is_prefix = cmp > 0;
484     }
485 
486   gdb::unique_xmalloc_ptr<char> docstring = nullptr;
487   if (PyObject_HasAttr (self, gdbpy_doc_cst))
488     {
489       gdbpy_ref<> ds_obj (PyObject_GetAttr (self, gdbpy_doc_cst));
490 
491       if (ds_obj != NULL && gdbpy_is_string (ds_obj.get ()))
492           {
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));
497           }
498     }
499   if (docstring == nullptr)
500     docstring = make_unique_xstrdup (_("This command is not documented."));
501 
502   gdbpy_ref<> self_ref = gdbpy_ref<>::new_reference (self);
503 
504   try
505     {
506       struct cmd_list_element *cmd;
507 
508       if (is_prefix)
509           {
510             int allow_unknown;
511 
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);
519           }
520       else
521           cmd = add_cmd (cmd_name.get (), (enum command_class) cmdtype,
522                            docstring.release (), cmd_list);
523 
524       /* If successful, the above takes ownership of the name, since we set
525            name_allocated, so release it.  */
526       cmd_name.release ();
527 
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;
533 
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);
541     }
542   catch (const gdb_exception &except)
543     {
544       gdbpy_convert_exception (except);
545       return -1;
546     }
547 
548   return 0;
549 }
550 
551 
552 
553 /* Initialize the 'commands' code.  */
554 
555 static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
gdbpy_initialize_commands(void)556 gdbpy_initialize_commands (void)
557 {
558   int i;
559 
560   cmdpy_object_type.tp_new = PyType_GenericNew;
561   if (PyType_Ready (&cmdpy_object_type) < 0)
562     return -1;
563 
564   /* Note: alias and user are special.  */
565   if (PyModule_AddIntConstant (gdb_module, "COMMAND_NONE", no_class) < 0
566       || PyModule_AddIntConstant (gdb_module, "COMMAND_RUNNING", class_run) < 0
567       || PyModule_AddIntConstant (gdb_module, "COMMAND_DATA", class_vars) < 0
568       || PyModule_AddIntConstant (gdb_module, "COMMAND_STACK", class_stack) < 0
569       || PyModule_AddIntConstant (gdb_module, "COMMAND_FILES", class_files) < 0
570       || PyModule_AddIntConstant (gdb_module, "COMMAND_SUPPORT",
571                                           class_support) < 0
572       || PyModule_AddIntConstant (gdb_module, "COMMAND_STATUS", class_info) < 0
573       || PyModule_AddIntConstant (gdb_module, "COMMAND_BREAKPOINTS",
574                                           class_breakpoint) < 0
575       || PyModule_AddIntConstant (gdb_module, "COMMAND_TRACEPOINTS",
576                                           class_trace) < 0
577       || PyModule_AddIntConstant (gdb_module, "COMMAND_OBSCURE",
578                                           class_obscure) < 0
579       || PyModule_AddIntConstant (gdb_module, "COMMAND_MAINTENANCE",
580                                           class_maintenance) < 0
581       || PyModule_AddIntConstant (gdb_module, "COMMAND_USER", class_user) < 0
582       || PyModule_AddIntConstant (gdb_module, "COMMAND_TUI", class_tui) < 0)
583     return -1;
584 
585   for (i = 0; i < N_COMPLETERS; ++i)
586     {
587       if (PyModule_AddIntConstant (gdb_module, completers[i].name, i) < 0)
588           return -1;
589     }
590 
591   if (gdb_pymodule_addobject (gdb_module, "Command",
592                                     (PyObject *) &cmdpy_object_type) < 0)
593     return -1;
594 
595   invoke_cst = PyUnicode_FromString ("invoke");
596   if (invoke_cst == NULL)
597     return -1;
598   complete_cst = PyUnicode_FromString ("complete");
599   if (complete_cst == NULL)
600     return -1;
601 
602   return 0;
603 }
604 
605 GDBPY_INITIALIZE_FILE (gdbpy_initialize_commands);
606 
607 
608 
609 static PyMethodDef cmdpy_object_methods[] =
610 {
611   { "dont_repeat", cmdpy_dont_repeat, METH_NOARGS,
612     "Prevent command repetition when user enters empty line." },
613 
614   { 0 }
615 };
616 
617 PyTypeObject cmdpy_object_type =
618 {
619   PyVarObject_HEAD_INIT (NULL, 0)
620   "gdb.Command",                /*tp_name*/
621   sizeof (cmdpy_object),        /*tp_basicsize*/
622   0,                                      /*tp_itemsize*/
623   0,                                      /*tp_dealloc*/
624   0,                                      /*tp_print*/
625   0,                                      /*tp_getattr*/
626   0,                                      /*tp_setattr*/
627   0,                                      /*tp_compare*/
628   0,                                      /*tp_repr*/
629   0,                                      /*tp_as_number*/
630   0,                                      /*tp_as_sequence*/
631   0,                                      /*tp_as_mapping*/
632   0,                                      /*tp_hash */
633   0,                                      /*tp_call*/
634   0,                                      /*tp_str*/
635   0,                                      /*tp_getattro*/
636   0,                                      /*tp_setattro*/
637   0,                                      /*tp_as_buffer*/
638   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
639   "GDB command object",                   /* tp_doc */
640   0,                                      /* tp_traverse */
641   0,                                      /* tp_clear */
642   0,                                      /* tp_richcompare */
643   0,                                      /* tp_weaklistoffset */
644   0,                                      /* tp_iter */
645   0,                                      /* tp_iternext */
646   cmdpy_object_methods,                   /* tp_methods */
647   0,                                      /* tp_members */
648   0,                                      /* tp_getset */
649   0,                                      /* tp_base */
650   0,                                      /* tp_dict */
651   0,                                      /* tp_descr_get */
652   0,                                      /* tp_descr_set */
653   0,                                      /* tp_dictoffset */
654   cmdpy_init,                             /* tp_init */
655   0,                                      /* tp_alloc */
656 };
657 
658 
659 
660 /* Utility to build a buildargv-like result from ARGS.
661    This intentionally parses arguments the way libiberty/argv.c:buildargv
662    does.  It splits up arguments in a reasonable way, and we want a standard
663    way of parsing arguments.  Several gdb commands use buildargv to parse their
664    arguments.  Plus we want to be able to write compatible python
665    implementations of gdb commands.  */
666 
667 PyObject *
gdbpy_string_to_argv(PyObject * self,PyObject * args)668 gdbpy_string_to_argv (PyObject *self, PyObject *args)
669 {
670   const char *input;
671 
672   if (!PyArg_ParseTuple (args, "s", &input))
673     return NULL;
674 
675   gdbpy_ref<> py_argv (PyList_New (0));
676   if (py_argv == NULL)
677     return NULL;
678 
679   /* buildargv uses NULL to represent an empty argument list, but we can't use
680      that in Python.  Instead, if ARGS is "" then return an empty list.
681      This undoes the NULL -> "" conversion that cmdpy_function does.  */
682 
683   if (*input != '\0')
684     {
685       gdb_argv c_argv (input);
686 
687       for (char *arg : c_argv)
688           {
689             gdbpy_ref<> argp (PyUnicode_FromString (arg));
690 
691             if (argp == NULL
692                 || PyList_Append (py_argv.get (), argp.get ()) < 0)
693               return NULL;
694           }
695     }
696 
697   return py_argv.release ();
698 }
699