GDB (API)
|
00001 /* Gdb/Python header for private use by Python module. 00002 00003 Copyright (C) 2008-2013 Free Software Foundation, Inc. 00004 00005 This file is part of GDB. 00006 00007 This program is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 3 of the License, or 00010 (at your option) any later version. 00011 00012 This program is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 00019 00020 #ifndef GDB_PYTHON_INTERNAL_H 00021 #define GDB_PYTHON_INTERNAL_H 00022 00023 /* These WITH_* macros are defined by the CPython API checker that 00024 comes with the Python plugin for GCC. See: 00025 https://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html 00026 The checker defines a WITH_ macro for each attribute it 00027 exposes. */ 00028 00029 #ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE 00030 #define CPYCHECKER_RETURNS_BORROWED_REF \ 00031 __attribute__ ((cpychecker_returns_borrowed_ref)) 00032 #else 00033 #define CPYCHECKER_RETURNS_BORROWED_REF 00034 #endif 00035 00036 #ifdef WITH_CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF_ATTRIBUTE 00037 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) \ 00038 __attribute__ ((cpychecker_type_object_for_typedef (ARG))) 00039 #else 00040 #define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) 00041 #endif 00042 00043 #ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE 00044 #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) \ 00045 __attribute__ ((cpychecker_steals_reference_to_arg (n))) 00046 #else 00047 #define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) 00048 #endif 00049 00050 #ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE 00051 #define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception)) 00052 #else 00053 #define CPYCHECKER_SETS_EXCEPTION 00054 #endif 00055 00056 #ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE 00057 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION \ 00058 __attribute__ ((cpychecker_negative_result_sets_exception)) 00059 #else 00060 #define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION 00061 #endif 00062 00063 #include <stdio.h> 00064 00065 /* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t 00066 needed by pyport.h. */ 00067 #include <stdint.h> 00068 00069 /* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE 00070 if it sees _GNU_SOURCE (which config.h will define). 00071 pyconfig.h defines _POSIX_C_SOURCE to a different value than 00072 /usr/include/features.h does causing compilation to fail. 00073 To work around this, undef _POSIX_C_SOURCE before we include Python.h. 00074 00075 Same problem with _XOPEN_SOURCE. */ 00076 #undef _POSIX_C_SOURCE 00077 #undef _XOPEN_SOURCE 00078 00079 /* On sparc-solaris, /usr/include/sys/feature_tests.h defines 00080 _FILE_OFFSET_BITS, which pyconfig.h also defines. Same work 00081 around technique as above. */ 00082 #undef _FILE_OFFSET_BITS 00083 00084 /* A kludge to avoid redefinition of snprintf on Windows by pyerrors.h. */ 00085 #if defined(_WIN32) && defined(HAVE_DECL_SNPRINTF) 00086 #define HAVE_SNPRINTF 1 00087 #endif 00088 00089 /* Request clean size types from Python. */ 00090 #define PY_SSIZE_T_CLEAN 00091 00092 /* Include the Python header files using angle brackets rather than 00093 double quotes. On case-insensitive filesystems, this prevents us 00094 from including our python/python.h header file. */ 00095 #include <Python.h> 00096 #include <frameobject.h> 00097 00098 #if PY_MAJOR_VERSION >= 3 00099 #define IS_PY3K 1 00100 #endif 00101 00102 #ifdef IS_PY3K 00103 #define Py_TPFLAGS_HAVE_ITER 0 00104 #define Py_TPFLAGS_CHECKTYPES 0 00105 00106 #define PyInt_Check PyLong_Check 00107 #define PyInt_FromLong PyLong_FromLong 00108 #define PyInt_AsLong PyLong_AsLong 00109 00110 #define PyString_FromString PyUnicode_FromString 00111 #define PyString_Decode PyUnicode_Decode 00112 #define PyString_FromFormat PyUnicode_FromFormat 00113 #define PyString_Check PyUnicode_Check 00114 #endif 00115 00116 #if HAVE_LIBPYTHON2_4 00117 /* Py_ssize_t is not defined until 2.5. 00118 Logical type for Py_ssize_t is Py_intptr_t, but that fails in 64-bit 00119 compilation due to several apparent mistakes in python2.4 API, so we 00120 use 'int' instead. */ 00121 typedef int Py_ssize_t; 00122 #endif 00123 00124 #ifndef PyVarObject_HEAD_INIT 00125 /* Python 2.4 does not define PyVarObject_HEAD_INIT. */ 00126 #define PyVarObject_HEAD_INIT(type, size) \ 00127 PyObject_HEAD_INIT(type) size, 00128 00129 #endif 00130 00131 #ifndef Py_TYPE 00132 /* Python 2.4 does not define Py_TYPE. */ 00133 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) 00134 #endif 00135 00136 /* If Python.h does not define WITH_THREAD, then the various 00137 GIL-related functions will not be defined. However, 00138 PyGILState_STATE will be. */ 00139 #ifndef WITH_THREAD 00140 #define PyGILState_Ensure() ((PyGILState_STATE) 0) 00141 #define PyGILState_Release(ARG) ((void)(ARG)) 00142 #define PyEval_InitThreads() 00143 #define PyThreadState_Swap(ARG) ((void)(ARG)) 00144 #define PyEval_ReleaseLock() 00145 #endif 00146 00147 /* Python supplies HAVE_LONG_LONG and some `long long' support when it 00148 is available. These defines let us handle the differences more 00149 cleanly. */ 00150 #ifdef HAVE_LONG_LONG 00151 00152 #define GDB_PY_LL_ARG "L" 00153 #define GDB_PY_LLU_ARG "K" 00154 typedef PY_LONG_LONG gdb_py_longest; 00155 typedef unsigned PY_LONG_LONG gdb_py_ulongest; 00156 #define gdb_py_long_from_longest PyLong_FromLongLong 00157 #define gdb_py_long_from_ulongest PyLong_FromUnsignedLongLong 00158 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong 00159 00160 #else /* HAVE_LONG_LONG */ 00161 00162 #define GDB_PY_LL_ARG "L" 00163 #define GDB_PY_LLU_ARG "K" 00164 typedef long gdb_py_longest; 00165 typedef unsigned long gdb_py_ulongest; 00166 #define gdb_py_long_from_longest PyLong_FromLong 00167 #define gdb_py_long_from_ulongest PyLong_FromUnsignedLong 00168 #define gdb_py_long_as_ulongest PyLong_AsUnsignedLong 00169 00170 #endif /* HAVE_LONG_LONG */ 00171 00172 /* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading 00173 to 'suggest explicit braces to avoid ambiguous ‘else’' gcc errors. 00174 Wrap it ourselves, so that callers don't need to care. */ 00175 00176 static inline void 00177 gdb_Py_DECREF (void *op) /* ARI: editCase function */ 00178 { 00179 /* ... and Python 2.4 didn't cast OP to PyObject pointer on the 00180 '(op)->ob_refcnt' references within the macro. Cast it ourselves 00181 too. */ 00182 Py_DECREF ((PyObject *) op); 00183 } 00184 00185 #undef Py_DECREF 00186 #define Py_DECREF(op) gdb_Py_DECREF (op) 00187 00188 /* In order to be able to parse symtab_and_line_to_sal_object function 00189 a real symtab_and_line structure is needed. */ 00190 #include "symtab.h" 00191 00192 /* Also needed to parse enum var_types. */ 00193 #include "command.h" 00194 #include "breakpoint.h" 00195 00196 #include "exceptions.h" 00197 00198 enum gdbpy_iter_kind { iter_keys, iter_values, iter_items }; 00199 00200 struct block; 00201 struct value; 00202 struct language_defn; 00203 struct program_space; 00204 struct bpstats; 00205 struct inferior; 00206 00207 extern int gdb_python_initialized; 00208 00209 extern PyObject *gdb_module; 00210 extern PyObject *gdb_python_module; 00211 extern PyTypeObject value_object_type 00212 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object"); 00213 extern PyTypeObject block_object_type 00214 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object"); 00215 extern PyTypeObject symbol_object_type 00216 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object"); 00217 extern PyTypeObject event_object_type 00218 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); 00219 extern PyTypeObject stop_event_object_type 00220 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); 00221 extern PyTypeObject breakpoint_object_type 00222 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object"); 00223 extern PyTypeObject frame_object_type 00224 CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object"); 00225 00226 typedef struct breakpoint_object 00227 { 00228 PyObject_HEAD 00229 00230 /* The breakpoint number according to gdb. */ 00231 int number; 00232 00233 /* The gdb breakpoint object, or NULL if the breakpoint has been 00234 deleted. */ 00235 struct breakpoint *bp; 00236 00237 /* 1 is this is a FinishBreakpoint object, 0 otherwise. */ 00238 int is_finish_bp; 00239 } breakpoint_object; 00240 00241 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python 00242 exception if it is invalid. */ 00243 #define BPPY_REQUIRE_VALID(Breakpoint) \ 00244 do { \ 00245 if ((Breakpoint)->bp == NULL) \ 00246 return PyErr_Format (PyExc_RuntimeError, \ 00247 _("Breakpoint %d is invalid."), \ 00248 (Breakpoint)->number); \ 00249 } while (0) 00250 00251 /* Require that BREAKPOINT be a valid breakpoint ID; throw a Python 00252 exception if it is invalid. This macro is for use in setter functions. */ 00253 #define BPPY_SET_REQUIRE_VALID(Breakpoint) \ 00254 do { \ 00255 if ((Breakpoint)->bp == NULL) \ 00256 { \ 00257 PyErr_Format (PyExc_RuntimeError, _("Breakpoint %d is invalid."), \ 00258 (Breakpoint)->number); \ 00259 return -1; \ 00260 } \ 00261 } while (0) 00262 00263 00264 /* Variables used to pass information between the Breakpoint 00265 constructor and the breakpoint-created hook function. */ 00266 extern breakpoint_object *bppy_pending_object; 00267 00268 00269 typedef struct 00270 { 00271 PyObject_HEAD 00272 00273 /* The thread we represent. */ 00274 struct thread_info *thread; 00275 00276 /* The Inferior object to which this thread belongs. */ 00277 PyObject *inf_obj; 00278 } thread_object; 00279 00280 extern struct cmd_list_element *set_python_list; 00281 extern struct cmd_list_element *show_python_list; 00282 00283 PyObject *gdbpy_history (PyObject *self, PyObject *args); 00284 PyObject *gdbpy_breakpoints (PyObject *, PyObject *); 00285 PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *); 00286 PyObject *gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw); 00287 PyObject *gdbpy_lookup_global_symbol (PyObject *self, PyObject *args, 00288 PyObject *kw); 00289 PyObject *gdbpy_newest_frame (PyObject *self, PyObject *args); 00290 PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args); 00291 PyObject *gdbpy_block_for_pc (PyObject *self, PyObject *args); 00292 PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw); 00293 PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length, 00294 const char *encoding, 00295 struct type *type); 00296 PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2); 00297 PyObject *gdbpy_selected_thread (PyObject *self, PyObject *args); 00298 PyObject *gdbpy_selected_inferior (PyObject *self, PyObject *args); 00299 PyObject *gdbpy_string_to_argv (PyObject *self, PyObject *args); 00300 PyObject *gdbpy_parameter (PyObject *self, PyObject *args); 00301 PyObject *gdbpy_parameter_value (enum var_types type, void *var); 00302 char *gdbpy_parse_command_name (const char *name, 00303 struct cmd_list_element ***base_list, 00304 struct cmd_list_element **start_list); 00305 00306 PyObject *symtab_and_line_to_sal_object (struct symtab_and_line sal); 00307 PyObject *symtab_to_symtab_object (struct symtab *symtab); 00308 PyObject *symbol_to_symbol_object (struct symbol *sym); 00309 PyObject *block_to_block_object (const struct block *block, 00310 struct objfile *objfile); 00311 PyObject *value_to_value_object (struct value *v); 00312 PyObject *type_to_type_object (struct type *); 00313 PyObject *frame_info_to_frame_object (struct frame_info *frame); 00314 00315 PyObject *pspace_to_pspace_object (struct program_space *) 00316 CPYCHECKER_RETURNS_BORROWED_REF; 00317 PyObject *pspy_get_printers (PyObject *, void *); 00318 PyObject *pspy_get_frame_filters (PyObject *, void *); 00319 00320 PyObject *objfile_to_objfile_object (struct objfile *) 00321 CPYCHECKER_RETURNS_BORROWED_REF; 00322 PyObject *objfpy_get_printers (PyObject *, void *); 00323 PyObject *objfpy_get_frame_filters (PyObject *, void *); 00324 00325 PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch); 00326 00327 thread_object *create_thread_object (struct thread_info *tp); 00328 thread_object *find_thread_object (ptid_t ptid) 00329 CPYCHECKER_RETURNS_BORROWED_REF; 00330 PyObject *find_inferior_object (int pid); 00331 PyObject *inferior_to_inferior_object (struct inferior *inferior); 00332 00333 const struct block *block_object_to_block (PyObject *obj); 00334 struct symbol *symbol_object_to_symbol (PyObject *obj); 00335 struct value *value_object_to_value (PyObject *self); 00336 struct value *convert_value_from_python (PyObject *obj); 00337 struct type *type_object_to_type (PyObject *obj); 00338 struct symtab *symtab_object_to_symtab (PyObject *obj); 00339 struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj); 00340 struct frame_info *frame_object_to_frame_info (PyObject *frame_obj); 00341 struct gdbarch *arch_object_to_gdbarch (PyObject *obj); 00342 00343 void gdbpy_initialize_gdb_readline (void); 00344 int gdbpy_initialize_auto_load (void) 00345 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00346 int gdbpy_initialize_values (void) 00347 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00348 int gdbpy_initialize_frames (void) 00349 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00350 int gdbpy_initialize_symtabs (void) 00351 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00352 int gdbpy_initialize_commands (void) 00353 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00354 int gdbpy_initialize_symbols (void) 00355 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00356 int gdbpy_initialize_symtabs (void) 00357 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00358 int gdbpy_initialize_blocks (void) 00359 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00360 int gdbpy_initialize_types (void) 00361 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00362 int gdbpy_initialize_functions (void) 00363 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00364 int gdbpy_initialize_pspace (void) 00365 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00366 int gdbpy_initialize_objfile (void) 00367 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00368 int gdbpy_initialize_breakpoints (void) 00369 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00370 int gdbpy_initialize_finishbreakpoints (void) 00371 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00372 int gdbpy_initialize_lazy_string (void) 00373 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00374 int gdbpy_initialize_parameters (void) 00375 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00376 int gdbpy_initialize_thread (void) 00377 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00378 int gdbpy_initialize_inferior (void) 00379 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00380 int gdbpy_initialize_eventregistry (void) 00381 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00382 int gdbpy_initialize_event (void) 00383 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00384 int gdbpy_initialize_py_events (void) 00385 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00386 int gdbpy_initialize_stop_event (void) 00387 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00388 int gdbpy_initialize_signal_event (void) 00389 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00390 int gdbpy_initialize_breakpoint_event (void) 00391 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00392 int gdbpy_initialize_continue_event (void) 00393 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00394 int gdbpy_initialize_exited_event (void) 00395 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00396 int gdbpy_initialize_thread_event (void) 00397 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00398 int gdbpy_initialize_new_objfile_event (void) 00399 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00400 int gdbpy_initialize_arch (void) 00401 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00402 00403 struct cleanup *make_cleanup_py_decref (PyObject *py); 00404 struct cleanup *make_cleanup_py_xdecref (PyObject *py); 00405 00406 struct cleanup *ensure_python_env (struct gdbarch *gdbarch, 00407 const struct language_defn *language); 00408 00409 extern struct gdbarch *python_gdbarch; 00410 extern const struct language_defn *python_language; 00411 00412 /* Use this after a TRY_EXCEPT to throw the appropriate Python 00413 exception. */ 00414 #define GDB_PY_HANDLE_EXCEPTION(Exception) \ 00415 do { \ 00416 if (Exception.reason < 0) \ 00417 { \ 00418 gdbpy_convert_exception (Exception); \ 00419 return NULL; \ 00420 } \ 00421 } while (0) 00422 00423 /* Use this after a TRY_EXCEPT to throw the appropriate Python 00424 exception. This macro is for use inside setter functions. */ 00425 #define GDB_PY_SET_HANDLE_EXCEPTION(Exception) \ 00426 do { \ 00427 if (Exception.reason < 0) \ 00428 { \ 00429 gdbpy_convert_exception (Exception); \ 00430 return -1; \ 00431 } \ 00432 } while (0) 00433 00434 void gdbpy_print_stack (void); 00435 00436 void source_python_script_for_objfile (struct objfile *objfile, FILE *file, 00437 const char *filename); 00438 00439 PyObject *python_string_to_unicode (PyObject *obj); 00440 char *unicode_to_target_string (PyObject *unicode_str); 00441 char *python_string_to_target_string (PyObject *obj); 00442 PyObject *python_string_to_target_python_string (PyObject *obj); 00443 char *python_string_to_host_string (PyObject *obj); 00444 int gdbpy_is_string (PyObject *obj); 00445 char *gdbpy_obj_to_string (PyObject *obj); 00446 char *gdbpy_exception_to_string (PyObject *ptype, PyObject *pvalue); 00447 00448 int gdbpy_is_lazy_string (PyObject *result); 00449 void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr, 00450 struct type **str_type, 00451 long *length, char **encoding); 00452 00453 int gdbpy_is_value_object (PyObject *obj); 00454 00455 /* Note that these are declared here, and not in python.h with the 00456 other pretty-printer functions, because they refer to PyObject. */ 00457 PyObject *apply_varobj_pretty_printer (PyObject *print_obj, 00458 struct value **replacement, 00459 struct ui_file *stream); 00460 PyObject *gdbpy_get_varobj_pretty_printer (struct value *value); 00461 char *gdbpy_get_display_hint (PyObject *printer); 00462 PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args); 00463 00464 void bpfinishpy_pre_stop_hook (struct breakpoint_object *bp_obj); 00465 void bpfinishpy_post_stop_hook (struct breakpoint_object *bp_obj); 00466 00467 extern PyObject *gdbpy_doc_cst; 00468 extern PyObject *gdbpy_children_cst; 00469 extern PyObject *gdbpy_to_string_cst; 00470 extern PyObject *gdbpy_display_hint_cst; 00471 extern PyObject *gdbpy_enabled_cst; 00472 extern PyObject *gdbpy_value_cst; 00473 00474 /* Exception types. */ 00475 extern PyObject *gdbpy_gdb_error; 00476 extern PyObject *gdbpy_gdb_memory_error; 00477 extern PyObject *gdbpy_gdberror_exc; 00478 00479 extern void gdbpy_convert_exception (struct gdb_exception) 00480 CPYCHECKER_SETS_EXCEPTION; 00481 00482 int get_addr_from_python (PyObject *obj, CORE_ADDR *addr) 00483 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00484 00485 PyObject *gdb_py_object_from_longest (LONGEST l); 00486 PyObject *gdb_py_object_from_ulongest (ULONGEST l); 00487 int gdb_py_int_as_long (PyObject *, long *); 00488 00489 PyObject *gdb_py_generic_dict (PyObject *self, void *closure); 00490 00491 int gdb_pymodule_addobject (PyObject *module, const char *name, 00492 PyObject *object) 00493 CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; 00494 00495 #endif /* GDB_PYTHON_INTERNAL_H */