From: Yao Qi Date: Fri, 26 Feb 2016 15:00:36 +0000 (+0000) Subject: Generalize gdb.reverse/aarch64.exp X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3263bceb4f76b783a44aeea417a9fb69dab26ee5;p=binutils-gdb.git Generalize gdb.reverse/aarch64.exp I said we can generialize gdb.reverse/aarch64.exp for other architectures https://sourceware.org/ml/gdb-patches/2015-05/msg00482.html and here is the patch to change aarch64.exp so that it can be used to test for other architectures as well. gdb/testsuite: 2016-02-26 Yao Qi * gdb.reverse/aarch64.c: [__aarch64__] Include arm_neon.h. (testcase_ftype): New. (testcases): New array. (n_testcases): New. (main): Call each element in testcases. * gdb.reverse/aarch64.exp: Remove is_aarch64_target check. (read_testcase): New. Do the tests in a loop. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4b85fcbd43a..7ab362af646 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2016-02-26 Yao Qi + + * gdb.reverse/aarch64.c: [__aarch64__] Include arm_neon.h. + (testcase_ftype): New. + (testcases): New array. + (n_testcases): New. + (main): Call each element in testcases. + * gdb.reverse/aarch64.exp: Remove is_aarch64_target check. + (read_testcase): New. + Do the tests in a loop. + 2016-02-25 Yao Qi * gdb.base/branches.c: Remove. diff --git a/gdb/testsuite/gdb.reverse/aarch64.c b/gdb/testsuite/gdb.reverse/aarch64.c index ae8509a07fc..1bfb8b06767 100644 --- a/gdb/testsuite/gdb.reverse/aarch64.c +++ b/gdb/testsuite/gdb.reverse/aarch64.c @@ -15,8 +15,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#if (defined __aarch64__) #include +#endif +#if (defined __aarch64__) static void load (void) { @@ -85,15 +88,34 @@ adv_simd_vect_shift (void) { asm ("fcvtzs s0, s0, #1"); } +#endif + +typedef void (*testcase_ftype) (void); + +/* Functions testing instruction decodings. GDB will read n_testcases + to know how many functions to test. */ + +static testcase_ftype testcases[] = +{ +#if (defined __aarch64__) + load, + move, + adv_simd_mod_imm, + adv_simd_scalar_index, + adv_simd_smlal, + adv_simd_vect_shift, +#endif +}; + +static int n_testcases = (sizeof (testcases) / sizeof (testcase_ftype)); int main () { - load (); - move (); - adv_simd_mod_imm (); - adv_simd_scalar_index (); - adv_simd_smlal (); - adv_simd_vect_shift (); + int i = 0; + + for (i = 0; i < n_testcases; i++) + testcases[i] (); + return 0; } diff --git a/gdb/testsuite/gdb.reverse/aarch64.exp b/gdb/testsuite/gdb.reverse/aarch64.exp index 2906d4bfdf0..f52b40c04b1 100644 --- a/gdb/testsuite/gdb.reverse/aarch64.exp +++ b/gdb/testsuite/gdb.reverse/aarch64.exp @@ -17,13 +17,6 @@ if ![supports_reverse] { return } -# Test aarch64 instruction recording. - -if {![is_aarch64_target]} then { - verbose "Skipping aarch64 instruction recording tests." - return -} - standard_testfile if {[prepare_for_testing $testfile.exp $testfile $srcfile \ @@ -36,6 +29,22 @@ if { ![runto main] } then { return } +# Read function name from testcases[N]. + +proc read_testcase { n } { + global gdb_prompt + + set result -1 + gdb_test_multiple "print testcases\[${n}\]" "read name of test case ${n}" { + -re "\[$\].*= .*<(.*)>.*$gdb_prompt $" { + set result $expect_out(1,string) + } + -re "$gdb_prompt $" { } + } + + return $result +} + # In each function FUNC, GDB turns on process record, and single step # until program goes to the end of the function. Then, single step # backward. In each of forward single step and backward single step, @@ -107,9 +116,15 @@ proc test { func } { } } -test "load" -test "move" -test "adv_simd_mod_imm" -test "adv_simd_scalar_index" -test "adv_simd_smlal" -test "adv_simd_vect_shift" +set n_testcases [get_integer_valueof "n_testcases" 0] + +if { ${n_testcases} == 0 } { + untested "No test" + return 1 +} + +for { set i 0 } { ${i} < ${n_testcases} } { incr i } { + set testcase [read_testcase $i] + + test $testcase +}