[4/8] Step over syscalll insn with disp-step on and off

Message ID 1455892594-2294-5-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 was added to test displaced stepping over syscall
instructions, in which we set breakpoint on syscall instruction, and
step over it.  In fact, we can extend the test to non-displaced-stepping
case.  This patch wraps the test with displaced stepping on and off.
Note that the indentation and format isn't adjusted here to make this
patch easy to read.  The following patch will fix the format separately.

gdb/testsuite:

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

	* gdb.base/disp-step-fork.c (main): Increase loop boundary.
	* gdb.base/disp-step-vfork.c (main): Likewise.
	* gdb.base/disp-step-syscall.exp: Don't invoke
	support_displaced_stepping.
	(disp_step_cross_syscall): Test with displaced stepping off and
	on if supported.
---
 gdb/testsuite/gdb.base/disp-step-fork.c      |  2 +-
 gdb/testsuite/gdb.base/disp-step-syscall.exp | 17 +++++++++++------
 gdb/testsuite/gdb.base/disp-step-vfork.c     |  2 +-
 3 files changed, 13 insertions(+), 8 deletions(-)
  

Comments

Pedro Alves Feb. 25, 2016, 5:27 p.m. UTC | #1
LGTM, though minor comments below.

On 02/19/2016 02:36 PM, Yao Qi wrote:
> +	set disp_step_opts { "off" }
> +	if { [support_displaced_stepping] } {
> +	    lappend disp_step_opts "on"
> +	}
> +
> +	foreach displaced $disp_step_opts {
> +	    with_test_prefix "displaced $displaced" {
> +

This can be a single:

	foreach_with_prefix displaced $disp_step_opts {



BTW, I usually write these as:

	foreach_with_prefix displaced {"off" "on"} {
          if {$displaced == "on" && ![support_displaced_stepping]} {
	     continue
	  }

          ... tests or proc call here  ..
        }

It makes it easier to scan the testing axis covered, particularly
when you have multiple nested foreach loops, IMO.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/testsuite/gdb.base/disp-step-fork.c b/gdb/testsuite/gdb.base/disp-step-fork.c
index c8f2cf9..d8d602f 100644
--- a/gdb/testsuite/gdb.base/disp-step-fork.c
+++ b/gdb/testsuite/gdb.base/disp-step-fork.c
@@ -26,7 +26,7 @@  main (void)
 {
   int i, pid;
 
-  for (i = 0; i < 3; i++)
+  for (i = 0; i < 4; i++)
     {
       pid = fork ();
       if (pid == 0) /* child */
diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp
index aba5db8..9e43fbb 100644
--- a/gdb/testsuite/gdb.base/disp-step-syscall.exp
+++ b/gdb/testsuite/gdb.base/disp-step-syscall.exp
@@ -15,11 +15,6 @@ 
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if { ![support_displaced_stepping] } {
-    unsupported "displaced stepping"
-    return -1
-}
-
 set syscall_insn ""
 
 # Define the syscall instruction for each target.
@@ -119,6 +114,14 @@  proc disp_step_cross_syscall { syscall } {
 	}
 	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)"
 
@@ -136,7 +139,7 @@  proc disp_step_cross_syscall { syscall } {
 	gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, .*" \
 	    "continue to syscall insn $syscall"
 
-	gdb_test_no_output "set displaced-stepping on"
+	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} {
@@ -147,6 +150,8 @@  proc disp_step_cross_syscall { syscall } {
 
 	# 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"
 
diff --git a/gdb/testsuite/gdb.base/disp-step-vfork.c b/gdb/testsuite/gdb.base/disp-step-vfork.c
index 0ae725b..17bef55 100644
--- a/gdb/testsuite/gdb.base/disp-step-vfork.c
+++ b/gdb/testsuite/gdb.base/disp-step-vfork.c
@@ -25,7 +25,7 @@  main (void)
 {
   int i, pid;
 
-  for (i = 0; i < 3; i++)
+  for (i = 0; i < 4; i++)
     {
       pid = vfork ();
       if (pid == -1)