tinycc-devel
[Top][All Lists]
Advanced

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

Re: [Tinycc-devel] x86_64: second struct va_arg fails


From: Henry Kroll
Subject: Re: [Tinycc-devel] x86_64: second struct va_arg fails
Date: Thu, 16 Dec 2010 15:15:38 -0800

On Fri, 2010-12-17 at 02:43 +0900, shinichiro hamaji wrote:
> On Thu, Dec 16, 2010 at 9:06 AM, Henry Kroll <address@hidden> wrote:
> > On Wed, 2010-12-15 at 03:07 +0100, grischka wrote:
> >> Henry Kroll wrote:
> >> > x86_64 fails to copy the second struct passed to va_arg.
> >> >
> >> > static struct myspace {
> >> >     short int profile;
> >> > } bob = { 42 };
> >> >
> >> > void badfunc(int eek, ...) {
> >> >     va_list ack;
> >> >     int validate;
> >> >     struct myspace george, bill;
> >> >     va_start(ack, eek);
> >> >         bill     = va_arg(ack, struct myspace);
> >> >         george   = va_arg(ack, struct myspace);
> >> >         validate = va_arg(ack, int);
> >> > [...]
> >> > int main(int argc, char **argv) {
> >> >     badfunc(0, bob, bob, bob.profile);
> >> > [...]
> >>
> >> This line from tcc's include/stdarg.h might give a hint:
> >>      /* XXX: this lacks the support of aggregated types. */                
> >>   \
> >>
> >> I have no idea though how such support would look like.
> >>
> >> Btw. on win64 it does not work either.  I must have misunderstood
> >> something about the structures part of the calling conventions.
> >>
> >> --- grischka
> >>
> >>
> >> _______________________________________________
> >> Tinycc-devel mailing list
> >> address@hidden
> >> http://lists.nongnu.org/mailman/listinfo/tinycc-devel
> >
> > This passes some hurried tests I threw at it, but I'm sure it needs more
> > type checking. I used the attached test program to generate a map of
> > ap->overflow_arg_area for various sized structures.
> 
> This is one of my TODO. I think the easiest way would be adding a
> builtin function like __builtin_aggregate_types_p and using it in
> stdarg.h. I hesitated to do this because any other compilers don't
> have such extensions. A better way would be defining __builtin_va_arg
> just like GCC. I guess I will have some spare time this year end. I'll
> try working on this if no one don't fix.

That would be great! I believe it will fix several cross-platform
toolkits compiled with tcc since they like to pass so many aggregate
types through variable argument lists. Though not the most optimized for
final builds, I think tcc's speedy compilation would save time testing
them.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]