[patch] Printing of character vectors

Ken Werner
2010-06-25T08:37:42Z

[-- Attachment #1: Type: Text/Plain, Size: 667 bytes --]

Hello,

I noticed that char vectors are printed like char arrays (as strings). Here is
the output of a sample session:
<snip>
Temporary breakpoint 1, main () at gnu_vector.c:3
3 int __attribute__ ((vector_size (4 * sizeof(int)))) i4 = {3, 2, 1,
0};
(gdb) n
4 char __attribute__ ((vector_size (4 * sizeof(char)))) c4 = {3, 2, 1,
0};
(gdb)
5 return 0;
(gdb) p i4
$1 = {3, 2, 1, 0}
(gdb) p c4
$2 = "\003\002\001"
</snip>

Is this intended?
The attached patch changes c_val_print to additionally check if the type is a
vector. Tested on powerpc64-*-linux-gnu and i686-*-linux-gnu, no regressions.
Any suggestions are welcome.

Regards,
-ken

[-- Attachment #2: vec-valprint.patch --]
[-- Type: text/x-patch, Size: 2931 bytes --]

ChangeLog:

2010-06-25 Ken Werner <ken.werner@de.ibm.com>

* gdb/c-valprint.c (c_val_print): Fix printing of character vectors.

testsuite/ChangeLog:

2010-06-25 Ken Werner <ken.werner@de.ibm.com>

* gdb.arch/altivec-abi.exp: Fix expect pattern of character vectors.

Index: gdb/c-valprint.c
===================================================================
RCS file: /cvs/src/src/gdb/c-valprint.c,v
retrieving revision 1.70
diff -p -u -r1.70 c-valprint.c
--- gdb/c-valprint.c 21 Jun 2010 18:01:50 -0000 1.70
+++ gdb/c-valprint.c 24 Jun 2010 16:19:27 -0000
@@ -180,7 +180,8 @@ c_val_print (struct type *type, const gd

/* Print arrays of textual chars with a string syntax, as
long as the entire array is valid. */
- if (c_textual_element_type (unresolved_elttype, options->format)
+ if (!TYPE_VECTOR (type)
+ && c_textual_element_type (unresolved_elttype, options->format)
&& value_bits_valid (original_value,
TARGET_CHAR_BIT * embedded_offset,
TARGET_CHAR_BIT * TYPE_LENGTH (type)))
Index: gdb/testsuite/gdb.arch/altivec-abi.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/altivec-abi.exp,v
retrieving revision 1.18
diff -p -u -r1.18 altivec-abi.exp
--- gdb/testsuite/gdb.arch/altivec-abi.exp 1 Jan 2010 07:32:00 -0000 1.18
+++ gdb/testsuite/gdb.arch/altivec-abi.exp 24 Jun 2010 16:19:28 -0000
@@ -82,7 +82,7 @@ proc altivec_abi_tests { extra_flags for

# now all the arguments of vec_fun are initialized

- set pattern "vec_func .vshort_f=.111, 222, 333, 444, 555, 666, 777, 888., vushort_f=.100, 200, 300, 400, 500, 600, 700, 800., vint_f=.-10, -20, -30, -40., vuint_f=.1111, 2222, 3333, 4444., vchar_f=.abcdefghilmnopqr., vuchar_f=.ABCDEFGHILMNOPQR., vfloat_f=.1.25, 3.75, 5.5, 1.25., x_f=.1, 2, 3, 4, 5, 6, 7, 8., y_f=.12, 22, 32, 42., a_f=.vector of chars.., b_f=.5.5, 4.5, 3.75, 2.25., c_f=.1.25, 3.5, 5.5, 7.75., intv_on_stack_f=.12, 34, 56, 78.."
+ set pattern "vec_func .vshort_f=.111, 222, 333, 444, 555, 666, 777, 888., vushort_f=.100, 200, 300, 400, 500, 600, 700, 800., vint_f=.-10, -20, -30, -40., vuint_f=.1111, 2222, 3333, 4444., vchar_f=.97 'a', 98 'b', 99 'c', 100 'd', 101 'e', 102 'f', 103 'g', 104 'h', 105 'i', 108 'l', 109 'm', 110 'n', 111 'o', 112 'p', 113 'q', 114 'r'., vuchar_f=.65 'A', 66 'B', 67 'C', 68 'D', 69 'E', 70 'F', 71 'G', 72 'H', 73 'I', 76 'L', 77 'M', 78 'N', 79 'O', 80 'P', 81 'Q', 82 'R'., vfloat_f=.1.25, 3.75, 5.5, 1.25., x_f=.1, 2, 3, 4, 5, 6, 7, 8., y_f=.12, 22, 32, 42., a_f=.118 'v', 101 'e', 99 'c', 116 't', 111 'o', 114 'r', 32 ' ', 111 'o', 102 'f', 32 ' ', 99 'c', 104 'h', 97 'a', 114 'r', 115 's', 46 '.'., b_f=.5.5, 4.5, 3.75, 2.25., c_f=.1.25, 3.5, 5.5, 7.75., intv_on_stack_f=.12, 34, 56, 78.."

set pattern1 $pattern
append pattern1 " at.*altivec-abi.c.*vint_res = vec_add.*vint_f, intv_on_stack_f.;"