This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH ARM initial support for different floating-point models


Hmm, I'm afraid you may have just stepped into the 
write_register_bytes() bear trap :-( Have a look at the comments in 
regcache.c for the history.


> Index: arm-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/arm-tdep.c,v
> retrieving revision 1.47
> diff -p -r1.47 arm-tdep.c
> *** arm-tdep.c	2002/02/19 13:57:35	1.47
> --- arm-tdep.c	2002/02/19 19:14:40
> *************** arm_extract_return_value (struct type *t
> *** 2139,2145 ****
>   			  char *valbuf)
>   {
>     if (TYPE_CODE_FLT == TYPE_CODE (type))
> !     convert_from_extended (&regbuf[REGISTER_BYTE (ARM_F0_REGNUM)], valbuf);
>     else
>       memcpy (valbuf, &regbuf[REGISTER_BYTE (ARM_A1_REGNUM)],
>   	    TYPE_LENGTH (type));

Here, unfortunatly, directly pokeing around the regcache buffer (a 
parameter) is still the only way to do this.


>   	    TYPE_LENGTH (type));
> *************** arm_store_return_value (struct type *typ
> *** 2256,2270 ****
>   {
>     if (TYPE_CODE (type) == TYPE_CODE_FLT)
>       {
>         char buf[MAX_REGISTER_RAW_SIZE];
>   
> !       convert_to_extended (valbuf, buf);
> !       /* XXX Is this correct for soft-float?  */
> !       write_register_bytes (REGISTER_BYTE (ARM_F0_REGNUM), buf,
> ! 			    MAX_REGISTER_RAW_SIZE);

I think your changes to this function can be rewritten to use 
write_register_gen(REGNUM,BUF).

Need to be careful though.  If the code is assuming a floating point 
value should be stored across multiple adjacent registers then the code 
will need to be broken down into separate explicit writes.

enjoy,
Andrew



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]