[Top][All Lists]
[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.