On Feb  4 09:16, Sam Habiel wrote:
> >That's not GCC fault.  You're running varargs, written for the standard
> >stack layout of the MSABI target from a function with a stack laid out
> >in SYSV ABI.  That can't work.
> 
> I did some research to see how to write my own version of varargs (the
> code base is already instrumented to do different versions of varargs
> based on operating system). What I noticed though is that after
> disassembling code for win64 abi vs sysv abi, it seems like gcc/crt is
> attempting to do the right thing. There is different code for sysv vs
> win64 for va_start.
> 
> sysv:
> 10        va_list vl;
> 11        va_start(vl,n);
>    0x00000001004010e4 <+100>:   movl   $0x8,-0xc8(%rbp)
>    0x00000001004010ee <+110>:   movl   $0x30,-0xc4(%rbp)
>    0x00000001004010f8 <+120>:   lea    0x10(%rbp),%rax
>    0x00000001004010fc <+124>:   mov    %rax,-0xc0(%rbp)
>    0x0000000100401103 <+131>:   lea    -0xb0(%rbp),%rax
>    0x000000010040110a <+138>:   mov    %rax,-0xb8(%rbp)
> 
> win64:
> 10        va_list vl;
> 11        va_start(vl,n);
>    0x00000001004010a3 <+35>:    lea    0x18(%rbp),%rax
>    0x00000001004010a7 <+39>:    mov    %rax,-0x18(%rbp)
> 
> So there may be a incomplete support for varargs for the sysv abi--but buggy.
> 
> I attached the disassembly as well as the testing programs for your 
> convenience.

There's nothing for me to do here.  You still have to make sure
to choose the right varargs version and if there's really a bug,
you really should report it to GCC.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer

Attachment: signature.asc
Description: PGP signature

Reply via email to