[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: XView bug/PPC machines available for developers?

> BTW, I never heard any complaints about XView's varargs usage on ppc back
> in the glibc 2.0 days (but then, I don't know wheter somebody actually
> compiled it for ppc at that time). However, for glibc 2.1, somebody
> submitted a patch that changed the following in lib/libxview/attr/attr.c:94
> and a few other places:
> #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1)
>    __va_copy(valist, valist1);
>    __va_copy(avlist, avlist1);
> #else
>    valist = valist1;
>    avlist = avlist1;
> #endif     

Looks reasonable. 
> If I look at the definition of __va_copy, it's
> #define __va_copy(dest, src) (dest) = (src)
> on all platforms except ppc, where it is
> #define __va_copy(dest, src) *(dest) = *(src)
> Is ppc varargs really that different from the rest of the world's, or could
> this be a bug in gcc's header files?

No, it's really that different. I don't understand all the weird stuff
going on there but I've tried a number of things to port a bio sequence
analysis package where they passed va_lists down multiple levels of  
function calls that would then change the va_lists. The rest of the world
passes pointers to the va_lists if the changes need to propagate back up.
PPC doesn't seem to like pointers to va_lists, just passing the va_list
however already makes changes to the list visible to the calling function.
Hence my need for __va_copy() which could not be replaced by a simple


Reply to: