2015-01-01 09:32:14 +00:00
|
|
|
# Copyright 2010-2015 Free Software Foundation, Inc.
|
2010-08-11 16:48:26 +00:00
|
|
|
|
|
|
|
# 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/>. */
|
|
|
|
#
|
|
|
|
# Contributed by Ken Werner <ken.werner@de.ibm.com>.
|
|
|
|
#
|
|
|
|
# Tests GDBs support for GNU vectors.
|
|
|
|
# http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
|
|
|
|
|
test suite update - gdb.base/[efg]
Convert files gdb.base/[efg]*.exp to use standard_output_file et al.
* ena-dis-br.exp, enum_cond.exp, enumval.exp, environ.exp,
eu-strip-infcall.exp, eval-skip.exp, exe-lock.exp,
expand-psymtabs.exp, exprs.exp, fileio.exp, find.exp,
fixsection.exp, foll-exec.exp, foll-fork.exp,
fortran-sym-case.exp, frame-args.exp, freebpcmd.exp, fullname.exp,
funcargs.exp, gcore-buffer-overflow.exp, gcore.exp, gdb1090.exp,
gdb11530.exp, gdb11531.exp, gdb1250.exp, gdb1555.exp, gdb1821.exp,
gdbindex-stabs.exp, gdbvars.exp, gnu-ifunc.exp, gnu_vector.exp:
Use standard_testfile, standard_output_file, prepare_for_testing,
clean_restart.
2013-06-27 18:50:30 +00:00
|
|
|
standard_testfile .c
|
2010-08-11 16:48:26 +00:00
|
|
|
|
Add vector ABI tests to gnu_vector.exp
So far the gnu_vector test was limited to "static" aspects of GDB's
vector support, like evaluating vector-valued expressions. This patch
enriches the test and adds checks for GDB's vector ABI support as well.
The new checks particularly verify inferior function calls with vector
arguments and GDB's handling of vector return values.
The test now attempts to compile for the target's "native" architecture,
such that a hardware vector ABI is used if available.
Since GDB has no vector ABI support for x86 and x86_64 targets, most of
the new checks are KFAILed there.
gdb/testsuite/ChangeLog:
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
(VECTOR): New macro. Use it...
(int4, uint4, char4, float4, int2, longlong2, float2, double2):
...for these typedefs.
(int8, char1, int1, double1): New typedefs.
(struct just_int2, struct two_int2): New structures.
(add_some_intvecs, add_many_charvecs, add_various_floatvecs)
(add_structvecs, add_singlevecs): New functions.
(main): Call add_some_intvecs twice.
* gdb.base/gnu_vector.exp: Drop GCC version check; just attempt
the compile and exit upon failure. Try compiling for the "native"
architecture. Test inferior function calls with vector arguments
and vector return value handling with "finish" and "return".
2015-06-17 09:17:07 +00:00
|
|
|
# If supported by the compiler, "-mcpu=native" or "-march=native"
|
|
|
|
# should enable the highest available vector ABI. Try both, then try
|
|
|
|
# without a CPU option. If all variants fail, assume that the
|
|
|
|
# compiler can not handle GNU vectors.
|
|
|
|
|
2015-08-24 13:37:40 +00:00
|
|
|
proc do_compile { {opts {}} } {
|
|
|
|
global srcdir subdir srcfile binfile
|
|
|
|
set ccopts {debug quiet}
|
|
|
|
foreach opt $opts {lappend ccopts "additional_flags=$opt"}
|
|
|
|
gdb_compile "${srcdir}/${subdir}/${srcfile}" "$binfile" executable $ccopts
|
|
|
|
}
|
|
|
|
|
|
|
|
if { [do_compile {-mcpu=native}] != ""
|
|
|
|
&& [do_compile {-mcpu=native -Wno-psabi}] != ""
|
|
|
|
&& [do_compile {-march=native}] != ""
|
|
|
|
&& [do_compile] != ""} {
|
|
|
|
untested "compiler can't handle vector_size attribute?"
|
|
|
|
return -1
|
2010-08-11 16:48:26 +00:00
|
|
|
}
|
|
|
|
|
Add vector ABI tests to gnu_vector.exp
So far the gnu_vector test was limited to "static" aspects of GDB's
vector support, like evaluating vector-valued expressions. This patch
enriches the test and adds checks for GDB's vector ABI support as well.
The new checks particularly verify inferior function calls with vector
arguments and GDB's handling of vector return values.
The test now attempts to compile for the target's "native" architecture,
such that a hardware vector ABI is used if available.
Since GDB has no vector ABI support for x86 and x86_64 targets, most of
the new checks are KFAILed there.
gdb/testsuite/ChangeLog:
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
(VECTOR): New macro. Use it...
(int4, uint4, char4, float4, int2, longlong2, float2, double2):
...for these typedefs.
(int8, char1, int1, double1): New typedefs.
(struct just_int2, struct two_int2): New structures.
(add_some_intvecs, add_many_charvecs, add_various_floatvecs)
(add_structvecs, add_singlevecs): New functions.
(main): Call add_some_intvecs twice.
* gdb.base/gnu_vector.exp: Drop GCC version check; just attempt
the compile and exit upon failure. Try compiling for the "native"
architecture. Test inferior function calls with vector arguments
and vector return value handling with "finish" and "return".
2015-06-17 09:17:07 +00:00
|
|
|
clean_restart ${binfile}
|
2010-08-11 16:48:26 +00:00
|
|
|
|
|
|
|
if { ![runto main] } {
|
|
|
|
fail "runto main"
|
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
2013-10-21 12:34:25 +00:00
|
|
|
# Get endianess for the scalar->vector casts
|
|
|
|
gdb_test_multiple "show endian" "show endian" {
|
|
|
|
-re ".* (big|little) endian.*$gdb_prompt $" {
|
|
|
|
set endian $expect_out(1,string)
|
|
|
|
pass "endianness: $endian"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-10-06 08:44:15 +00:00
|
|
|
# Test printing of character vector types
|
|
|
|
gdb_test "print c4" "\\\$$decimal = \\{1, 2, 3, 4\\}"
|
|
|
|
gdb_test "print c4\[2\]" "\\\$$decimal = 3"
|
|
|
|
|
2010-11-03 14:06:27 +00:00
|
|
|
# Test operators on integer vector types
|
2010-08-11 16:48:26 +00:00
|
|
|
gdb_test "print i4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print i4b" "\\\$$decimal = \\{1, 2, 8, 4\\}"
|
|
|
|
# Arithmetic operators
|
|
|
|
gdb_test "print i4a + i4b" "\\\$$decimal = \\{3, 6, 16, 20\\}"
|
|
|
|
gdb_test "print i4a - i4b" "\\\$$decimal = \\{1, 2, 0, 12\\}"
|
|
|
|
gdb_test "print i4a * i4b" "\\\$$decimal = \\{2, 8, 64, 64\\}"
|
|
|
|
gdb_test "print i4a / i4b" "\\\$$decimal = \\{2, 2, 1, 4\\}"
|
|
|
|
gdb_test "print i4a % i4b" "\\\$$decimal = \\{0, 0, 0, 0\\}"
|
2010-11-03 14:06:27 +00:00
|
|
|
gdb_test "print i4a++" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print ++i4a" "\\\$$decimal = \\{4, 6, 10, 18\\}"
|
|
|
|
gdb_test "print i4a--" "\\\$$decimal = \\{4, 6, 10, 18\\}"
|
|
|
|
gdb_test "print --i4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print +i4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print -i4a" "\\\$$decimal = \\{-2, -4, -8, -16\\}"
|
|
|
|
|
2010-08-11 16:48:26 +00:00
|
|
|
# Bitwise operators
|
|
|
|
gdb_test "print i4a & i4b" "\\\$$decimal = \\{0, 0, 8, 0\\}"
|
|
|
|
gdb_test "print i4a | i4b" "\\\$$decimal = \\{3, 6, 8, 20\\}"
|
|
|
|
gdb_test "print i4a ^ i4b" "\\\$$decimal = \\{3, 6, 0, 20\\}"
|
2010-11-03 14:06:27 +00:00
|
|
|
gdb_test "print ~i4a" "\\\$$decimal = \\{-3, -5, -9, -17\\}"
|
2010-08-11 16:48:26 +00:00
|
|
|
# Shift operators
|
|
|
|
gdb_test "print i4a << i4b" "\\\$$decimal = \\{4, 16, 2048, 256\\}"
|
|
|
|
gdb_test "print i4a >> i4b" "\\\$$decimal = \\{1, 1, 0, 1\\}"
|
|
|
|
|
2010-11-03 14:06:27 +00:00
|
|
|
# Test operators on floating point vector types
|
2010-08-11 16:48:26 +00:00
|
|
|
gdb_test "print f4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print f4b" "\\\$$decimal = \\{1, 2, 8, 4\\}"
|
|
|
|
# Arithmetic operators
|
|
|
|
gdb_test "print f4a + f4b" "\\\$$decimal = \\{3, 6, 16, 20\\}"
|
|
|
|
gdb_test "print f4a - f4b" "\\\$$decimal = \\{1, 2, 0, 12\\}"
|
|
|
|
gdb_test "print f4a * f4b" "\\\$$decimal = \\{2, 8, 64, 64\\}"
|
|
|
|
gdb_test "print f4a / f4b" "\\\$$decimal = \\{2, 2, 1, 4\\}"
|
2010-11-03 14:06:27 +00:00
|
|
|
gdb_test "print +f4a" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print -f4a" "\\\$$decimal = \\{-2, -4, -8, -16\\}"
|
2010-08-11 16:48:26 +00:00
|
|
|
|
2013-01-25 17:16:43 +00:00
|
|
|
# When casting to vector the input type must have the same length as
|
|
|
|
# the total length of the vector.
|
|
|
|
gdb_test "print (char4) 0x01010101" "\\\$$decimal = \\{1, 1, 1, 1\\}"
|
|
|
|
gdb_test "print (int2) lla" "\\\$$decimal = \\{1, 1\\}"
|
|
|
|
|
2013-10-21 12:34:25 +00:00
|
|
|
if { ![string compare $endian big] } then {
|
|
|
|
gdb_test "print (char4) ia" "\\\$$decimal = \\{0, 0, 0, 2\\}"
|
|
|
|
} else {
|
|
|
|
gdb_test "print (char4) ia" "\\\$$decimal = \\{2, 0, 0, 0\\}"
|
|
|
|
}
|
|
|
|
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print (int2) 1" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print (longlong2) 2" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print (float2) 3" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print (double2) 4" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print (uint4) ia" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print (int4) -3" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print (float4) 4" "can only cast scalar to vector of same size"
|
|
|
|
|
|
|
|
gdb_test "print i4b = ia" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print i4a = 3" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print f4a = fb" "can only cast scalar to vector of same size"
|
|
|
|
gdb_test "print f4b = 2" "can only cast scalar to vector of same size"
|
|
|
|
|
|
|
|
gdb_test "print c4 + lla" "conversion of scalar to vector involves truncation"
|
|
|
|
gdb_test "print i4a + lla" "conversion of scalar to vector involves truncation"
|
|
|
|
gdb_test "print lla + c4" "conversion of scalar to vector involves truncation"
|
|
|
|
gdb_test "print lla + i4a" "conversion of scalar to vector involves truncation"
|
|
|
|
|
|
|
|
gdb_test "print c4 + ib" "\\\$$decimal = \\{2, 3, 4, 5\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print i4a + ib" "\\\$$decimal = \\{3, 5, 9, 17\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print i4a + 1" "\\\$$decimal = \\{3, 5, 9, 17\\}"
|
|
|
|
gdb_test "print 1 + i4a" "\\\$$decimal = \\{3, 5, 9, 17\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print fa - f4b" "\\\$$decimal = \\{1, 0, -6, -2\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print 2 - f4b" "\\\$$decimal = \\{1, 0, -6, -2\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print f4a * fb" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print f4a * 1" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print ia / i4b" "\\\$$decimal = \\{2, 1, 0, 0\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print 2 / i4b" "\\\$$decimal = \\{2, 1, 0, 0\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print i4a % ib" "\\\$$decimal = \\{0, 0, 0, 0\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print i4a % 1" "\\\$$decimal = \\{0, 0, 0, 0\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print ia & i4b" "\\\$$decimal = \\{0, 2, 0, 0\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print 2 & i4b" "\\\$$decimal = \\{0, 2, 0, 0\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print i4a | ib" "\\\$$decimal = \\{3, 5, 9, 17\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print i4a | 1" "\\\$$decimal = \\{3, 5, 9, 17\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print ia ^ i4b" "\\\$$decimal = \\{3, 0, 10, 6\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print 2 ^ i4b" "\\\$$decimal = \\{3, 0, 10, 6\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print i4a << ib" "\\\$$decimal = \\{4, 8, 16, 32\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print i4a << 1" "\\\$$decimal = \\{4, 8, 16, 32\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
gdb_test "print i4a >> ib" "\\\$$decimal = \\{1, 2, 4, 8\\}"
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print i4a >> 1" "\\\$$decimal = \\{1, 2, 4, 8\\}"
|
2010-10-08 16:50:55 +00:00
|
|
|
|
|
|
|
gdb_test "print i4a = \{2, 4, 8, 16\}" "\\\$$decimal = \\{2, 4, 8, 16\\}"
|
|
|
|
gdb_test "print i4a <<= ib" "\\\$$decimal = \\{4, 8, 16, 32\\}"
|
|
|
|
|
|
|
|
# Test some error scenarios
|
2010-08-11 16:48:26 +00:00
|
|
|
gdb_test "print i4a + d2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print d2 + i4a" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print f4a + ll2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print ll2 + f4a" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print i2 + ll2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print ll2 + i2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print i4a + ll2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print ll2 + i4a" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print f4a + d2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print d2 + f4a" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print ui4 + i4a" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print i4a + ui4" "Cannot perform operation on vectors with different types"
|
2010-11-03 14:21:58 +00:00
|
|
|
gdb_test "print i4a + i2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print i2 + i4a" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print f4a + f2" "Cannot perform operation on vectors with different types"
|
|
|
|
gdb_test "print f2 + f4a" "Cannot perform operation on vectors with different types"
|
2010-08-11 16:48:26 +00:00
|
|
|
|
2013-01-25 17:16:43 +00:00
|
|
|
gdb_test "print (double2) f2" "Cannot convert between vector values of different sizes"
|
|
|
|
gdb_test "print (int4) c4" "Cannot convert between vector values of different sizes"
|
|
|
|
gdb_test "print (char4) i4a" "Cannot convert between vector values of different sizes"
|
|
|
|
|
2012-10-31 09:26:22 +00:00
|
|
|
# Test ptype on vector types.
|
|
|
|
gdb_test "ptype c4" "type = char __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
|
|
|
|
gdb_test "ptype char4" "type = char __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
|
|
|
|
gdb_test "ptype i4a" "type = int __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
|
|
|
|
gdb_test "ptype int4" "type = int __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
|
|
|
|
gdb_test "ptype f4b" "type = float __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
|
|
|
|
gdb_test "ptype float4" "type = float __attribute__ \\(\\(vector_size\\(4\\)\\)\\)"
|
|
|
|
|
|
|
|
gdb_test "ptype union_with_vector_1" "type = union {\r\n\[\t \]+int i;\r\n\[\t \]+char cv __attribute__ \\(\\(vector_size\\(4\\)\\)\\);\r\n}"
|
|
|
|
gdb_test "ptype struct_with_vector_1" "type = struct {\r\n\[\t \]+int i;\r\n\[\t \]+char cv __attribute__ \\(\\(vector_size\\(4\\)\\)\\);\r\n\[\t \]+float4 f4;\r\n}"
|
Add vector ABI tests to gnu_vector.exp
So far the gnu_vector test was limited to "static" aspects of GDB's
vector support, like evaluating vector-valued expressions. This patch
enriches the test and adds checks for GDB's vector ABI support as well.
The new checks particularly verify inferior function calls with vector
arguments and GDB's handling of vector return values.
The test now attempts to compile for the target's "native" architecture,
such that a hardware vector ABI is used if available.
Since GDB has no vector ABI support for x86 and x86_64 targets, most of
the new checks are KFAILed there.
gdb/testsuite/ChangeLog:
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
(VECTOR): New macro. Use it...
(int4, uint4, char4, float4, int2, longlong2, float2, double2):
...for these typedefs.
(int8, char1, int1, double1): New typedefs.
(struct just_int2, struct two_int2): New structures.
(add_some_intvecs, add_many_charvecs, add_various_floatvecs)
(add_structvecs, add_singlevecs): New functions.
(main): Call add_some_intvecs twice.
* gdb.base/gnu_vector.exp: Drop GCC version check; just attempt
the compile and exit upon failure. Try compiling for the "native"
architecture. Test inferior function calls with vector arguments
and vector return value handling with "finish" and "return".
2015-06-17 09:17:07 +00:00
|
|
|
|
|
|
|
# Test inferior function calls with vector arguments and/or vector
|
|
|
|
# return values.
|
2015-07-10 08:36:02 +00:00
|
|
|
if { [istarget "i?86-*-*"] || [istarget "x86_64-*-*" ] } {
|
|
|
|
# These platforms don't support infcalls with vector arguments
|
|
|
|
# and/or vector return values, so skip the remaining tests.
|
|
|
|
# See also PR exp/18537.
|
|
|
|
unsupported "skip remaining vector ABI tests on this arch"
|
|
|
|
return
|
|
|
|
}
|
Add vector ABI tests to gnu_vector.exp
So far the gnu_vector test was limited to "static" aspects of GDB's
vector support, like evaluating vector-valued expressions. This patch
enriches the test and adds checks for GDB's vector ABI support as well.
The new checks particularly verify inferior function calls with vector
arguments and GDB's handling of vector return values.
The test now attempts to compile for the target's "native" architecture,
such that a hardware vector ABI is used if available.
Since GDB has no vector ABI support for x86 and x86_64 targets, most of
the new checks are KFAILed there.
gdb/testsuite/ChangeLog:
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
(VECTOR): New macro. Use it...
(int4, uint4, char4, float4, int2, longlong2, float2, double2):
...for these typedefs.
(int8, char1, int1, double1): New typedefs.
(struct just_int2, struct two_int2): New structures.
(add_some_intvecs, add_many_charvecs, add_various_floatvecs)
(add_structvecs, add_singlevecs): New functions.
(main): Call add_some_intvecs twice.
* gdb.base/gnu_vector.exp: Drop GCC version check; just attempt
the compile and exit upon failure. Try compiling for the "native"
architecture. Test inferior function calls with vector arguments
and vector return value handling with "finish" and "return".
2015-06-17 09:17:07 +00:00
|
|
|
gdb_test "print add_some_intvecs(i4a, i4b, 3 * i4a)" "= \\{17, 34, 72, 132\\}" \
|
|
|
|
"call add_some_intvecs"
|
|
|
|
gdb_test "print add_many_charvecs(c4, c4, c4, c4, c4, c4, c4, c4, c4, c4)" \
|
|
|
|
"= \\{10, 20, 30, 40\\}" "call add_many_charvecs"
|
|
|
|
gdb_test "print add_various_floatvecs(2, f4a, f4b)" "= \\{3, 6, 16, 20\\}" \
|
|
|
|
"call add_various_floatvecs"
|
|
|
|
gdb_test "print add_structvecs(i2, (struct just_int2)\{2*i2\}, (struct two_int2)\{3*i2, 4*i2\})" \
|
|
|
|
"= \\{i = \\{10, 20\\}\\}" "call add_structvecs"
|
|
|
|
gdb_test "print add_singlevecs((char1) \{6\}, (int1) \{12\}, (double1) \{24\})" "= \\{42\\}" \
|
|
|
|
"call add_singlevecs"
|
|
|
|
|
2015-08-24 13:37:40 +00:00
|
|
|
# Test "finish" from vector-valued function.
|
Add vector ABI tests to gnu_vector.exp
So far the gnu_vector test was limited to "static" aspects of GDB's
vector support, like evaluating vector-valued expressions. This patch
enriches the test and adds checks for GDB's vector ABI support as well.
The new checks particularly verify inferior function calls with vector
arguments and GDB's handling of vector return values.
The test now attempts to compile for the target's "native" architecture,
such that a hardware vector ABI is used if available.
Since GDB has no vector ABI support for x86 and x86_64 targets, most of
the new checks are KFAILed there.
gdb/testsuite/ChangeLog:
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
(VECTOR): New macro. Use it...
(int4, uint4, char4, float4, int2, longlong2, float2, double2):
...for these typedefs.
(int8, char1, int1, double1): New typedefs.
(struct just_int2, struct two_int2): New structures.
(add_some_intvecs, add_many_charvecs, add_various_floatvecs)
(add_structvecs, add_singlevecs): New functions.
(main): Call add_some_intvecs twice.
* gdb.base/gnu_vector.exp: Drop GCC version check; just attempt
the compile and exit upon failure. Try compiling for the "native"
architecture. Test inferior function calls with vector arguments
and vector return value handling with "finish" and "return".
2015-06-17 09:17:07 +00:00
|
|
|
gdb_breakpoint "add_some_intvecs"
|
|
|
|
gdb_continue "add_some_intvecs"
|
2015-08-24 13:37:40 +00:00
|
|
|
set test "finish shows vector return value"
|
|
|
|
gdb_test_multiple "finish" $test {
|
|
|
|
-re "Value returned is .* = \\{10, 20, 48, 72\\}.*$gdb_prompt $" {
|
|
|
|
pass $test
|
|
|
|
}
|
|
|
|
-re "Value returned has type: .* Cannot determine contents.*$gdb_prompt $" {
|
|
|
|
kfail "gdb/8549" $test
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Test "return" from vector-valued function.
|
Add vector ABI tests to gnu_vector.exp
So far the gnu_vector test was limited to "static" aspects of GDB's
vector support, like evaluating vector-valued expressions. This patch
enriches the test and adds checks for GDB's vector ABI support as well.
The new checks particularly verify inferior function calls with vector
arguments and GDB's handling of vector return values.
The test now attempts to compile for the target's "native" architecture,
such that a hardware vector ABI is used if available.
Since GDB has no vector ABI support for x86 and x86_64 targets, most of
the new checks are KFAILed there.
gdb/testsuite/ChangeLog:
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
(VECTOR): New macro. Use it...
(int4, uint4, char4, float4, int2, longlong2, float2, double2):
...for these typedefs.
(int8, char1, int1, double1): New typedefs.
(struct just_int2, struct two_int2): New structures.
(add_some_intvecs, add_many_charvecs, add_various_floatvecs)
(add_structvecs, add_singlevecs): New functions.
(main): Call add_some_intvecs twice.
* gdb.base/gnu_vector.exp: Drop GCC version check; just attempt
the compile and exit upon failure. Try compiling for the "native"
architecture. Test inferior function calls with vector arguments
and vector return value handling with "finish" and "return".
2015-06-17 09:17:07 +00:00
|
|
|
gdb_continue "add_some_intvecs"
|
2015-08-24 13:37:40 +00:00
|
|
|
set test "return from vector-valued function"
|
|
|
|
set should_kfail 0
|
|
|
|
gdb_test_multiple "return (int4) \{4, 2, 7, 6\}" $test {
|
|
|
|
-re "#0 .* main .*$gdb_prompt $" {
|
|
|
|
pass $test
|
|
|
|
}
|
|
|
|
-re "The location .* is unknown.\r\n.* return value .* will be ignored.\r\n" {
|
|
|
|
set should_kfail 1
|
|
|
|
exp_continue
|
|
|
|
}
|
|
|
|
-re "Make add_some_intvecs return now. .y or n. $" {
|
|
|
|
send_gdb "y\n"
|
|
|
|
exp_continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
set test "verify vector return value"
|
|
|
|
gdb_test_multiple "continue" $test {
|
|
|
|
-re "4 2 7 6\r\n.*$gdb_prompt $" {
|
|
|
|
pass $test
|
|
|
|
}
|
|
|
|
-re "10 20 48 72\r\n.*$gdb_prompt $" {
|
|
|
|
if { $should_kfail } {
|
|
|
|
kfail "gdb/8549" $test
|
|
|
|
} else {
|
|
|
|
fail $test
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|