diff options
author | Yao Qi <yao.qi@linaro.org> | 2016-02-26 15:00:36 +0000 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2016-02-26 15:00:36 +0000 |
commit | 3263bceb4f76b783a44aeea417a9fb69dab26ee5 (patch) | |
tree | 0951d3386be577765c92f7ebca72d40e691bdf1b /gdb/testsuite/gdb.reverse | |
parent | Add ChangeLog entries for PR ld/19645 (diff) | |
download | binutils-gdb-3263bceb4f76b783a44aeea417a9fb69dab26ee5.tar.gz binutils-gdb-3263bceb4f76b783a44aeea417a9fb69dab26ee5.tar.bz2 binutils-gdb-3263bceb4f76b783a44aeea417a9fb69dab26ee5.zip |
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 <yao.qi@linaro.org>
* 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.
Diffstat (limited to 'gdb/testsuite/gdb.reverse')
-rw-r--r-- | gdb/testsuite/gdb.reverse/aarch64.c | 34 | ||||
-rw-r--r-- | gdb/testsuite/gdb.reverse/aarch64.exp | 41 |
2 files changed, 56 insertions, 19 deletions
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 <http://www.gnu.org/licenses/>. */ +#if (defined __aarch64__) #include <arm_neon.h> +#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 +} |