1 /* Gdb/Python header for private use by Python module. 2 3 Copyright (C) 2008-2014 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 #ifndef GDB_PYTHON_INTERNAL_H 21 #define GDB_PYTHON_INTERNAL_H 22 23 /* These WITH_* macros are defined by the CPython API checker that 24 comes with the Python plugin for GCC. See: 25 https://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html 26 The checker defines a WITH_ macro for each attribute it 27 exposes. */ 28 29 #ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE 30 #define CPYCHECKER_RETURNS_BORROWED_REF \ 31 __attribute__ ((cpychecker_returns_borrowed_ref)) 32 #else 33 #define CPYCHECKER_RETURNS_BORROWED_REF 34 #endif 35 36 #ifdef WITH_CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF_ATTRIBUTE 37 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) \ 38 __attribute__ ((cpychecker_type_object_for_typedef (ARG))) 39 #else 40 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) 41 #endif 42 43 #ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE 44 #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) \ 45 __attribute__ ((cpychecker_steals_reference_to_arg (n))) 46 #else 47 #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) 48 #endif 49 50 #ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE 51 #define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception)) 52 #else 53 #define CPYCHECKER_SETS_EXCEPTION 54 #endif 55 56 #ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE 57 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION \ 58 __attribute__ ((cpychecker_negative_result_sets_exception)) 59 #else 60 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION 61 #endif 62 63 #include <stdio.h> 64 65 /* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t 66 needed by pyport.h. */ 67 #include <stdint.h> 68 69 /* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE 70 if it sees _GNU_SOURCE (which config.h will define). 71 pyconfig.h defines _POSIX_C_SOURCE to a different value than 72 /usr/include/features.h does causing compilation to fail. 73 To work around this, undef _POSIX_C_SOURCE before we include Python.h. 74 75 Same problem with _XOPEN_SOURCE. */ 76 #undef _POSIX_C_SOURCE 77 #undef _XOPEN_SOURCE 78 79 /* On sparc-solaris, /usr/include/sys/feature_tests.h defines 80 _FILE_OFFSET_BITS, which pyconfig.h also defines. Same work 81 around technique as above. */ 82 #undef _FILE_OFFSET_BITS 83 84 /* A kludge to avoid redefinition of snprintf on Windows by pyerrors.h. */ 85 #if defined(_WIN32) && defined(HAVE_DECL_SNPRINTF) 86 #define HAVE_SNPRINTF 1 87 #endif 88 89 /* Request clean size types from Python. */ 90 #define PY_SSIZE_T_CLEAN 91 92 /* Include the Python header files using angle brackets rather than 93 double quotes. On case-insensitive filesystems, this prevents us 94 from including our python/python.h header file. */ 95 #include <Python.h> 96 #include <frameobject.h> 97 98 #if PY_MAJOR_VERSION >= 3 99 #define IS_PY3K 1 100 #endif 101 102 #ifdef IS_PY3K 103 #define Py_TPFLAGS_HAVE_ITER 0 104 #define Py_TPFLAGS_CHECKTYPES 0 105 106 #define PyInt_Check PyLong_Check 107 #define PyInt_FromLong PyLong_FromLong 108 #define PyInt_AsLong PyLong_AsLong 109 110 #define PyString_FromString PyUnicode_FromString 111 #define PyString_Decode PyUnicode_Decode 112 #define PyString_FromFormat PyUnicode_FromFormat 113 #define PyString_Check PyUnicode_Check 114 #endif 115 116 #if HAVE_LIBPYTHON2_4 117 /* Py_ssize_t is not defined until 2.5. 118 Logical type for Py_ssize_t is Py_intptr_t, but that fails in 64-bit 119 compilation due to several apparent mistakes in python2.4 API, so we 120 use 'int' instead. */ 121 typedef int Py_ssize_t; 122 #endif 123 124 #ifndef PyVarObject_HEAD_INIT 125 /* Python 2.4 does not define PyVarObject_HEAD_INIT. */ 126 #define PyVarObject_HEAD_INIT(type, size) \ 127 PyObject_HEAD_INIT(type) size, 128 129 #endif 130 131 #ifndef Py_TYPE 132 /* Python 2.4 does not define Py_TYPE. */ 133 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) 134 #endif 135 136 /* If Python.h does not define WITH_THREAD, then the various 137 GIL-related functions will not be defined. However, 138 PyGILState_STATE will be. */ 139 #ifndef WITH_THREAD 140 #define PyGILState_Ensure() ((PyGILState_STATE) 0) 141 #define PyGILState_Release(ARG) ((void)(ARG)) 142 #define PyEval_InitThreads() 143 #define PyThreadState_Swap(ARG) ((void)(ARG)) 144 #define PyEval_ReleaseLock() 145 #endif 146 147 /* Python supplies HAVE_LONG_LONG and some `long long' support when it 148 is available. These defines let us handle the differences more 149 cleanly. */ 150 #ifdef HAVE_LONG_LONG 151 152 #define GDB_PY_LL_ARG "L" 153 #define GDB_PY_LLU_ARG "K" 154 typedef PY_LONG_LONG gdb_py_longest; 155 typedef unsigned PY_LONG_LONG gdb_py_ulongest; 156 #define gdb_py_long_from_longest PyLong_FromLongLong 157 #define gdb_py_long_from_ulongest PyLong_FromUnsignedLongLong 158 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong 159 160 #else /* HAVE_LONG_LONG */ 161 162 #define GDB_PY_LL_ARG "L" 163 #define GDB_PY_LLU_ARG "K" 164 typedef long gdb_py_longest; 165 typedef unsigned long gdb_py_ulongest; 166 #define gdb_py_long_from_longest PyLong_FromLong 167 #define gdb_py_long_from_ulongest PyLong_FromUnsignedLong 168 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLong 169 170 #endif /* HAVE_LONG_LONG */ 171 172 /* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading 173 to 'suggest explicit braces to avoid ambiguous ‘else’' gcc errors. 174 Wrap it ourselves, so that callers don't need to care. */ 175 176 static inline void 177 gdb_Py_DECREF (void *op) /* ARI: editCase function */ 178 { 179 /* ... and Python 2.4 didn't cast OP to PyObject pointer on the 180 '(op)->ob_refcnt' references within the macro. Cast it ourselves 181 too. */ 182 Py_DECREF ((PyObject *) op); 183 } 184 185 #undef Py_DECREF 186 #define Py_DECREF(op) gdb_Py_DECREF (op) 187 188 /* In order to be able to parse symtab_and_line_to_sal_object function 189 a real symtab_and_line structure is needed. */ 190 #include "symtab.h" 191 192 /* Also needed to parse enum var_types. */ 193 #include "command.h" 194 #include "breakpoint.h" 195 196 #include "exceptions.h" 197 198 enum gdbpy_iter_kind { iter_keys, iter_values, iter_items }; 199 200 struct block; 201 struct value; 202 struct language_defn; 203 struct program_space; 204 struct bpstats; 205 struct inferior; 206 207 extern int gdb_python_initialized; 208 209 extern PyObject *gdb_module; 210 extern PyObject *gdb_python_module; 211 extern PyTypeObject value_object_type 212 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object"); 213 extern PyTypeObject block_object_type 214 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object"); 215 extern PyTypeObject symbol_object_type 216 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object"); 217 extern PyTypeObject event_object_type 218 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); 219 extern PyTypeObject stop_event_object_type 220 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); 221 extern PyTypeObject breakpoint_object_type 222 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object"); 223 extern PyTypeObject frame_object_type 224 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object"); 225 226 typedef struct gdbpy_breakpoint_object 227 { 228 PyObject_HEAD 229 230 /* The breakpoint number according to gdb. */ 231 int number; 232 233 /* The gdb breakpoint object, or NULL if the breakpoint has been 234 deleted. */ 235 struct breakpoint *bp; 236 237 /* 1 is this is a FinishBreakpoint object, 0 otherwise. */ 238 int is_finish_bp; 239 } gdbpy_breakpoint_object; 240 241 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python 242 exception if it is invalid. */ 243 #define BPPY_REQUIRE_VALID(Breakpoint) \ 244 do { \ 245 if ((Breakpoint)->bp == NULL) \ 246 return PyErr_Format (PyExc_RuntimeError, \ 247 _("Breakpoint %d is invalid."), \ 248 (Breakpoint)->number); \ 249 } while (0) 250 251 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python 252 exception if it is invalid. This macro is for use in setter functions. */ 253 #define BPPY_SET_REQUIRE_VALID(Breakpoint) \ 254 do { \ 255 if ((Breakpoint)->bp == NULL) \ 256 { \ 257 PyErr_Format (PyExc_RuntimeError, _("Breakpoint %d is invalid."), \ 258 (Breakpoint)->number); \ 259 return -1; \ 260 } \ 261 } while (0) 262 263 264 /* Variables used to pass information between the Breakpoint 265 constructor and the breakpoint-created hook function. */ 266 extern gdbpy_breakpoint_object *bppy_pending_object; 267 268 269 typedef struct 270 { 271 PyObject_HEAD 272 273 /* The thread we represent. */ 274 struct thread_info *thread; 275 276 /* The Inferior object to which this thread belongs. */ 277 PyObject *inf_obj; 278 } thread_object; 279 280 extern struct cmd_list_element *set_python_list; 281 extern struct cmd_list_element *show_python_list; 282 283 PyObject *gdbpy_history (PyObject *self, PyObject *args); 284 PyObject *gdbpy_breakpoints (PyObject *, PyObject *); 285 PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *); 286 PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw); 287 PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args, 288 PyObject *kw); 289 PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args); 290 PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args); 291 PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args); 292 PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw); 293 int gdbpy_is_field (PyObject *obj); 294 PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length, 295 const char *encoding, 296 struct type *type); 297 PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2); 298 PyObject *gdbpy_selected_thread (PyObject *self, PyObject *args); 299 PyObject *gdbpy_selected_inferior (PyObject *self, PyObject *args); 300 PyObject *gdbpy_string_to_argv (PyObject *self, PyObject *args); 301 PyObject *gdbpy_parameter (PyObject *self, PyObject *args); 302 PyObject *gdbpy_parameter_value (enum var_types type, void *var); 303 char *gdbpy_parse_command_name (const char *name, 304 struct cmd_list_element ***base_list, 305 struct cmd_list_element **start_list); 306 307 PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal); 308 PyObject *symtab_to_symtab_object (struct symtab *symtab); 309 PyObject *symbol_to_symbol_object (struct symbol *sym); 310 PyObject *block_to_block_object (const struct block *block, 311 struct objfile *objfile); 312 PyObject *value_to_value_object (struct value *v); 313 PyObject *type_to_type_object (struct type *); 314 PyObject *frame_info_to_frame_object (struct frame_info *frame); 315 PyObject *symtab_to_linetable_object (PyObject *symtab); 316 PyObject *pspace_to_pspace_object (struct program_space *) 317 CPYCHECKER_RETURNS_BORROWED_REF; 318 PyObject *pspy_get_printers (PyObject *, void *); 319 PyObject *pspy_get_frame_filters (PyObject *, void *); 320 321 PyObject *objfile_to_objfile_object (struct objfile *) 322 CPYCHECKER_RETURNS_BORROWED_REF; 323 PyObject *objfpy_get_printers (PyObject *, void *); 324 PyObject *objfpy_get_frame_filters (PyObject *, void *); 325 326 PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch); 327 328 thread_object *create_thread_object (struct thread_info *tp); 329 thread_object *find_thread_object (ptid_t ptid) 330 CPYCHECKER_RETURNS_BORROWED_REF; 331 PyObject *find_inferior_object (int pid); 332 PyObject *inferior_to_inferior_object (struct inferior *inferior); 333 334 const struct block *block_object_to_block (PyObject *obj); 335 struct symbol *symbol_object_to_symbol (PyObject *obj); 336 struct value *value_object_to_value (PyObject *self); 337 struct value *convert_value_from_python (PyObject *obj); 338 struct type *type_object_to_type (PyObject *obj); 339 struct symtab *symtab_object_to_symtab (PyObject *obj); 340 struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj); 341 struct frame_info *frame_object_to_frame_info (PyObject *frame_obj); 342 struct gdbarch *arch_object_to_gdbarch (PyObject *obj); 343 344 void gdbpy_initialize_gdb_readline (void); 345 int gdbpy_initialize_auto_load (void) 346 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 347 int gdbpy_initialize_values (void) 348 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 349 int gdbpy_initialize_frames (void) 350 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 351 int gdbpy_initialize_symtabs (void) 352 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 353 int gdbpy_initialize_commands (void) 354 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 355 int gdbpy_initialize_symbols (void) 356 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 357 int gdbpy_initialize_symtabs (void) 358 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 359 int gdbpy_initialize_blocks (void) 360 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 361 int gdbpy_initialize_types (void) 362 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 363 int gdbpy_initialize_functions (void) 364 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 365 int gdbpy_initialize_pspace (void) 366 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 367 int gdbpy_initialize_objfile (void) 368 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 369 int gdbpy_initialize_breakpoints (void) 370 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 371 int gdbpy_initialize_finishbreakpoints (void) 372 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 373 int gdbpy_initialize_lazy_string (void) 374 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 375 int gdbpy_initialize_linetable (void) 376 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 377 int gdbpy_initialize_parameters (void) 378 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 379 int gdbpy_initialize_thread (void) 380 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 381 int gdbpy_initialize_inferior (void) 382 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 383 int gdbpy_initialize_eventregistry (void) 384 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 385 int gdbpy_initialize_event (void) 386 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 387 int gdbpy_initialize_py_events (void) 388 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 389 int gdbpy_initialize_stop_event (void) 390 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 391 int gdbpy_initialize_signal_event (void) 392 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 393 int gdbpy_initialize_breakpoint_event (void) 394 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 395 int gdbpy_initialize_continue_event (void) 396 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 397 int gdbpy_initialize_exited_event (void) 398 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 399 int gdbpy_initialize_thread_event (void) 400 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 401 int gdbpy_initialize_new_objfile_event (void) 402 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 403 int gdbpy_initialize_arch (void) 404 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 405 406 struct cleanup *make_cleanup_py_decref (PyObject *py); 407 struct cleanup *make_cleanup_py_xdecref (PyObject *py); 408 409 struct cleanup *ensure_python_env (struct gdbarch *gdbarch, 410 const struct language_defn *language); 411 412 extern struct gdbarch *python_gdbarch; 413 extern const struct language_defn *python_language; 414 415 /* Use this after a TRY_EXCEPT to throw the appropriate Python 416 exception. */ 417 #define GDB_PY_HANDLE_EXCEPTION(Exception) \ 418 do { \ 419 if (Exception.reason < 0) \ 420 { \ 421 gdbpy_convert_exception (Exception); \ 422 return NULL; \ 423 } \ 424 } while (0) 425 426 /* Use this after a TRY_EXCEPT to throw the appropriate Python 427 exception. This macro is for use inside setter functions. */ 428 #define GDB_PY_SET_HANDLE_EXCEPTION(Exception) \ 429 do { \ 430 if (Exception.reason < 0) \ 431 { \ 432 gdbpy_convert_exception (Exception); \ 433 return -1; \ 434 } \ 435 } while (0) 436 437 void gdbpy_print_stack (void); 438 439 void source_python_script_for_objfile (struct objfile *objfile, FILE *file, 440 const char *filename); 441 442 PyObject *python_string_to_unicode (PyObject *obj); 443 char *unicode_to_target_string (PyObject *unicode_str); 444 char *python_string_to_target_string (PyObject *obj); 445 PyObject *python_string_to_target_python_string (PyObject *obj); 446 char *python_string_to_host_string (PyObject *obj); 447 int gdbpy_is_string (PyObject *obj); 448 char *gdbpy_obj_to_string (PyObject *obj); 449 char *gdbpy_exception_to_string (PyObject *ptype, PyObject *pvalue); 450 451 int gdbpy_is_lazy_string (PyObject *result); 452 void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr, 453 struct type **str_type, 454 long *length, char **encoding); 455 456 int gdbpy_is_value_object (PyObject *obj); 457 458 /* Note that these are declared here, and not in python.h with the 459 other pretty-printer functions, because they refer to PyObject. */ 460 PyObject *apply_varobj_pretty_printer (PyObject *print_obj, 461 struct value **replacement, 462 struct ui_file *stream); 463 PyObject *gdbpy_get_varobj_pretty_printer (struct value *value); 464 char *gdbpy_get_display_hint (PyObject *printer); 465 PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args); 466 467 void bpfinishpy_pre_stop_hook (struct gdbpy_breakpoint_object *bp_obj); 468 void bpfinishpy_post_stop_hook (struct gdbpy_breakpoint_object *bp_obj); 469 470 extern PyObject *gdbpy_doc_cst; 471 extern PyObject *gdbpy_children_cst; 472 extern PyObject *gdbpy_to_string_cst; 473 extern PyObject *gdbpy_display_hint_cst; 474 extern PyObject *gdbpy_enabled_cst; 475 extern PyObject *gdbpy_value_cst; 476 477 /* Exception types. */ 478 extern PyObject *gdbpy_gdb_error; 479 extern PyObject *gdbpy_gdb_memory_error; 480 extern PyObject *gdbpy_gdberror_exc; 481 482 extern void gdbpy_convert_exception (struct gdb_exception) 483 CPYCHECKER_SETS_EXCEPTION; 484 485 int get_addr_from_python (PyObject *obj, CORE_ADDR *addr) 486 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 487 488 PyObject *gdb_py_object_from_longest (LONGEST l); 489 PyObject *gdb_py_object_from_ulongest (ULONGEST l); 490 int gdb_py_int_as_long (PyObject *, long *); 491 492 PyObject *gdb_py_generic_dict (PyObject *self, void *closure); 493 494 int gdb_pymodule_addobject (PyObject *module, const char *name, 495 PyObject *object) 496 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 497 498 #endif /* GDB_PYTHON_INTERNAL_H */ 499