X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fstack.c;h=265e764dc242dca48dda56da9ef5ea69fbf11d79;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=af30405f29ef0be6040f98ff3dc70a9cbf9186c4;hpb=6c2659886f7018fcca26ee0fc813bc9748fb8513;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/stack.c b/gdb/stack.c index af30405f29..265e764dc2 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -330,7 +330,7 @@ frame_show_address (struct frame_info *frame, return false; } - return get_frame_pc (frame) != sal.pc; + return get_frame_pc (frame) != sal.pc || !sal.is_stmt; } /* See frame.h. */ @@ -486,7 +486,7 @@ print_frame_arg (const frame_print_options &fp_opts, vp_opts.summary = fp_opts.print_frame_arguments == print_frame_arguments_scalars; - common_val_print (arg->val, &stb, 2, &vp_opts, language); + common_val_print_checked (arg->val, &stb, 2, &vp_opts, language); } catch (const gdb_exception_error &except) { @@ -1126,10 +1126,25 @@ print_frame_info (const frame_print_options &fp_opts, { int mid_statement = ((print_what == SRC_LINE) && frame_show_address (frame, sal)); - annotate_source_line (sal.symtab, sal.line, mid_statement, - get_frame_pc (frame)); - - if (deprecated_print_frame_info_listing_hook) + if (annotation_level > 0 + && annotate_source_line (sal.symtab, sal.line, mid_statement, + get_frame_pc (frame))) + { + /* The call to ANNOTATE_SOURCE_LINE already printed the + annotation for this source line, so we avoid the two cases + below and do not print the actual source line. The + documentation for annotations makes it clear that the source + line annotation is printed __instead__ of printing the source + line, not as well as. + + However, if we fail to print the source line, which usually + means either the source file is missing, or the requested + line is out of range of the file, then we don't print the + source annotation, and will pass through the "normal" print + source line code below, the expectation is that this code + will print an appropriate error. */ + } + else if (deprecated_print_frame_info_listing_hook) deprecated_print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0); else @@ -2237,6 +2252,7 @@ iterate_over_block_locals (const struct block *b, { switch (SYMBOL_CLASS (sym)) { + case LOC_CONST: case LOC_LOCAL: case LOC_REGISTER: case LOC_STATIC: @@ -2256,56 +2272,6 @@ iterate_over_block_locals (const struct block *b, } } - -/* Same, but print labels. */ - -#if 0 -/* Commented out, as the code using this function has also been - commented out. FIXME:brobecker/2009-01-13: Find out why the code - was commented out in the first place. The discussion introducing - this change (2007-12-04: Support lexical blocks and function bodies - that occupy non-contiguous address ranges) did not explain why - this change was made. */ -static int -print_block_frame_labels (struct gdbarch *gdbarch, struct block *b, - int *have_default, struct ui_file *stream) -{ - struct block_iterator iter; - struct symbol *sym; - int values_printed = 0; - - ALL_BLOCK_SYMBOLS (b, iter, sym) - { - if (strcmp (sym->linkage_name (), "default") == 0) - { - if (*have_default) - continue; - *have_default = 1; - } - if (SYMBOL_CLASS (sym) == LOC_LABEL) - { - struct symtab_and_line sal; - struct value_print_options opts; - - sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0); - values_printed = 1; - fputs_filtered (sym->print_name (), stream); - get_user_print_options (&opts); - if (opts.addressprint) - { - fprintf_filtered (stream, " "); - fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (sym)), - stream); - } - fprintf_filtered (stream, " in file %s, line %d\n", - sal.symtab->filename, sal.line); - } - } - - return values_printed; -} -#endif - /* Iterate over all the local variables in block B, including all its superblocks, stopping when the top-level block is reached. */ @@ -2818,7 +2784,7 @@ return_command (const char *retval_exp, int from_tty) function = read_var_value (thisfun, NULL, thisframe); rv_conv = RETURN_VALUE_REGISTER_CONVENTION; - if (TYPE_CODE (return_type) == TYPE_CODE_VOID) + if (return_type->code () == TYPE_CODE_VOID) /* If the return-type is "void", don't try to find the return-value's location. However, do still evaluate the return expression so that, even when the expression result @@ -3373,7 +3339,6 @@ Select and print a stack frame.\n\ With no argument, print the selected stack frame. (See also \"info frame\").\n\ A single numerical argument specifies the frame to select."), &frame_cmd_list, "frame ", 1, &cmdlist); - add_com_alias ("f", "frame", class_stack, 1); #define FRAME_APPLY_OPTION_HELP "\ @@ -3433,14 +3398,6 @@ shortcut for 'frame apply all -s [OPTION]... COMMAND'\n\ See \"help frame apply all\" for available options.")); set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer); - add_prefix_cmd ("frame", class_stack, - &frame_cmd.base_command, _("\ -Select and print a stack frame.\n\ -With no argument, print the selected stack frame. (See also \"info frame\").\n\ -A single numerical argument specifies the frame to select."), - &frame_cmd_list, "frame ", 1, &cmdlist); - add_com_alias ("f", "frame", class_stack, 1); - add_cmd ("address", class_stack, &frame_cmd.address, _("\ Select and print a stack frame by stack address.\n\ @@ -3543,7 +3500,7 @@ With a negative COUNT, print outermost -COUNT frames."), add_com_alias ("bt", "backtrace", class_stack, 0); - add_com_alias ("where", "backtrace", class_alias, 0); + add_com_alias ("where", "backtrace", class_stack, 0); add_info ("stack", backtrace_command, _("Backtrace of the stack, or innermost COUNT frames.")); add_info_alias ("s", "stack", 1);