pyramid implementation of varargs

George Vasick george at pyrps5
Thu Apr 12 07:42:40 AEST 1990



> I have a large program that uses varargs fairly heavily, which crashes
> in very mysterious ways. I have reason to suspect that the crashes
> are due to the pyramid implementation of varargs.
> 
> 1.4 varargs.h seems to use routines called _vastart and _vaarg
> (defined in /lib/libc.a). Can anyone explain to me what these routines
> do? Also why is va_alist limited only to 12 arguments?

Arguments are split between the data stack and the control stack on the
Pyramid architecture.  _vastart initializes va_buf.  _vaarg uses and
updates va_buf to step through the arguments.  va_buf holds a pointer
to the next register argument, a pointer to the next stack argument and
a counter.  The only purpose of va_alist is to busy all 12 parameter
register so that the code generator does not use them for something
else.

> And last, va_buf is defined to be an integer array containing only
> _VALEN elements (which is only 3!!). Does this mean that _vastart
> and _vaarg will fail for any number greater than this??

No.

Past versions of Pyramid's varargs have had limitations with UNION's
and STRUCT's 8 bytes in length or less and there was a bug with CHAR
and SHORT arguments.  These are all fixed in OSx5.1 or later.


George



More information about the Comp.sys.pyramid mailing list