From: Ken Werner <ken@linux.vnet.ibm.com>
To: Daniel Jacobowitz <dan@codesourcery.com>
Cc: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>, gdb-patches@sourceware.org
Subject: Re: [patch] Small fix for assigning values to vectors
Date: Sat, 10 Jul 2010 17:05:00 -0000 [thread overview]
Message-ID: <201007101905.07082.ken@linux.vnet.ibm.com> (raw)
In-Reply-To: <20100710153908.GE8410@caradoc.them.org>
[-- Attachment #1: Type: Text/Plain, Size: 918 bytes --]
On Saturday, July 10, 2010 05:39:09 pm Daniel Jacobowitz wrote:
> On Sat, Jul 10, 2010 at 03:03:53PM +0200, Ken Werner wrote:
> > But while we are at it. Are there any objections on copying the contents
> > to the destination instead of creating a pointer?
>
> I think we're going a bit too far now, and maybe we need to figure out
> what the semantics of internalvars are supposed to be...
>
> With this, IIUC, "set $internalvar = program_array" is going to read
> the whole array. Previously, it would decay to a pointer as in C.
I agree. As I don't have a strong opinion either way on this particular case
I'd leave that decision to more experienced GDB developers.
Here is the patch I intended to post where only the call to
value_coerce_to_target is omitted and the value_must_coerce_to_target routine
returns zero in case of a vector. Tested on powerpc64-*-linux-gnu with no
regressions.
Regards.
-ken
[-- Attachment #2: vec_lval.patch --]
[-- Type: text/x-patch, Size: 2538 bytes --]
Changelog:
2010-07-09 Ken Werner <ken.werner@de.ibm.com>
* valops.c (value_assign): Do not call to value_coerce_to_target.
(value_must_coerce_to_target): Return 0 in case of TYPE_VECTOR.
testsuite/ChangeLog:
2010-07-09 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 -p -u -r1.248 valops.c
--- gdb/valops.c 28 Jun 2010 20:35:52 -0000 1.248
+++ gdb/valops.c 10 Jul 2010 10:16:36 -0000
@@ -1079,10 +1079,7 @@ value_assign (struct value *toval, struc
type = value_type (toval);
if (VALUE_LVAL (toval) != lval_internalvar)
- {
- toval = value_coerce_to_target (toval);
- fromval = value_cast (type, fromval);
- }
+ fromval = value_cast (type, fromval);
else
{
/* Coerce arrays and functions to pointers, except for arrays
@@ -1427,6 +1424,7 @@ value_must_coerce_to_target (struct valu
switch (TYPE_CODE (valtype))
{
case TYPE_CODE_ARRAY:
+ return TYPE_VECTOR (valtype) ? 0 : 1;
case TYPE_CODE_STRING:
return 1;
default:
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 \
next prev parent reply other threads:[~2010-07-10 17:05 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-06 13:58 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 [this message]
2010-07-12 14:55 ` Ulrich Weigand
2010-07-14 14:55 ` Ken Werner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201007101905.07082.ken@linux.vnet.ibm.com \
--to=ken@linux.vnet.ibm.com \
--cc=Ulrich.Weigand@de.ibm.com \
--cc=dan@codesourcery.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox