Step over syscalll insn with disp-step on and off
authorYao Qi <yao.qi@linaro.org>
Thu, 3 Mar 2016 09:17:44 +0000 (09:17 +0000)
committerYao Qi <yao.qi@linaro.org>
Thu, 3 Mar 2016 09:17:44 +0000 (09:17 +0000)
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-03-03  Yao Qi  <yao.qi@linaro.org>

* 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/ChangeLog
gdb/testsuite/gdb.base/disp-step-syscall.exp

index a8b958f58c17cca378a7df57df8ffeea6c79d470..244efcce56dc90a281b9bac73a96d18ac42fe232 100644 (file)
@@ -1,3 +1,10 @@
+2016-03-03  Yao Qi  <yao.qi@linaro.org>
+
+       * 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.
+
 2016-03-03  Yao Qi  <yao.qi@linaro.org>
 
        * gdb.base/disp-step-syscall.exp (check_pc_after_cross_syscall): New
index a1af3b423079878a895de3deb0486ff9a7ba912e..3cf436d11e651eb1e07d932a8f72ef22d0ed7408 100644 (file)
 # 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.
@@ -124,6 +119,11 @@ proc disp_step_cross_syscall { syscall } {
            return -1
        }
 
+       foreach_with_prefix displaced {"off" "on"} {
+           if {$displaced == "on" && ![support_displaced_stepping]} {
+               continue
+           }
+
        set ret [setup $syscall]
 
        set syscall_insn_addr [lindex $ret 0]
@@ -149,7 +149,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} {
@@ -164,6 +164,7 @@ proc disp_step_cross_syscall { syscall } {
        gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*"
        gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
            "continue to marker ($syscall)"
+       }
     }
 }