Update copyright year range in all GDB files.
[external/binutils.git] / gdb / python / py-breakpoint.c
1 /* Python interface to breakpoints
2
3    Copyright (C) 2008-2019 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 "value.h"
22 #include "python-internal.h"
23 #include "python.h"
24 #include "charset.h"
25 #include "breakpoint.h"
26 #include "gdbcmd.h"
27 #include "gdbthread.h"
28 #include "observable.h"
29 #include "cli/cli-script.h"
30 #include "ada-lang.h"
31 #include "arch-utils.h"
32 #include "language.h"
33 #include "location.h"
34 #include "py-event.h"
35 #include "linespec.h"
36
37 /* Number of live breakpoints.  */
38 static int bppy_live;
39
40 /* Variables used to pass information between the Breakpoint
41    constructor and the breakpoint-created hook function.  */
42 gdbpy_breakpoint_object *bppy_pending_object;
43
44 /* Function that is called when a Python condition is evaluated.  */
45 static const char stop_func[] = "stop";
46
47 /* This is used to initialize various gdb.bp_* constants.  */
48 struct pybp_code
49 {
50   /* The name.  */
51   const char *name;
52   /* The code.  */
53   int code;
54 };
55
56 /* Entries related to the type of user set breakpoints.  */
57 static struct pybp_code pybp_codes[] =
58 {
59   { "BP_NONE", bp_none},
60   { "BP_BREAKPOINT", bp_breakpoint},
61   { "BP_WATCHPOINT", bp_watchpoint},
62   { "BP_HARDWARE_WATCHPOINT", bp_hardware_watchpoint},
63   { "BP_READ_WATCHPOINT", bp_read_watchpoint},
64   { "BP_ACCESS_WATCHPOINT", bp_access_watchpoint},
65   {NULL} /* Sentinel.  */
66 };
67
68 /* Entries related to the type of watchpoint.  */
69 static struct pybp_code pybp_watch_types[] =
70 {
71   { "WP_READ", hw_read},
72   { "WP_WRITE", hw_write},
73   { "WP_ACCESS", hw_access},
74   {NULL} /* Sentinel.  */
75 };
76
77 /* Python function which checks the validity of a breakpoint object.  */
78 static PyObject *
79 bppy_is_valid (PyObject *self, PyObject *args)
80 {
81   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
82
83   if (self_bp->bp)
84     Py_RETURN_TRUE;
85   Py_RETURN_FALSE;
86 }
87
88 /* Python function to test whether or not the breakpoint is enabled.  */
89 static PyObject *
90 bppy_get_enabled (PyObject *self, void *closure)
91 {
92   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
93
94   BPPY_REQUIRE_VALID (self_bp);
95   if (! self_bp->bp)
96     Py_RETURN_FALSE;
97   if (self_bp->bp->enable_state == bp_enabled)
98     Py_RETURN_TRUE;
99   Py_RETURN_FALSE;
100 }
101
102 /* Python function to test whether or not the breakpoint is silent.  */
103 static PyObject *
104 bppy_get_silent (PyObject *self, void *closure)
105 {
106   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
107
108   BPPY_REQUIRE_VALID (self_bp);
109   if (self_bp->bp->silent)
110     Py_RETURN_TRUE;
111   Py_RETURN_FALSE;
112 }
113
114 /* Python function to set the enabled state of a breakpoint.  */
115 static int
116 bppy_set_enabled (PyObject *self, PyObject *newvalue, void *closure)
117 {
118   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
119   int cmp;
120
121   BPPY_SET_REQUIRE_VALID (self_bp);
122
123   if (newvalue == NULL)
124     {
125       PyErr_SetString (PyExc_TypeError,
126                        _("Cannot delete `enabled' attribute."));
127
128       return -1;
129     }
130   else if (! PyBool_Check (newvalue))
131     {
132       PyErr_SetString (PyExc_TypeError,
133                        _("The value of `enabled' must be a boolean."));
134       return -1;
135     }
136
137   cmp = PyObject_IsTrue (newvalue);
138   if (cmp < 0)
139     return -1;
140
141   TRY
142     {
143       if (cmp == 1)
144         enable_breakpoint (self_bp->bp);
145       else
146         disable_breakpoint (self_bp->bp);
147     }
148   CATCH (except, RETURN_MASK_ALL)
149     {
150       GDB_PY_SET_HANDLE_EXCEPTION (except);
151     }
152   END_CATCH
153
154   return 0;
155 }
156
157 /* Python function to set the 'silent' state of a breakpoint.  */
158 static int
159 bppy_set_silent (PyObject *self, PyObject *newvalue, void *closure)
160 {
161   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
162   int cmp;
163
164   BPPY_SET_REQUIRE_VALID (self_bp);
165
166   if (newvalue == NULL)
167     {
168       PyErr_SetString (PyExc_TypeError,
169                        _("Cannot delete `silent' attribute."));
170       return -1;
171     }
172   else if (! PyBool_Check (newvalue))
173     {
174       PyErr_SetString (PyExc_TypeError,
175                        _("The value of `silent' must be a boolean."));
176       return -1;
177     }
178
179   cmp = PyObject_IsTrue (newvalue);
180   if (cmp < 0)
181     return -1;
182   else
183     breakpoint_set_silent (self_bp->bp, cmp);
184
185   return 0;
186 }
187
188 /* Python function to set the thread of a breakpoint.  */
189 static int
190 bppy_set_thread (PyObject *self, PyObject *newvalue, void *closure)
191 {
192   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
193   long id;
194
195   BPPY_SET_REQUIRE_VALID (self_bp);
196
197   if (newvalue == NULL)
198     {
199       PyErr_SetString (PyExc_TypeError,
200                        _("Cannot delete `thread' attribute."));
201       return -1;
202     }
203   else if (PyInt_Check (newvalue))
204     {
205       if (! gdb_py_int_as_long (newvalue, &id))
206         return -1;
207
208       if (!valid_global_thread_id (id))
209         {
210           PyErr_SetString (PyExc_RuntimeError,
211                            _("Invalid thread ID."));
212           return -1;
213         }
214     }
215   else if (newvalue == Py_None)
216     id = -1;
217   else
218     {
219       PyErr_SetString (PyExc_TypeError,
220                        _("The value of `thread' must be an integer or None."));
221       return -1;
222     }
223
224   breakpoint_set_thread (self_bp->bp, id);
225
226   return 0;
227 }
228
229 /* Python function to set the (Ada) task of a breakpoint.  */
230 static int
231 bppy_set_task (PyObject *self, PyObject *newvalue, void *closure)
232 {
233   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
234   long id;
235   int valid_id = 0;
236
237   BPPY_SET_REQUIRE_VALID (self_bp);
238
239   if (newvalue == NULL)
240     {
241       PyErr_SetString (PyExc_TypeError,
242                        _("Cannot delete `task' attribute."));
243       return -1;
244     }
245   else if (PyInt_Check (newvalue))
246     {
247       if (! gdb_py_int_as_long (newvalue, &id))
248         return -1;
249
250       TRY
251         {
252           valid_id = valid_task_id (id);
253         }
254       CATCH (except, RETURN_MASK_ALL)
255         {
256           GDB_PY_SET_HANDLE_EXCEPTION (except);
257         }
258       END_CATCH
259
260       if (! valid_id)
261         {
262           PyErr_SetString (PyExc_RuntimeError,
263                            _("Invalid task ID."));
264           return -1;
265         }
266     }
267   else if (newvalue == Py_None)
268     id = 0;
269   else
270     {
271       PyErr_SetString (PyExc_TypeError,
272                        _("The value of `task' must be an integer or None."));
273       return -1;
274     }
275
276   breakpoint_set_task (self_bp->bp, id);
277
278   return 0;
279 }
280
281 /* Python function which deletes the underlying GDB breakpoint.  This
282    triggers the breakpoint_deleted observer which will call
283    gdbpy_breakpoint_deleted; that function cleans up the Python
284    sections.  */
285
286 static PyObject *
287 bppy_delete_breakpoint (PyObject *self, PyObject *args)
288 {
289   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
290
291   BPPY_REQUIRE_VALID (self_bp);
292
293   TRY
294     {
295       delete_breakpoint (self_bp->bp);
296     }
297   CATCH (except, RETURN_MASK_ALL)
298     {
299       GDB_PY_HANDLE_EXCEPTION (except);
300     }
301   END_CATCH
302
303   Py_RETURN_NONE;
304 }
305
306
307 /* Python function to set the ignore count of a breakpoint.  */
308 static int
309 bppy_set_ignore_count (PyObject *self, PyObject *newvalue, void *closure)
310 {
311   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
312   long value;
313
314   BPPY_SET_REQUIRE_VALID (self_bp);
315
316   if (newvalue == NULL)
317     {
318       PyErr_SetString (PyExc_TypeError,
319                        _("Cannot delete `ignore_count' attribute."));
320       return -1;
321     }
322   else if (! PyInt_Check (newvalue))
323     {
324       PyErr_SetString (PyExc_TypeError,
325                        _("The value of `ignore_count' must be an integer."));
326       return -1;
327     }
328
329   if (! gdb_py_int_as_long (newvalue, &value))
330     return -1;
331
332   if (value < 0)
333     value = 0;
334
335   TRY
336     {
337       set_ignore_count (self_bp->number, (int) value, 0);
338     }
339   CATCH (except, RETURN_MASK_ALL)
340     {
341       GDB_PY_SET_HANDLE_EXCEPTION (except);
342     }
343   END_CATCH
344
345   return 0;
346 }
347
348 /* Python function to set the hit count of a breakpoint.  */
349 static int
350 bppy_set_hit_count (PyObject *self, PyObject *newvalue, void *closure)
351 {
352   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
353
354   BPPY_SET_REQUIRE_VALID (self_bp);
355
356   if (newvalue == NULL)
357     {
358       PyErr_SetString (PyExc_TypeError,
359                        _("Cannot delete `hit_count' attribute."));
360       return -1;
361     }
362   else
363     {
364       long value;
365
366       if (! gdb_py_int_as_long (newvalue, &value))
367         return -1;
368
369       if (value != 0)
370         {
371           PyErr_SetString (PyExc_AttributeError,
372                            _("The value of `hit_count' must be zero."));
373           return -1;
374         }
375     }
376
377   self_bp->bp->hit_count = 0;
378
379   return 0;
380 }
381
382 /* Python function to get the location of a breakpoint.  */
383 static PyObject *
384 bppy_get_location (PyObject *self, void *closure)
385 {
386   const char *str;
387   gdbpy_breakpoint_object *obj = (gdbpy_breakpoint_object *) self;
388
389   BPPY_REQUIRE_VALID (obj);
390
391   if (obj->bp->type != bp_breakpoint)
392     Py_RETURN_NONE;
393
394   struct event_location *location = obj->bp->location.get ();
395   /* "catch throw" makes a breakpoint of type bp_breakpoint that does
396      not have a location.  */
397   if (location == nullptr)
398     Py_RETURN_NONE;
399   str = event_location_to_string (location);
400   if (! str)
401     str = "";
402   return host_string_to_python_string (str).release ();
403 }
404
405 /* Python function to get the breakpoint expression.  */
406 static PyObject *
407 bppy_get_expression (PyObject *self, void *closure)
408 {
409   const char *str;
410   gdbpy_breakpoint_object *obj = (gdbpy_breakpoint_object *) self;
411   struct watchpoint *wp;
412
413   BPPY_REQUIRE_VALID (obj);
414
415   if (!is_watchpoint (obj->bp))
416     Py_RETURN_NONE;
417
418   wp = (struct watchpoint *) obj->bp;
419
420   str = wp->exp_string;
421   if (! str)
422     str = "";
423
424   return host_string_to_python_string (str).release ();
425 }
426
427 /* Python function to get the condition expression of a breakpoint.  */
428 static PyObject *
429 bppy_get_condition (PyObject *self, void *closure)
430 {
431   char *str;
432   gdbpy_breakpoint_object *obj = (gdbpy_breakpoint_object *) self;
433
434   BPPY_REQUIRE_VALID (obj);
435
436   str = obj->bp->cond_string;
437   if (! str)
438     Py_RETURN_NONE;
439
440   return host_string_to_python_string (str).release ();
441 }
442
443 /* Returns 0 on success.  Returns -1 on error, with a python exception set.
444    */
445
446 static int
447 bppy_set_condition (PyObject *self, PyObject *newvalue, void *closure)
448 {
449   gdb::unique_xmalloc_ptr<char> exp_holder;
450   const char *exp = NULL;
451   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
452   struct gdb_exception except = exception_none;
453
454   BPPY_SET_REQUIRE_VALID (self_bp);
455
456   if (newvalue == NULL)
457     {
458       PyErr_SetString (PyExc_TypeError,
459                        _("Cannot delete `condition' attribute."));
460       return -1;
461     }
462   else if (newvalue == Py_None)
463     exp = "";
464   else
465     {
466       exp_holder = python_string_to_host_string (newvalue);
467       if (exp_holder == NULL)
468         return -1;
469       exp = exp_holder.get ();
470     }
471
472   TRY
473     {
474       set_breakpoint_condition (self_bp->bp, exp, 0);
475     }
476   CATCH (ex, RETURN_MASK_ALL)
477     {
478       except = ex;
479     }
480   END_CATCH
481
482   GDB_PY_SET_HANDLE_EXCEPTION (except);
483
484   return 0;
485 }
486
487 /* Python function to get the commands attached to a breakpoint.  */
488 static PyObject *
489 bppy_get_commands (PyObject *self, void *closure)
490 {
491   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
492   struct breakpoint *bp = self_bp->bp;
493
494   BPPY_REQUIRE_VALID (self_bp);
495
496   if (! self_bp->bp->commands)
497     Py_RETURN_NONE;
498
499   string_file stb;
500
501   current_uiout->redirect (&stb);
502   TRY
503     {
504       print_command_lines (current_uiout, breakpoint_commands (bp), 0);
505     }
506   CATCH (except, RETURN_MASK_ALL)
507     {
508       current_uiout->redirect (NULL);
509       gdbpy_convert_exception (except);
510       return NULL;
511     }
512   END_CATCH
513
514   current_uiout->redirect (NULL);
515   return host_string_to_python_string (stb.c_str ()).release ();
516 }
517
518 /* Set the commands attached to a breakpoint.  Returns 0 on success.
519    Returns -1 on error, with a python exception set.  */
520 static int
521 bppy_set_commands (PyObject *self, PyObject *newvalue, void *closure)
522 {
523   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
524   struct gdb_exception except = exception_none;
525
526   BPPY_SET_REQUIRE_VALID (self_bp);
527
528   gdb::unique_xmalloc_ptr<char> commands
529     (python_string_to_host_string (newvalue));
530   if (commands == nullptr)
531     return -1;
532
533   TRY
534     {
535       bool first = true;
536       char *save_ptr = nullptr;
537       auto reader
538         = [&] ()
539           {
540             const char *result = strtok_r (first ? commands.get () : nullptr,
541                                            "\n", &save_ptr);
542             first = false;
543             return result;
544           };
545
546       counted_command_line lines = read_command_lines_1 (reader, 1, nullptr);
547       breakpoint_set_commands (self_bp->bp, std::move (lines));
548     }
549   CATCH (ex, RETURN_MASK_ALL)
550     {
551       except = ex;
552     }
553   END_CATCH
554
555   GDB_PY_SET_HANDLE_EXCEPTION (except);
556
557   return 0;
558 }
559
560 /* Python function to get the breakpoint type.  */
561 static PyObject *
562 bppy_get_type (PyObject *self, void *closure)
563 {
564   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
565
566   BPPY_REQUIRE_VALID (self_bp);
567
568   return PyInt_FromLong (self_bp->bp->type);
569 }
570
571 /* Python function to get the visibility of the breakpoint.  */
572
573 static PyObject *
574 bppy_get_visibility (PyObject *self, void *closure)
575 {
576   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
577
578   BPPY_REQUIRE_VALID (self_bp);
579
580   if (user_breakpoint_p (self_bp->bp))
581     Py_RETURN_TRUE;
582
583   Py_RETURN_FALSE;
584 }
585
586 /* Python function to determine if the breakpoint is a temporary
587    breakpoint.  */
588
589 static PyObject *
590 bppy_get_temporary (PyObject *self, void *closure)
591 {
592   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
593
594   BPPY_REQUIRE_VALID (self_bp);
595
596   if (self_bp->bp->disposition == disp_del
597       || self_bp->bp->disposition == disp_del_at_next_stop)
598     Py_RETURN_TRUE;
599
600   Py_RETURN_FALSE;
601 }
602
603 /* Python function to determine if the breakpoint is a pending
604    breakpoint.  */
605
606 static PyObject *
607 bppy_get_pending (PyObject *self, void *closure)
608 {
609   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
610
611   BPPY_REQUIRE_VALID (self_bp);
612
613   if (is_watchpoint (self_bp->bp))
614     Py_RETURN_FALSE;
615   if (pending_breakpoint_p (self_bp->bp))
616     Py_RETURN_TRUE;
617
618   Py_RETURN_FALSE;
619 }
620
621 /* Python function to get the breakpoint's number.  */
622 static PyObject *
623 bppy_get_number (PyObject *self, void *closure)
624 {
625   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
626
627   BPPY_REQUIRE_VALID (self_bp);
628
629   return PyInt_FromLong (self_bp->number);
630 }
631
632 /* Python function to get the breakpoint's thread ID.  */
633 static PyObject *
634 bppy_get_thread (PyObject *self, void *closure)
635 {
636   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
637
638   BPPY_REQUIRE_VALID (self_bp);
639
640   if (self_bp->bp->thread == -1)
641     Py_RETURN_NONE;
642
643   return PyInt_FromLong (self_bp->bp->thread);
644 }
645
646 /* Python function to get the breakpoint's task ID (in Ada).  */
647 static PyObject *
648 bppy_get_task (PyObject *self, void *closure)
649 {
650   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
651
652   BPPY_REQUIRE_VALID (self_bp);
653
654   if (self_bp->bp->task == 0)
655     Py_RETURN_NONE;
656
657   return PyInt_FromLong (self_bp->bp->task);
658 }
659
660 /* Python function to get the breakpoint's hit count.  */
661 static PyObject *
662 bppy_get_hit_count (PyObject *self, void *closure)
663 {
664   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
665
666   BPPY_REQUIRE_VALID (self_bp);
667
668   return PyInt_FromLong (self_bp->bp->hit_count);
669 }
670
671 /* Python function to get the breakpoint's ignore count.  */
672 static PyObject *
673 bppy_get_ignore_count (PyObject *self, void *closure)
674 {
675   gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
676
677   BPPY_REQUIRE_VALID (self_bp);
678
679   return PyInt_FromLong (self_bp->bp->ignore_count);
680 }
681
682 /* Internal function to validate the Python parameters/keywords
683    provided to bppy_init.  */
684
685 static int
686 bppy_init_validate_args (const char *spec, char *source,
687                          char *function, char *label,
688                          char *line, enum bptype type)
689 {
690   /* If spec is defined, ensure that none of the explicit location
691      keywords are also defined.  */
692   if (spec != NULL)
693     {
694       if (source != NULL || function != NULL || label != NULL || line != NULL)
695         {
696           PyErr_SetString (PyExc_RuntimeError,
697                            _("Breakpoints specified with spec cannot "
698                              "have source, function, label or line defined."));
699           return -1;
700         }
701     }
702   else
703     {
704       /* If spec isn't defined, ensure that the user is not trying to
705          define a watchpoint with an explicit location.  */
706       if (type == bp_watchpoint)
707         {
708           PyErr_SetString (PyExc_RuntimeError,
709                            _("Watchpoints cannot be set by explicit "
710                              "location parameters."));
711           return -1;
712         }
713       else
714         {
715           /* Otherwise, ensure some explicit locations are defined.  */
716           if (source == NULL && function == NULL && label == NULL
717               && line == NULL)
718             {
719               PyErr_SetString (PyExc_RuntimeError,
720                                _("Neither spec nor explicit location set."));
721               return -1;
722             }
723           /* Finally, if source is specified, ensure that line, label
724              or function are specified too.  */
725           if (source != NULL && function == NULL && label == NULL
726               && line == NULL)
727             {
728               PyErr_SetString (PyExc_RuntimeError,
729                                _("Specifying a source must also include a "
730                                  "line, label or function."));
731               return -1;
732             }
733         }
734     }
735   return 1;
736 }
737
738 /* Python function to create a new breakpoint.  */
739 static int
740 bppy_init (PyObject *self, PyObject *args, PyObject *kwargs)
741 {
742   static const char *keywords[] = { "spec", "type", "wp_class", "internal",
743                                     "temporary","source", "function",
744                                     "label", "line", "qualified", NULL };
745   const char *spec = NULL;
746   enum bptype type = bp_breakpoint;
747   int access_type = hw_write;
748   PyObject *internal = NULL;
749   PyObject *temporary = NULL;
750   PyObject *lineobj = NULL;;
751   int internal_bp = 0;
752   int temporary_bp = 0;
753   gdb::unique_xmalloc_ptr<char> line;
754   char *label = NULL;
755   char *source = NULL;
756   char *function = NULL;
757   PyObject * qualified = NULL;
758
759   if (!gdb_PyArg_ParseTupleAndKeywords (args, kwargs, "|siiOOsssOO", keywords,
760                                         &spec, &type, &access_type,
761                                         &internal,
762                                         &temporary, &source,
763                                         &function, &label, &lineobj,
764                                         &qualified))
765     return -1;
766
767
768   if (lineobj != NULL)
769     {
770       if (PyInt_Check (lineobj))
771         line.reset (xstrprintf ("%ld", PyInt_AsLong (lineobj)));
772       else if (PyString_Check (lineobj))
773         line = python_string_to_host_string (lineobj);
774       else
775         {
776           PyErr_SetString (PyExc_RuntimeError,
777                            _("Line keyword should be an integer or a string. "));
778           return -1;
779         }
780     }
781
782   if (internal)
783     {
784       internal_bp = PyObject_IsTrue (internal);
785       if (internal_bp == -1)
786         return -1;
787     }
788
789   if (temporary != NULL)
790     {
791       temporary_bp = PyObject_IsTrue (temporary);
792       if (temporary_bp == -1)
793         return -1;
794     }
795
796   if (bppy_init_validate_args (spec, source, function, label, line.get (),
797                                type) == -1)
798     return -1;
799
800   bppy_pending_object = (gdbpy_breakpoint_object *) self;
801   bppy_pending_object->number = -1;
802   bppy_pending_object->bp = NULL;
803
804   TRY
805     {
806       switch (type)
807         {
808         case bp_breakpoint:
809           {
810             event_location_up location;
811             symbol_name_match_type func_name_match_type
812               = (qualified != NULL && PyObject_IsTrue (qualified)
813                   ? symbol_name_match_type::FULL
814                   : symbol_name_match_type::WILD);
815
816             if (spec != NULL)
817               {
818                 gdb::unique_xmalloc_ptr<char>
819                   copy_holder (xstrdup (skip_spaces (spec)));
820                 const char *copy = copy_holder.get ();
821
822                 location  = string_to_event_location (&copy,
823                                                       current_language,
824                                                       func_name_match_type);
825               }
826             else
827               {
828                 struct explicit_location explicit_loc;
829
830                 initialize_explicit_location (&explicit_loc);
831                 explicit_loc.source_filename = source;
832                 explicit_loc.function_name = function;
833                 explicit_loc.label_name = label;
834
835                 if (line != NULL)
836                   explicit_loc.line_offset =
837                     linespec_parse_line_offset (line.get ());
838
839                 explicit_loc.func_name_match_type = func_name_match_type;
840
841                 location = new_explicit_location (&explicit_loc);
842               }
843
844             create_breakpoint (python_gdbarch,
845                                location.get (), NULL, -1, NULL,
846                                0,
847                                temporary_bp, bp_breakpoint,
848                                0,
849                                AUTO_BOOLEAN_TRUE,
850                                &bkpt_breakpoint_ops,
851                                0, 1, internal_bp, 0);
852             break;
853           }
854         case bp_watchpoint:
855           {
856             gdb::unique_xmalloc_ptr<char>
857               copy_holder (xstrdup (skip_spaces (spec)));
858             char *copy = copy_holder.get ();
859
860             if (access_type == hw_write)
861               watch_command_wrapper (copy, 0, internal_bp);
862             else if (access_type == hw_access)
863               awatch_command_wrapper (copy, 0, internal_bp);
864             else if (access_type == hw_read)
865               rwatch_command_wrapper (copy, 0, internal_bp);
866             else
867               error(_("Cannot understand watchpoint access type."));
868             break;
869           }
870         default:
871           error(_("Do not understand breakpoint type to set."));
872         }
873     }
874   CATCH (except, RETURN_MASK_ALL)
875     {
876       bppy_pending_object = NULL;
877       gdbpy_convert_exception (except);
878       return -1;
879     }
880   END_CATCH
881
882   BPPY_SET_REQUIRE_VALID ((gdbpy_breakpoint_object *) self);
883   return 0;
884 }
885
886 \f
887
888 static int
889 build_bp_list (struct breakpoint *b, void *arg)
890 {
891   PyObject *list = (PyObject *) arg;
892   PyObject *bp = (PyObject *) b->py_bp_object;
893   int iserr = 0;
894
895   /* Not all breakpoints will have a companion Python object.
896      Only breakpoints that were created via bppy_new, or
897      breakpoints that were created externally and are tracked by
898      the Python Scripting API.  */
899   if (bp)
900     iserr = PyList_Append (list, bp);
901
902   if (iserr == -1)
903     return 1;
904
905   return 0;
906 }
907
908 /* Static function to return a tuple holding all breakpoints.  */
909
910 PyObject *
911 gdbpy_breakpoints (PyObject *self, PyObject *args)
912 {
913   if (bppy_live == 0)
914     return PyTuple_New (0);
915
916   gdbpy_ref<> list (PyList_New (0));
917   if (list == NULL)
918     return NULL;
919
920   /* If iterate_over_breakpoints returns non NULL it signals an error
921      condition.  In that case abandon building the list and return
922      NULL.  */
923   if (iterate_over_breakpoints (build_bp_list, list.get ()) != NULL)
924     return NULL;
925
926   return PyList_AsTuple (list.get ());
927 }
928
929 /* Call the "stop" method (if implemented) in the breakpoint
930    class.  If the method returns True, the inferior  will be
931    stopped at the breakpoint.  Otherwise the inferior will be
932    allowed to continue.  */
933
934 enum ext_lang_bp_stop
935 gdbpy_breakpoint_cond_says_stop (const struct extension_language_defn *extlang,
936                                  struct breakpoint *b)
937 {
938   int stop;
939   struct gdbpy_breakpoint_object *bp_obj = b->py_bp_object;
940   PyObject *py_bp = (PyObject *) bp_obj;
941   struct gdbarch *garch;
942
943   if (bp_obj == NULL)
944     return EXT_LANG_BP_STOP_UNSET;
945
946   stop = -1;
947   garch = b->gdbarch ? b->gdbarch : get_current_arch ();
948
949   gdbpy_enter enter_py (garch, current_language);
950
951   if (bp_obj->is_finish_bp)
952     bpfinishpy_pre_stop_hook (bp_obj);
953
954   if (PyObject_HasAttrString (py_bp, stop_func))
955     {
956       gdbpy_ref<> result (PyObject_CallMethod (py_bp, stop_func, NULL));
957
958       stop = 1;
959       if (result != NULL)
960         {
961           int evaluate = PyObject_IsTrue (result.get ());
962
963           if (evaluate == -1)
964             gdbpy_print_stack ();
965
966           /* If the "stop" function returns False that means
967              the Python breakpoint wants GDB to continue.  */
968           if (! evaluate)
969             stop = 0;
970         }
971       else
972         gdbpy_print_stack ();
973     }
974
975   if (bp_obj->is_finish_bp)
976     bpfinishpy_post_stop_hook (bp_obj);
977
978   if (stop < 0)
979     return EXT_LANG_BP_STOP_UNSET;
980   return stop ? EXT_LANG_BP_STOP_YES : EXT_LANG_BP_STOP_NO;
981 }
982
983 /* Checks if the  "stop" method exists in this breakpoint.
984    Used by condition_command to ensure mutual exclusion of breakpoint
985    conditions.  */
986
987 int
988 gdbpy_breakpoint_has_cond (const struct extension_language_defn *extlang,
989                            struct breakpoint *b)
990 {
991   PyObject *py_bp;
992   struct gdbarch *garch;
993
994   if (b->py_bp_object == NULL)
995     return 0;
996
997   py_bp = (PyObject *) b->py_bp_object;
998   garch = b->gdbarch ? b->gdbarch : get_current_arch ();
999
1000   gdbpy_enter enter_py (garch, current_language);
1001   return PyObject_HasAttrString (py_bp, stop_func);
1002 }
1003
1004 \f
1005
1006 /* Event callback functions.  */
1007
1008 /* Callback that is used when a breakpoint is created.  This function
1009    will create a new Python breakpoint object.  */
1010 static void
1011 gdbpy_breakpoint_created (struct breakpoint *bp)
1012 {
1013   gdbpy_breakpoint_object *newbp;
1014   PyGILState_STATE state;
1015
1016   if (!user_breakpoint_p (bp) && bppy_pending_object == NULL)
1017     return;
1018
1019   if (bp->type != bp_breakpoint
1020       && bp->type != bp_watchpoint
1021       && bp->type != bp_hardware_watchpoint
1022       && bp->type != bp_read_watchpoint
1023       && bp->type != bp_access_watchpoint)
1024     return;
1025
1026   state = PyGILState_Ensure ();
1027
1028   if (bppy_pending_object)
1029     {
1030       newbp = bppy_pending_object;
1031       bppy_pending_object = NULL;
1032     }
1033   else
1034     newbp = PyObject_New (gdbpy_breakpoint_object, &breakpoint_object_type);
1035   if (newbp)
1036     {
1037       newbp->number = bp->number;
1038       newbp->bp = bp;
1039       newbp->bp->py_bp_object = newbp;
1040       newbp->is_finish_bp = 0;
1041       Py_INCREF (newbp);
1042       ++bppy_live;
1043     }
1044   else
1045     {
1046       PyErr_SetString (PyExc_RuntimeError,
1047                        _("Error while creating breakpoint from GDB."));
1048       gdbpy_print_stack ();
1049     }
1050
1051   if (!evregpy_no_listeners_p (gdb_py_events.breakpoint_created))
1052     {
1053       if (evpy_emit_event ((PyObject *) newbp,
1054                            gdb_py_events.breakpoint_created) < 0)
1055         gdbpy_print_stack ();
1056     }
1057
1058   PyGILState_Release (state);
1059 }
1060
1061 /* Callback that is used when a breakpoint is deleted.  This will
1062    invalidate the corresponding Python object.  */
1063 static void
1064 gdbpy_breakpoint_deleted (struct breakpoint *b)
1065 {
1066   int num = b->number;
1067   PyGILState_STATE state;
1068   struct breakpoint *bp = NULL;
1069
1070   state = PyGILState_Ensure ();
1071   bp = get_breakpoint (num);
1072   if (bp)
1073     {
1074       gdbpy_ref<gdbpy_breakpoint_object> bp_obj (bp->py_bp_object);
1075       if (bp_obj != NULL)
1076         {
1077           if (!evregpy_no_listeners_p (gdb_py_events.breakpoint_deleted))
1078             {
1079               if (evpy_emit_event ((PyObject *) bp_obj.get (),
1080                                    gdb_py_events.breakpoint_deleted) < 0)
1081                 gdbpy_print_stack ();
1082             }
1083
1084           bp_obj->bp = NULL;
1085           --bppy_live;
1086         }
1087     }
1088   PyGILState_Release (state);
1089 }
1090
1091 /* Callback that is used when a breakpoint is modified.  */
1092
1093 static void
1094 gdbpy_breakpoint_modified (struct breakpoint *b)
1095 {
1096   int num = b->number;
1097   PyGILState_STATE state;
1098   struct breakpoint *bp = NULL;
1099
1100   state = PyGILState_Ensure ();
1101   bp = get_breakpoint (num);
1102   if (bp)
1103     {
1104       PyObject *bp_obj = (PyObject *) bp->py_bp_object;
1105       if (bp_obj)
1106         {
1107           if (!evregpy_no_listeners_p (gdb_py_events.breakpoint_modified))
1108             {
1109               if (evpy_emit_event (bp_obj,
1110                                    gdb_py_events.breakpoint_modified) < 0)
1111                 gdbpy_print_stack ();
1112             }
1113         }
1114     }
1115   PyGILState_Release (state);
1116 }
1117
1118 \f
1119
1120 /* Initialize the Python breakpoint code.  */
1121 int
1122 gdbpy_initialize_breakpoints (void)
1123 {
1124   int i;
1125
1126   breakpoint_object_type.tp_new = PyType_GenericNew;
1127   if (PyType_Ready (&breakpoint_object_type) < 0)
1128     return -1;
1129
1130   if (gdb_pymodule_addobject (gdb_module, "Breakpoint",
1131                               (PyObject *) &breakpoint_object_type) < 0)
1132     return -1;
1133
1134   gdb::observers::breakpoint_created.attach (gdbpy_breakpoint_created);
1135   gdb::observers::breakpoint_deleted.attach (gdbpy_breakpoint_deleted);
1136   gdb::observers::breakpoint_modified.attach (gdbpy_breakpoint_modified);
1137
1138   /* Add breakpoint types constants.  */
1139   for (i = 0; pybp_codes[i].name; ++i)
1140     {
1141       if (PyModule_AddIntConstant (gdb_module,
1142                                    /* Cast needed for Python 2.4.  */
1143                                    (char *) pybp_codes[i].name,
1144                                    pybp_codes[i].code) < 0)
1145         return -1;
1146     }
1147
1148   /* Add watchpoint types constants.  */
1149   for (i = 0; pybp_watch_types[i].name; ++i)
1150     {
1151       if (PyModule_AddIntConstant (gdb_module,
1152                                    /* Cast needed for Python 2.4.  */
1153                                    (char *) pybp_watch_types[i].name,
1154                                    pybp_watch_types[i].code) < 0)
1155         return -1;
1156     }
1157
1158   return 0;
1159 }
1160
1161 \f
1162
1163 /* Helper function that overrides this Python object's
1164    PyObject_GenericSetAttr to allow extra validation of the attribute
1165    being set.  */
1166
1167 static int
1168 local_setattro (PyObject *self, PyObject *name, PyObject *v)
1169 {
1170   gdbpy_breakpoint_object *obj = (gdbpy_breakpoint_object *) self;
1171   gdb::unique_xmalloc_ptr<char> attr (python_string_to_host_string (name));
1172
1173   if (attr == NULL)
1174     return -1;
1175
1176   /* If the attribute trying to be set is the "stop" method,
1177      but we already have a condition set in the CLI or other extension
1178      language, disallow this operation.  */
1179   if (strcmp (attr.get (), stop_func) == 0)
1180     {
1181       const struct extension_language_defn *extlang = NULL;
1182
1183       if (obj->bp->cond_string != NULL)
1184         extlang = get_ext_lang_defn (EXT_LANG_GDB);
1185       if (extlang == NULL)
1186         extlang = get_breakpoint_cond_ext_lang (obj->bp, EXT_LANG_PYTHON);
1187       if (extlang != NULL)
1188         {
1189           std::string error_text
1190             = string_printf (_("Only one stop condition allowed.  There is"
1191                                " currently a %s stop condition defined for"
1192                                " this breakpoint."),
1193                              ext_lang_capitalized_name (extlang));
1194           PyErr_SetString (PyExc_RuntimeError, error_text.c_str ());
1195           return -1;
1196         }
1197     }
1198
1199   return PyObject_GenericSetAttr ((PyObject *)self, name, v);
1200 }
1201
1202 static gdb_PyGetSetDef breakpoint_object_getset[] = {
1203   { "enabled", bppy_get_enabled, bppy_set_enabled,
1204     "Boolean telling whether the breakpoint is enabled.", NULL },
1205   { "silent", bppy_get_silent, bppy_set_silent,
1206     "Boolean telling whether the breakpoint is silent.", NULL },
1207   { "thread", bppy_get_thread, bppy_set_thread,
1208     "Thread ID for the breakpoint.\n\
1209 If the value is a thread ID (integer), then this is a thread-specific breakpoint.\n\
1210 If the value is None, then this breakpoint is not thread-specific.\n\
1211 No other type of value can be used.", NULL },
1212   { "task", bppy_get_task, bppy_set_task,
1213     "Thread ID for the breakpoint.\n\
1214 If the value is a task ID (integer), then this is an Ada task-specific breakpoint.\n\
1215 If the value is None, then this breakpoint is not task-specific.\n\
1216 No other type of value can be used.", NULL },
1217   { "ignore_count", bppy_get_ignore_count, bppy_set_ignore_count,
1218     "Number of times this breakpoint should be automatically continued.",
1219     NULL },
1220   { "number", bppy_get_number, NULL,
1221     "Breakpoint's number assigned by GDB.", NULL },
1222   { "hit_count", bppy_get_hit_count, bppy_set_hit_count,
1223     "Number of times the breakpoint has been hit.\n\
1224 Can be set to zero to clear the count. No other value is valid\n\
1225 when setting this property.", NULL },
1226   { "location", bppy_get_location, NULL,
1227     "Location of the breakpoint, as specified by the user.", NULL},
1228   { "expression", bppy_get_expression, NULL,
1229     "Expression of the breakpoint, as specified by the user.", NULL},
1230   { "condition", bppy_get_condition, bppy_set_condition,
1231     "Condition of the breakpoint, as specified by the user,\
1232 or None if no condition set."},
1233   { "commands", bppy_get_commands, bppy_set_commands,
1234     "Commands of the breakpoint, as specified by the user."},
1235   { "type", bppy_get_type, NULL,
1236     "Type of breakpoint."},
1237   { "visible", bppy_get_visibility, NULL,
1238     "Whether the breakpoint is visible to the user."},
1239   { "temporary", bppy_get_temporary, NULL,
1240     "Whether this breakpoint is a temporary breakpoint."},
1241   { "pending", bppy_get_pending, NULL,
1242     "Whether this breakpoint is a pending breakpoint."},
1243   { NULL }  /* Sentinel.  */
1244 };
1245
1246 static PyMethodDef breakpoint_object_methods[] =
1247 {
1248   { "is_valid", bppy_is_valid, METH_NOARGS,
1249     "Return true if this breakpoint is valid, false if not." },
1250   { "delete", bppy_delete_breakpoint, METH_NOARGS,
1251     "Delete the underlying GDB breakpoint." },
1252   { NULL } /* Sentinel.  */
1253 };
1254
1255 PyTypeObject breakpoint_object_type =
1256 {
1257   PyVarObject_HEAD_INIT (NULL, 0)
1258   "gdb.Breakpoint",               /*tp_name*/
1259   sizeof (gdbpy_breakpoint_object), /*tp_basicsize*/
1260   0,                              /*tp_itemsize*/
1261   0,                              /*tp_dealloc*/
1262   0,                              /*tp_print*/
1263   0,                              /*tp_getattr*/
1264   0,                              /*tp_setattr*/
1265   0,                              /*tp_compare*/
1266   0,                              /*tp_repr*/
1267   0,                              /*tp_as_number*/
1268   0,                              /*tp_as_sequence*/
1269   0,                              /*tp_as_mapping*/
1270   0,                              /*tp_hash */
1271   0,                              /*tp_call*/
1272   0,                              /*tp_str*/
1273   0,                              /*tp_getattro*/
1274   (setattrofunc)local_setattro,   /*tp_setattro */
1275   0,                              /*tp_as_buffer*/
1276   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,  /*tp_flags*/
1277   "GDB breakpoint object",        /* tp_doc */
1278   0,                              /* tp_traverse */
1279   0,                              /* tp_clear */
1280   0,                              /* tp_richcompare */
1281   0,                              /* tp_weaklistoffset */
1282   0,                              /* tp_iter */
1283   0,                              /* tp_iternext */
1284   breakpoint_object_methods,      /* tp_methods */
1285   0,                              /* tp_members */
1286   breakpoint_object_getset,       /* tp_getset */
1287   0,                              /* tp_base */
1288   0,                              /* tp_dict */
1289   0,                              /* tp_descr_get */
1290   0,                              /* tp_descr_set */
1291   0,                              /* tp_dictoffset */
1292   bppy_init,                      /* tp_init */
1293   0,                              /* tp_alloc */
1294 };