mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
record-btrace: optionally indent function call history
Add a new modifier /c to the "record function-call-history" command to indent the function name based on its depth in the call stack. Also reorder the optional fields to have the indentation at the very beginning. Prefix the insn range (/i modifier) with "inst ". Prefix the source line (/l modifier) with "at ". Change the range syntax from "begin-end" to "begin,end" to allow copy&paste to the "record instruction-history" and "list" commands. Adjust the respective tests and add new tests for the /c modifier. 2014-01-16 Markus Metzger <markus.t.metzger@intel.com> * record.h (enum record_print_flag) <record_print_indent_calls>: New. * record.c (get_call_history_modifiers): Recognize /c modifier. (_initialize_record): Document /c modifier. * record-btrace.c (btrace_call_history): Add btinfo parameter. Reorder fields. Optionally indent the function name. Update all users. * NEWS: Announce changes. testsuite/ * gdb.btrace/function_call_history.exp: Fix expected field order for "record function-call-history". Add new tests for "record function-call-history /c". * gdb.btrace/exception.cc: New. * gdb.btrace/exception.exp: New. * gdb.btrace/tailcall.exp: New. * gdb.btrace/x86-tailcall.S: New. * gdb.btrace/x86-tailcall.c: New. * gdb.btrace/unknown_functions.c: New. * gdb.btrace/unknown_functions.exp: New. * gdb.btrace/Makefile.in (EXECUTABLES): Add new. doc/ * gdb.texinfo (Process Record and Replay): Document new /c modifier accepted by "record function-call-history". Add /i modifier to "record function-call-history" example.
This commit is contained in:
15
gdb/btrace.c
15
gdb/btrace.c
@ -630,8 +630,10 @@ btrace_compute_ftrace (struct btrace_thread_info *btinfo,
|
||||
if (begin == NULL)
|
||||
begin = end;
|
||||
|
||||
/* Maintain the function level offset. */
|
||||
level = min (level, end->level);
|
||||
/* Maintain the function level offset.
|
||||
For all but the last block, we do it here. */
|
||||
if (blk != 0)
|
||||
level = min (level, end->level);
|
||||
|
||||
ftrace_update_insns (end, pc);
|
||||
ftrace_update_lines (end, pc);
|
||||
@ -651,6 +653,15 @@ btrace_compute_ftrace (struct btrace_thread_info *btinfo,
|
||||
}
|
||||
|
||||
pc += size;
|
||||
|
||||
/* Maintain the function level offset.
|
||||
For the last block, we do it here to not consider the last
|
||||
instruction.
|
||||
Since the last instruction corresponds to the current instruction
|
||||
and is not really part of the execution history, it shouldn't
|
||||
affect the level. */
|
||||
if (blk == 0)
|
||||
level = min (level, end->level);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user