record-btrace: make ranges include begin and end

The "record function-call-history" and "record instruction-history" commands
accept a range "begin, end".  End is not included in both cases.  Include it.

2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>

	* record-btrace.c (record_btrace_insn_history_range): Include
	end.
	(record_btrace_insn_history_from): Adjust range.
	(record_btrace_call_history_range): Include
	end.
	(record_btrace_call_history_from): Adjust range.
	* NEWS: Announce changes.

testsuite/
	* gdb.btrace/function_call_history.exp: Update tests.
	* gdb.btrace/instruction_history.exp: Update tests.

doc/
	* gdb.texinfo (Process Record and Replay): Update documentation.
This commit is contained in:
Markus Metzger 2013-04-17 09:39:43 +02:00
parent 8710b7097e
commit 0688d04e19
9 changed files with 62 additions and 20 deletions

View File

@ -1,3 +1,13 @@
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* record-btrace.c (record_btrace_insn_history_range): Include
end.
(record_btrace_insn_history_from): Adjust range.
(record_btrace_call_history_range): Include
end.
(record_btrace_call_history_from): Adjust range.
* NEWS: Announce changes.
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* record.h (enum record_print_flag)

View File

@ -15,6 +15,9 @@
Both ranges are now printed as '<from>, <to>' to allow copy&paste to the
"record instruction-history" and "list" commands.
* The ranges given as arguments to the 'record function-call-history' and
'record instruction-history' commands are now inclusive.
*** Changes in GDB 7.7
* Improved support for process record-replay and reverse debugging on

View File

@ -1,3 +1,7 @@
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* gdb.texinfo (Process Record and Replay): Update documentation.
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* gdb.texinfo (Process Record and Replay): Document new /c

View File

@ -6465,7 +6465,7 @@ Disassembles ten more instructions before the last disassembly.
@item record instruction-history @var{begin} @var{end}
Disassembles instructions beginning with instruction number
@var{begin} until instruction number @var{end}. The instruction
number @var{end} is not included.
number @var{end} is included.
@end table
This command may not be available for all recording methods.
@ -6536,8 +6536,7 @@ Prints ten more functions before the last ten-line print.
@item record function-call-history @var{begin} @var{end}
Prints functions beginning with function number @var{begin} until
function number @var{end}. The function number @var{end} is not
included.
function number @var{end}. The function number @var{end} is included.
@end table
This command may not be available for all recording methods.

View File

@ -367,7 +367,7 @@ record_btrace_insn_history_range (ULONGEST from, ULONGEST to, int flags)
if (low != from || high != to)
error (_("Bad range."));
if (high <= low)
if (high < low)
error (_("Bad range."));
btinfo = require_btrace ();
@ -376,10 +376,17 @@ record_btrace_insn_history_range (ULONGEST from, ULONGEST to, int flags)
if (found == 0)
error (_("Range out of bounds."));
/* Silently truncate the range, if necessary. */
found = btrace_find_insn_by_number (&end, btinfo, high);
if (found == 0)
btrace_insn_end (&end, btinfo);
{
/* Silently truncate the range. */
btrace_insn_end (&end, btinfo);
}
else
{
/* We want both begin and end to be inclusive. */
btrace_insn_next (&end, 1);
}
btrace_insn_history (uiout, &begin, &end, flags);
btrace_set_insn_history (btinfo, &begin, &end);
@ -395,6 +402,8 @@ record_btrace_insn_history_from (ULONGEST from, int size, int flags)
ULONGEST begin, end, context;
context = abs (size);
if (context == 0)
error (_("Bad record instruction-history-size."));
if (size < 0)
{
@ -403,12 +412,12 @@ record_btrace_insn_history_from (ULONGEST from, int size, int flags)
if (from < context)
begin = 0;
else
begin = from - context;
begin = from - context + 1;
}
else
{
begin = from;
end = from + context;
end = from + context - 1;
/* Check for wrap-around. */
if (end < begin)
@ -618,7 +627,7 @@ record_btrace_call_history_range (ULONGEST from, ULONGEST to, int flags)
if (low != from || high != to)
error (_("Bad range."));
if (high <= low)
if (high < low)
error (_("Bad range."));
btinfo = require_btrace ();
@ -627,10 +636,17 @@ record_btrace_call_history_range (ULONGEST from, ULONGEST to, int flags)
if (found == 0)
error (_("Range out of bounds."));
/* Silently truncate the range, if necessary. */
found = btrace_find_call_by_number (&end, btinfo, high);
if (found == 0)
btrace_call_end (&end, btinfo);
{
/* Silently truncate the range. */
btrace_call_end (&end, btinfo);
}
else
{
/* We want both begin and end to be inclusive. */
btrace_call_next (&end, 1);
}
btrace_call_history (uiout, btinfo, &begin, &end, flags);
btrace_set_call_history (btinfo, &begin, &end);
@ -646,6 +662,8 @@ record_btrace_call_history_from (ULONGEST from, int size, int flags)
ULONGEST begin, end, context;
context = abs (size);
if (context == 0)
error (_("Bad record function-call-history-size."));
if (size < 0)
{
@ -654,12 +672,12 @@ record_btrace_call_history_from (ULONGEST from, int size, int flags)
if (from < context)
begin = 0;
else
begin = from - context;
begin = from - context + 1;
}
else
{
begin = from;
end = from + context;
end = from + context - 1;
/* Check for wrap-around. */
if (end < begin)

View File

@ -878,7 +878,7 @@ struct target_ops
void (*to_insn_history_from) (ULONGEST from, int size, int flags);
/* Disassemble a section of the recorded execution trace from instruction
BEGIN (inclusive) to instruction END (exclusive). */
BEGIN (inclusive) to instruction END (inclusive). */
void (*to_insn_history_range) (ULONGEST begin, ULONGEST end, int flags);
/* Print a function trace of the recorded execution trace.
@ -893,7 +893,7 @@ struct target_ops
void (*to_call_history_from) (ULONGEST begin, int size, int flags);
/* Print a function trace of an execution trace section from function BEGIN
(inclusive) to function END (exclusive). */
(inclusive) to function END (inclusive). */
void (*to_call_history_range) (ULONGEST begin, ULONGEST end, int flags);
/* Nonzero if TARGET_OBJECT_LIBRARIES_SVR4 may be read with a

View File

@ -1,3 +1,8 @@
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* gdb.btrace/function_call_history.exp: Update tests.
* gdb.btrace/instruction_history.exp: Update tests.
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* gdb.btrace/function_call_history.exp: Fix expected field

View File

@ -183,9 +183,10 @@ set expected_range [join [list \
"10\tinc"] "\r\n"]
# show functions in instruction range
gdb_test "record function-call-history 4,11" $expected_range
gdb_test "record function-call-history 4,10" $expected_range
gdb_test "record function-call-history 4,+7" $expected_range
gdb_test "record function-call-history 11,-7" $expected_range
gdb_test "record function-call-history 10,-7" $expected_range
gdb_test "record function-call-history 4,4" "4\tinc\r"
# set bp after fib recursion and continue
set bp_location [gdb_get_line_number "bp.2" $testfile.c]

View File

@ -65,7 +65,7 @@ if { $traced != 6 } {
}
# test that we see the expected instructions
gdb_test "record instruction-history 2,7" [join [list \
gdb_test "record instruction-history 2,6" [join [list \
"2\t 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
"3\t 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tdec %eax" \
"4\t 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tjmp 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
@ -81,7 +81,7 @@ gdb_test "record instruction-history /f 2,+5" [join [list \
"6\t 0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
] "\r\n"]
gdb_test "record instruction-history /p 7,-5" [join [list \
gdb_test "record instruction-history /p 6,-5" [join [list \
"2\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
"3\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tdec %eax" \
"4\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tjmp 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
@ -89,7 +89,7 @@ gdb_test "record instruction-history /p 7,-5" [join [list \
"6\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
] "\r\n"]
gdb_test "record instruction-history /pf 2,7" [join [list \
gdb_test "record instruction-history /pf 2,6" [join [list \
"2\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
"3\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tdec %eax" \
"4\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tjmp 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
@ -97,6 +97,8 @@ gdb_test "record instruction-history /pf 2,7" [join [list \
"6\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
] "\r\n"]
gdb_test "record instruction-history 2,2" "2\t 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje 0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r"
# the following tests are checking the iterators
# to avoid lots of regexps, we just check the number of lines that
# were printed during command execution.