X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fframe.h;h=b73e5b3eee49310e8975c0b31b669012c3e3c766;hb=95655446a6f136b654fa5fe1ff6fa2b7466a3545;hp=a79eeeeab166f3d76f6cba0f0d0ff26d9b3cce2c;hpb=d4c16835cad70bd8c04ff30d5d6f40ac65e7f7e1;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/frame.h b/gdb/frame.h index a79eeeeab1..b73e5b3eee 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -1,6 +1,7 @@ /* Definitions for dealing with stack frames, for GDB, the GNU debugger. Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 2019 Advanced Micro Devices, Inc. All rights reserved. This file is part of GDB. @@ -21,7 +22,7 @@ #define FRAME_H 1 /* The following is the intended naming schema for frame functions. - It isn't 100% consistent, but it is aproaching that. Frame naming + It isn't 100% consistent, but it is approaching that. Frame naming schema: Prefixes: @@ -195,7 +196,8 @@ extern const struct frame_id sentinel_frame_id; /* This means "there is no frame ID, but there is a frame". It should be replaced by best-effort frame IDs for the outermost frame, somehow. - The implementation is only special_addr_p set. */ + The implementation is only special_addr_p, and possibly + artificial_depth, set. */ extern const struct frame_id outer_frame_id; /* Flag to control debugging. */ @@ -237,8 +239,8 @@ extern struct frame_id extern struct frame_id frame_id_build_wild (CORE_ADDR stack_addr); /* Returns non-zero when L is a valid frame (a valid frame has a - non-zero .base). The outermost frame is valid even without an - ID. */ + non-zero .base). The outermost frame and any frames inlined into it + are valid even without an ID. */ extern int frame_id_p (struct frame_id l); /* Returns non-zero when L is a valid frame representing a frame made up by GDB @@ -677,18 +679,28 @@ extern struct gdbarch *frame_unwind_arch (frame_info *next_frame); extern struct gdbarch *frame_unwind_caller_arch (struct frame_info *frame); -/* Values for the source flag to be used in print_frame_info_base(). */ +/* Values for the source flag to be used in print_frame_info (). + For all the cases below, the address is never printed if + 'set print address' is off. When 'set print address' is on, + the address is printed if the program counter is not at the + beginning of the source line of the frame + and PRINT_WHAT is != LOC_AND_ADDRESS. */ enum print_what - { - /* Print only the source line, like in stepi. */ - SRC_LINE = -1, - /* Print only the location, i.e. level, address (sometimes) - function, args, file, line, line num. */ + { + /* Print only the address, source line, like in stepi. */ + SRC_LINE = -1, + /* Print only the location, i.e. level, address, + function, args (as controlled by 'set print frame-arguments'), + file, line, line num. */ LOCATION, /* Print both of the above. */ - SRC_AND_LOC, - /* Print location only, but always include the address. */ - LOC_AND_ADDRESS + SRC_AND_LOC, + /* Print location only, print the address even if the program counter + is at the beginning of the source line. */ + LOC_AND_ADDRESS, + /* Print only level and function, + i.e. location only, without address, file, line, line num. */ + SHORT_LOCATION }; /* Allocate zero initialized memory from the frame cache obstack. @@ -772,6 +784,14 @@ extern const char print_frame_arguments_all[]; extern const char print_frame_arguments_scalars[]; extern const char print_frame_arguments_none[]; +/* The possible choices of "set print frame-info". */ +extern const char print_frame_info_auto[]; +extern const char print_frame_info_source_line[]; +extern const char print_frame_info_location[]; +extern const char print_frame_info_source_and_location[]; +extern const char print_frame_info_location_and_address[]; +extern const char print_frame_info_short_location[]; + /* The possible choices of "set print entry-values". */ extern const char print_entry_values_no[]; extern const char print_entry_values_only[]; @@ -787,11 +807,12 @@ extern const char print_entry_values_default[]; struct frame_print_options { const char *print_frame_arguments = print_frame_arguments_scalars; + const char *print_frame_info = print_frame_info_auto; const char *print_entry_values = print_entry_values_default; - /* If non-zero, don't invoke pretty-printers for frame + /* If true, don't invoke pretty-printers for frame arguments. */ - int print_raw_frame_arguments; + bool print_raw_frame_arguments; }; /* The values behind the global "set print ..." settings. */ @@ -802,15 +823,15 @@ extern frame_print_options user_frame_print_options; struct frame_arg { /* Symbol for this parameter used for example for its name. */ - struct symbol *sym; + struct symbol *sym = nullptr; /* Value of the parameter. It is NULL if ERROR is not NULL; if both VAL and ERROR are NULL this parameter's value should not be printed. */ - struct value *val; + struct value *val = nullptr; /* String containing the error message, it is more usually NULL indicating no error occured reading this parameter. */ - char *error; + gdb::unique_xmalloc_ptr error; /* One of the print_entry_values_* entries as appropriate specifically for this frame_arg. It will be different from print_entry_values. With @@ -821,7 +842,7 @@ struct frame_arg value - print_entry_values_compact is not permitted fi ui_out_is_mi_like_p (in such case print_entry_values_no and print_entry_values_only is used for each parameter kind specifically. */ - const char *entry_kind; + const char *entry_kind = nullptr; }; extern void read_frame_arg (const frame_print_options &fp_opts, @@ -912,11 +933,11 @@ struct set_backtrace_options { /* Flag to indicate whether backtraces should continue past main. */ - int backtrace_past_main = 0; + bool backtrace_past_main = false; /* Flag to indicate whether backtraces should continue past entry. */ - int backtrace_past_entry = 0; + bool backtrace_past_entry = false; /* Upper bound on the number of backtrace levels. Note this is not exposed as a command option, because "backtrace" and "frame @@ -930,4 +951,13 @@ extern const gdb::option::option_def set_backtrace_option_defs[2]; /* The values behind the global "set backtrace ..." settings. */ extern set_backtrace_options user_set_backtrace_options; +/* Mark that the PC value is masked for the previous frame. */ + +extern void set_frame_previous_pc_masked (struct frame_info *frame); + +/* Get whether the PC value is masked for the given frame. */ + +extern bool get_frame_pc_masked (const struct frame_info *frame); + + #endif /* !defined (FRAME_H) */