record-btrace: start counting at one
authorMarkus Metzger <markus.t.metzger@intel.com>
Mon, 13 May 2013 12:57:42 +0000 (14:57 +0200)
committerMarkus Metzger <markus.t.metzger@intel.com>
Thu, 16 Jan 2014 11:58:25 +0000 (12:58 +0100)
The record instruction-history and record-function-call-history commands start
counting instructions at zero.  This is somewhat unintuitive when we start
navigating in the recorded instruction history.  Start at one, instead.

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

* btrace.c (ftrace_new_function): Start counting at one.
* record-btrace.c (record_btrace_info): Adjust number of calls
and insns.
* NEWS: Announce it.

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

gdb/ChangeLog
gdb/NEWS
gdb/btrace.c
gdb/record-btrace.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.btrace/function_call_history.exp
gdb/testsuite/gdb.btrace/instruction_history.exp

index 421c62a833b6f1e07bbda72400bc2ee39122a7ec..acd6b02d9f6c4343689537898ced1d75cae9b6f2 100644 (file)
@@ -1,3 +1,10 @@
+2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
+
+       * btrace.c (ftrace_new_function): Start counting at one.
+       * record-btrace.c (record_btrace_info): Adjust number of calls
+       and insns.
+       * NEWS: Announce it.
+
 2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
 
        * record-btrace.c (btrace_call_history_insn_range): Print
index cb2c5358435535bb24788cf3d726601d88e3b6e9..9b3ae6f7c2d7d4ba083baabf7b01721ea153568a 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -3,6 +3,10 @@
 
 *** Changes since GDB 7.7
 
+* The 'record instruction-history' command now starts counting instructions
+  at one.  This also affects the instruction ranges reported by the
+  'record function-call-history' command when given the /i modifier.
+
 *** Changes in GDB 7.7
 
 * Improved support for process record-replay and reverse debugging on
index 5bda1276a5ef0488123b7c3c37d0e052e0a559a9..2e9e0080ef8afbddc0961abdd294535472276fff 100644 (file)
@@ -208,7 +208,13 @@ ftrace_new_function (struct btrace_function *prev,
   bfun->lbegin = INT_MAX;
   bfun->lend = INT_MIN;
 
-  if (prev != NULL)
+  if (prev == NULL)
+    {
+      /* Start counting at one.  */
+      bfun->number = 1;
+      bfun->insn_offset = 1;
+    }
+  else
     {
       gdb_assert (prev->flow.next == NULL);
       prev->flow.next = bfun;
index 95d70693ed463cc9c099ffa2e31cda85dcfa1719..97d38fc5255a891114473097b5a811cf121f279a 100644 (file)
@@ -226,11 +226,11 @@ record_btrace_info (void)
 
       btrace_call_end (&call, btinfo);
       btrace_call_prev (&call, 1);
-      calls = btrace_call_number (&call) + 1;
+      calls = btrace_call_number (&call);
 
       btrace_insn_end (&insn, btinfo);
       btrace_insn_prev (&insn, 1);
-      insns = btrace_insn_number (&insn) + 1;
+      insns = btrace_insn_number (&insn);
     }
 
   printf_unfiltered (_("Recorded %u instructions in %u functions for thread "
index 52ed5663012b5f464e87444bde8ed347e1152d05..390b951d993e610406f9db3be4f3c71ba7f94fea 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
+
+       * gdb.btrace/instruction_history.exp: Update.
+       * gdb.btrace/function_call_history.exp: Update.
+
 2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>
 
        * gdb.btrace/function_call_history.exp: Fix expected function
index bf2458b5d9ead27c40576effbc57d7ce0e7c6b65..cd94dece1eb756881076b0ccd74ddac0ea9747e7 100644 (file)
@@ -38,28 +38,28 @@ gdb_breakpoint $bp_location
 gdb_continue_to_breakpoint "cont to $bp_location" ".*$testfile.c:$bp_location.*"
 
 proc rec_fun_all {} {
-  gdb_test "record function-call-history 0" [join [list \
-    "0\tmain" \
-    "1\tinc" \
-    "2\tmain" \
-    "3\tinc" \
-    "4\tmain" \
-    "5\tinc" \
-    "6\tmain" \
-    "7\tinc" \
-    "8\tmain" \
-    "9\tinc" \
-    "10\tmain" \
-    "11\tinc" \
-    "12\tmain" \
-    "13\tinc" \
-    "14\tmain" \
-    "15\tinc" \
-    "16\tmain" \
-    "17\tinc" \
-    "18\tmain" \
-    "19\tinc" \
-    "20\tmain"] "\r\n"]
+  gdb_test "record function-call-history 1" [join [list \
+    "1\tmain" \
+    "2\tinc" \
+    "3\tmain" \
+    "4\tinc" \
+    "5\tmain" \
+    "6\tinc" \
+    "7\tmain" \
+    "8\tinc" \
+    "9\tmain" \
+    "10\tinc" \
+    "11\tmain" \
+    "12\tinc" \
+    "13\tmain" \
+    "14\tinc" \
+    "15\tmain" \
+    "16\tinc" \
+    "17\tmain" \
+    "18\tinc" \
+    "19\tmain" \
+    "20\tinc" \
+    "21\tmain"] "\r\n"]
 }
 
 # show function call history with unlimited size, we expect to see all 21 entries
@@ -72,31 +72,31 @@ with_test_prefix "size 21" rec_fun_all
 
 # show first 15 entries
 gdb_test_no_output "set record function-call-history-size 15"
-gdb_test "record function-call-history 0" [join [list \
-  "0\tmain" \
-  "1\tinc" \
-  "2\tmain" \
-  "3\tinc" \
-  "4\tmain" \
-  "5\tinc" \
-  "6\tmain" \
-  "7\tinc" \
-  "8\tmain" \
-  "9\tinc" \
-  "10\tmain" \
-  "11\tinc" \
-  "12\tmain" \
-  "13\tinc" \
-  "14\tmain"] "\r\n"] "forward - 1"
+gdb_test "record function-call-history 1" [join [list \
+  "1\tmain" \
+  "2\tinc" \
+  "3\tmain" \
+  "4\tinc" \
+  "5\tmain" \
+  "6\tinc" \
+  "7\tmain" \
+  "8\tinc" \
+  "9\tmain" \
+  "10\tinc" \
+  "11\tmain" \
+  "12\tinc" \
+  "13\tmain" \
+  "14\tinc" \
+  "15\tmain"] "\r\n"] "forward - 1"
 
 # show last 6 entries
 gdb_test "record function-call-history +" [join [list \
-  "15\tinc" \
-  "16\tmain" \
-  "17\tinc" \
-  "18\tmain" \
-  "19\tinc" \
-  "20\tmain"] "\r\n"] "forward - 2"
+  "16\tinc" \
+  "17\tmain" \
+  "18\tinc" \
+  "19\tmain" \
+  "20\tinc" \
+  "21\tmain"] "\r\n"] "forward - 2"
 
 # moving further should not work
 gdb_test "record function-call-history +" "At the end of the branch trace record\\." "forward - 3"
@@ -106,30 +106,30 @@ gdb_test "record function-call-history +" "At the end of the branch trace record
 
 # moving back showing the latest 15 function calls
 gdb_test "record function-call-history -" [join [list \
-  "6\tmain" \
-  "7\tinc" \
-  "8\tmain" \
-  "9\tinc" \
-  "10\tmain" \
-  "11\tinc" \
-  "12\tmain" \
-  "13\tinc" \
-  "14\tmain" \
-  "15\tinc" \
-  "16\tmain" \
-  "17\tinc" \
-  "18\tmain" \
-  "19\tinc" \
-  "20\tmain"] "\r\n"] "backward - 1"
+  "7\tmain" \
+  "8\tinc" \
+  "9\tmain" \
+  "10\tinc" \
+  "11\tmain" \
+  "12\tinc" \
+  "13\tmain" \
+  "14\tinc" \
+  "15\tmain" \
+  "16\tinc" \
+  "17\tmain" \
+  "18\tinc" \
+  "19\tmain" \
+  "20\tinc" \
+  "21\tmain"] "\r\n"] "backward - 1"
 
 # moving further back shows the 6 first function calls
 gdb_test "record function-call-history -" [join [list \
-  "0\tmain" \
-  "1\tinc" \
-  "2\tmain" \
-  "3\tinc" \
-  "4\tmain" \
-  "5\tinc"] "\r\n"] "backward - 2"
+  "1\tmain" \
+  "2\tinc" \
+  "3\tmain" \
+  "4\tinc" \
+  "5\tmain" \
+  "6\tinc"] "\r\n"] "backward - 2"
 
 # moving further back shouldn't work
 gdb_test "record function-call-history -" "At the start of the branch trace record\\." "backward - 3"
@@ -169,18 +169,18 @@ gdb_test "record function-call-history /l +" "At the end of the branch trace rec
 gdb_test "record function-call-history /l" "At the end of the branch trace record\\." "forward /l - 4"
 
 set expected_range [join [list \
-  "3\tinc" \
-  "4\tmain" \
-  "5\tinc" \
-  "6\tmain" \
-  "7\tinc" \
-  "8\tmain" \
-  "9\tinc"] "\r\n"]
+  "4\tinc" \
+  "5\tmain" \
+  "6\tinc" \
+  "7\tmain" \
+  "8\tinc" \
+  "9\tmain" \
+  "10\tinc"] "\r\n"]
 
 # show functions in instruction range
-gdb_test "record function-call-history 3,10" $expected_range
-gdb_test "record function-call-history 3,+7" $expected_range
-gdb_test "record function-call-history 10,-7" $expected_range
+gdb_test "record function-call-history 4,11" $expected_range
+gdb_test "record function-call-history 4,+7" $expected_range
+gdb_test "record function-call-history 11,-7" $expected_range
 
 # set bp after fib recursion and continue
 set bp_location [gdb_get_line_number "bp.2" $testfile.c]
@@ -191,8 +191,7 @@ gdb_continue_to_breakpoint "cont to $bp_location" ".*$testfile.c:$bp_location.*"
 # so we limit the output to only show the latest 11 function calls
 gdb_test_no_output "set record function-call-history-size 11"
 gdb_test "record function-call-history" [join [list \
-  "20\tmain" \
-  "21\tfib" \
+  "21\tmain" \
   "22\tfib" \
   "23\tfib" \
   "24\tfib" \
@@ -201,4 +200,5 @@ gdb_test "record function-call-history" [join [list \
   "27\tfib" \
   "28\tfib" \
   "29\tfib" \
-  "30\tmain"] "\r\n"] "recursive"
+  "30\tfib" \
+  "31\tmain"] "\r\n"] "recursive"
index c6f6500f5cc043cbc80d5939b268d8546cedf0fa..46ef65ef4c3c17e79a2197237cf07783f6b9a325 100644 (file)
@@ -65,36 +65,37 @@ if { $traced != 6 } {
 }
 
 # test that we see the expected instructions
-gdb_test "record instruction-history 1,6" [join [list \
-  "1\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "2\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tdec    %eax" \
-  "3\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tjmp    0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "4\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
-  "5\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>"] "\r\n"]
-
-gdb_test "record instruction-history /f 1,+5" [join [list \
-  "1\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "2\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tdec    %eax" \
-  "3\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tjmp    0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "4\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
-  "5\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
-] "\r\n"]
-
-gdb_test "record instruction-history /p 6,-5" [join [list \
-  "1\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "2\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tdec    %eax" \
-  "3\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tjmp    0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "4\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
-  "5\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
-] "\r\n"]
-
-gdb_test "record instruction-history /pf 1,6" [join [list \
-  "1\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "2\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tdec    %eax" \
-  "3\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tjmp    0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
-  "4\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
-  "5\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
-] "\r\n"]
+gdb_test "record instruction-history 2,7" [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\]+>" \
+  "5\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
+  "6\t   0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
+  ] "\r\n"]
+
+gdb_test "record instruction-history /f 2,+5" [join [list \
+  "2\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
+  "3\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tdec    %eax" \
+  "4\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tjmp    0x\[0-9a-f\]+ <loop\\+\[0-9\]+>" \
+  "5\t   0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
+  "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 \
+  "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\]+>" \
+  "5\t0x\[0-9a-f\]+ <loop\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
+  "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 \
+  "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\]+>" \
+  "5\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tcmp    \\\$0x0,%eax" \
+  "6\t0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tje     0x\[0-9a-f\]+ <loop\\+\[0-9\]+>\r" \
+  ] "\r\n"]
 
 # the following tests are checking the iterators
 # to avoid lots of regexps, we just check the number of lines that
@@ -120,7 +121,7 @@ proc test_lines_length { command message } {
 # all $traced instructions
 gdb_test_no_output "set record instruction-history-size 0"
 set message "record instruction-history - unlimited"
-set lines [test_lines_length "record instruction-history 0" $message]
+set lines [test_lines_length "record instruction-history 1" $message]
 if { $traced != $lines } {
     fail $message
 } else {
@@ -129,7 +130,7 @@ if { $traced != $lines } {
 
 gdb_test_no_output "set record instruction-history-size $traced"
 set message "record instruction-history - traced"
-set lines [test_lines_length "record instruction-history 0" $message]
+set lines [test_lines_length "record instruction-history 1" $message]
 if { $traced != $lines } {
     fail $message
 } else {
@@ -140,7 +141,7 @@ if { $traced != $lines } {
 set history_size 3
 gdb_test_no_output "set record instruction-history-size $history_size"
 set message "browse history forward start"
-set lines [test_lines_length "record instruction-history 0" $message]
+set lines [test_lines_length "record instruction-history 1" $message]
 if { $lines != $history_size } {
     fail $message
 } else {