[7/8] Rename disp-step-syscall.exp to step-over-syscall.exp

Message ID 1455892594-2294-8-git-send-email-yao.qi@linaro.org
State New, archived
Headers

Commit Message

Yao Qi Feb. 19, 2016, 2:36 p.m. UTC
  disp-step-syscall.exp is extended for stepping over syscall instruction
in different cases, with or without displaced stepping, and stepping
over by GDBserver.

This patch rename disp-step-syscall.exp to step-over-syscall.exp to
reflect this.

gdb/testsuite:

2016-02-19  Yao Qi  <yao.qi@linaro.org>

	* gdb.base/disp-step-fork.c: Rename to ...
	* gdb.base/step-over-fork.c: ... it.  New file.
	* gdb.base/disp-step-vfork.c: Rename to ...
	* gdb.base/step-over-vfork.c: ... it.  New file.
	* gdb.base/disp-step-syscall.exp: Rename to ...
	* gdb.base/step-over-syscall.exp: ... it.  New file.
	(disp_step_cross_syscall): Rename to ...
	(step_over_syscall): ... it.
---
 gdb/testsuite/gdb.base/disp-step-fork.c      |  43 ------
 gdb/testsuite/gdb.base/disp-step-syscall.exp | 208 ---------------------------
 gdb/testsuite/gdb.base/disp-step-vfork.c     |  47 ------
 gdb/testsuite/gdb.base/step-over-fork.c      |  43 ++++++
 gdb/testsuite/gdb.base/step-over-syscall.exp | 208 +++++++++++++++++++++++++++
 gdb/testsuite/gdb.base/step-over-vfork.c     |  47 ++++++
 6 files changed, 298 insertions(+), 298 deletions(-)
 delete mode 100644 gdb/testsuite/gdb.base/disp-step-fork.c
 delete mode 100644 gdb/testsuite/gdb.base/disp-step-syscall.exp
 delete mode 100644 gdb/testsuite/gdb.base/disp-step-vfork.c
 create mode 100644 gdb/testsuite/gdb.base/step-over-fork.c
 create mode 100644 gdb/testsuite/gdb.base/step-over-syscall.exp
 create mode 100644 gdb/testsuite/gdb.base/step-over-vfork.c
  

Comments

Pedro Alves Feb. 25, 2016, 5:32 p.m. UTC | #1
We should really start requiring git diff -M.  :-)

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/testsuite/gdb.base/disp-step-fork.c b/gdb/testsuite/gdb.base/disp-step-fork.c
deleted file mode 100644
index 6d477ea..0000000
--- a/gdb/testsuite/gdb.base/disp-step-fork.c
+++ /dev/null
@@ -1,43 +0,0 @@ 
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2011-2016 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <stdlib.h>
-#include <unistd.h>
-
-static void
-marker () {}
-
-int
-main (void)
-{
-  int i, pid;
-
-  for (i = 0; i < 6; i++)
-    {
-      pid = fork ();
-      if (pid == 0) /* child */
-	{
-	  exit (0); /* at exit */
-	}
-      else
-	{
-	}
-    }
-
-  marker ();
-
-}
diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp
deleted file mode 100644
index 128bb78..0000000
--- a/gdb/testsuite/gdb.base/disp-step-syscall.exp
+++ /dev/null
@@ -1,208 +0,0 @@ 
-# This testcase is part of GDB, the GNU debugger.
-
-# Copyright 2011-2016 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-set syscall_insn ""
-
-# Define the syscall instruction for each target.
-
-if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
-    set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]"
-} elseif { [istarget "aarch64*-*-linux*"] || [istarget "arm*-*-linux*"] } {
-    set syscall_insn "\[ \t\](swi|svc)\[ \t\]"
-} else {
-    return -1
-}
-
-proc check_pc_after_cross_syscall { syscall syscall_insn_next_addr } {
-    set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"]
-
-    set test "single step over $syscall final pc"
-    if {$syscall_insn_next_addr != 0
-	&& $syscall_insn_next_addr == $syscall_insn_next_addr_found} {
-	pass $test
-    } else {
-	fail $test
-    }
-}
-
-proc disp_step_cross_syscall { syscall } {
-    with_test_prefix "$syscall" {
-	global syscall_insn
-	global gdb_prompt
-
-	set testfile "disp-step-$syscall"
-
-	if [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] {
-	    untested ${testfile}.exp
-	    return -1
-	}
-
-	if { ![runto main] } then {
-	    fail "run to main ($syscall)"
-	    return
-	}
-
-	# Delete the breakpoint on main.
-	gdb_test_no_output "delete break 1"
-
-	gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*"
-	gdb_test_no_output "set displaced-stepping off"
-
-	set syscall_bp 0
-	gdb_test_multiple "break $syscall"  "break $syscall" {
-	    -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {
-		set syscall_bp $expect_out(1,string)
-		pass "break $syscall"
-	    }
-	}
-
-	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
-	    "continue to $syscall (1st time)"
-	# Hit the breakpoint on $syscall for the first time.  In this time, we will let PLT
-	# resolution done, and the number single steps we will do later will be
-	# reduced.
-
-	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
-	    "continue to $syscall (2nd time)"
-	# Hit the breakpoint on $syscall for the second time.  In this time, the address
-	# of syscall insn and next insn of syscall are recorded.
-
-	gdb_test "display/i \$pc" ".*"
-
-
-	# Single step until we see a syscall insn or we reach the
-	# upper bound of loop iterations.
-	set msg "find syscall insn in $syscall"
-	set steps 0
-	set max_steps 1000
-	gdb_test_multiple "stepi" $msg {
-	    -re ".*$syscall_insn.*$gdb_prompt $" {
-		pass $msg
-	    }
-	    -re "x/i .*=>.*\r\n$gdb_prompt $" {
-		incr steps
-		if {$steps == $max_steps} {
-		    fail $msg
-		} else {
-		    send_gdb "stepi\n"
-		    exp_continue
-		}
-	    }
-	}
-
-	if {$steps == $max_steps} {
-	    return -1
-	}
-
-	set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0"]
-	if {[gdb_test "stepi" "x/i .*=>.*" "stepi $syscall insn"] != 0} {
-	    return -1
-	}
-	set syscall_insn_next_addr [get_hexadecimal_valueof "\$pc" "0"]
-
-	set disp_step_opts { "off" }
-	if { [support_displaced_stepping] } {
-	    lappend disp_step_opts "on"
-	}
-
-	foreach displaced $disp_step_opts {
-	    with_test_prefix "displaced $displaced" {
-
-		gdb_test "continue" \
-		    "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
-		    "continue to $syscall (3rd time)"
-
-		# Hit the breakpoint on $syscall for the third time.
-		# In this time, we'll set breakpoint on the syscall insn
-		# we recorded previously, and single step over it.
-
-		set syscall_insn_bp 0
-		gdb_test_multiple "break \*$syscall_insn_addr"  \
-		    "break on syscall insn" {
-			-re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {
-			    set syscall_insn_bp $expect_out(1,string)
-			    pass "break on syscall insns"
-			}
-		    }
-
-		gdb_test "continue" \
-		    "Continuing\\..*Breakpoint \[0-9\]+, .*" \
-		    "continue to syscall insn $syscall"
-
-		gdb_test_no_output "set displaced-stepping $displaced"
-
-		# Check the address of next instruction of syscall.
-		if {[gdb_test "stepi" "x/i .*=>.*" "single step over $syscall"] != 0} {
-		    return -1
-		}
-
-		check_pc_after_cross_syscall $syscall $syscall_insn_next_addr
-
-		# Delete breakpoint syscall insns to avoid interference
-		# to other syscalls.
-		gdb_test_no_output "delete $syscall_insn_bp" \
-		    "delete break $syscall insn"
-	    }
-	}
-
-	with_test_prefix "break cond on target" {
-	    set cond_bp_target 1
-
-	    set test "set breakpoint condition-evaluation target"
-	    gdb_test_multiple $test $test {
-		-re "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n$gdb_prompt $" {
-		    # Target doesn't support breakpoint condition
-		    # evaluation on its side.
-		    set cond_bp_target 0
-		}
-		-re "^$test\r\n$gdb_prompt $" {
-		}
-	    }
-
-	    if { $cond_bp_target } {
-		gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
-		    "continue to $syscall"
-
-		# Create a breakpoint with the condition which is false.
-		set syscall_insn_bp 0
-		gdb_test_multiple "break \*$syscall_insn_addr if main == 0" \
-		    "break on syscall insns" {
-			-re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {
-			    set syscall_insn_bp $expect_out(1,string)
-			    pass "break on syscall insns"
-			}
-		    }
-
-		gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
-		    "continue to $syscall again"
-
-		# Delete breakpoint syscall insns to avoid interference to
-		# other syscalls.
-		gdb_test_no_output "delete $syscall_insn_bp" \
-		    "delete break $syscall insn"
-	    }
-	}
-
-	gdb_test_no_output "delete $syscall_bp" "delete break $syscall"
-
-	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
-	    "continue to marker ($syscall)"
-    }
-}
-
-disp_step_cross_syscall "fork"
-disp_step_cross_syscall "vfork"
diff --git a/gdb/testsuite/gdb.base/disp-step-vfork.c b/gdb/testsuite/gdb.base/disp-step-vfork.c
deleted file mode 100644
index 35665ab..0000000
--- a/gdb/testsuite/gdb.base/disp-step-vfork.c
+++ /dev/null
@@ -1,47 +0,0 @@ 
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2011-2016 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <unistd.h>
-
-static void
-marker () {}
-
-int
-main (void)
-{
-  int i, pid;
-
-  for (i = 0; i < 6; i++)
-    {
-      pid = vfork ();
-      if (pid == -1)
-	{
-	  return 1;
-	}
-      else if (pid != 0)
-	{
-	}
-      else
-	{
-	  _exit (0);
-	}
-    }
-
-  marker ();
-  return 0;
-
-}
diff --git a/gdb/testsuite/gdb.base/step-over-fork.c b/gdb/testsuite/gdb.base/step-over-fork.c
new file mode 100644
index 0000000..6d477ea
--- /dev/null
+++ b/gdb/testsuite/gdb.base/step-over-fork.c
@@ -0,0 +1,43 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011-2016 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+static void
+marker () {}
+
+int
+main (void)
+{
+  int i, pid;
+
+  for (i = 0; i < 6; i++)
+    {
+      pid = fork ();
+      if (pid == 0) /* child */
+	{
+	  exit (0); /* at exit */
+	}
+      else
+	{
+	}
+    }
+
+  marker ();
+
+}
diff --git a/gdb/testsuite/gdb.base/step-over-syscall.exp b/gdb/testsuite/gdb.base/step-over-syscall.exp
new file mode 100644
index 0000000..863194b
--- /dev/null
+++ b/gdb/testsuite/gdb.base/step-over-syscall.exp
@@ -0,0 +1,208 @@ 
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2011-2016 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set syscall_insn ""
+
+# Define the syscall instruction for each target.
+
+if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
+    set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]"
+} elseif { [istarget "aarch64*-*-linux*"] || [istarget "arm*-*-linux*"] } {
+    set syscall_insn "\[ \t\](swi|svc)\[ \t\]"
+} else {
+    return -1
+}
+
+proc check_pc_after_cross_syscall { syscall syscall_insn_next_addr } {
+    set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"]
+
+    set test "single step over $syscall final pc"
+    if {$syscall_insn_next_addr != 0
+	&& $syscall_insn_next_addr == $syscall_insn_next_addr_found} {
+	pass $test
+    } else {
+	fail $test
+    }
+}
+
+proc step_over_syscall { syscall } {
+    with_test_prefix "$syscall" {
+	global syscall_insn
+	global gdb_prompt
+
+	set testfile "step-over-$syscall"
+
+	if [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] {
+	    untested ${testfile}.exp
+	    return -1
+	}
+
+	if { ![runto main] } then {
+	    fail "run to main ($syscall)"
+	    return
+	}
+
+	# Delete the breakpoint on main.
+	gdb_test_no_output "delete break 1"
+
+	gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*"
+	gdb_test_no_output "set displaced-stepping off"
+
+	set syscall_bp 0
+	gdb_test_multiple "break $syscall"  "break $syscall" {
+	    -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {
+		set syscall_bp $expect_out(1,string)
+		pass "break $syscall"
+	    }
+	}
+
+	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
+	    "continue to $syscall (1st time)"
+	# Hit the breakpoint on $syscall for the first time.  In this time, we will let PLT
+	# resolution done, and the number single steps we will do later will be
+	# reduced.
+
+	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
+	    "continue to $syscall (2nd time)"
+	# Hit the breakpoint on $syscall for the second time.  In this time, the address
+	# of syscall insn and next insn of syscall are recorded.
+
+	gdb_test "display/i \$pc" ".*"
+
+
+	# Single step until we see a syscall insn or we reach the
+	# upper bound of loop iterations.
+	set msg "find syscall insn in $syscall"
+	set steps 0
+	set max_steps 1000
+	gdb_test_multiple "stepi" $msg {
+	    -re ".*$syscall_insn.*$gdb_prompt $" {
+		pass $msg
+	    }
+	    -re "x/i .*=>.*\r\n$gdb_prompt $" {
+		incr steps
+		if {$steps == $max_steps} {
+		    fail $msg
+		} else {
+		    send_gdb "stepi\n"
+		    exp_continue
+		}
+	    }
+	}
+
+	if {$steps == $max_steps} {
+	    return -1
+	}
+
+	set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0"]
+	if {[gdb_test "stepi" "x/i .*=>.*" "stepi $syscall insn"] != 0} {
+	    return -1
+	}
+	set syscall_insn_next_addr [get_hexadecimal_valueof "\$pc" "0"]
+
+	set disp_step_opts { "off" }
+	if { [support_displaced_stepping] } {
+	    lappend disp_step_opts "on"
+	}
+
+	foreach displaced $disp_step_opts {
+	    with_test_prefix "displaced $displaced" {
+
+		gdb_test "continue" \
+		    "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
+		    "continue to $syscall (3rd time)"
+
+		# Hit the breakpoint on $syscall for the third time.
+		# In this time, we'll set breakpoint on the syscall insn
+		# we recorded previously, and single step over it.
+
+		set syscall_insn_bp 0
+		gdb_test_multiple "break \*$syscall_insn_addr"  \
+		    "break on syscall insn" {
+			-re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {
+			    set syscall_insn_bp $expect_out(1,string)
+			    pass "break on syscall insns"
+			}
+		    }
+
+		gdb_test "continue" \
+		    "Continuing\\..*Breakpoint \[0-9\]+, .*" \
+		    "continue to syscall insn $syscall"
+
+		gdb_test_no_output "set displaced-stepping $displaced"
+
+		# Check the address of next instruction of syscall.
+		if {[gdb_test "stepi" "x/i .*=>.*" "single step over $syscall"] != 0} {
+		    return -1
+		}
+
+		check_pc_after_cross_syscall $syscall $syscall_insn_next_addr
+
+		# Delete breakpoint syscall insns to avoid interference
+		# to other syscalls.
+		gdb_test_no_output "delete $syscall_insn_bp" \
+		    "delete break $syscall insn"
+	    }
+	}
+
+	with_test_prefix "break cond on target" {
+	    set cond_bp_target 1
+
+	    set test "set breakpoint condition-evaluation target"
+	    gdb_test_multiple $test $test {
+		-re "warning: Target does not support breakpoint condition evaluation.\r\nUsing host evaluation mode instead.\r\n$gdb_prompt $" {
+		    # Target doesn't support breakpoint condition
+		    # evaluation on its side.
+		    set cond_bp_target 0
+		}
+		-re "^$test\r\n$gdb_prompt $" {
+		}
+	    }
+
+	    if { $cond_bp_target } {
+		gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
+		    "continue to $syscall"
+
+		# Create a breakpoint with the condition which is false.
+		set syscall_insn_bp 0
+		gdb_test_multiple "break \*$syscall_insn_addr if main == 0" \
+		    "break on syscall insns" {
+			-re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" {
+			    set syscall_insn_bp $expect_out(1,string)
+			    pass "break on syscall insns"
+			}
+		    }
+
+		gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \
+		    "continue to $syscall again"
+
+		# Delete breakpoint syscall insns to avoid interference to
+		# other syscalls.
+		gdb_test_no_output "delete $syscall_insn_bp" \
+		    "delete break $syscall insn"
+	    }
+	}
+
+	gdb_test_no_output "delete $syscall_bp" "delete break $syscall"
+
+	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
+	    "continue to marker ($syscall)"
+    }
+}
+
+step_over_syscall "fork"
+step_over_syscall "vfork"
diff --git a/gdb/testsuite/gdb.base/step-over-vfork.c b/gdb/testsuite/gdb.base/step-over-vfork.c
new file mode 100644
index 0000000..35665ab
--- /dev/null
+++ b/gdb/testsuite/gdb.base/step-over-vfork.c
@@ -0,0 +1,47 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011-2016 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <unistd.h>
+
+static void
+marker () {}
+
+int
+main (void)
+{
+  int i, pid;
+
+  for (i = 0; i < 6; i++)
+    {
+      pid = vfork ();
+      if (pid == -1)
+	{
+	  return 1;
+	}
+      else if (pid != 0)
+	{
+	}
+      else
+	{
+	  _exit (0);
+	}
+    }
+
+  marker ();
+  return 0;
+
+}