GCC 4.x fixes for Hurdy bits (0/5)
Neal H. Walfield
neal@walfield.org
Fri Jun 10 13:46:00 GMT 2005
Have you tested this?
> name = ty->msgtl_header.msgt_name;
> size = ty->msgtl_header.msgt_size;
> number = ty->msgtl_header.msgt_number;
> - (char *) ty += sizeof (mach_msg_type_t);
> + ty += sizeof (mach_msg_type_t);
This looks wrong. The old code will advance TY by sizeof
(mach_msg_type_t) bytes while the new code will advance TY by sizeof
(mach_msg_type_t) * sizeof (*ty) bytes.
> /* calculate length of data in bytes, rounding up */
> - (char *) ty += (((((number * size) + 7) >> 3)
> - + sizeof (mach_msg_type_t) - 1)
> - &~ (sizeof (mach_msg_type_t) - 1));
> + ty += (((((number * size) + 7) >> 3)
> + + sizeof (mach_msg_type_t) - 1)
> + &~ (sizeof (mach_msg_type_t) - 1));
Likewise here.
> }
> else
> {
> clean_ports (*(void **) ty,
> ty->msgtl_header.msgt_deallocate);
> - ++(void **) ty;
> + ++ty;
And here.
> *t++ = io2mach_type (1, _IOTS (integer_t));
> - *((integer_t *) t)++ = (integer_t) arg;
> + *(integer_t *) t = (integer_t) arg;
> + t += sizeof (integer_t);
And here.
> #else
> - *((integer_t *) p)++ = (integer_t) arg;
> + *(integer_t *) p = (integer_t) arg;
> + t += sizeof (integer_t);
And here I think you want to advance P and not T.
More information about the Libc-alpha
mailing list