708fcc535e20dec92380c2c57d1b0a171b6b9551
[binutils-gdb.git] / gdb / python / py-framefilter.c
1 /* Python frame filters
2
3 Copyright (C) 2013-2022 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "objfiles.h"
22 #include "symtab.h"
23 #include "language.h"
24 #include "arch-utils.h"
25 #include "python.h"
26 #include "ui-out.h"
27 #include "valprint.h"
28 #include "stack.h"
29 #include "source.h"
30 #include "annotate.h"
31 #include "hashtab.h"
32 #include "demangle.h"
33 #include "mi/mi-cmds.h"
34 #include "python-internal.h"
35 #include "gdbsupport/gdb_optional.h"
36 #include "cli/cli-style.h"
37
38 enum mi_print_types
39 {
40 MI_PRINT_ARGS,
41 MI_PRINT_LOCALS
42 };
43
44 /* Helper function to extract a symbol, a name and a language
45 definition from a Python object that conforms to the "Symbol Value"
46 interface. OBJ is the Python object to extract the values from.
47 NAME is a pass-through argument where the name of the symbol will
48 be written. NAME is allocated in this function, but the caller is
49 responsible for clean up. SYM is a pass-through argument where the
50 symbol will be written and SYM_BLOCK is a pass-through argument to
51 write the block where the symbol lies in. In the case of the API
52 returning a string, this will be set to NULL. LANGUAGE is also a
53 pass-through argument denoting the language attributed to the
54 Symbol. In the case of SYM being NULL, this will be set to the
55 current language. Returns EXT_LANG_BT_ERROR on error with the
56 appropriate Python exception set, and EXT_LANG_BT_OK on success. */
57
58 static enum ext_lang_bt_status
59 extract_sym (PyObject *obj, gdb::unique_xmalloc_ptr<char> *name,
60 struct symbol **sym, const struct block **sym_block,
61 const struct language_defn **language)
62 {
63 gdbpy_ref<> result (PyObject_CallMethod (obj, "symbol", NULL));
64
65 if (result == NULL)
66 return EXT_LANG_BT_ERROR;
67
68 /* For 'symbol' callback, the function can return a symbol or a
69 string. */
70 if (gdbpy_is_string (result.get ()))
71 {
72 *name = python_string_to_host_string (result.get ());
73
74 if (*name == NULL)
75 return EXT_LANG_BT_ERROR;
76 /* If the API returns a string (and not a symbol), then there is
77 no symbol derived language available and the frame filter has
78 either overridden the symbol with a string, or supplied a
79 entirely synthetic symbol/value pairing. In that case, use
80 the current language. */
81 *language = current_language;
82 *sym = NULL;
83 *sym_block = NULL;
84 }
85 else
86 {
87 /* This type checks 'result' during the conversion so we
88 just call it unconditionally and check the return. */
89 *sym = symbol_object_to_symbol (result.get ());
90 /* TODO: currently, we have no way to recover the block in which SYMBOL
91 was found, so we have no block to return. Trying to evaluate SYMBOL
92 will yield an incorrect value when it's located in a FRAME and
93 evaluated from another frame (as permitted in nested functions). */
94 *sym_block = NULL;
95
96 if (*sym == NULL)
97 {
98 PyErr_SetString (PyExc_RuntimeError,
99 _("Unexpected value. Expecting a "
100 "gdb.Symbol or a Python string."));
101 return EXT_LANG_BT_ERROR;
102 }
103
104 /* Duplicate the symbol name, so the caller has consistency
105 in garbage collection. */
106 name->reset (xstrdup ((*sym)->print_name ()));
107
108 /* If a symbol is specified attempt to determine the language
109 from the symbol. If mode is not "auto", then the language
110 has been explicitly set, use that. */
111 if (language_mode == language_mode_auto)
112 *language = language_def ((*sym)->language ());
113 else
114 *language = current_language;
115 }
116
117 return EXT_LANG_BT_OK;
118 }
119
120 /* Helper function to extract a value from an object that conforms to
121 the "Symbol Value" interface. OBJ is the Python object to extract
122 the value from. VALUE is a pass-through argument where the value
123 will be written. If the object does not have the value attribute,
124 or provides the Python None for a value, VALUE will be set to NULL
125 and this function will return as successful. Returns EXT_LANG_BT_ERROR
126 on error with the appropriate Python exception set, and EXT_LANG_BT_OK on
127 success. */
128
129 static enum ext_lang_bt_status
130 extract_value (PyObject *obj, struct value **value)
131 {
132 if (PyObject_HasAttrString (obj, "value"))
133 {
134 gdbpy_ref<> vresult (PyObject_CallMethod (obj, "value", NULL));
135
136 if (vresult == NULL)
137 return EXT_LANG_BT_ERROR;
138
139 /* The Python code has returned 'None' for a value, so we set
140 value to NULL. This flags that GDB should read the
141 value. */
142 if (vresult == Py_None)
143 {
144 *value = NULL;
145 return EXT_LANG_BT_OK;
146 }
147 else
148 {
149 *value = convert_value_from_python (vresult.get ());
150
151 if (*value == NULL)
152 return EXT_LANG_BT_ERROR;
153
154 return EXT_LANG_BT_OK;
155 }
156 }
157 else
158 *value = NULL;
159
160 return EXT_LANG_BT_OK;
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. */
167 static int
168 mi_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
204 type will be extracted from. */
205
206 static void
207 py_print_type (struct ui_out *out, struct value *val)
208 {
209 check_typedef (value_type (val));
210
211 string_file stb;
212 type_print (value_type (val), "", &stb, -1);
213 out->field_stream ("type", stb);
214 }
215
216 /* Helper function which outputs a value to an output field in a
217 stream. OUT is the ui-out structure the value will be output to,
218 VAL is the value that will be printed, OPTS contains the value
219 printing options, ARGS_TYPE is an enumerator describing the
220 argument format, and LANGUAGE is the language_defn that the value
221 will be printed with. */
222
223 static void
224 py_print_value (struct ui_out *out, struct value *val,
225 const struct value_print_options *opts,
226 int indent,
227 enum ext_lang_frame_args args_type,
228 const struct language_defn *language)
229 {
230 int should_print = 0;
231
232 /* MI does not print certain values, differentiated by type,
233 depending on what ARGS_TYPE indicates. Test type against option.
234 For CLI print all values. */
235 if (args_type == MI_PRINT_SIMPLE_VALUES
236 || args_type == MI_PRINT_ALL_VALUES)
237 {
238 struct type *type = check_typedef (value_type (val));
239
240 if (args_type == MI_PRINT_ALL_VALUES)
241 should_print = 1;
242 else if (args_type == MI_PRINT_SIMPLE_VALUES
243 && type->code () != TYPE_CODE_ARRAY
244 && type->code () != TYPE_CODE_STRUCT
245 && type->code () != TYPE_CODE_UNION)
246 should_print = 1;
247 }
248 else if (args_type != NO_VALUES)
249 should_print = 1;
250
251 if (should_print)
252 {
253 string_file stb;
254
255 common_val_print (val, &stb, indent, opts, language);
256 out->field_stream ("value", stb);
257 }
258 }
259
260 /* Helper function to call a Python method and extract an iterator
261 from the result. If the function returns anything but an iterator
262 the exception is preserved and NULL is returned. FILTER is the
263 Python object to call, and FUNC is the name of the method. Returns
264 a PyObject, or NULL on error with the appropriate exception set.
265 This function can return an iterator, or NULL. */
266
267 static PyObject *
268 get_py_iter_from_func (PyObject *filter, const char *func)
269 {
270 if (PyObject_HasAttrString (filter, func))
271 {
272 gdbpy_ref<> result (PyObject_CallMethod (filter, func, NULL));
273
274 if (result != NULL)
275 {
276 if (result == Py_None)
277 {
278 return result.release ();
279 }
280 else
281 {
282 return PyObject_GetIter (result.get ());
283 }
284 }
285 }
286 else
287 Py_RETURN_NONE;
288
289 return NULL;
290 }
291
292 /* Helper function to output a single frame argument and value to an
293 output stream. This function will account for entry values if the
294 FV parameter is populated, the frame argument has entry values
295 associated with them, and the appropriate "set entry-value"
296 options are set. Will output in CLI or MI like format depending
297 on the type of output stream detected. OUT is the output stream,
298 SYM_NAME is the name of the symbol. If SYM_NAME is populated then
299 it must have an accompanying value in the parameter FV. FA is a
300 frame argument structure. If FA is populated, both SYM_NAME and
301 FV are ignored. OPTS contains the value printing options,
302 ARGS_TYPE is an enumerator describing the argument format,
303 PRINT_ARGS_FIELD is a flag which indicates if we output "ARGS=1"
304 in MI output in commands where both arguments and locals are
305 printed. */
306
307 static void
308 py_print_single_arg (struct ui_out *out,
309 const char *sym_name,
310 struct frame_arg *fa,
311 struct value *fv,
312 const struct value_print_options *opts,
313 enum ext_lang_frame_args args_type,
314 int print_args_field,
315 const struct language_defn *language)
316 {
317 struct value *val;
318
319 if (fa != NULL)
320 {
321 if (fa->val == NULL && fa->error == NULL)
322 return;
323 language = language_def (fa->sym->language ());
324 val = fa->val;
325 }
326 else
327 val = fv;
328
329 gdb::optional<ui_out_emit_tuple> maybe_tuple;
330
331 /* MI has varying rules for tuples, but generally if there is only
332 one element in each item in the list, do not start a tuple. The
333 exception is -stack-list-variables which emits an ARGS="1" field
334 if the value is a frame argument. This is denoted in this
335 function with PRINT_ARGS_FIELD which is flag from the caller to
336 emit the ARGS field. */
337 if (out->is_mi_like_p ())
338 {
339 if (print_args_field || args_type != NO_VALUES)
340 maybe_tuple.emplace (out, nullptr);
341 }
342
343 annotate_arg_begin ();
344
345 /* If frame argument is populated, check for entry-values and the
346 entry value options. */
347 if (fa != NULL)
348 {
349 string_file stb;
350
351 fputs_filtered (fa->sym->print_name (), &stb);
352 if (fa->entry_kind == print_entry_values_compact)
353 {
354 stb.puts ("=");
355
356 fputs_filtered (fa->sym->print_name (), &stb);
357 }
358 if (fa->entry_kind == print_entry_values_only
359 || fa->entry_kind == print_entry_values_compact)
360 stb.puts ("@entry");
361 out->field_stream ("name", stb);
362 }
363 else
364 /* Otherwise, just output the name. */
365 out->field_string ("name", sym_name);
366
367 annotate_arg_name_end ();
368
369 out->text ("=");
370
371 if (print_args_field)
372 out->field_signed ("arg", 1);
373
374 /* For MI print the type, but only for simple values. This seems
375 weird, but this is how MI choose to format the various output
376 types. */
377 if (args_type == MI_PRINT_SIMPLE_VALUES && val != NULL)
378 py_print_type (out, val);
379
380 if (val != NULL)
381 annotate_arg_value (value_type (val));
382
383 /* If the output is to the CLI, and the user option "set print
384 frame-arguments" is set to none, just output "...". */
385 if (! out->is_mi_like_p () && args_type == NO_VALUES)
386 out->field_string ("value", "...");
387 else
388 {
389 /* Otherwise, print the value for both MI and the CLI, except
390 for the case of MI_PRINT_NO_VALUES. */
391 if (args_type != NO_VALUES)
392 {
393 if (val == NULL)
394 {
395 gdb_assert (fa != NULL && fa->error != NULL);
396 out->field_fmt ("value", metadata_style.style (),
397 _("<error reading variable: %s>"),
398 fa->error.get ());
399 }
400 else
401 py_print_value (out, val, opts, 0, args_type, language);
402 }
403 }
404 }
405
406 /* Helper function to loop over frame arguments provided by the
407 "frame_arguments" Python API. Elements in the iterator must
408 conform to the "Symbol Value" interface. ITER is the Python
409 iterable object, OUT is the output stream, ARGS_TYPE is an
410 enumerator describing the argument format, PRINT_ARGS_FIELD is a
411 flag which indicates if we output "ARGS=1" in MI output in commands
412 where both arguments and locals are printed, and FRAME is the
413 backing frame. Returns EXT_LANG_BT_ERROR on error, with any GDB
414 exceptions converted to a Python exception, or EXT_LANG_BT_OK on
415 success. */
416
417 static enum ext_lang_bt_status
418 enumerate_args (PyObject *iter,
419 struct ui_out *out,
420 enum ext_lang_frame_args args_type,
421 int print_args_field,
422 struct frame_info *frame)
423 {
424 struct value_print_options opts;
425
426 get_user_print_options (&opts);
427
428 if (args_type == CLI_SCALAR_VALUES)
429 {
430 /* True in "summary" mode, false otherwise. */
431 opts.summary = 1;
432 }
433
434 opts.deref_ref = 1;
435
436 annotate_frame_args ();
437
438 /* Collect the first argument outside of the loop, so output of
439 commas in the argument output is correct. At the end of the
440 loop block collect another item from the iterator, and, if it is
441 not null emit a comma. */
442 gdbpy_ref<> item (PyIter_Next (iter));
443 if (item == NULL && PyErr_Occurred ())
444 return EXT_LANG_BT_ERROR;
445
446 while (item != NULL)
447 {
448 const struct language_defn *language;
449 gdb::unique_xmalloc_ptr<char> sym_name;
450 struct symbol *sym;
451 const struct block *sym_block;
452 struct value *val;
453 enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
454
455 success = extract_sym (item.get (), &sym_name, &sym, &sym_block,
456 &language);
457 if (success == EXT_LANG_BT_ERROR)
458 return EXT_LANG_BT_ERROR;
459
460 success = extract_value (item.get (), &val);
461 if (success == EXT_LANG_BT_ERROR)
462 return EXT_LANG_BT_ERROR;
463
464 if (sym && out->is_mi_like_p ()
465 && ! mi_should_print (sym, MI_PRINT_ARGS))
466 continue;
467
468 /* If the object did not provide a value, read it using
469 read_frame_args and account for entry values, if any. */
470 if (val == NULL)
471 {
472 struct frame_arg arg, entryarg;
473
474 /* If there is no value, and also no symbol, set error and
475 exit. */
476 if (sym == NULL)
477 {
478 PyErr_SetString (PyExc_RuntimeError,
479 _("No symbol or value provided."));
480 return EXT_LANG_BT_ERROR;
481 }
482
483 read_frame_arg (user_frame_print_options,
484 sym, frame, &arg, &entryarg);
485
486 /* The object has not provided a value, so this is a frame
487 argument to be read by GDB. In this case we have to
488 account for entry-values. */
489
490 if (arg.entry_kind != print_entry_values_only)
491 {
492 py_print_single_arg (out, NULL, &arg,
493 NULL, &opts,
494 args_type,
495 print_args_field,
496 NULL);
497 }
498
499 if (entryarg.entry_kind != print_entry_values_no)
500 {
501 if (arg.entry_kind != print_entry_values_only)
502 {
503 out->text (", ");
504 out->wrap_hint (4);
505 }
506
507 py_print_single_arg (out, NULL, &entryarg, NULL, &opts,
508 args_type, print_args_field, NULL);
509 }
510 }
511 else
512 {
513 /* If the object has provided a value, we just print that. */
514 if (val != NULL)
515 py_print_single_arg (out, sym_name.get (), NULL, val, &opts,
516 args_type, print_args_field,
517 language);
518 }
519
520 /* Collect the next item from the iterator. If
521 this is the last item, do not print the
522 comma. */
523 item.reset (PyIter_Next (iter));
524 if (item != NULL)
525 out->text (", ");
526 else if (PyErr_Occurred ())
527 return EXT_LANG_BT_ERROR;
528
529 annotate_arg_end ();
530 }
531
532 return EXT_LANG_BT_OK;
533 }
534
535
536 /* Helper function to loop over variables provided by the
537 "frame_locals" Python API. Elements in the iterable must conform
538 to the "Symbol Value" interface. ITER is the Python iterable
539 object, OUT is the output stream, INDENT is whether we should
540 indent the output (for CLI), ARGS_TYPE is an enumerator describing
541 the argument format, PRINT_ARGS_FIELD is flag which indicates
542 whether to output the ARGS field in the case of
543 -stack-list-variables and FRAME is the backing frame. Returns
544 EXT_LANG_BT_ERROR on error, with any GDB exceptions converted to a Python
545 exception, or EXT_LANG_BT_OK on success. */
546
547 static enum ext_lang_bt_status
548 enumerate_locals (PyObject *iter,
549 struct ui_out *out,
550 int indent,
551 enum ext_lang_frame_args args_type,
552 int print_args_field,
553 struct frame_info *frame)
554 {
555 struct value_print_options opts;
556
557 get_user_print_options (&opts);
558 opts.deref_ref = 1;
559
560 while (true)
561 {
562 const struct language_defn *language;
563 gdb::unique_xmalloc_ptr<char> sym_name;
564 struct value *val;
565 enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
566 struct symbol *sym;
567 const struct block *sym_block;
568 int local_indent = 8 + (8 * indent);
569 gdb::optional<ui_out_emit_tuple> tuple;
570
571 gdbpy_ref<> item (PyIter_Next (iter));
572 if (item == NULL)
573 break;
574
575 success = extract_sym (item.get (), &sym_name, &sym, &sym_block,
576 &language);
577 if (success == EXT_LANG_BT_ERROR)
578 return EXT_LANG_BT_ERROR;
579
580 success = extract_value (item.get (), &val);
581 if (success == EXT_LANG_BT_ERROR)
582 return EXT_LANG_BT_ERROR;
583
584 if (sym != NULL && out->is_mi_like_p ()
585 && ! mi_should_print (sym, MI_PRINT_LOCALS))
586 continue;
587
588 /* If the object did not provide a value, read it. */
589 if (val == NULL)
590 val = read_var_value (sym, sym_block, frame);
591
592 /* With PRINT_NO_VALUES, MI does not emit a tuple normally as
593 each output contains only one field. The exception is
594 -stack-list-variables, which always provides a tuple. */
595 if (out->is_mi_like_p ())
596 {
597 if (print_args_field || args_type != NO_VALUES)
598 tuple.emplace (out, nullptr);
599 }
600
601 /* If the output is not MI we indent locals. */
602 out->spaces (local_indent);
603 out->field_string ("name", sym_name.get ());
604 out->text (" = ");
605
606 if (args_type == MI_PRINT_SIMPLE_VALUES)
607 py_print_type (out, val);
608
609 /* CLI always prints values for locals. MI uses the
610 simple/no/all system. */
611 if (! out->is_mi_like_p ())
612 {
613 int val_indent = (indent + 1) * 4;
614
615 py_print_value (out, val, &opts, val_indent, args_type,
616 language);
617 }
618 else
619 {
620 if (args_type != NO_VALUES)
621 py_print_value (out, val, &opts, 0, args_type,
622 language);
623 }
624
625 out->text ("\n");
626 }
627
628 if (!PyErr_Occurred ())
629 return EXT_LANG_BT_OK;
630
631 return EXT_LANG_BT_ERROR;
632 }
633
634 /* Helper function for -stack-list-variables. Returns EXT_LANG_BT_ERROR on
635 error, or EXT_LANG_BT_OK on success. */
636
637 static enum ext_lang_bt_status
638 py_mi_print_variables (PyObject *filter, struct ui_out *out,
639 struct value_print_options *opts,
640 enum ext_lang_frame_args args_type,
641 struct frame_info *frame)
642 {
643 gdbpy_ref<> args_iter (get_py_iter_from_func (filter, "frame_args"));
644 if (args_iter == NULL)
645 return EXT_LANG_BT_ERROR;
646
647 gdbpy_ref<> locals_iter (get_py_iter_from_func (filter, "frame_locals"));
648 if (locals_iter == NULL)
649 return EXT_LANG_BT_ERROR;
650
651 ui_out_emit_list list_emitter (out, "variables");
652
653 if (args_iter != Py_None
654 && (enumerate_args (args_iter.get (), out, args_type, 1, frame)
655 == EXT_LANG_BT_ERROR))
656 return EXT_LANG_BT_ERROR;
657
658 if (locals_iter != Py_None
659 && (enumerate_locals (locals_iter.get (), out, 1, args_type, 1, frame)
660 == EXT_LANG_BT_ERROR))
661 return EXT_LANG_BT_ERROR;
662
663 return EXT_LANG_BT_OK;
664 }
665
666 /* Helper function for printing locals. This function largely just
667 creates the wrapping tuple, and calls enumerate_locals. Returns
668 EXT_LANG_BT_ERROR on error, or EXT_LANG_BT_OK on success. */
669
670 static enum ext_lang_bt_status
671 py_print_locals (PyObject *filter,
672 struct ui_out *out,
673 enum ext_lang_frame_args args_type,
674 int indent,
675 struct frame_info *frame)
676 {
677 gdbpy_ref<> locals_iter (get_py_iter_from_func (filter, "frame_locals"));
678 if (locals_iter == NULL)
679 return EXT_LANG_BT_ERROR;
680
681 ui_out_emit_list list_emitter (out, "locals");
682
683 if (locals_iter != Py_None
684 && (enumerate_locals (locals_iter.get (), out, indent, args_type,
685 0, frame) == EXT_LANG_BT_ERROR))
686 return EXT_LANG_BT_ERROR;
687
688 return EXT_LANG_BT_OK;
689 }
690
691 /* Helper function for printing frame arguments. This function
692 largely just creates the wrapping tuple, and calls enumerate_args.
693 Returns EXT_LANG_BT_ERROR on error, with any GDB exceptions converted to
694 a Python exception, or EXT_LANG_BT_OK on success. */
695
696 static enum ext_lang_bt_status
697 py_print_args (PyObject *filter,
698 struct ui_out *out,
699 enum ext_lang_frame_args args_type,
700 struct frame_info *frame)
701 {
702 gdbpy_ref<> args_iter (get_py_iter_from_func (filter, "frame_args"));
703 if (args_iter == NULL)
704 return EXT_LANG_BT_ERROR;
705
706 ui_out_emit_list list_emitter (out, "args");
707
708 out->wrap_hint (3);
709 annotate_frame_args ();
710 out->text (" (");
711
712 if (args_type == CLI_PRESENCE)
713 {
714 if (args_iter != Py_None)
715 {
716 gdbpy_ref<> item (PyIter_Next (args_iter.get ()));
717
718 if (item != NULL)
719 out->text ("...");
720 else if (PyErr_Occurred ())
721 return EXT_LANG_BT_ERROR;
722 }
723 }
724 else if (args_iter != Py_None
725 && (enumerate_args (args_iter.get (), out, args_type, 0, frame)
726 == EXT_LANG_BT_ERROR))
727 return EXT_LANG_BT_ERROR;
728
729 out->text (")");
730
731 return EXT_LANG_BT_OK;
732 }
733
734 /* Print a single frame to the designated output stream, detecting
735 whether the output is MI or console, and formatting the output
736 according to the conventions of that protocol. FILTER is the
737 frame-filter associated with this frame. FLAGS is an integer
738 describing the various print options. The FLAGS variables is
739 described in "apply_frame_filter" function. ARGS_TYPE is an
740 enumerator describing the argument format. OUT is the output
741 stream to print, INDENT is the level of indention for this frame
742 (in the case of elided frames), and LEVELS_PRINTED is a hash-table
743 containing all the frames level that have already been printed.
744 If a frame level has been printed, do not print it again (in the
745 case of elided frames). Returns EXT_LANG_BT_ERROR on error, with any
746 GDB exceptions converted to a Python exception, or EXT_LANG_BT_OK
747 on success. It can also throw an exception RETURN_QUIT. */
748
749 static enum ext_lang_bt_status
750 py_print_frame (PyObject *filter, frame_filter_flags flags,
751 enum ext_lang_frame_args args_type,
752 struct ui_out *out, int indent, htab_t levels_printed)
753 {
754 int has_addr = 0;
755 CORE_ADDR address = 0;
756 struct gdbarch *gdbarch = NULL;
757 struct frame_info *frame = NULL;
758 struct value_print_options opts;
759
760 int print_level, print_frame_info, print_args, print_locals;
761 /* Note that the below default in non-mi mode is the same as the
762 default value for the backtrace command (see the call to print_frame_info
763 in backtrace_command_1).
764 Having the same default ensures that 'bt' and 'bt no-filters'
765 have the same behaviour when some filters exist but do not apply
766 to a frame. */
767 enum print_what print_what
768 = out->is_mi_like_p () ? LOC_AND_ADDRESS : LOCATION;
769 gdb::unique_xmalloc_ptr<char> function_to_free;
770
771 /* Extract print settings from FLAGS. */
772 print_level = (flags & PRINT_LEVEL) ? 1 : 0;
773 print_frame_info = (flags & PRINT_FRAME_INFO) ? 1 : 0;
774 print_args = (flags & PRINT_ARGS) ? 1 : 0;
775 print_locals = (flags & PRINT_LOCALS) ? 1 : 0;
776
777 get_user_print_options (&opts);
778 if (print_frame_info)
779 {
780 gdb::optional<enum print_what> user_frame_info_print_what;
781
782 get_user_print_what_frame_info (&user_frame_info_print_what);
783 if (!out->is_mi_like_p () && user_frame_info_print_what.has_value ())
784 {
785 /* Use the specific frame information desired by the user. */
786 print_what = *user_frame_info_print_what;
787 }
788 }
789
790 /* Get the underlying frame. This is needed to determine GDB
791 architecture, and also, in the cases of frame variables/arguments to
792 read them if they returned filter object requires us to do so. */
793 gdbpy_ref<> py_inf_frame (PyObject_CallMethod (filter, "inferior_frame",
794 NULL));
795 if (py_inf_frame == NULL)
796 return EXT_LANG_BT_ERROR;
797
798 frame = frame_object_to_frame_info (py_inf_frame.get ());
799 if (frame == NULL)
800 return EXT_LANG_BT_ERROR;
801
802 symtab_and_line sal = find_frame_sal (frame);
803
804 gdbarch = get_frame_arch (frame);
805
806 /* stack-list-variables. */
807 if (print_locals && print_args && ! print_frame_info)
808 {
809 if (py_mi_print_variables (filter, out, &opts,
810 args_type, frame) == EXT_LANG_BT_ERROR)
811 return EXT_LANG_BT_ERROR;
812 return EXT_LANG_BT_OK;
813 }
814
815 gdb::optional<ui_out_emit_tuple> tuple;
816
817 /* -stack-list-locals does not require a
818 wrapping frame attribute. */
819 if (print_frame_info || (print_args && ! print_locals))
820 tuple.emplace (out, "frame");
821
822 if (print_frame_info)
823 {
824 /* Elided frames are also printed with this function (recursively)
825 and are printed with indention. */
826 if (indent > 0)
827 out->spaces (indent * 4);
828
829 /* The address is required for frame annotations, and also for
830 address printing. */
831 if (PyObject_HasAttrString (filter, "address"))
832 {
833 gdbpy_ref<> paddr (PyObject_CallMethod (filter, "address", NULL));
834
835 if (paddr == NULL)
836 return EXT_LANG_BT_ERROR;
837
838 if (paddr != Py_None)
839 {
840 if (get_addr_from_python (paddr.get (), &address) < 0)
841 return EXT_LANG_BT_ERROR;
842
843 has_addr = 1;
844 }
845 }
846 }
847
848 /* For MI, each piece is controlled individually. */
849 bool location_print = (print_frame_info
850 && !out->is_mi_like_p ()
851 && (print_what == LOCATION
852 || print_what == SRC_AND_LOC
853 || print_what == LOC_AND_ADDRESS
854 || print_what == SHORT_LOCATION));
855
856 /* Print frame level. MI does not require the level if
857 locals/variables only are being printed. */
858 if (print_level
859 && (location_print
860 || (out->is_mi_like_p () && (print_frame_info || print_args))))
861 {
862 struct frame_info **slot;
863 int level;
864
865 slot = (struct frame_info **) htab_find_slot (levels_printed,
866 frame, INSERT);
867
868 level = frame_relative_level (frame);
869
870 /* Check if this frame has already been printed (there are cases
871 where elided synthetic dummy-frames have to 'borrow' the frame
872 architecture from the eliding frame. If that is the case, do
873 not print 'level', but print spaces. */
874 if (*slot == frame)
875 out->field_skip ("level");
876 else
877 {
878 *slot = frame;
879 annotate_frame_begin (print_level ? level : 0,
880 gdbarch, address);
881 out->text ("#");
882 out->field_fmt_signed (2, ui_left, "level", level);
883 }
884 }
885
886 if (location_print || (out->is_mi_like_p () && print_frame_info))
887 {
888 /* Print address to the address field. If an address is not provided,
889 print nothing. */
890 if (opts.addressprint && has_addr)
891 {
892 if (!sal.symtab
893 || frame_show_address (frame, sal)
894 || print_what == LOC_AND_ADDRESS)
895 {
896 annotate_frame_address ();
897 out->field_core_addr ("addr", gdbarch, address);
898 if (get_frame_pc_masked (frame))
899 out->field_string ("pac", " [PAC]");
900 annotate_frame_address_end ();
901 out->text (" in ");
902 }
903 }
904
905 /* Print frame function name. */
906 if (PyObject_HasAttrString (filter, "function"))
907 {
908 gdbpy_ref<> py_func (PyObject_CallMethod (filter, "function", NULL));
909 const char *function = NULL;
910
911 if (py_func == NULL)
912 return EXT_LANG_BT_ERROR;
913
914 if (gdbpy_is_string (py_func.get ()))
915 {
916 function_to_free = python_string_to_host_string (py_func.get ());
917
918 if (function_to_free == NULL)
919 return EXT_LANG_BT_ERROR;
920
921 function = function_to_free.get ();
922 }
923 else if (PyLong_Check (py_func.get ())
924 #if PY_MAJOR_VERSION == 2
925 || PyInt_Check (py_func.get ())
926 #endif
927 )
928 {
929 CORE_ADDR addr;
930 struct bound_minimal_symbol msymbol;
931
932 if (get_addr_from_python (py_func.get (), &addr) < 0)
933 return EXT_LANG_BT_ERROR;
934
935 msymbol = lookup_minimal_symbol_by_pc (addr);
936 if (msymbol.minsym != NULL)
937 function = msymbol.minsym->print_name ();
938 }
939 else if (py_func != Py_None)
940 {
941 PyErr_SetString (PyExc_RuntimeError,
942 _("FrameDecorator.function: expecting a " \
943 "String, integer or None."));
944 return EXT_LANG_BT_ERROR;
945 }
946
947 annotate_frame_function_name ();
948 if (function == NULL)
949 out->field_skip ("func");
950 else
951 out->field_string ("func", function, function_name_style.style ());
952 }
953 }
954
955
956 /* Frame arguments. Check the result, and error if something went
957 wrong. */
958 if (print_args && (location_print || out->is_mi_like_p ()))
959 {
960 if (py_print_args (filter, out, args_type, frame) == EXT_LANG_BT_ERROR)
961 return EXT_LANG_BT_ERROR;
962 }
963
964 /* File name/source/line number information. */
965 bool print_location_source
966 = ((location_print && print_what != SHORT_LOCATION)
967 || (out->is_mi_like_p () && print_frame_info));
968 if (print_location_source)
969 {
970 annotate_frame_source_begin ();
971
972 if (PyObject_HasAttrString (filter, "filename"))
973 {
974 gdbpy_ref<> py_fn (PyObject_CallMethod (filter, "filename", NULL));
975
976 if (py_fn == NULL)
977 return EXT_LANG_BT_ERROR;
978
979 if (py_fn != Py_None)
980 {
981 gdb::unique_xmalloc_ptr<char>
982 filename (python_string_to_host_string (py_fn.get ()));
983
984 if (filename == NULL)
985 return EXT_LANG_BT_ERROR;
986
987 out->wrap_hint (3);
988 out->text (" at ");
989 annotate_frame_source_file ();
990 out->field_string ("file", filename.get (),
991 file_name_style.style ());
992 annotate_frame_source_file_end ();
993 }
994 }
995
996 if (PyObject_HasAttrString (filter, "line"))
997 {
998 gdbpy_ref<> py_line (PyObject_CallMethod (filter, "line", NULL));
999 int line;
1000
1001 if (py_line == NULL)
1002 return EXT_LANG_BT_ERROR;
1003
1004 if (py_line != Py_None)
1005 {
1006 line = PyLong_AsLong (py_line.get ());
1007 if (PyErr_Occurred ())
1008 return EXT_LANG_BT_ERROR;
1009
1010 out->text (":");
1011 annotate_frame_source_line ();
1012 out->field_signed ("line", line);
1013 }
1014 }
1015 if (out->is_mi_like_p ())
1016 out->field_string ("arch",
1017 (gdbarch_bfd_arch_info (gdbarch))->printable_name);
1018 }
1019
1020 bool source_print
1021 = (! out->is_mi_like_p ()
1022 && (print_what == SRC_LINE || print_what == SRC_AND_LOC));
1023 if (source_print)
1024 {
1025 if (print_location_source)
1026 out->text ("\n"); /* Newline after the location source. */
1027 print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
1028 }
1029
1030 /* For MI we need to deal with the "children" list population of
1031 elided frames, so if MI output detected do not send newline. */
1032 if (! out->is_mi_like_p ())
1033 {
1034 annotate_frame_end ();
1035 /* print_source_lines has already printed a newline. */
1036 if (!source_print)
1037 out->text ("\n");
1038 }
1039
1040 if (print_locals)
1041 {
1042 if (py_print_locals (filter, out, args_type, indent,
1043 frame) == EXT_LANG_BT_ERROR)
1044 return EXT_LANG_BT_ERROR;
1045 }
1046
1047 if ((flags & PRINT_HIDE) == 0)
1048 {
1049 /* Finally recursively print elided frames, if any. */
1050 gdbpy_ref<> elided (get_py_iter_from_func (filter, "elided"));
1051 if (elided == NULL)
1052 return EXT_LANG_BT_ERROR;
1053
1054 if (elided != Py_None)
1055 {
1056 PyObject *item;
1057
1058 ui_out_emit_list inner_list_emiter (out, "children");
1059
1060 indent++;
1061
1062 while ((item = PyIter_Next (elided.get ())))
1063 {
1064 gdbpy_ref<> item_ref (item);
1065
1066 enum ext_lang_bt_status success
1067 = py_print_frame (item, flags, args_type, out, indent,
1068 levels_printed);
1069
1070 if (success == EXT_LANG_BT_ERROR)
1071 return EXT_LANG_BT_ERROR;
1072 }
1073 if (item == NULL && PyErr_Occurred ())
1074 return EXT_LANG_BT_ERROR;
1075 }
1076 }
1077
1078 return EXT_LANG_BT_OK;
1079 }
1080
1081 /* Helper function to initiate frame filter invocation at starting
1082 frame FRAME. */
1083
1084 static PyObject *
1085 bootstrap_python_frame_filters (struct frame_info *frame,
1086 int frame_low, int frame_high)
1087 {
1088 gdbpy_ref<> frame_obj (frame_info_to_frame_object (frame));
1089 if (frame_obj == NULL)
1090 return NULL;
1091
1092 gdbpy_ref<> module (PyImport_ImportModule ("gdb.frames"));
1093 if (module == NULL)
1094 return NULL;
1095
1096 gdbpy_ref<> sort_func (PyObject_GetAttrString (module.get (),
1097 "execute_frame_filters"));
1098 if (sort_func == NULL)
1099 return NULL;
1100
1101 gdbpy_ref<> py_frame_low = gdb_py_object_from_longest (frame_low);
1102 if (py_frame_low == NULL)
1103 return NULL;
1104
1105 gdbpy_ref<> py_frame_high = gdb_py_object_from_longest (frame_high);
1106 if (py_frame_high == NULL)
1107 return NULL;
1108
1109 gdbpy_ref<> iterable (PyObject_CallFunctionObjArgs (sort_func.get (),
1110 frame_obj.get (),
1111 py_frame_low.get (),
1112 py_frame_high.get (),
1113 NULL));
1114 if (iterable == NULL)
1115 return NULL;
1116
1117 if (iterable != Py_None)
1118 return PyObject_GetIter (iterable.get ());
1119 else
1120 return iterable.release ();
1121 }
1122
1123 /* This is the only publicly exported function in this file. FRAME
1124 is the source frame to start frame-filter invocation. FLAGS is an
1125 integer holding the flags for printing. The following elements of
1126 the FRAME_FILTER_FLAGS enum denotes the make-up of FLAGS:
1127 PRINT_LEVEL is a flag indicating whether to print the frame's
1128 relative level in the output. PRINT_FRAME_INFO is a flag that
1129 indicates whether this function should print the frame
1130 information, PRINT_ARGS is a flag that indicates whether to print
1131 frame arguments, and PRINT_LOCALS, likewise, with frame local
1132 variables. ARGS_TYPE is an enumerator describing the argument
1133 format, OUT is the output stream to print. FRAME_LOW is the
1134 beginning of the slice of frames to print, and FRAME_HIGH is the
1135 upper limit of the frames to count. Returns EXT_LANG_BT_ERROR on error,
1136 or EXT_LANG_BT_OK on success. */
1137
1138 enum ext_lang_bt_status
1139 gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
1140 struct frame_info *frame, frame_filter_flags flags,
1141 enum ext_lang_frame_args args_type,
1142 struct ui_out *out, int frame_low, int frame_high)
1143 {
1144 struct gdbarch *gdbarch = NULL;
1145 enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
1146
1147 if (!gdb_python_initialized)
1148 return EXT_LANG_BT_NO_FILTERS;
1149
1150 try
1151 {
1152 gdbarch = get_frame_arch (frame);
1153 }
1154 catch (const gdb_exception_error &except)
1155 {
1156 /* Let gdb try to print the stack trace. */
1157 return EXT_LANG_BT_NO_FILTERS;
1158 }
1159
1160 gdbpy_enter enter_py (gdbarch);
1161
1162 /* When we're limiting the number of frames, be careful to request
1163 one extra frame, so that we can print a message if there are more
1164 frames. */
1165 int frame_countdown = -1;
1166 if ((flags & PRINT_MORE_FRAMES) != 0 && frame_low >= 0 && frame_high >= 0)
1167 {
1168 ++frame_high;
1169 /* This has an extra +1 because it is checked before a frame is
1170 printed. */
1171 frame_countdown = frame_high - frame_low + 1;
1172 }
1173
1174 gdbpy_ref<> iterable (bootstrap_python_frame_filters (frame, frame_low,
1175 frame_high));
1176
1177 if (iterable == NULL)
1178 {
1179 /* Normally if there is an error GDB prints the exception,
1180 abandons the backtrace and exits. The user can then call "bt
1181 no-filters", and get a default backtrace (it would be
1182 confusing to automatically start a standard backtrace halfway
1183 through a Python filtered backtrace). However in the case
1184 where GDB cannot initialize the frame filters (most likely
1185 due to incorrect auto-load paths), GDB has printed nothing.
1186 In this case it is OK to print the default backtrace after
1187 printing the error message. GDB returns EXT_LANG_BT_NO_FILTERS
1188 here to signify there are no filters after printing the
1189 initialization error. This return code will trigger a
1190 default backtrace. */
1191
1192 gdbpy_print_stack_or_quit ();
1193 return EXT_LANG_BT_NO_FILTERS;
1194 }
1195
1196 /* If iterable is None, then there are no frame filters registered.
1197 If this is the case, defer to default GDB printing routines in MI
1198 and CLI. */
1199 if (iterable == Py_None)
1200 return EXT_LANG_BT_NO_FILTERS;
1201
1202 htab_up levels_printed (htab_create (20,
1203 htab_hash_pointer,
1204 htab_eq_pointer,
1205 NULL));
1206
1207 while (true)
1208 {
1209 gdbpy_ref<> item (PyIter_Next (iterable.get ()));
1210
1211 if (item == NULL)
1212 {
1213 if (PyErr_Occurred ())
1214 {
1215 gdbpy_print_stack_or_quit ();
1216 return EXT_LANG_BT_ERROR;
1217 }
1218 break;
1219 }
1220
1221 if (frame_countdown != -1)
1222 {
1223 gdb_assert ((flags & PRINT_MORE_FRAMES) != 0);
1224 --frame_countdown;
1225 if (frame_countdown == 0)
1226 {
1227 /* We've printed all the frames we were asked to
1228 print, but more frames existed. */
1229 printf_filtered (_("(More stack frames follow...)\n"));
1230 break;
1231 }
1232 }
1233
1234 try
1235 {
1236 success = py_print_frame (item.get (), flags, args_type, out, 0,
1237 levels_printed.get ());
1238 }
1239 catch (const gdb_exception_error &except)
1240 {
1241 gdbpy_convert_exception (except);
1242 success = EXT_LANG_BT_ERROR;
1243 }
1244
1245 /* Do not exit on error printing a single frame. Print the
1246 error and continue with other frames. */
1247 if (success == EXT_LANG_BT_ERROR)
1248 gdbpy_print_stack_or_quit ();
1249 }
1250
1251 return success;
1252 }