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]

Re: Trivial bug in valarith.c


Andrew,

> JimB,
>
> While this looks, er obvious, can you give it a quick peek (I think you 
> last touched that code ;-).  Looks like this problem is also on the 5.1 
> branch :-/

cvs tattle points the finger at Jim...  He changed value_from_longest - 
which presumably doesn't care whether it is handed a pointer or a 
typedef, to value_from_pointer which does.  That change is correct, you 
just have to be careful about the arguments.

Another possible way to fix this, BTW, is to have value_from_pointer 
call check_typedef before whinging about the type.  Since check_typedef 
can sometimes take a bit of work, however, I thought it was better to 
keep the contract that you have to pass value_from_pointer a real 
pointer, and let the callers do the work - which in most cases they will 
have done already anyway.

>
> JimI,
>
> Do you have the ChangeLog entry?  Any chance of a testcase?

Oops, forgot the ChangeLog.  Here it is:

2001-10-12  Jim Ingham  <jingham@inghji.apple.com>

         * valarith.c (value_sub): Don't pass a raw type to
         value_from_pointer, it has to go through check_typedef first.

If I don't get distracted by some other emergency, I will whip up a 
testcase on Monday.

> BTW, I guess:
> 	(gdb) x/b myPtr+1
> also causes the crash - that is slightly more valid.

Yes, that will cause the problem too.  Anything that calls value_sub to 
handle a pointer +- integer where the pointer's type is a typedef 
instead of a direct pointer will fall over - it doesn't matter how you 
format the output.
The original case I was sent was a pointer to some opaque Foundation 
type, and I guess x/x made sense in that case, I have no idea.  I just 
changed the example to something that would not require GnuStep or MacOS 
X...

Jim

>
> enjoy,
> Andrew
>
>
>> Hi, all...
>> There's a trivial bug in valarith.c, in value_sub.   Here is the patch:
>> Index: valarith.c
>> ===================================================================
>> RCS file: /cvs/src/src/gdb/valarith.c,v
>> retrieving revision 1.9
>> diff -c -w -r1.9 valarith.c
>> *** valarith.c  2001/09/24 17:16:53     1.9
>> --- valarith.c  2001/10/13 05:03:06
>> ***************
>> *** 104,110 ****
>>         {
>>           /* pointer - integer.  */
>>           LONGEST sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE 
>> (type1)));
>> !         return value_from_pointer (VALUE_TYPE (arg1),
>>                                      (value_as_pointer (arg1)
>>                                       - (sz * value_as_long (arg2))));
>>         }
>> --- 104,110 ----
>>         {
>>           /* pointer - integer.  */
>>           LONGEST sz = TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE 
>> (type1)));
>> !         return value_from_pointer (type1,
>>                                      (value_as_pointer (arg1)
>>                                       - (sz * value_as_long (arg2))));
>>         }
>
>
>
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Jim Ingham                                                           
jingham@apple.com
Developer Tools - gdb


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