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
signature.asc
Description: PGP signature