summaryrefslogtreecommitdiff
path: root/gdb/python/python.h
blob: abbb5816c376ed73f0a47b17823f81690fe3bf37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/* Python/gdb header for generic use in gdb

   Copyright (C) 2008-2013 Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifndef GDB_PYTHON_H
#define GDB_PYTHON_H

#include "value.h"
#include "mi/mi-cmds.h"

struct gdbpy_breakpoint_object;

/* The suffix of per-objfile scripts to auto-load.
   E.g. When the program loads libfoo.so, look for libfoo-gdb.py.  */
#define GDBPY_AUTO_FILE_NAME "-gdb.py"

/* Python frame-filter status return values.  */
enum py_bt_status
  {
    /* Return when an error has occurred in processing frame filters,
       or when printing the stack.  */
    PY_BT_ERROR = -1,

    /* Return from internal routines to indicate that the function
       succeeded.  */
    PY_BT_OK = 1,

    /* Return when the frame filter process is complete, and all
       operations have succeeded.  */
    PY_BT_COMPLETED = 2,

    /* Return when the frame filter process is complete, but there
       were no filter registered and enabled to process. */
    PY_BT_NO_FILTERS = 3
  };

/* Flags to pass to apply_frame_filter.  */

enum frame_filter_flags
  {
    /* Set this flag if frame level is to be printed.  */
    PRINT_LEVEL = 1,

    /* Set this flag if frame information is to be printed.  */
    PRINT_FRAME_INFO = 2,

    /* Set this flag if frame arguments are to be printed.  */
    PRINT_ARGS = 4,

    /* Set this flag if frame locals are to be printed.  */
    PRINT_LOCALS = 8,
  };

/* A choice of the different frame argument printing strategies that
   can occur in different cases of frame filter instantiation.  */
typedef enum py_frame_args
{
  /* Print no values for arguments when invoked from the MI. */
  NO_VALUES = PRINT_NO_VALUES,

  MI_PRINT_ALL_VALUES = PRINT_ALL_VALUES,

  /* Print only simple values (what MI defines as "simple") for
     arguments when invoked from the MI. */
  MI_PRINT_SIMPLE_VALUES = PRINT_SIMPLE_VALUES,


  /* Print only scalar values for arguments when invoked from the
     CLI. */
  CLI_SCALAR_VALUES,

  /* Print all values for arguments when invoked from the
     CLI. */
  CLI_ALL_VALUES
} py_frame_args;

/* Returns true if Python support is built into GDB, false
   otherwise.  */

static inline int
have_python (void)
{
#ifdef HAVE_PYTHON
  return 1;
#else
  return 0;
#endif
}

extern void finish_python_initialization (void);

void eval_python_from_control_command (struct command_line *);

void source_python_script (FILE *file, const char *filename);

int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
			      int embedded_offset, CORE_ADDR address,
			      struct ui_file *stream, int recurse,
			      const struct value *val,
			      const struct value_print_options *options,
			      const struct language_defn *language);

enum py_bt_status apply_frame_filter (struct frame_info *frame, int flags,
				      enum py_frame_args args_type,
				      struct ui_out *out, int frame_low,
				      int frame_high);

void preserve_python_values (struct objfile *objfile, htab_t copied_types);

const struct script_language *gdbpy_script_language_defn (void);

int gdbpy_should_stop (struct gdbpy_breakpoint_object *bp_obj);

int gdbpy_breakpoint_has_py_cond (struct gdbpy_breakpoint_object *bp_obj);

void *start_type_printers (void);

char *apply_type_printers (void *, struct type *type);

void free_type_printers (void *arg);

#endif /* GDB_PYTHON_H */