Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdb / python / py-framefilter.c
CommitLineData
1e611234
PM
1/* Python frame filters
2
618f726f 3 Copyright (C) 2013-2016 Free Software Foundation, Inc.
1e611234
PM
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 "objfiles.h"
22#include "symtab.h"
23#include "language.h"
1e611234
PM
24#include "arch-utils.h"
25#include "python.h"
26#include "ui-out.h"
27#include "valprint.h"
28#include "annotate.h"
29#include "hashtab.h"
30#include "demangle.h"
31#include "mi/mi-cmds.h"
32#include "python-internal.h"
33
34enum mi_print_types
35{
36 MI_PRINT_ARGS,
37 MI_PRINT_LOCALS
38};
39
40/* Helper function to extract a symbol, a name and a language
41 definition from a Python object that conforms to the "Symbol Value"
42 interface. OBJ is the Python object to extract the values from.
43 NAME is a pass-through argument where the name of the symbol will
44 be written. NAME is allocated in this function, but the caller is
45 responsible for clean up. SYM is a pass-through argument where the
63e43d3a
PMR
46 symbol will be written and SYM_BLOCK is a pass-through argument to
47 write the block where the symbol lies in. In the case of the API
48 returning a string, this will be set to NULL. LANGUAGE is also a
49 pass-through argument denoting the language attributed to the
50 Symbol. In the case of SYM being NULL, this will be set to the
51 current language. Returns EXT_LANG_BT_ERROR on error with the
52 appropriate Python exception set, and EXT_LANG_BT_OK on success. */
1e611234 53
6dddc817 54static enum ext_lang_bt_status
1e611234 55extract_sym (PyObject *obj, char **name, struct symbol **sym,
63e43d3a 56 struct block **sym_block, const struct language_defn **language)
1e611234
PM
57{
58 PyObject *result = PyObject_CallMethod (obj, "symbol", NULL);
59
60 if (result == NULL)
6dddc817 61 return EXT_LANG_BT_ERROR;
1e611234
PM
62
63 /* For 'symbol' callback, the function can return a symbol or a
64 string. */
65 if (gdbpy_is_string (result))
66 {
67 *name = python_string_to_host_string (result);
68 Py_DECREF (result);
69
70 if (*name == NULL)
6dddc817 71 return EXT_LANG_BT_ERROR;
1e611234
PM
72 /* If the API returns a string (and not a symbol), then there is
73 no symbol derived language available and the frame filter has
74 either overridden the symbol with a string, or supplied a
75 entirely synthetic symbol/value pairing. In that case, use
76 python_language. */
77 *language = python_language;
78 *sym = NULL;
63e43d3a 79 *sym_block = NULL;
1e611234
PM
80 }
81 else
82 {
83 /* This type checks 'result' during the conversion so we
84 just call it unconditionally and check the return. */
85 *sym = symbol_object_to_symbol (result);
63e43d3a
PMR
86 /* TODO: currently, we have no way to recover the block in which SYMBOL
87 was found, so we have no block to return. Trying to evaluate SYMBOL
88 will yield an incorrect value when it's located in a FRAME and
89 evaluated from another frame (as permitted in nested functions). */
90 *sym_block = NULL;
1e611234
PM
91
92 Py_DECREF (result);
93
94 if (*sym == NULL)
95 {
96 PyErr_SetString (PyExc_RuntimeError,
97 _("Unexpected value. Expecting a "
98 "gdb.Symbol or a Python string."));
6dddc817 99 return EXT_LANG_BT_ERROR;
1e611234
PM
100 }
101
102 /* Duplicate the symbol name, so the caller has consistency
103 in garbage collection. */
104 *name = xstrdup (SYMBOL_PRINT_NAME (*sym));
105
106 /* If a symbol is specified attempt to determine the language
107 from the symbol. If mode is not "auto", then the language
108 has been explicitly set, use that. */
109 if (language_mode == language_mode_auto)
110 *language = language_def (SYMBOL_LANGUAGE (*sym));
111 else
112 *language = current_language;
113 }
114
6dddc817 115 return EXT_LANG_BT_OK;
1e611234
PM
116}
117
118/* Helper function to extract a value from an object that conforms to
119 the "Symbol Value" interface. OBJ is the Python object to extract
120 the value from. VALUE is a pass-through argument where the value
121 will be written. If the object does not have the value attribute,
122 or provides the Python None for a value, VALUE will be set to NULL
6dddc817
DE
123 and this function will return as successful. Returns EXT_LANG_BT_ERROR
124 on error with the appropriate Python exception set, and EXT_LANG_BT_OK on
1e611234
PM
125 success. */
126
6dddc817 127static enum ext_lang_bt_status
1e611234
PM
128extract_value (PyObject *obj, struct value **value)
129{
130 if (PyObject_HasAttrString (obj, "value"))
131 {
132 PyObject *vresult = PyObject_CallMethod (obj, "value", NULL);
133
134 if (vresult == NULL)
6dddc817 135 return EXT_LANG_BT_ERROR;
1e611234
PM
136
137 /* The Python code has returned 'None' for a value, so we set
138 value to NULL. This flags that GDB should read the
139 value. */
140 if (vresult == Py_None)
141 {
142 Py_DECREF (vresult);
143 *value = NULL;
6dddc817 144 return EXT_LANG_BT_OK;
1e611234
PM
145 }
146 else
147 {
148 *value = convert_value_from_python (vresult);
149 Py_DECREF (vresult);
150
151 if (*value == NULL)
6dddc817 152 return EXT_LANG_BT_ERROR;
1e611234 153
6dddc817 154 return EXT_LANG_BT_OK;
1e611234
PM
155 }
156 }
157 else
158 *value = NULL;
159
6dddc817 160 return EXT_LANG_BT_OK;
1e611234
PM
161}
162
163/* MI prints only certain values according to the type of symbol and
164 also what the user has specified. SYM is the symbol to check, and
165 MI_PRINT_TYPES is an enum specifying what the user wants emitted
166 for the MI command in question. */
167static int
168mi_should_print (struct symbol *sym, enum mi_print_types type)
169{
170 int print_me = 0;
171
172 switch (SYMBOL_CLASS (sym))
173 {
174 default:
175 case LOC_UNDEF: /* catches errors */
176 case LOC_CONST: /* constant */
177 case LOC_TYPEDEF: /* local typedef */
178 case LOC_LABEL: /* local label */
179 case LOC_BLOCK: /* local function */
180 case LOC_CONST_BYTES: /* loc. byte seq. */
181 case LOC_UNRESOLVED: /* unresolved static */
182 case LOC_OPTIMIZED_OUT: /* optimized out */
183 print_me = 0;
184 break;
185
186 case LOC_ARG: /* argument */
187 case LOC_REF_ARG: /* reference arg */
188 case LOC_REGPARM_ADDR: /* indirect register arg */
189 case LOC_LOCAL: /* stack local */
190 case LOC_STATIC: /* static */
191 case LOC_REGISTER: /* register */
192 case LOC_COMPUTED: /* computed location */
193 if (type == MI_PRINT_LOCALS)
194 print_me = ! SYMBOL_IS_ARGUMENT (sym);
195 else
196 print_me = SYMBOL_IS_ARGUMENT (sym);
197 }
198 return print_me;
199}
200
201/* Helper function which outputs a type name extracted from VAL to a
202 "type" field in the output stream OUT. OUT is the ui-out structure
203 the type name will be output too, and VAL is the value that the
6dddc817
DE
204 type will be extracted from. Returns EXT_LANG_BT_ERROR on error, with
205 any GDB exceptions converted to a Python exception, or EXT_LANG_BT_OK on
1e611234
PM
206 success. */
207
6dddc817 208static enum ext_lang_bt_status
1e611234
PM
209py_print_type (struct ui_out *out, struct value *val)
210{
1e611234 211
492d29ea 212 TRY
1e611234 213 {
1e611234
PM
214 struct ui_file *stb;
215 struct cleanup *cleanup;
216
217 stb = mem_fileopen ();
218 cleanup = make_cleanup_ui_file_delete (stb);
78cc6c2d 219 check_typedef (value_type (val));
1e611234
PM
220 type_print (value_type (val), "", stb, -1);
221 ui_out_field_stream (out, "type", stb);
222 do_cleanups (cleanup);
223 }
492d29ea 224 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
225 {
226 gdbpy_convert_exception (except);
6dddc817 227 return EXT_LANG_BT_ERROR;
1e611234 228 }
492d29ea 229 END_CATCH
1e611234 230
6dddc817 231 return EXT_LANG_BT_OK;
1e611234
PM
232}
233
234/* Helper function which outputs a value to an output field in a
235 stream. OUT is the ui-out structure the value will be output to,
236 VAL is the value that will be printed, OPTS contains the value
237 printing options, ARGS_TYPE is an enumerator describing the
238 argument format, and LANGUAGE is the language_defn that the value
6dddc817
DE
239 will be printed with. Returns EXT_LANG_BT_ERROR on error, with any GDB
240 exceptions converted to a Python exception, or EXT_LANG_BT_OK on
1e611234
PM
241 success. */
242
6dddc817 243static enum ext_lang_bt_status
1e611234
PM
244py_print_value (struct ui_out *out, struct value *val,
245 const struct value_print_options *opts,
246 int indent,
6dddc817 247 enum ext_lang_frame_args args_type,
1e611234
PM
248 const struct language_defn *language)
249{
250 int should_print = 0;
1e611234
PM
251
252 /* MI does not print certain values, differentiated by type,
253 depending on what ARGS_TYPE indicates. Test type against option.
254 For CLI print all values. */
255 if (args_type == MI_PRINT_SIMPLE_VALUES
256 || args_type == MI_PRINT_ALL_VALUES)
257 {
258 struct type *type = NULL;
259
492d29ea 260 TRY
1e611234
PM
261 {
262 type = check_typedef (value_type (val));
263 }
492d29ea 264 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
265 {
266 gdbpy_convert_exception (except);
6dddc817 267 return EXT_LANG_BT_ERROR;
1e611234 268 }
492d29ea 269 END_CATCH
1e611234
PM
270
271 if (args_type == MI_PRINT_ALL_VALUES)
272 should_print = 1;
273 else if (args_type == MI_PRINT_SIMPLE_VALUES
274 && TYPE_CODE (type) != TYPE_CODE_ARRAY
275 && TYPE_CODE (type) != TYPE_CODE_STRUCT
276 && TYPE_CODE (type) != TYPE_CODE_UNION)
277 should_print = 1;
278 }
279 else if (args_type != NO_VALUES)
280 should_print = 1;
281
282 if (should_print)
283 {
492d29ea 284 TRY
1e611234
PM
285 {
286 struct ui_file *stb;
287 struct cleanup *cleanup;
288
289 stb = mem_fileopen ();
290 cleanup = make_cleanup_ui_file_delete (stb);
291 common_val_print (val, stb, indent, opts, language);
292 ui_out_field_stream (out, "value", stb);
293 do_cleanups (cleanup);
294 }
492d29ea 295 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
296 {
297 gdbpy_convert_exception (except);
6dddc817 298 return EXT_LANG_BT_ERROR;
1e611234 299 }
492d29ea 300 END_CATCH
1e611234
PM
301 }
302
6dddc817 303 return EXT_LANG_BT_OK;
1e611234
PM
304}
305
306/* Helper function to call a Python method and extract an iterator
307 from the result. If the function returns anything but an iterator
308 the exception is preserved and NULL is returned. FILTER is the
309 Python object to call, and FUNC is the name of the method. Returns
310 a PyObject, or NULL on error with the appropriate exception set.
311 This function can return an iterator, or NULL. */
312
313static PyObject *
314get_py_iter_from_func (PyObject *filter, char *func)
315{
316 if (PyObject_HasAttrString (filter, func))
317 {
318 PyObject *result = PyObject_CallMethod (filter, func, NULL);
319
320 if (result != NULL)
321 {
322 if (result == Py_None)
323 {
324 return result;
325 }
326 else
327 {
328 PyObject *iterator = PyObject_GetIter (result);
329
330 Py_DECREF (result);
331 return iterator;
332 }
333 }
334 }
335 else
336 Py_RETURN_NONE;
337
338 return NULL;
339}
340
341/* Helper function to output a single frame argument and value to an
342 output stream. This function will account for entry values if the
343 FV parameter is populated, the frame argument has entry values
344 associated with them, and the appropriate "set entry-value"
345 options are set. Will output in CLI or MI like format depending
346 on the type of output stream detected. OUT is the output stream,
347 SYM_NAME is the name of the symbol. If SYM_NAME is populated then
348 it must have an accompanying value in the parameter FV. FA is a
349 frame argument structure. If FA is populated, both SYM_NAME and
350 FV are ignored. OPTS contains the value printing options,
351 ARGS_TYPE is an enumerator describing the argument format,
352 PRINT_ARGS_FIELD is a flag which indicates if we output "ARGS=1"
353 in MI output in commands where both arguments and locals are
6dddc817
DE
354 printed. Returns EXT_LANG_BT_ERROR on error, with any GDB exceptions
355 converted to a Python exception, or EXT_LANG_BT_OK on success. */
1e611234 356
6dddc817 357static enum ext_lang_bt_status
1e611234
PM
358py_print_single_arg (struct ui_out *out,
359 const char *sym_name,
360 struct frame_arg *fa,
361 struct value *fv,
362 const struct value_print_options *opts,
6dddc817 363 enum ext_lang_frame_args args_type,
1e611234
PM
364 int print_args_field,
365 const struct language_defn *language)
366{
367 struct value *val;
c75bd3a2 368 enum ext_lang_bt_status retval = EXT_LANG_BT_OK;
1e611234
PM
369
370 if (fa != NULL)
371 {
c75bd3a2
JK
372 if (fa->val == NULL && fa->error == NULL)
373 return EXT_LANG_BT_OK;
1e611234
PM
374 language = language_def (SYMBOL_LANGUAGE (fa->sym));
375 val = fa->val;
376 }
377 else
378 val = fv;
379
492d29ea 380 TRY
1e611234
PM
381 {
382 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
383
384 /* MI has varying rules for tuples, but generally if there is only
385 one element in each item in the list, do not start a tuple. The
386 exception is -stack-list-variables which emits an ARGS="1" field
387 if the value is a frame argument. This is denoted in this
388 function with PRINT_ARGS_FIELD which is flag from the caller to
389 emit the ARGS field. */
390 if (ui_out_is_mi_like_p (out))
391 {
392 if (print_args_field || args_type != NO_VALUES)
393 make_cleanup_ui_out_tuple_begin_end (out, NULL);
394 }
395
396 annotate_arg_begin ();
397
398 /* If frame argument is populated, check for entry-values and the
399 entry value options. */
400 if (fa != NULL)
401 {
402 struct ui_file *stb;
403
404 stb = mem_fileopen ();
405 make_cleanup_ui_file_delete (stb);
406 fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (fa->sym),
407 SYMBOL_LANGUAGE (fa->sym),
408 DMGL_PARAMS | DMGL_ANSI);
409 if (fa->entry_kind == print_entry_values_compact)
410 {
411 fputs_filtered ("=", stb);
412
413 fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (fa->sym),
414 SYMBOL_LANGUAGE (fa->sym),
415 DMGL_PARAMS | DMGL_ANSI);
416 }
417 if (fa->entry_kind == print_entry_values_only
418 || fa->entry_kind == print_entry_values_compact)
419 {
420 fputs_filtered ("@entry", stb);
421 }
422 ui_out_field_stream (out, "name", stb);
423 }
424 else
425 /* Otherwise, just output the name. */
426 ui_out_field_string (out, "name", sym_name);
427
428 annotate_arg_name_end ();
429
430 if (! ui_out_is_mi_like_p (out))
431 ui_out_text (out, "=");
432
433 if (print_args_field)
434 ui_out_field_int (out, "arg", 1);
435
436 /* For MI print the type, but only for simple values. This seems
437 weird, but this is how MI choose to format the various output
438 types. */
c75bd3a2 439 if (args_type == MI_PRINT_SIMPLE_VALUES && val != NULL)
1e611234 440 {
6dddc817 441 if (py_print_type (out, val) == EXT_LANG_BT_ERROR)
1e611234 442 {
c75bd3a2 443 retval = EXT_LANG_BT_ERROR;
1e611234 444 do_cleanups (cleanups);
1e611234
PM
445 }
446 }
447
9c6595ab 448 if (retval != EXT_LANG_BT_ERROR)
1e611234 449 {
9c6595ab
PA
450 if (val != NULL)
451 annotate_arg_value (value_type (val));
452
453 /* If the output is to the CLI, and the user option "set print
454 frame-arguments" is set to none, just output "...". */
455 if (! ui_out_is_mi_like_p (out) && args_type == NO_VALUES)
456 ui_out_field_string (out, "value", "...");
457 else
1e611234 458 {
9c6595ab
PA
459 /* Otherwise, print the value for both MI and the CLI, except
460 for the case of MI_PRINT_NO_VALUES. */
461 if (args_type != NO_VALUES)
1e611234 462 {
9c6595ab
PA
463 if (val == NULL)
464 {
465 gdb_assert (fa != NULL && fa->error != NULL);
466 ui_out_field_fmt (out, "value",
467 _("<error reading variable: %s>"),
468 fa->error);
469 }
470 else if (py_print_value (out, val, opts, 0, args_type, language)
471 == EXT_LANG_BT_ERROR)
472 retval = EXT_LANG_BT_ERROR;
1e611234
PM
473 }
474 }
1e611234 475
9c6595ab
PA
476 do_cleanups (cleanups);
477 }
1e611234 478 }
492d29ea
PA
479 CATCH (except, RETURN_MASK_ERROR)
480 {
481 gdbpy_convert_exception (except);
482 }
483 END_CATCH
1e611234 484
c75bd3a2 485 return retval;
1e611234
PM
486}
487
488/* Helper function to loop over frame arguments provided by the
489 "frame_arguments" Python API. Elements in the iterator must
490 conform to the "Symbol Value" interface. ITER is the Python
491 iterable object, OUT is the output stream, ARGS_TYPE is an
492 enumerator describing the argument format, PRINT_ARGS_FIELD is a
493 flag which indicates if we output "ARGS=1" in MI output in commands
494 where both arguments and locals are printed, and FRAME is the
6dddc817
DE
495 backing frame. Returns EXT_LANG_BT_ERROR on error, with any GDB
496 exceptions converted to a Python exception, or EXT_LANG_BT_OK on
1e611234
PM
497 success. */
498
6dddc817 499static enum ext_lang_bt_status
1e611234
PM
500enumerate_args (PyObject *iter,
501 struct ui_out *out,
6dddc817 502 enum ext_lang_frame_args args_type,
1e611234
PM
503 int print_args_field,
504 struct frame_info *frame)
505{
506 PyObject *item;
507 struct value_print_options opts;
1e611234
PM
508
509 get_user_print_options (&opts);
510
511 if (args_type == CLI_SCALAR_VALUES)
512 {
513 /* True in "summary" mode, false otherwise. */
514 opts.summary = 1;
515 }
516
517 opts.deref_ref = 1;
518
492d29ea 519 TRY
1e611234
PM
520 {
521 annotate_frame_args ();
522 }
492d29ea 523 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
524 {
525 gdbpy_convert_exception (except);
526 goto error;
527 }
492d29ea 528 END_CATCH
1e611234
PM
529
530 /* Collect the first argument outside of the loop, so output of
531 commas in the argument output is correct. At the end of the
532 loop block collect another item from the iterator, and, if it is
533 not null emit a comma. */
534 item = PyIter_Next (iter);
535 if (item == NULL && PyErr_Occurred ())
536 goto error;
537
538 while (item)
539 {
540 const struct language_defn *language;
541 char *sym_name;
542 struct symbol *sym;
63e43d3a 543 struct block *sym_block;
1e611234 544 struct value *val;
6dddc817 545 enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
1e611234 546
63e43d3a 547 success = extract_sym (item, &sym_name, &sym, &sym_block, &language);
6dddc817 548 if (success == EXT_LANG_BT_ERROR)
1e611234
PM
549 {
550 Py_DECREF (item);
551 goto error;
552 }
553
554 success = extract_value (item, &val);
6dddc817 555 if (success == EXT_LANG_BT_ERROR)
1e611234
PM
556 {
557 xfree (sym_name);
558 Py_DECREF (item);
559 goto error;
560 }
561
562 Py_DECREF (item);
563 item = NULL;
564
565 if (sym && ui_out_is_mi_like_p (out)
566 && ! mi_should_print (sym, MI_PRINT_ARGS))
567 {
568 xfree (sym_name);
569 continue;
570 }
571
572 /* If the object did not provide a value, read it using
573 read_frame_args and account for entry values, if any. */
574 if (val == NULL)
575 {
576 struct frame_arg arg, entryarg;
577
578 /* If there is no value, and also no symbol, set error and
579 exit. */
580 if (sym == NULL)
581 {
582 PyErr_SetString (PyExc_RuntimeError,
583 _("No symbol or value provided."));
584 xfree (sym_name);
585 goto error;
586 }
587
492d29ea 588 TRY
1e611234
PM
589 {
590 read_frame_arg (sym, frame, &arg, &entryarg);
591 }
492d29ea 592 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
593 {
594 xfree (sym_name);
595 gdbpy_convert_exception (except);
596 goto error;
597 }
492d29ea 598 END_CATCH
1e611234
PM
599
600 /* The object has not provided a value, so this is a frame
601 argument to be read by GDB. In this case we have to
602 account for entry-values. */
603
604 if (arg.entry_kind != print_entry_values_only)
605 {
606 if (py_print_single_arg (out, NULL, &arg,
607 NULL, &opts,
608 args_type,
609 print_args_field,
6dddc817 610 NULL) == EXT_LANG_BT_ERROR)
1e611234
PM
611 {
612 xfree (arg.error);
613 xfree (entryarg.error);
614 xfree (sym_name);
615 goto error;
616 }
617 }
618
619 if (entryarg.entry_kind != print_entry_values_no)
620 {
621 if (arg.entry_kind != print_entry_values_only)
622 {
492d29ea 623 TRY
1e611234
PM
624 {
625 ui_out_text (out, ", ");
626 ui_out_wrap_hint (out, " ");
627 }
492d29ea 628 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
629 {
630 xfree (arg.error);
631 xfree (entryarg.error);
632 xfree (sym_name);
633 gdbpy_convert_exception (except);
634 goto error;
635 }
492d29ea 636 END_CATCH
1e611234
PM
637 }
638
6dddc817
DE
639 if (py_print_single_arg (out, NULL, &entryarg, NULL, &opts,
640 args_type, print_args_field, NULL)
641 == EXT_LANG_BT_ERROR)
1e611234
PM
642 {
643 xfree (arg.error);
644 xfree (entryarg.error);
645 xfree (sym_name);
646 goto error;
647 }
648 }
649
650 xfree (arg.error);
651 xfree (entryarg.error);
652 }
653 else
654 {
655 /* If the object has provided a value, we just print that. */
656 if (val != NULL)
657 {
658 if (py_print_single_arg (out, sym_name, NULL, val, &opts,
659 args_type, print_args_field,
6dddc817 660 language) == EXT_LANG_BT_ERROR)
1e611234
PM
661 {
662 xfree (sym_name);
663 goto error;
664 }
665 }
666 }
667
668 xfree (sym_name);
669
670 /* Collect the next item from the iterator. If
671 this is the last item, do not print the
672 comma. */
673 item = PyIter_Next (iter);
674 if (item != NULL)
675 {
492d29ea 676 TRY
1e611234
PM
677 {
678 ui_out_text (out, ", ");
679 }
492d29ea 680 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
681 {
682 Py_DECREF (item);
683 gdbpy_convert_exception (except);
684 goto error;
685 }
492d29ea 686 END_CATCH
1e611234
PM
687 }
688 else if (PyErr_Occurred ())
689 goto error;
690
492d29ea 691 TRY
1e611234
PM
692 {
693 annotate_arg_end ();
694 }
492d29ea 695 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
696 {
697 Py_DECREF (item);
698 gdbpy_convert_exception (except);
699 goto error;
700 }
492d29ea 701 END_CATCH
1e611234
PM
702 }
703
6dddc817 704 return EXT_LANG_BT_OK;
1e611234
PM
705
706 error:
6dddc817 707 return EXT_LANG_BT_ERROR;
1e611234
PM
708}
709
710
711/* Helper function to loop over variables provided by the
712 "frame_locals" Python API. Elements in the iterable must conform
713 to the "Symbol Value" interface. ITER is the Python iterable
714 object, OUT is the output stream, INDENT is whether we should
715 indent the output (for CLI), ARGS_TYPE is an enumerator describing
716 the argument format, PRINT_ARGS_FIELD is flag which indicates
717 whether to output the ARGS field in the case of
718 -stack-list-variables and FRAME is the backing frame. Returns
6dddc817
DE
719 EXT_LANG_BT_ERROR on error, with any GDB exceptions converted to a Python
720 exception, or EXT_LANG_BT_OK on success. */
1e611234 721
6dddc817 722static enum ext_lang_bt_status
1e611234
PM
723enumerate_locals (PyObject *iter,
724 struct ui_out *out,
725 int indent,
6dddc817 726 enum ext_lang_frame_args args_type,
1e611234
PM
727 int print_args_field,
728 struct frame_info *frame)
729{
730 PyObject *item;
731 struct value_print_options opts;
732
733 get_user_print_options (&opts);
734 opts.deref_ref = 1;
735
736 while ((item = PyIter_Next (iter)))
737 {
738 const struct language_defn *language;
739 char *sym_name;
740 struct value *val;
6dddc817 741 enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
1e611234 742 struct symbol *sym;
63e43d3a 743 struct block *sym_block;
1e611234
PM
744 int local_indent = 8 + (8 * indent);
745 struct cleanup *locals_cleanups;
746
747 locals_cleanups = make_cleanup_py_decref (item);
748
63e43d3a 749 success = extract_sym (item, &sym_name, &sym, &sym_block, &language);
6dddc817 750 if (success == EXT_LANG_BT_ERROR)
1e611234
PM
751 {
752 do_cleanups (locals_cleanups);
753 goto error;
754 }
755
756 make_cleanup (xfree, sym_name);
757
758 success = extract_value (item, &val);
6dddc817 759 if (success == EXT_LANG_BT_ERROR)
1e611234
PM
760 {
761 do_cleanups (locals_cleanups);
762 goto error;
763 }
764
765 if (sym != NULL && ui_out_is_mi_like_p (out)
766 && ! mi_should_print (sym, MI_PRINT_LOCALS))
767 {
768 do_cleanups (locals_cleanups);
769 continue;
770 }
771
772 /* If the object did not provide a value, read it. */
773 if (val == NULL)
774 {
492d29ea 775 TRY
1e611234 776 {
63e43d3a 777 val = read_var_value (sym, sym_block, frame);
1e611234 778 }
492d29ea 779 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
780 {
781 gdbpy_convert_exception (except);
782 do_cleanups (locals_cleanups);
783 goto error;
784 }
492d29ea 785 END_CATCH
1e611234
PM
786 }
787
788 /* With PRINT_NO_VALUES, MI does not emit a tuple normally as
789 each output contains only one field. The exception is
790 -stack-list-variables, which always provides a tuple. */
791 if (ui_out_is_mi_like_p (out))
792 {
793 if (print_args_field || args_type != NO_VALUES)
794 make_cleanup_ui_out_tuple_begin_end (out, NULL);
795 }
492d29ea 796 TRY
1e611234
PM
797 {
798 if (! ui_out_is_mi_like_p (out))
799 {
800 /* If the output is not MI we indent locals. */
801 ui_out_spaces (out, local_indent);
802 }
803
804 ui_out_field_string (out, "name", sym_name);
805
806 if (! ui_out_is_mi_like_p (out))
807 ui_out_text (out, " = ");
808 }
492d29ea 809 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
810 {
811 gdbpy_convert_exception (except);
812 do_cleanups (locals_cleanups);
813 goto error;
814 }
492d29ea 815 END_CATCH
1e611234
PM
816
817 if (args_type == MI_PRINT_SIMPLE_VALUES)
818 {
6dddc817 819 if (py_print_type (out, val) == EXT_LANG_BT_ERROR)
1e611234
PM
820 {
821 do_cleanups (locals_cleanups);
822 goto error;
823 }
824 }
825
826 /* CLI always prints values for locals. MI uses the
827 simple/no/all system. */
828 if (! ui_out_is_mi_like_p (out))
829 {
830 int val_indent = (indent + 1) * 4;
831
832 if (py_print_value (out, val, &opts, val_indent, args_type,
6dddc817 833 language) == EXT_LANG_BT_ERROR)
1e611234
PM
834 {
835 do_cleanups (locals_cleanups);
836 goto error;
837 }
838 }
839 else
840 {
841 if (args_type != NO_VALUES)
842 {
843 if (py_print_value (out, val, &opts, 0, args_type,
6dddc817 844 language) == EXT_LANG_BT_ERROR)
1e611234
PM
845 {
846 do_cleanups (locals_cleanups);
847 goto error;
848 }
849 }
850 }
851
852 do_cleanups (locals_cleanups);
853
492d29ea 854 TRY
1e611234
PM
855 {
856 ui_out_text (out, "\n");
857 }
492d29ea 858 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
859 {
860 gdbpy_convert_exception (except);
861 goto error;
862 }
492d29ea 863 END_CATCH
1e611234
PM
864 }
865
866 if (item == NULL && PyErr_Occurred ())
867 goto error;
868
6dddc817 869 return EXT_LANG_BT_OK;
1e611234
PM
870
871 error:
6dddc817 872 return EXT_LANG_BT_ERROR;
1e611234
PM
873}
874
6dddc817
DE
875/* Helper function for -stack-list-variables. Returns EXT_LANG_BT_ERROR on
876 error, or EXT_LANG_BT_OK on success. */
1e611234 877
6dddc817 878static enum ext_lang_bt_status
1e611234
PM
879py_mi_print_variables (PyObject *filter, struct ui_out *out,
880 struct value_print_options *opts,
6dddc817 881 enum ext_lang_frame_args args_type,
1e611234
PM
882 struct frame_info *frame)
883{
884 struct cleanup *old_chain;
885 PyObject *args_iter;
886 PyObject *locals_iter;
887
888 args_iter = get_py_iter_from_func (filter, "frame_args");
889 old_chain = make_cleanup_py_xdecref (args_iter);
890 if (args_iter == NULL)
891 goto error;
892
893 locals_iter = get_py_iter_from_func (filter, "frame_locals");
894 if (locals_iter == NULL)
895 goto error;
896
897 make_cleanup_py_decref (locals_iter);
898 make_cleanup_ui_out_list_begin_end (out, "variables");
899
900 if (args_iter != Py_None)
6dddc817
DE
901 if (enumerate_args (args_iter, out, args_type, 1, frame)
902 == EXT_LANG_BT_ERROR)
1e611234
PM
903 goto error;
904
905 if (locals_iter != Py_None)
906 if (enumerate_locals (locals_iter, out, 1, args_type, 1, frame)
6dddc817 907 == EXT_LANG_BT_ERROR)
1e611234
PM
908 goto error;
909
910 do_cleanups (old_chain);
6dddc817 911 return EXT_LANG_BT_OK;
1e611234
PM
912
913 error:
914 do_cleanups (old_chain);
6dddc817 915 return EXT_LANG_BT_ERROR;
1e611234
PM
916}
917
918/* Helper function for printing locals. This function largely just
919 creates the wrapping tuple, and calls enumerate_locals. Returns
6dddc817 920 EXT_LANG_BT_ERROR on error, or EXT_LANG_BT_OK on success. */
1e611234 921
6dddc817 922static enum ext_lang_bt_status
1e611234
PM
923py_print_locals (PyObject *filter,
924 struct ui_out *out,
6dddc817 925 enum ext_lang_frame_args args_type,
1e611234
PM
926 int indent,
927 struct frame_info *frame)
928{
929 PyObject *locals_iter = get_py_iter_from_func (filter,
930 "frame_locals");
931 struct cleanup *old_chain = make_cleanup_py_xdecref (locals_iter);
932
933 if (locals_iter == NULL)
934 goto locals_error;
935
936 make_cleanup_ui_out_list_begin_end (out, "locals");
937
938 if (locals_iter != Py_None)
939 if (enumerate_locals (locals_iter, out, indent, args_type,
6dddc817 940 0, frame) == EXT_LANG_BT_ERROR)
1e611234
PM
941 goto locals_error;
942
943 do_cleanups (old_chain);
6dddc817 944 return EXT_LANG_BT_OK;
1e611234
PM
945
946 locals_error:
947 do_cleanups (old_chain);
6dddc817 948 return EXT_LANG_BT_ERROR;
1e611234
PM
949}
950
951/* Helper function for printing frame arguments. This function
952 largely just creates the wrapping tuple, and calls enumerate_args.
6dddc817
DE
953 Returns EXT_LANG_BT_ERROR on error, with any GDB exceptions converted to
954 a Python exception, or EXT_LANG_BT_OK on success. */
1e611234 955
6dddc817 956static enum ext_lang_bt_status
1e611234
PM
957py_print_args (PyObject *filter,
958 struct ui_out *out,
6dddc817 959 enum ext_lang_frame_args args_type,
1e611234
PM
960 struct frame_info *frame)
961{
962 PyObject *args_iter = get_py_iter_from_func (filter, "frame_args");
963 struct cleanup *old_chain = make_cleanup_py_xdecref (args_iter);
1e611234
PM
964
965 if (args_iter == NULL)
966 goto args_error;
967
968 make_cleanup_ui_out_list_begin_end (out, "args");
969
492d29ea 970 TRY
1e611234
PM
971 {
972 annotate_frame_args ();
973 if (! ui_out_is_mi_like_p (out))
974 ui_out_text (out, " (");
975 }
492d29ea 976 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
977 {
978 gdbpy_convert_exception (except);
979 goto args_error;
980 }
492d29ea 981 END_CATCH
1e611234
PM
982
983 if (args_iter != Py_None)
6dddc817
DE
984 if (enumerate_args (args_iter, out, args_type, 0, frame)
985 == EXT_LANG_BT_ERROR)
1e611234
PM
986 goto args_error;
987
492d29ea 988 TRY
1e611234
PM
989 {
990 if (! ui_out_is_mi_like_p (out))
991 ui_out_text (out, ")");
992 }
492d29ea 993 CATCH (except, RETURN_MASK_ALL)
1e611234
PM
994 {
995 gdbpy_convert_exception (except);
996 goto args_error;
997 }
492d29ea 998 END_CATCH
1e611234
PM
999
1000 do_cleanups (old_chain);
6dddc817 1001 return EXT_LANG_BT_OK;
1e611234
PM
1002
1003 args_error:
1004 do_cleanups (old_chain);
6dddc817 1005 return EXT_LANG_BT_ERROR;
1e611234
PM
1006}
1007
1008/* Print a single frame to the designated output stream, detecting
1009 whether the output is MI or console, and formatting the output
1010 according to the conventions of that protocol. FILTER is the
1011 frame-filter associated with this frame. FLAGS is an integer
1012 describing the various print options. The FLAGS variables is
1013 described in "apply_frame_filter" function. ARGS_TYPE is an
1014 enumerator describing the argument format. OUT is the output
1015 stream to print, INDENT is the level of indention for this frame
1016 (in the case of elided frames), and LEVELS_PRINTED is a hash-table
1017 containing all the frames level that have already been printed.
1018 If a frame level has been printed, do not print it again (in the
6dddc817
DE
1019 case of elided frames). Returns EXT_LANG_BT_ERROR on error, with any
1020 GDB exceptions converted to a Python exception, or EXT_LANG_BT_COMPLETED
b99bf4e3 1021 on success. It can also throw an exception RETURN_QUIT. */
1e611234 1022
6dddc817
DE
1023static enum ext_lang_bt_status
1024py_print_frame (PyObject *filter, int flags,
1025 enum ext_lang_frame_args args_type,
1e611234
PM
1026 struct ui_out *out, int indent, htab_t levels_printed)
1027{
1028 int has_addr = 0;
1029 CORE_ADDR address = 0;
1030 struct gdbarch *gdbarch = NULL;
1031 struct frame_info *frame = NULL;
b99bf4e3 1032 struct cleanup *cleanup_stack;
1e611234 1033 struct value_print_options opts;
34019068 1034 PyObject *py_inf_frame;
1e611234 1035 int print_level, print_frame_info, print_args, print_locals;
1e611234
PM
1036
1037 /* Extract print settings from FLAGS. */
1038 print_level = (flags & PRINT_LEVEL) ? 1 : 0;
1039 print_frame_info = (flags & PRINT_FRAME_INFO) ? 1 : 0;
1040 print_args = (flags & PRINT_ARGS) ? 1 : 0;
1041 print_locals = (flags & PRINT_LOCALS) ? 1 : 0;
1042
1043 get_user_print_options (&opts);
1044
1045 /* Get the underlying frame. This is needed to determine GDB
1046 architecture, and also, in the cases of frame variables/arguments to
1047 read them if they returned filter object requires us to do so. */
1048 py_inf_frame = PyObject_CallMethod (filter, "inferior_frame", NULL);
1049 if (py_inf_frame == NULL)
b99bf4e3 1050 return EXT_LANG_BT_ERROR;
1e611234
PM
1051
1052 frame = frame_object_to_frame_info (py_inf_frame);;
1053
1054 Py_DECREF (py_inf_frame);
1055
1056 if (frame == NULL)
b99bf4e3 1057 return EXT_LANG_BT_ERROR;
1e611234 1058
492d29ea 1059 TRY
1e611234
PM
1060 {
1061 gdbarch = get_frame_arch (frame);
1062 }
492d29ea 1063 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
1064 {
1065 gdbpy_convert_exception (except);
800eb1ce 1066 return EXT_LANG_BT_ERROR;
1e611234 1067 }
492d29ea 1068 END_CATCH
1e611234 1069
1e611234
PM
1070 /* stack-list-variables. */
1071 if (print_locals && print_args && ! print_frame_info)
1072 {
1073 if (py_mi_print_variables (filter, out, &opts,
6dddc817 1074 args_type, frame) == EXT_LANG_BT_ERROR)
b99bf4e3 1075 return EXT_LANG_BT_ERROR;
34019068 1076 return EXT_LANG_BT_COMPLETED;
1e611234
PM
1077 }
1078
b99bf4e3
JK
1079 cleanup_stack = make_cleanup (null_cleanup, NULL);
1080
1e611234
PM
1081 /* -stack-list-locals does not require a
1082 wrapping frame attribute. */
1083 if (print_frame_info || (print_args && ! print_locals))
1084 make_cleanup_ui_out_tuple_begin_end (out, "frame");
1085
1086 if (print_frame_info)
1087 {
1088 /* Elided frames are also printed with this function (recursively)
1089 and are printed with indention. */
1090 if (indent > 0)
1091 {
492d29ea 1092 TRY
8d4a54e2
JK
1093 {
1094 ui_out_spaces (out, indent*4);
1095 }
492d29ea 1096 CATCH (except, RETURN_MASK_ERROR)
8d4a54e2
JK
1097 {
1098 gdbpy_convert_exception (except);
800eb1ce
JK
1099 do_cleanups (cleanup_stack);
1100 return EXT_LANG_BT_ERROR;
8d4a54e2 1101 }
492d29ea 1102 END_CATCH
1e611234
PM
1103 }
1104
1105 /* The address is required for frame annotations, and also for
1106 address printing. */
1107 if (PyObject_HasAttrString (filter, "address"))
1108 {
1109 PyObject *paddr = PyObject_CallMethod (filter, "address", NULL);
34019068
JK
1110
1111 if (paddr == NULL)
800eb1ce
JK
1112 {
1113 do_cleanups (cleanup_stack);
1114 return EXT_LANG_BT_ERROR;
1115 }
34019068
JK
1116
1117 if (paddr != Py_None)
1e611234 1118 {
30a7bb83
TT
1119 if (get_addr_from_python (paddr, &address) < 0)
1120 {
1121 Py_DECREF (paddr);
1122 do_cleanups (cleanup_stack);
1123 return EXT_LANG_BT_ERROR;
1124 }
1125
34019068 1126 has_addr = 1;
1e611234 1127 }
34019068 1128 Py_DECREF (paddr);
1e611234
PM
1129 }
1130 }
1131
1132 /* Print frame level. MI does not require the level if
1133 locals/variables only are being printed. */
1134 if ((print_frame_info || print_args) && print_level)
1135 {
1136 struct frame_info **slot;
1137 int level;
1e611234
PM
1138
1139 slot = (struct frame_info **) htab_find_slot (levels_printed,
1140 frame, INSERT);
492d29ea 1141 TRY
1e611234
PM
1142 {
1143 level = frame_relative_level (frame);
1144
1145 /* Check if this frame has already been printed (there are cases
1146 where elided synthetic dummy-frames have to 'borrow' the frame
1147 architecture from the eliding frame. If that is the case, do
1148 not print 'level', but print spaces. */
1149 if (*slot == frame)
1150 ui_out_field_skip (out, "level");
1151 else
1152 {
1153 *slot = frame;
1154 annotate_frame_begin (print_level ? level : 0,
1155 gdbarch, address);
1156 ui_out_text (out, "#");
1157 ui_out_field_fmt_int (out, 2, ui_left, "level",
1158 level);
1159 }
1160 }
492d29ea 1161 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
1162 {
1163 gdbpy_convert_exception (except);
800eb1ce
JK
1164 do_cleanups (cleanup_stack);
1165 return EXT_LANG_BT_ERROR;
1e611234 1166 }
492d29ea 1167 END_CATCH
1e611234
PM
1168 }
1169
1170 if (print_frame_info)
1171 {
1172 /* Print address to the address field. If an address is not provided,
1173 print nothing. */
1174 if (opts.addressprint && has_addr)
1175 {
492d29ea 1176 TRY
1e611234
PM
1177 {
1178 annotate_frame_address ();
1179 ui_out_field_core_addr (out, "addr", gdbarch, address);
1180 annotate_frame_address_end ();
1181 ui_out_text (out, " in ");
1182 }
492d29ea 1183 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
1184 {
1185 gdbpy_convert_exception (except);
800eb1ce
JK
1186 do_cleanups (cleanup_stack);
1187 return EXT_LANG_BT_ERROR;
1e611234 1188 }
492d29ea 1189 END_CATCH
1e611234
PM
1190 }
1191
1192 /* Print frame function name. */
1193 if (PyObject_HasAttrString (filter, "function"))
1194 {
1195 PyObject *py_func = PyObject_CallMethod (filter, "function", NULL);
b99bf4e3 1196 struct cleanup *py_func_cleanup;
34019068 1197 const char *function = NULL;
1e611234 1198
34019068 1199 if (py_func == NULL)
800eb1ce
JK
1200 {
1201 do_cleanups (cleanup_stack);
1202 return EXT_LANG_BT_ERROR;
1203 }
b99bf4e3 1204 py_func_cleanup = make_cleanup_py_decref (py_func);
1e611234 1205
34019068
JK
1206 if (gdbpy_is_string (py_func))
1207 {
1208 char *function_to_free;
1e611234 1209
34019068
JK
1210 function = function_to_free =
1211 python_string_to_host_string (py_func);
1e611234 1212
34019068 1213 if (function == NULL)
1e611234 1214 {
800eb1ce
JK
1215 do_cleanups (cleanup_stack);
1216 return EXT_LANG_BT_ERROR;
1e611234 1217 }
34019068
JK
1218 make_cleanup (xfree, function_to_free);
1219 }
1220 else if (PyLong_Check (py_func))
1221 {
30a7bb83 1222 CORE_ADDR addr;
34019068 1223 struct bound_minimal_symbol msymbol;
1e611234 1224
30a7bb83 1225 if (get_addr_from_python (py_func, &addr) < 0)
800eb1ce
JK
1226 {
1227 do_cleanups (cleanup_stack);
1228 return EXT_LANG_BT_ERROR;
1229 }
34019068
JK
1230
1231 msymbol = lookup_minimal_symbol_by_pc (addr);
1232 if (msymbol.minsym != NULL)
1233 function = MSYMBOL_PRINT_NAME (msymbol.minsym);
1234 }
1235 else if (py_func != Py_None)
1236 {
1237 PyErr_SetString (PyExc_RuntimeError,
1238 _("FrameDecorator.function: expecting a " \
1239 "String, integer or None."));
800eb1ce
JK
1240 do_cleanups (cleanup_stack);
1241 return EXT_LANG_BT_ERROR;
1e611234 1242 }
34019068 1243
492d29ea 1244 TRY
34019068
JK
1245 {
1246 annotate_frame_function_name ();
1247 if (function == NULL)
1248 ui_out_field_skip (out, "func");
1249 else
1250 ui_out_field_string (out, "func", function);
1251 }
492d29ea 1252 CATCH (except, RETURN_MASK_ERROR)
34019068 1253 {
34019068 1254 gdbpy_convert_exception (except);
800eb1ce
JK
1255 do_cleanups (cleanup_stack);
1256 return EXT_LANG_BT_ERROR;
34019068 1257 }
492d29ea
PA
1258 END_CATCH
1259
b99bf4e3 1260 do_cleanups (py_func_cleanup);
1e611234 1261 }
1e611234
PM
1262 }
1263
1264
1265 /* Frame arguments. Check the result, and error if something went
1266 wrong. */
1267 if (print_args)
1268 {
6dddc817 1269 if (py_print_args (filter, out, args_type, frame) == EXT_LANG_BT_ERROR)
800eb1ce
JK
1270 {
1271 do_cleanups (cleanup_stack);
1272 return EXT_LANG_BT_ERROR;
1273 }
1e611234
PM
1274 }
1275
1276 /* File name/source/line number information. */
1277 if (print_frame_info)
1278 {
492d29ea 1279 TRY
1e611234
PM
1280 {
1281 annotate_frame_source_begin ();
1282 }
492d29ea 1283 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
1284 {
1285 gdbpy_convert_exception (except);
800eb1ce
JK
1286 do_cleanups (cleanup_stack);
1287 return EXT_LANG_BT_ERROR;
1e611234 1288 }
492d29ea 1289 END_CATCH
1e611234
PM
1290
1291 if (PyObject_HasAttrString (filter, "filename"))
1292 {
8d4a54e2 1293 PyObject *py_fn = PyObject_CallMethod (filter, "filename", NULL);
b99bf4e3 1294 struct cleanup *py_fn_cleanup;
8d4a54e2 1295
34019068 1296 if (py_fn == NULL)
800eb1ce
JK
1297 {
1298 do_cleanups (cleanup_stack);
1299 return EXT_LANG_BT_ERROR;
1300 }
b99bf4e3 1301 py_fn_cleanup = make_cleanup_py_decref (py_fn);
34019068
JK
1302
1303 if (py_fn != Py_None)
1e611234 1304 {
34019068 1305 char *filename = python_string_to_host_string (py_fn);
1e611234 1306
34019068
JK
1307 if (filename == NULL)
1308 {
800eb1ce
JK
1309 do_cleanups (cleanup_stack);
1310 return EXT_LANG_BT_ERROR;
34019068 1311 }
8f28f522 1312
34019068 1313 make_cleanup (xfree, filename);
492d29ea 1314 TRY
34019068
JK
1315 {
1316 ui_out_wrap_hint (out, " ");
1317 ui_out_text (out, " at ");
1318 annotate_frame_source_file ();
1319 ui_out_field_string (out, "file", filename);
1320 annotate_frame_source_file_end ();
1321 }
492d29ea 1322 CATCH (except, RETURN_MASK_ERROR)
34019068 1323 {
34019068 1324 gdbpy_convert_exception (except);
800eb1ce
JK
1325 do_cleanups (cleanup_stack);
1326 return EXT_LANG_BT_ERROR;
1e611234 1327 }
492d29ea 1328 END_CATCH
1e611234 1329 }
b99bf4e3 1330 do_cleanups (py_fn_cleanup);
1e611234
PM
1331 }
1332
1333 if (PyObject_HasAttrString (filter, "line"))
1334 {
1335 PyObject *py_line = PyObject_CallMethod (filter, "line", NULL);
b99bf4e3 1336 struct cleanup *py_line_cleanup;
1e611234
PM
1337 int line;
1338
34019068 1339 if (py_line == NULL)
800eb1ce
JK
1340 {
1341 do_cleanups (cleanup_stack);
1342 return EXT_LANG_BT_ERROR;
1343 }
b99bf4e3 1344 py_line_cleanup = make_cleanup_py_decref (py_line);
34019068
JK
1345
1346 if (py_line != Py_None)
1e611234 1347 {
34019068 1348 line = PyLong_AsLong (py_line);
30a7bb83
TT
1349 if (PyErr_Occurred ())
1350 {
1351 do_cleanups (cleanup_stack);
1352 return EXT_LANG_BT_ERROR;
1353 }
1354
492d29ea 1355 TRY
1e611234 1356 {
34019068
JK
1357 ui_out_text (out, ":");
1358 annotate_frame_source_line ();
1359 ui_out_field_int (out, "line", line);
1360 }
492d29ea 1361 CATCH (except, RETURN_MASK_ERROR)
34019068 1362 {
34019068 1363 gdbpy_convert_exception (except);
800eb1ce
JK
1364 do_cleanups (cleanup_stack);
1365 return EXT_LANG_BT_ERROR;
1e611234 1366 }
492d29ea 1367 END_CATCH
1e611234 1368 }
b99bf4e3 1369 do_cleanups (py_line_cleanup);
1e611234
PM
1370 }
1371 }
1372
1373 /* For MI we need to deal with the "children" list population of
1374 elided frames, so if MI output detected do not send newline. */
1375 if (! ui_out_is_mi_like_p (out))
1376 {
492d29ea 1377 TRY
1e611234
PM
1378 {
1379 annotate_frame_end ();
1380 ui_out_text (out, "\n");
1381 }
492d29ea 1382 CATCH (except, RETURN_MASK_ERROR)
1e611234
PM
1383 {
1384 gdbpy_convert_exception (except);
800eb1ce
JK
1385 do_cleanups (cleanup_stack);
1386 return EXT_LANG_BT_ERROR;
1e611234 1387 }
492d29ea 1388 END_CATCH
1e611234
PM
1389 }
1390
1391 if (print_locals)
1392 {
1393 if (py_print_locals (filter, out, args_type, indent,
6dddc817 1394 frame) == EXT_LANG_BT_ERROR)
800eb1ce
JK
1395 {
1396 do_cleanups (cleanup_stack);
1397 return EXT_LANG_BT_ERROR;
1398 }
1e611234
PM
1399 }
1400
34019068
JK
1401 {
1402 PyObject *elided;
b99bf4e3 1403 struct cleanup *elided_cleanup;
1e611234 1404
34019068
JK
1405 /* Finally recursively print elided frames, if any. */
1406 elided = get_py_iter_from_func (filter, "elided");
1407 if (elided == NULL)
800eb1ce
JK
1408 {
1409 do_cleanups (cleanup_stack);
1410 return EXT_LANG_BT_ERROR;
1411 }
b99bf4e3 1412 elided_cleanup = make_cleanup_py_decref (elided);
1e611234 1413
34019068
JK
1414 if (elided != Py_None)
1415 {
1416 PyObject *item;
1e611234 1417
34019068 1418 make_cleanup_ui_out_list_begin_end (out, "children");
1e611234 1419
34019068
JK
1420 if (! ui_out_is_mi_like_p (out))
1421 indent++;
1e611234 1422
34019068
JK
1423 while ((item = PyIter_Next (elided)))
1424 {
b99bf4e3
JK
1425 struct cleanup *item_cleanup = make_cleanup_py_decref (item);
1426
34019068
JK
1427 enum ext_lang_bt_status success = py_print_frame (item, flags,
1428 args_type, out,
1429 indent,
1430 levels_printed);
1e611234 1431
b99bf4e3
JK
1432 do_cleanups (item_cleanup);
1433
34019068
JK
1434 if (success == EXT_LANG_BT_ERROR)
1435 {
800eb1ce
JK
1436 do_cleanups (cleanup_stack);
1437 return EXT_LANG_BT_ERROR;
34019068 1438 }
34019068
JK
1439 }
1440 if (item == NULL && PyErr_Occurred ())
800eb1ce
JK
1441 {
1442 do_cleanups (cleanup_stack);
1443 return EXT_LANG_BT_ERROR;
1444 }
34019068 1445 }
b99bf4e3
JK
1446 do_cleanups (elided_cleanup);
1447 }
1e611234
PM
1448
1449 do_cleanups (cleanup_stack);
6dddc817 1450 return EXT_LANG_BT_COMPLETED;
1e611234
PM
1451}
1452
1453/* Helper function to initiate frame filter invocation at starting
1454 frame FRAME. */
1455
1456static PyObject *
1457bootstrap_python_frame_filters (struct frame_info *frame,
1458 int frame_low, int frame_high)
1459{
1460 struct cleanup *cleanups =
1461 make_cleanup (null_cleanup, NULL);
1462 PyObject *module, *sort_func, *iterable, *frame_obj, *iterator;
1463 PyObject *py_frame_low, *py_frame_high;
1464
1465 frame_obj = frame_info_to_frame_object (frame);
1466 if (frame_obj == NULL)
1467 goto error;
1468 make_cleanup_py_decref (frame_obj);
1469
1470 module = PyImport_ImportModule ("gdb.frames");
1471 if (module == NULL)
1472 goto error;
1473 make_cleanup_py_decref (module);
1474
1475 sort_func = PyObject_GetAttrString (module, "execute_frame_filters");
1476 if (sort_func == NULL)
1477 goto error;
1478 make_cleanup_py_decref (sort_func);
1479
1480 py_frame_low = PyInt_FromLong (frame_low);
1481 if (py_frame_low == NULL)
1482 goto error;
1483 make_cleanup_py_decref (py_frame_low);
1484
1485 py_frame_high = PyInt_FromLong (frame_high);
1486 if (py_frame_high == NULL)
1487 goto error;
1488 make_cleanup_py_decref (py_frame_high);
1489
1490 iterable = PyObject_CallFunctionObjArgs (sort_func, frame_obj,
1491 py_frame_low,
1492 py_frame_high,
1493 NULL);
1494 if (iterable == NULL)
1495 goto error;
1496
1497 do_cleanups (cleanups);
1498
1499 if (iterable != Py_None)
1500 {
1501 iterator = PyObject_GetIter (iterable);
1502 Py_DECREF (iterable);
1503 }
1504 else
1505 {
1506 return iterable;
1507 }
1508
1509 return iterator;
1510
1511 error:
1512 do_cleanups (cleanups);
1513 return NULL;
1514}
1515
1516/* This is the only publicly exported function in this file. FRAME
1517 is the source frame to start frame-filter invocation. FLAGS is an
1518 integer holding the flags for printing. The following elements of
1519 the FRAME_FILTER_FLAGS enum denotes the make-up of FLAGS:
1520 PRINT_LEVEL is a flag indicating whether to print the frame's
1521 relative level in the output. PRINT_FRAME_INFO is a flag that
1522 indicates whether this function should print the frame
1523 information, PRINT_ARGS is a flag that indicates whether to print
1524 frame arguments, and PRINT_LOCALS, likewise, with frame local
1525 variables. ARGS_TYPE is an enumerator describing the argument
1526 format, OUT is the output stream to print. FRAME_LOW is the
1527 beginning of the slice of frames to print, and FRAME_HIGH is the
6dddc817
DE
1528 upper limit of the frames to count. Returns EXT_LANG_BT_ERROR on error,
1529 or EXT_LANG_BT_COMPLETED on success. */
1530
1531enum ext_lang_bt_status
1532gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
1533 struct frame_info *frame, int flags,
1534 enum ext_lang_frame_args args_type,
1535 struct ui_out *out, int frame_low, int frame_high)
1e611234
PM
1536{
1537 struct gdbarch *gdbarch = NULL;
1538 struct cleanup *cleanups;
6dddc817 1539 enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
1e611234 1540 PyObject *iterable;
1e611234
PM
1541 PyObject *item;
1542 htab_t levels_printed;
1543
8ee002df 1544 if (!gdb_python_initialized)
6dddc817 1545 return EXT_LANG_BT_NO_FILTERS;
8ee002df 1546
492d29ea 1547 TRY
1e611234
PM
1548 {
1549 gdbarch = get_frame_arch (frame);
1550 }
492d29ea 1551 CATCH (except, RETURN_MASK_ALL)
1e611234 1552 {
21909fa1 1553 /* Let gdb try to print the stack trace. */
6dddc817 1554 return EXT_LANG_BT_NO_FILTERS;
1e611234 1555 }
492d29ea 1556 END_CATCH
1e611234 1557
21909fa1
TT
1558 cleanups = ensure_python_env (gdbarch, current_language);
1559
1e611234
PM
1560 iterable = bootstrap_python_frame_filters (frame, frame_low, frame_high);
1561
1562 if (iterable == NULL)
8ee002df
PM
1563 {
1564 /* Normally if there is an error GDB prints the exception,
1565 abandons the backtrace and exits. The user can then call "bt
1566 no-filters", and get a default backtrace (it would be
1567 confusing to automatically start a standard backtrace halfway
1568 through a Python filtered backtrace). However in the case
1569 where GDB cannot initialize the frame filters (most likely
1570 due to incorrect auto-load paths), GDB has printed nothing.
1571 In this case it is OK to print the default backtrace after
6dddc817 1572 printing the error message. GDB returns EXT_LANG_BT_NO_FILTERS
8ee002df
PM
1573 here to signify there are no filters after printing the
1574 initialization error. This return code will trigger a
1575 default backtrace. */
1576
1577 gdbpy_print_stack ();
1578 do_cleanups (cleanups);
6dddc817 1579 return EXT_LANG_BT_NO_FILTERS;
8ee002df 1580 }
1e611234
PM
1581
1582 /* If iterable is None, then there are no frame filters registered.
1583 If this is the case, defer to default GDB printing routines in MI
1584 and CLI. */
1585 make_cleanup_py_decref (iterable);
1586 if (iterable == Py_None)
1587 {
6dddc817 1588 success = EXT_LANG_BT_NO_FILTERS;
1e611234
PM
1589 goto done;
1590 }
1591
1592 levels_printed = htab_create (20,
1593 htab_hash_pointer,
1594 htab_eq_pointer,
1595 NULL);
1596 make_cleanup_htab_delete (levels_printed);
1597
1598 while ((item = PyIter_Next (iterable)))
1599 {
b99bf4e3
JK
1600 struct cleanup *item_cleanup = make_cleanup_py_decref (item);
1601
1e611234
PM
1602 success = py_print_frame (item, flags, args_type, out, 0,
1603 levels_printed);
1604
b99bf4e3
JK
1605 do_cleanups (item_cleanup);
1606
1e611234
PM
1607 /* Do not exit on error printing a single frame. Print the
1608 error and continue with other frames. */
6dddc817 1609 if (success == EXT_LANG_BT_ERROR)
1e611234 1610 gdbpy_print_stack ();
1e611234
PM
1611 }
1612
1613 if (item == NULL && PyErr_Occurred ())
1614 goto error;
1615
1616 done:
1617 do_cleanups (cleanups);
1618 return success;
1619
8ee002df
PM
1620 /* Exit and abandon backtrace on error, printing the exception that
1621 is set. */
1e611234
PM
1622 error:
1623 gdbpy_print_stack ();
1624 do_cleanups (cleanups);
6dddc817 1625 return EXT_LANG_BT_ERROR;
1e611234 1626}
This page took 0.631237 seconds and 4 git commands to generate.