public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [patch] Small fix for assigning values to vectors
@ 2010-07-06 13:58 Ken Werner
  2010-07-07 17:50 ` Ulrich Weigand
  0 siblings, 1 reply; 12+ messages in thread
From: Ken Werner @ 2010-07-06 13:58 UTC (permalink / raw)
  To: gdb-patches

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

Hi,

I noticed that with the current GDB it is possible to assign values to 
not_lval-vector-values. Consider the following sample code:
  /* gcc -g -maltivec -mabi=altivec altivec.c -o altivec */
  #include <altivec.h>
  int test () {
    return 1;
  }
  vector int vtest () {
    return (vector int) {0, 1, 2, 3};
  }
  int main () {
    return 0;
  }

Here is the corresponding gdb session:
  gdb ./altivec
  start
  [...]
  (gdb) p test()
  $1 = 1
  (gdb) p &test()
  Attempt to take address of value not located in memory.
  (gdb) set variable test() = 2
  Left operand of assignment is not an lvalue.
  (gdb)  
  (gdb) 
  (gdb) p vtest()
  $2 = {0, 1, 2, 3}
  (gdb) p &vtest()
  $3 = (__vector signed int *) 0x10020008
  (gdb) set variable vtest() = {3, 2, 1, 0}
  (gdb) p vtest()
  $4 = {0, 1, 2, 3}

As can be seen the GDB behaves incorrect for vector types. A quick look to the 
valops.c:value_assign function shows that value_coerce_to_target creates a 
value with lval set to lval_memory for array types (including vectors). The 
code was introduced with the following patch: http://sourceware.org/ml/gdb-
patches/2008-03/msg00079.html. I have to admit that I do not entirely 
understand why value_coerce_to_target is called here. The attached patch adds 
a check for vector types within value_coerce_to_target and extends the 
altivec-abi testcase. Tested on powerpc64-*-linux-gnu, no regressions. Any 
suggestions are welcome.

Regards
-ken

[-- Attachment #2: vec_lval.patch --]
[-- Type: text/x-patch, Size: 2099 bytes --]

Changelog:

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

	* valops.c (value_must_coerce_to_target): Return 0 in case of TYPE_VECTOR.

testsuite/ChangeLog:

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

	* gdb.arch/altivec-abi.exp: New tests.


Index: gdb/valops.c
===================================================================
RCS file: /cvs/src/src/gdb/valops.c,v
retrieving revision 1.248
diff -u -p -r1.248 valops.c
--- gdb/valops.c	28 Jun 2010 20:35:52 -0000	1.248
+++ gdb/valops.c	6 Jul 2010 12:47:00 -0000
@@ -1424,6 +1424,9 @@ value_must_coerce_to_target (struct valu
 
   valtype = check_typedef (value_type (val));
 
+  if (TYPE_VECTOR (valtype))
+    return 0;
+
   switch (TYPE_CODE (valtype))
     {
     case TYPE_CODE_ARRAY:
Index: gdb/testsuite/gdb.arch/altivec-abi.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/altivec-abi.exp,v
retrieving revision 1.19
diff -u -p -r1.19 altivec-abi.exp
--- gdb/testsuite/gdb.arch/altivec-abi.exp	2 Jul 2010 18:02:19 -0000	1.19
+++ gdb/testsuite/gdb.arch/altivec-abi.exp	6 Jul 2010 12:47:01 -0000
@@ -98,6 +98,16 @@ proc altivec_abi_tests { extra_flags for
     gdb_test "p vec_func(vshort_d,vushort_d,vint_d,vuint_d,vchar_d,vuchar_d,vfloat_d,x_d,y_d,a_d,b_d,c_d,intv_on_stack_d)" \
 	".\[0-9\]+ = .0, 0, 0, 0." "call inferior function with vectors (2)"
 
+    # Attempt to take address of the return value of vec_func.
+    gdb_test "p &vec_func(vshort,vushort,vint,vuint,vchar,vuchar,vfloat,x,y,a,b,c,intv_on_stack)" \
+	"Attempt to take address of value not located in memory." \
+	"Attempt to take address of the return value of vec_func"
+
+    # Attempt to assing a value to the return value of vec_func.
+    gdb_test "set variable vec_func(vshort,vushort,vint,vuint,vchar,vuchar,vfloat,x,y,a,b,c,intv_on_stack) = {0,1,2,3}" \
+	"Left operand of assignment is not an lvalue." \
+	"Attempt to assing a value to the return value of vec_func"
+
     # Let's step into the function, to see if the args are printed correctly.
     gdb_test "step" \
 	$pattern1 \

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2010-07-14 14:55 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-06 13:58 [patch] Small fix for assigning values to vectors Ken Werner
2010-07-07 17:50 ` Ulrich Weigand
2010-07-07 18:26   ` Daniel Jacobowitz
2010-07-09 10:39     ` Ken Werner
2010-07-09 13:03       ` Daniel Jacobowitz
2010-07-09 13:16         ` Ulrich Weigand
2010-07-09 13:12       ` Ulrich Weigand
2010-07-10 13:04         ` Ken Werner
2010-07-10 15:39           ` Daniel Jacobowitz
2010-07-10 17:05             ` Ken Werner
2010-07-12 14:55               ` Ulrich Weigand
2010-07-14 14:55                 ` Ken Werner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).