Subject: Re: va_list pointers, bad(?) gcc code
To: Michal Ludvig <mludvig@suse.cz>
From: Frank van der Linden <fvdl@netbsd.org>
List: tech-toolchain
Date: 11/11/2003 15:20:22
I guess it's too late to change it now. The ABI defines va_list as:
typedef struct
unsigned int gp_offset;
unsigned int fp_offset;
void *overflow_arg_area;
void *reg_save_area;
} va_list[1];
I don't know what purpose it served to make it an array, except that
it makes certain it's never passed as a structure. But it also creates
problems like the one I saw.
I think this construction was copied from the powerpc ABI. I did
follow some of the ABI discussions at the time, but never thought
about this one until I stumbled in to this.
Changing it now would be an ABI change, which would be a major problem,
although you could frotz it by declaring it to be a pointer to
this structure instead, and have gcc do an internal alloca to
create space for it on the stack. Or something.. but that sounds
pretty hackish.
- Frank