This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC 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: [libiberty] problem with unaligned pointers when using md5_process_bytes


>>
>> #if !_STRING_ARCH_unaligned
>> /* To check alignment gcc has an appropriate operator.  Other
>>    compilers don't.  */
>> # if __GNUC__ >= 2
>> #  define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) 
>> != 0)
>> # else
>> #  define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 
>> 0)
>> # endif
>> 	len --;
> 
> 
> Where did this ' len --;' come from, it is not in my code.  Maybe that
> is where you are getting unaligned.
Sorry, it is an error from me when I copied, as I could not debug the
macro, I added a line a len ++ in the conditionnal preprocessor branch
to see what was defined, and then a len -- to get normal size back, I
forgot to clean the len --. That does not change the problem.
> 
> 
>>       if (UNALIGNED_P (buffer))
>>         while (len > 64)
>>           {
>> 			memcpy (ctx->buffer, buffer, 64);
>>             md5_process_block (ctx->buffer, 64, ctx);
>>             buffer = (const char *) buffer + 64;
>>             len -= 64;
>>           }
>>       else
>> #endif
>>       md5_process_block (buffer, len & ~63, ctx);
>>       buffer = (const void *) ((const char *) buffer + (len & ~63));
>>       len &= 63;
>>     }

>> I was able to fully compile GCC MELT branch by only adding a pair of 
>> braces as you can see on the given diff file. I guess this is a bug in 
>> libiberty (even if I can't understand why my pointer is not aligned).

> 
> It certainly seems to me that those last three lines should be in a
> single block so they are all controlled by the else clause.  Though I
> also wonder if anyone ever defines _STRING_ARCH_unaligned.  It doesn't
> happen anywhere in configure so I guess the only way it would get
> defined is by a user via CFLAGS.  I wonder if this #if is even needed,
> then we could make the code cleaner by not having an partially ifdef'ed
> if/else statement.
Thanks, I will propose a patch on gcc-patches.

Pierre Vittet
> 
> Steve Ellcey
> sje@cup.hp.com
> 
> 
> 


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