include/elf/
[deliverable/binutils-gdb.git] / gdb / python / python.c
... / ...
CommitLineData
1/* General python/gdb code
2
3 Copyright (C) 2008, 2009, 2010, 2011 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#include "defs.h"
21#include "arch-utils.h"
22#include "command.h"
23#include "ui-out.h"
24#include "cli/cli-script.h"
25#include "gdbcmd.h"
26#include "progspace.h"
27#include "objfiles.h"
28#include "value.h"
29#include "language.h"
30#include "exceptions.h"
31#include "event-loop.h"
32#include "serial.h"
33
34#include <ctype.h>
35
36/* True if we should print the stack when catching a Python error,
37 false otherwise. */
38static int gdbpy_should_print_stack = 1;
39
40#ifdef HAVE_PYTHON
41
42#include "python.h"
43#include "libiberty.h"
44#include "cli/cli-decode.h"
45#include "charset.h"
46#include "top.h"
47#include "solib.h"
48#include "python-internal.h"
49#include "linespec.h"
50#include "source.h"
51#include "version.h"
52#include "target.h"
53#include "gdbthread.h"
54
55static PyMethodDef GdbMethods[];
56
57PyObject *gdb_module;
58
59/* Some string constants we may wish to use. */
60PyObject *gdbpy_to_string_cst;
61PyObject *gdbpy_children_cst;
62PyObject *gdbpy_display_hint_cst;
63PyObject *gdbpy_doc_cst;
64PyObject *gdbpy_enabled_cst;
65PyObject *gdbpy_value_cst;
66
67/* The GdbError exception. */
68PyObject *gdbpy_gdberror_exc;
69
70/* The `gdb.error' base class. */
71PyObject *gdbpy_gdb_error;
72
73/* The `gdb.MemoryError' exception. */
74PyObject *gdbpy_gdb_memory_error;
75
76/* Architecture and language to be used in callbacks from
77 the Python interpreter. */
78struct gdbarch *python_gdbarch;
79const struct language_defn *python_language;
80
81/* Restore global language and architecture and Python GIL state
82 when leaving the Python interpreter. */
83
84struct python_env
85{
86 PyGILState_STATE state;
87 struct gdbarch *gdbarch;
88 const struct language_defn *language;
89 PyObject *error_type, *error_value, *error_traceback;
90};
91
92static void
93restore_python_env (void *p)
94{
95 struct python_env *env = (struct python_env *)p;
96
97 /* Leftover Python error is forbidden by Python Exception Handling. */
98 if (PyErr_Occurred ())
99 {
100 /* This order is similar to the one calling error afterwards. */
101 gdbpy_print_stack ();
102 warning (_("internal error: Unhandled Python exception"));
103 }
104
105 PyErr_Restore (env->error_type, env->error_value, env->error_traceback);
106
107 PyGILState_Release (env->state);
108 python_gdbarch = env->gdbarch;
109 python_language = env->language;
110 xfree (env);
111}
112
113/* Called before entering the Python interpreter to install the
114 current language and architecture to be used for Python values. */
115
116struct cleanup *
117ensure_python_env (struct gdbarch *gdbarch,
118 const struct language_defn *language)
119{
120 struct python_env *env = xmalloc (sizeof *env);
121
122 env->state = PyGILState_Ensure ();
123 env->gdbarch = python_gdbarch;
124 env->language = python_language;
125
126 python_gdbarch = gdbarch;
127 python_language = language;
128
129 /* Save it and ensure ! PyErr_Occurred () afterwards. */
130 PyErr_Fetch (&env->error_type, &env->error_value, &env->error_traceback);
131
132 return make_cleanup (restore_python_env, env);
133}
134
135
136/* Given a command_line, return a command string suitable for passing
137 to Python. Lines in the string are separated by newlines. The
138 return value is allocated using xmalloc and the caller is
139 responsible for freeing it. */
140
141static char *
142compute_python_string (struct command_line *l)
143{
144 struct command_line *iter;
145 char *script = NULL;
146 int size = 0;
147 int here;
148
149 for (iter = l; iter; iter = iter->next)
150 size += strlen (iter->line) + 1;
151
152 script = xmalloc (size + 1);
153 here = 0;
154 for (iter = l; iter; iter = iter->next)
155 {
156 int len = strlen (iter->line);
157
158 strcpy (&script[here], iter->line);
159 here += len;
160 script[here++] = '\n';
161 }
162 script[here] = '\0';
163 return script;
164}
165
166/* Take a command line structure representing a 'python' command, and
167 evaluate its body using the Python interpreter. */
168
169void
170eval_python_from_control_command (struct command_line *cmd)
171{
172 int ret;
173 char *script;
174 struct cleanup *cleanup;
175
176 if (cmd->body_count != 1)
177 error (_("Invalid \"python\" block structure."));
178
179 cleanup = ensure_python_env (get_current_arch (), current_language);
180
181 script = compute_python_string (cmd->body_list[0]);
182 ret = PyRun_SimpleString (script);
183 xfree (script);
184 if (ret)
185 {
186 gdbpy_print_stack ();
187 error (_("Error while executing Python code."));
188 }
189
190 do_cleanups (cleanup);
191}
192
193/* Implementation of the gdb "python" command. */
194
195static void
196python_command (char *arg, int from_tty)
197{
198 struct cleanup *cleanup;
199
200 cleanup = ensure_python_env (get_current_arch (), current_language);
201 while (arg && *arg && isspace (*arg))
202 ++arg;
203 if (arg && *arg)
204 {
205 if (PyRun_SimpleString (arg))
206 {
207 gdbpy_print_stack ();
208 error (_("Error while executing Python code."));
209 }
210 }
211 else
212 {
213 struct command_line *l = get_command_line (python_control, "");
214
215 make_cleanup_free_command_lines (&l);
216 execute_control_command_untraced (l);
217 }
218
219 do_cleanups (cleanup);
220}
221
222\f
223
224/* Transform a gdb parameters's value into a Python value. May return
225 NULL (and set a Python exception) on error. Helper function for
226 get_parameter. */
227PyObject *
228gdbpy_parameter_value (enum var_types type, void *var)
229{
230 switch (type)
231 {
232 case var_string:
233 case var_string_noescape:
234 case var_optional_filename:
235 case var_filename:
236 case var_enum:
237 {
238 char *str = * (char **) var;
239
240 if (! str)
241 str = "";
242 return PyString_Decode (str, strlen (str), host_charset (), NULL);
243 }
244
245 case var_boolean:
246 {
247 if (* (int *) var)
248 Py_RETURN_TRUE;
249 else
250 Py_RETURN_FALSE;
251 }
252
253 case var_auto_boolean:
254 {
255 enum auto_boolean ab = * (enum auto_boolean *) var;
256
257 if (ab == AUTO_BOOLEAN_TRUE)
258 Py_RETURN_TRUE;
259 else if (ab == AUTO_BOOLEAN_FALSE)
260 Py_RETURN_FALSE;
261 else
262 Py_RETURN_NONE;
263 }
264
265 case var_integer:
266 if ((* (int *) var) == INT_MAX)
267 Py_RETURN_NONE;
268 /* Fall through. */
269 case var_zinteger:
270 return PyLong_FromLong (* (int *) var);
271
272 case var_uinteger:
273 {
274 unsigned int val = * (unsigned int *) var;
275
276 if (val == UINT_MAX)
277 Py_RETURN_NONE;
278 return PyLong_FromUnsignedLong (val);
279 }
280 }
281
282 return PyErr_Format (PyExc_RuntimeError,
283 _("Programmer error: unhandled type."));
284}
285
286/* A Python function which returns a gdb parameter's value as a Python
287 value. */
288
289PyObject *
290gdbpy_parameter (PyObject *self, PyObject *args)
291{
292 struct cmd_list_element *alias, *prefix, *cmd;
293 char *arg, *newarg;
294 int found = -1;
295 volatile struct gdb_exception except;
296
297 if (! PyArg_ParseTuple (args, "s", &arg))
298 return NULL;
299
300 newarg = concat ("show ", arg, (char *) NULL);
301
302 TRY_CATCH (except, RETURN_MASK_ALL)
303 {
304 found = lookup_cmd_composition (newarg, &alias, &prefix, &cmd);
305 }
306 xfree (newarg);
307 GDB_PY_HANDLE_EXCEPTION (except);
308 if (!found)
309 return PyErr_Format (PyExc_RuntimeError,
310 _("Could not find parameter `%s'."), arg);
311
312 if (! cmd->var)
313 return PyErr_Format (PyExc_RuntimeError,
314 _("`%s' is not a parameter."), arg);
315 return gdbpy_parameter_value (cmd->var_type, cmd->var);
316}
317
318/* Wrapper for target_charset. */
319
320static PyObject *
321gdbpy_target_charset (PyObject *self, PyObject *args)
322{
323 const char *cset = target_charset (python_gdbarch);
324
325 return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
326}
327
328/* Wrapper for target_wide_charset. */
329
330static PyObject *
331gdbpy_target_wide_charset (PyObject *self, PyObject *args)
332{
333 const char *cset = target_wide_charset (python_gdbarch);
334
335 return PyUnicode_Decode (cset, strlen (cset), host_charset (), NULL);
336}
337
338/* A Python function which evaluates a string using the gdb CLI. */
339
340static PyObject *
341execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
342{
343 char *arg;
344 PyObject *from_tty_obj = NULL, *to_string_obj = NULL;
345 int from_tty, to_string;
346 volatile struct gdb_exception except;
347 static char *keywords[] = {"command", "from_tty", "to_string", NULL };
348 char *result = NULL;
349
350 if (! PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!", keywords, &arg,
351 &PyBool_Type, &from_tty_obj,
352 &PyBool_Type, &to_string_obj))
353 return NULL;
354
355 from_tty = 0;
356 if (from_tty_obj)
357 {
358 int cmp = PyObject_IsTrue (from_tty_obj);
359 if (cmp < 0)
360 return NULL;
361 from_tty = cmp;
362 }
363
364 to_string = 0;
365 if (to_string_obj)
366 {
367 int cmp = PyObject_IsTrue (to_string_obj);
368 if (cmp < 0)
369 return NULL;
370 to_string = cmp;
371 }
372
373 TRY_CATCH (except, RETURN_MASK_ALL)
374 {
375 /* Copy the argument text in case the command modifies it. */
376 char *copy = xstrdup (arg);
377 struct cleanup *cleanup = make_cleanup (xfree, copy);
378
379 prevent_dont_repeat ();
380 if (to_string)
381 result = execute_command_to_string (copy, from_tty);
382 else
383 {
384 result = NULL;
385 execute_command (copy, from_tty);
386 }
387
388 do_cleanups (cleanup);
389 }
390 GDB_PY_HANDLE_EXCEPTION (except);
391
392 /* Do any commands attached to breakpoint we stopped at. */
393 bpstat_do_actions ();
394
395 if (result)
396 {
397 PyObject *r = PyString_FromString (result);
398 xfree (result);
399 return r;
400 }
401 Py_RETURN_NONE;
402}
403
404/* Implementation of gdb.solib_name (Long) -> String.
405 Returns the name of the shared library holding a given address, or None. */
406
407static PyObject *
408gdbpy_solib_name (PyObject *self, PyObject *args)
409{
410 char *soname;
411 PyObject *str_obj;
412 gdb_py_longest pc;
413
414 if (!PyArg_ParseTuple (args, GDB_PY_LL_ARG, &pc))
415 return NULL;
416
417 soname = solib_name_from_address (current_program_space, pc);
418 if (soname)
419 str_obj = PyString_Decode (soname, strlen (soname), host_charset (), NULL);
420 else
421 {
422 str_obj = Py_None;
423 Py_INCREF (Py_None);
424 }
425
426 return str_obj;
427}
428
429/* A Python function which is a wrapper for decode_line_1. */
430
431static PyObject *
432gdbpy_decode_line (PyObject *self, PyObject *args)
433{
434 struct symtabs_and_lines sals = { NULL, 0 }; /* Initialize to
435 appease gcc. */
436 struct symtab_and_line sal;
437 char *arg = NULL;
438 char *copy = NULL;
439 struct cleanup *cleanups;
440 PyObject *result = NULL;
441 PyObject *return_result = NULL;
442 PyObject *unparsed = NULL;
443 volatile struct gdb_exception except;
444
445 if (! PyArg_ParseTuple (args, "|s", &arg))
446 return NULL;
447
448 cleanups = ensure_python_env (get_current_arch (), current_language);
449
450 TRY_CATCH (except, RETURN_MASK_ALL)
451 {
452 if (arg)
453 {
454 arg = xstrdup (arg);
455 make_cleanup (xfree, arg);
456 copy = arg;
457 sals = decode_line_1 (&copy, 0, 0, 0, 0, 0);
458 make_cleanup (xfree, sals.sals);
459 }
460 else
461 {
462 set_default_source_symtab_and_line ();
463 sal = get_current_source_symtab_and_line ();
464 sals.sals = &sal;
465 sals.nelts = 1;
466 }
467 }
468 if (except.reason < 0)
469 {
470 do_cleanups (cleanups);
471 /* We know this will always throw. */
472 GDB_PY_HANDLE_EXCEPTION (except);
473 }
474
475 if (sals.nelts)
476 {
477 int i;
478
479 result = PyTuple_New (sals.nelts);
480 if (! result)
481 goto error;
482 for (i = 0; i < sals.nelts; ++i)
483 {
484 PyObject *obj;
485 char *str;
486
487 obj = symtab_and_line_to_sal_object (sals.sals[i]);
488 if (! obj)
489 {
490 Py_DECREF (result);
491 goto error;
492 }
493
494 PyTuple_SetItem (result, i, obj);
495 }
496 }
497 else
498 {
499 result = Py_None;
500 Py_INCREF (Py_None);
501 }
502
503 return_result = PyTuple_New (2);
504 if (! return_result)
505 {
506 Py_DECREF (result);
507 goto error;
508 }
509
510 if (copy && strlen (copy) > 0)
511 unparsed = PyString_FromString (copy);
512 else
513 {
514 unparsed = Py_None;
515 Py_INCREF (Py_None);
516 }
517
518 PyTuple_SetItem (return_result, 0, unparsed);
519 PyTuple_SetItem (return_result, 1, result);
520
521 do_cleanups (cleanups);
522
523 return return_result;
524
525 error:
526 do_cleanups (cleanups);
527 return NULL;
528}
529
530/* Parse a string and evaluate it as an expression. */
531static PyObject *
532gdbpy_parse_and_eval (PyObject *self, PyObject *args)
533{
534 char *expr_str;
535 struct value *result = NULL;
536 volatile struct gdb_exception except;
537
538 if (!PyArg_ParseTuple (args, "s", &expr_str))
539 return NULL;
540
541 TRY_CATCH (except, RETURN_MASK_ALL)
542 {
543 result = parse_and_eval (expr_str);
544 }
545 GDB_PY_HANDLE_EXCEPTION (except);
546
547 return value_to_value_object (result);
548}
549
550/* Read a file as Python code. STREAM is the input file; FILE is the
551 name of the file.
552 STREAM is not closed, that is the caller's responsibility. */
553
554void
555source_python_script (FILE *stream, const char *file)
556{
557 struct cleanup *cleanup;
558
559 cleanup = ensure_python_env (get_current_arch (), current_language);
560
561 /* Note: If an exception occurs python will print the traceback and
562 clear the error indicator. */
563 PyRun_SimpleFile (stream, file);
564
565 do_cleanups (cleanup);
566}
567
568\f
569
570/* Posting and handling events. */
571
572/* A single event. */
573struct gdbpy_event
574{
575 /* The Python event. This is just a callable object. */
576 PyObject *event;
577 /* The next event. */
578 struct gdbpy_event *next;
579};
580
581/* All pending events. */
582static struct gdbpy_event *gdbpy_event_list;
583/* The final link of the event list. */
584static struct gdbpy_event **gdbpy_event_list_end;
585
586/* We use a file handler, and not an async handler, so that we can
587 wake up the main thread even when it is blocked in poll(). */
588static struct serial *gdbpy_event_fds[2];
589
590/* The file handler callback. This reads from the internal pipe, and
591 then processes the Python event queue. This will always be run in
592 the main gdb thread. */
593
594static void
595gdbpy_run_events (struct serial *scb, void *context)
596{
597 struct cleanup *cleanup;
598 int r;
599
600 cleanup = ensure_python_env (get_current_arch (), current_language);
601
602 /* Flush the fd. Do this before flushing the events list, so that
603 any new event post afterwards is sure to re-awake the event
604 loop. */
605 while (serial_readchar (gdbpy_event_fds[0], 0) >= 0)
606 ;
607
608 while (gdbpy_event_list)
609 {
610 /* Dispatching the event might push a new element onto the event
611 loop, so we update here "atomically enough". */
612 struct gdbpy_event *item = gdbpy_event_list;
613 gdbpy_event_list = gdbpy_event_list->next;
614 if (gdbpy_event_list == NULL)
615 gdbpy_event_list_end = &gdbpy_event_list;
616
617 /* Ignore errors. */
618 if (PyObject_CallObject (item->event, NULL) == NULL)
619 PyErr_Clear ();
620
621 Py_DECREF (item->event);
622 xfree (item);
623 }
624
625 do_cleanups (cleanup);
626}
627
628/* Submit an event to the gdb thread. */
629static PyObject *
630gdbpy_post_event (PyObject *self, PyObject *args)
631{
632 struct gdbpy_event *event;
633 PyObject *func;
634 int wakeup;
635
636 if (!PyArg_ParseTuple (args, "O", &func))
637 return NULL;
638
639 if (!PyCallable_Check (func))
640 {
641 PyErr_SetString (PyExc_RuntimeError,
642 _("Posted event is not callable"));
643 return NULL;
644 }
645
646 Py_INCREF (func);
647
648 /* From here until the end of the function, we have the GIL, so we
649 can operate on our global data structures without worrying. */
650 wakeup = gdbpy_event_list == NULL;
651
652 event = XNEW (struct gdbpy_event);
653 event->event = func;
654 event->next = NULL;
655 *gdbpy_event_list_end = event;
656 gdbpy_event_list_end = &event->next;
657
658 /* Wake up gdb when needed. */
659 if (wakeup)
660 {
661 char c = 'q'; /* Anything. */
662
663 if (serial_write (gdbpy_event_fds[1], &c, 1))
664 return PyErr_SetFromErrno (PyExc_IOError);
665 }
666
667 Py_RETURN_NONE;
668}
669
670/* Initialize the Python event handler. */
671static void
672gdbpy_initialize_events (void)
673{
674 if (serial_pipe (gdbpy_event_fds) == 0)
675 {
676 gdbpy_event_list_end = &gdbpy_event_list;
677 serial_async (gdbpy_event_fds[0], gdbpy_run_events, NULL);
678 }
679}
680
681/* Printing. */
682
683/* A python function to write a single string using gdb's filtered
684 output stream. */
685static PyObject *
686gdbpy_write (PyObject *self, PyObject *args)
687{
688 char *arg;
689
690 if (! PyArg_ParseTuple (args, "s", &arg))
691 return NULL;
692 printf_filtered ("%s", arg);
693 Py_RETURN_NONE;
694}
695
696/* A python function to flush gdb's filtered output stream. */
697static PyObject *
698gdbpy_flush (PyObject *self, PyObject *args)
699{
700 gdb_flush (gdb_stdout);
701 Py_RETURN_NONE;
702}
703
704/* Print a python exception trace, or print nothing and clear the
705 python exception, depending on gdbpy_should_print_stack. Only call
706 this if a python exception is set. */
707void
708gdbpy_print_stack (void)
709{
710 if (gdbpy_should_print_stack)
711 {
712 PyErr_Print ();
713 /* PyErr_Print doesn't necessarily end output with a newline.
714 This works because Python's stdout/stderr is fed through
715 printf_filtered. */
716 begin_line ();
717 }
718 else
719 PyErr_Clear ();
720}
721
722\f
723
724/* Return the current Progspace.
725 There always is one. */
726
727static PyObject *
728gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2)
729{
730 PyObject *result;
731
732 result = pspace_to_pspace_object (current_program_space);
733 if (result)
734 Py_INCREF (result);
735 return result;
736}
737
738/* Return a sequence holding all the Progspaces. */
739
740static PyObject *
741gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
742{
743 struct program_space *ps;
744 PyObject *list;
745
746 list = PyList_New (0);
747 if (!list)
748 return NULL;
749
750 ALL_PSPACES (ps)
751 {
752 PyObject *item = pspace_to_pspace_object (ps);
753
754 if (!item || PyList_Append (list, item) == -1)
755 {
756 Py_DECREF (list);
757 return NULL;
758 }
759 }
760
761 return list;
762}
763
764\f
765
766/* The "current" objfile. This is set when gdb detects that a new
767 objfile has been loaded. It is only set for the duration of a call to
768 source_python_script_for_objfile; it is NULL at other times. */
769static struct objfile *gdbpy_current_objfile;
770
771/* Set the current objfile to OBJFILE and then read STREAM,FILE as
772 Python code. */
773
774void
775source_python_script_for_objfile (struct objfile *objfile,
776 FILE *stream, const char *file)
777{
778 struct cleanup *cleanups;
779
780 cleanups = ensure_python_env (get_objfile_arch (objfile), current_language);
781 gdbpy_current_objfile = objfile;
782
783 /* Note: If an exception occurs python will print the traceback and
784 clear the error indicator. */
785 PyRun_SimpleFile (stream, file);
786
787 do_cleanups (cleanups);
788 gdbpy_current_objfile = NULL;
789}
790
791/* Return the current Objfile, or None if there isn't one. */
792
793static PyObject *
794gdbpy_get_current_objfile (PyObject *unused1, PyObject *unused2)
795{
796 PyObject *result;
797
798 if (! gdbpy_current_objfile)
799 Py_RETURN_NONE;
800
801 result = objfile_to_objfile_object (gdbpy_current_objfile);
802 if (result)
803 Py_INCREF (result);
804 return result;
805}
806
807/* Return a sequence holding all the Objfiles. */
808
809static PyObject *
810gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
811{
812 struct objfile *objf;
813 PyObject *list;
814
815 list = PyList_New (0);
816 if (!list)
817 return NULL;
818
819 ALL_OBJFILES (objf)
820 {
821 PyObject *item = objfile_to_objfile_object (objf);
822
823 if (!item || PyList_Append (list, item) == -1)
824 {
825 Py_DECREF (list);
826 return NULL;
827 }
828 }
829
830 return list;
831}
832
833#else /* HAVE_PYTHON */
834
835/* Dummy implementation of the gdb "python" command. */
836
837static void
838python_command (char *arg, int from_tty)
839{
840 while (arg && *arg && isspace (*arg))
841 ++arg;
842 if (arg && *arg)
843 error (_("Python scripting is not supported in this copy of GDB."));
844 else
845 {
846 struct command_line *l = get_command_line (python_control, "");
847 struct cleanup *cleanups = make_cleanup_free_command_lines (&l);
848
849 execute_control_command_untraced (l);
850 do_cleanups (cleanups);
851 }
852}
853
854void
855eval_python_from_control_command (struct command_line *cmd)
856{
857 error (_("Python scripting is not supported in this copy of GDB."));
858}
859
860void
861source_python_script (FILE *stream, const char *file)
862{
863 throw_error (UNSUPPORTED_ERROR,
864 _("Python scripting is not supported in this copy of GDB."));
865}
866
867#endif /* HAVE_PYTHON */
868
869\f
870
871/* Lists for 'maint set python' commands. */
872
873struct cmd_list_element *set_python_list;
874struct cmd_list_element *show_python_list;
875
876/* Function for use by 'maint set python' prefix command. */
877
878static void
879set_python (char *args, int from_tty)
880{
881 help_list (set_python_list, "maintenance set python ", -1, gdb_stdout);
882}
883
884/* Function for use by 'maint show python' prefix command. */
885
886static void
887show_python (char *args, int from_tty)
888{
889 cmd_show_list (show_python_list, from_tty, "");
890}
891
892/* Initialize the Python code. */
893
894/* Provide a prototype to silence -Wmissing-prototypes. */
895extern initialize_file_ftype _initialize_python;
896
897void
898_initialize_python (void)
899{
900 add_com ("python", class_obscure, python_command,
901#ifdef HAVE_PYTHON
902 _("\
903Evaluate a Python command.\n\
904\n\
905The command can be given as an argument, for instance:\n\
906\n\
907 python print 23\n\
908\n\
909If no argument is given, the following lines are read and used\n\
910as the Python commands. Type a line containing \"end\" to indicate\n\
911the end of the command.")
912#else /* HAVE_PYTHON */
913 _("\
914Evaluate a Python command.\n\
915\n\
916Python scripting is not supported in this copy of GDB.\n\
917This command is only a placeholder.")
918#endif /* HAVE_PYTHON */
919 );
920
921 add_prefix_cmd ("python", no_class, show_python,
922 _("Prefix command for python maintenance settings."),
923 &show_python_list, "maintenance show python ", 0,
924 &maintenance_show_cmdlist);
925 add_prefix_cmd ("python", no_class, set_python,
926 _("Prefix command for python maintenance settings."),
927 &set_python_list, "maintenance set python ", 0,
928 &maintenance_set_cmdlist);
929
930 add_setshow_boolean_cmd ("print-stack", class_maintenance,
931 &gdbpy_should_print_stack, _("\
932Enable or disable printing of Python stack dump on error."), _("\
933Show whether Python stack will be printed on error."), _("\
934Enables or disables printing of Python stack traces."),
935 NULL, NULL,
936 &set_python_list,
937 &show_python_list);
938
939#ifdef HAVE_PYTHON
940#ifdef WITH_PYTHON_PATH
941 /* Work around problem where python gets confused about where it is,
942 and then can't find its libraries, etc.
943 NOTE: Python assumes the following layout:
944 /foo/bin/python
945 /foo/lib/pythonX.Y/...
946 This must be done before calling Py_Initialize. */
947 Py_SetProgramName (concat (ldirname (python_libdir), SLASH_STRING, "bin",
948 SLASH_STRING, "python", NULL));
949#endif
950
951 Py_Initialize ();
952 PyEval_InitThreads ();
953
954 gdb_module = Py_InitModule ("gdb", GdbMethods);
955
956 /* The casts to (char*) are for python 2.4. */
957 PyModule_AddStringConstant (gdb_module, "VERSION", (char*) version);
958 PyModule_AddStringConstant (gdb_module, "HOST_CONFIG", (char*) host_name);
959 PyModule_AddStringConstant (gdb_module, "TARGET_CONFIG",
960 (char*) target_name);
961
962 /* gdb.parameter ("data-directory") doesn't necessarily exist when the python
963 script below is run (depending on order of _initialize_* functions).
964 Define the initial value of gdb.PYTHONDIR here. */
965 {
966 char *gdb_pythondir;
967
968 gdb_pythondir = concat (gdb_datadir, SLASH_STRING, "python", NULL);
969 PyModule_AddStringConstant (gdb_module, "PYTHONDIR", gdb_pythondir);
970 xfree (gdb_pythondir);
971 }
972
973 gdbpy_gdb_error = PyErr_NewException ("gdb.error", PyExc_RuntimeError, NULL);
974 PyModule_AddObject (gdb_module, "error", gdbpy_gdb_error);
975
976 gdbpy_gdb_memory_error = PyErr_NewException ("gdb.MemoryError",
977 gdbpy_gdb_error, NULL);
978 PyModule_AddObject (gdb_module, "MemoryError", gdbpy_gdb_memory_error);
979
980 gdbpy_gdberror_exc = PyErr_NewException ("gdb.GdbError", NULL, NULL);
981 PyModule_AddObject (gdb_module, "GdbError", gdbpy_gdberror_exc);
982
983 gdbpy_initialize_auto_load ();
984 gdbpy_initialize_values ();
985 gdbpy_initialize_frames ();
986 gdbpy_initialize_commands ();
987 gdbpy_initialize_symbols ();
988 gdbpy_initialize_symtabs ();
989 gdbpy_initialize_blocks ();
990 gdbpy_initialize_functions ();
991 gdbpy_initialize_parameters ();
992 gdbpy_initialize_types ();
993 gdbpy_initialize_pspace ();
994 gdbpy_initialize_objfile ();
995 gdbpy_initialize_breakpoints ();
996 gdbpy_initialize_lazy_string ();
997 gdbpy_initialize_thread ();
998 gdbpy_initialize_inferior ();
999 gdbpy_initialize_events ();
1000
1001 gdbpy_initialize_eventregistry ();
1002 gdbpy_initialize_py_events ();
1003 gdbpy_initialize_event ();
1004 gdbpy_initialize_stop_event ();
1005 gdbpy_initialize_signal_event ();
1006 gdbpy_initialize_breakpoint_event ();
1007 gdbpy_initialize_continue_event ();
1008 gdbpy_initialize_exited_event ();
1009 gdbpy_initialize_thread_event ();
1010
1011 PyRun_SimpleString ("import gdb");
1012 PyRun_SimpleString ("gdb.pretty_printers = []");
1013
1014 gdbpy_to_string_cst = PyString_FromString ("to_string");
1015 gdbpy_children_cst = PyString_FromString ("children");
1016 gdbpy_display_hint_cst = PyString_FromString ("display_hint");
1017 gdbpy_doc_cst = PyString_FromString ("__doc__");
1018 gdbpy_enabled_cst = PyString_FromString ("enabled");
1019 gdbpy_value_cst = PyString_FromString ("value");
1020
1021 /* Release the GIL while gdb runs. */
1022 PyThreadState_Swap (NULL);
1023 PyEval_ReleaseLock ();
1024
1025#endif /* HAVE_PYTHON */
1026}
1027
1028#ifdef HAVE_PYTHON
1029
1030/* Perform the remaining python initializations.
1031 These must be done after GDB is at least mostly initialized.
1032 E.g., The "info pretty-printer" command needs the "info" prefix
1033 command installed. */
1034
1035void
1036finish_python_initialization (void)
1037{
1038 struct cleanup *cleanup;
1039
1040 cleanup = ensure_python_env (get_current_arch (), current_language);
1041
1042 PyRun_SimpleString ("\
1043import os\n\
1044import sys\n\
1045\n\
1046class GdbOutputFile:\n\
1047 def close(self):\n\
1048 # Do nothing.\n\
1049 return None\n\
1050\n\
1051 def isatty(self):\n\
1052 return False\n\
1053\n\
1054 def write(self, s):\n\
1055 gdb.write(s)\n\
1056\n\
1057 def writelines(self, iterable):\n\
1058 for line in iterable:\n\
1059 self.write(line)\n\
1060\n\
1061 def flush(self):\n\
1062 gdb.flush()\n\
1063\n\
1064sys.stderr = GdbOutputFile()\n\
1065sys.stdout = GdbOutputFile()\n\
1066\n\
1067# Ideally this would live in the gdb module, but it's intentionally written\n\
1068# in python, and we need this to bootstrap the gdb module.\n\
1069\n\
1070def GdbSetPythonDirectory (dir):\n\
1071 \"Set gdb.PYTHONDIR and update sys.path,etc.\"\n\
1072 old_dir = gdb.PYTHONDIR\n\
1073 gdb.PYTHONDIR = dir\n\
1074 # GDB's python scripts are stored inside gdb.PYTHONDIR. So insert\n\
1075 # that directory name at the start of sys.path to allow the Python\n\
1076 # interpreter to find them.\n\
1077 if old_dir in sys.path:\n\
1078 sys.path.remove (old_dir)\n\
1079 sys.path.insert (0, gdb.PYTHONDIR)\n\
1080\n\
1081 # Tell python where to find submodules of gdb.\n\
1082 gdb.__path__ = [gdb.PYTHONDIR + '/gdb']\n\
1083\n\
1084 # The gdb module is implemented in C rather than in Python. As a result,\n\
1085 # the associated __init.py__ script is not not executed by default when\n\
1086 # the gdb module gets imported. Execute that script manually if it\n\
1087 # exists.\n\
1088 ipy = gdb.PYTHONDIR + '/gdb/__init__.py'\n\
1089 if os.path.exists (ipy):\n\
1090 execfile (ipy)\n\
1091\n\
1092# Install the default gdb.PYTHONDIR.\n\
1093GdbSetPythonDirectory (gdb.PYTHONDIR)\n\
1094");
1095
1096 do_cleanups (cleanup);
1097}
1098
1099#endif /* HAVE_PYTHON */
1100
1101\f
1102
1103#ifdef HAVE_PYTHON
1104
1105static PyMethodDef GdbMethods[] =
1106{
1107 { "history", gdbpy_history, METH_VARARGS,
1108 "Get a value from history" },
1109 { "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS,
1110 "Execute a gdb command" },
1111 { "parameter", gdbpy_parameter, METH_VARARGS,
1112 "Return a gdb parameter's value" },
1113
1114 { "breakpoints", gdbpy_breakpoints, METH_NOARGS,
1115 "Return a tuple of all breakpoint objects" },
1116
1117 { "default_visualizer", gdbpy_default_visualizer, METH_VARARGS,
1118 "Find the default visualizer for a Value." },
1119
1120 { "current_progspace", gdbpy_get_current_progspace, METH_NOARGS,
1121 "Return the current Progspace." },
1122 { "progspaces", gdbpy_progspaces, METH_NOARGS,
1123 "Return a sequence of all progspaces." },
1124
1125 { "current_objfile", gdbpy_get_current_objfile, METH_NOARGS,
1126 "Return the current Objfile being loaded, or None." },
1127 { "objfiles", gdbpy_objfiles, METH_NOARGS,
1128 "Return a sequence of all loaded objfiles." },
1129
1130 { "newest_frame", gdbpy_newest_frame, METH_NOARGS,
1131 "newest_frame () -> gdb.Frame.\n\
1132Return the newest frame object." },
1133 { "selected_frame", gdbpy_selected_frame, METH_NOARGS,
1134 "selected_frame () -> gdb.Frame.\n\
1135Return the selected frame object." },
1136 { "frame_stop_reason_string", gdbpy_frame_stop_reason_string, METH_VARARGS,
1137 "stop_reason_string (Integer) -> String.\n\
1138Return a string explaining unwind stop reason." },
1139
1140 { "lookup_type", (PyCFunction) gdbpy_lookup_type,
1141 METH_VARARGS | METH_KEYWORDS,
1142 "lookup_type (name [, block]) -> type\n\
1143Return a Type corresponding to the given name." },
1144 { "lookup_symbol", (PyCFunction) gdbpy_lookup_symbol,
1145 METH_VARARGS | METH_KEYWORDS,
1146 "lookup_symbol (name [, block] [, domain]) -> (symbol, is_field_of_this)\n\
1147Return a tuple with the symbol corresponding to the given name (or None) and\n\
1148a boolean indicating if name is a field of the current implied argument\n\
1149`this' (when the current language is object-oriented)." },
1150 { "lookup_global_symbol", (PyCFunction) gdbpy_lookup_global_symbol,
1151 METH_VARARGS | METH_KEYWORDS,
1152 "lookup_global_symbol (name [, domain]) -> symbol\n\
1153Return the symbol corresponding to the given name (or None)." },
1154 { "block_for_pc", gdbpy_block_for_pc, METH_VARARGS,
1155 "Return the block containing the given pc value, or None." },
1156 { "solib_name", gdbpy_solib_name, METH_VARARGS,
1157 "solib_name (Long) -> String.\n\
1158Return the name of the shared library holding a given address, or None." },
1159 { "decode_line", gdbpy_decode_line, METH_VARARGS,
1160 "decode_line (String) -> Tuple. Decode a string argument the way\n\
1161that 'break' or 'edit' does. Return a tuple containing two elements.\n\
1162The first element contains any unparsed portion of the String parameter\n\
1163(or None if the string was fully parsed). The second element contains\n\
1164a tuple that contains all the locations that match, represented as\n\
1165gdb.Symtab_and_line objects (or None)."},
1166 { "parse_and_eval", gdbpy_parse_and_eval, METH_VARARGS,
1167 "parse_and_eval (String) -> Value.\n\
1168Parse String as an expression, evaluate it, and return the result as a Value."
1169 },
1170
1171 { "post_event", gdbpy_post_event, METH_VARARGS,
1172 "Post an event into gdb's event loop." },
1173
1174 { "target_charset", gdbpy_target_charset, METH_NOARGS,
1175 "target_charset () -> string.\n\
1176Return the name of the current target charset." },
1177 { "target_wide_charset", gdbpy_target_wide_charset, METH_NOARGS,
1178 "target_wide_charset () -> string.\n\
1179Return the name of the current target wide charset." },
1180
1181 { "string_to_argv", gdbpy_string_to_argv, METH_VARARGS,
1182 "string_to_argv (String) -> Array.\n\
1183Parse String and return an argv-like array.\n\
1184Arguments are separate by spaces and may be quoted."
1185 },
1186
1187 { "write", gdbpy_write, METH_VARARGS,
1188 "Write a string using gdb's filtered stream." },
1189 { "flush", gdbpy_flush, METH_NOARGS,
1190 "Flush gdb's filtered stdout stream." },
1191 { "selected_thread", gdbpy_selected_thread, METH_NOARGS,
1192 "selected_thread () -> gdb.InferiorThread.\n\
1193Return the selected thread object." },
1194 { "inferiors", gdbpy_inferiors, METH_NOARGS,
1195 "inferiors () -> (gdb.Inferior, ...).\n\
1196Return a tuple containing all inferiors." },
1197 {NULL, NULL, 0, NULL}
1198};
1199
1200#endif /* HAVE_PYTHON */
This page took 0.027325 seconds and 4 git commands to generate.