Hi folks, When compiling 64 bit Cygwin on Wine, I found a python{2,3} failure when building documentation [1]:
xmlto --skip-validation --with-dblatex pdf -o cygwin-ug-net/ -m /drone/src/github.com/cygwin/cygwin/winsup/doc/fo.xsl /drone/src/github.com/cygwin/cygwin/winsup/doc/cygwin-ug-net.xml sem_init: Invalid argument Traceback (most recent call last): File "/usr/bin/dblatex", line 10, in <module> from dbtexmf.dblatex import dblatex File "/usr/lib/python2.7/site-packages/dbtexmf/dblatex/dblatex.py", line 8, in <module> from dbtexmf.core.dbtex import DbTex, DbTexCommand File "/usr/lib/python2.7/site-packages/dbtexmf/core/dbtex.py", line 11, in <module> import urllib File "/usr/lib/python2.7/urllib.py", line 26, in <module> import socket File "/usr/lib/python2.7/socket.py", line 67, in <module> from _ssl import SSLError as sslerror ImportError: cannot import name SSLError make[3]: [Makefile:104: cygwin-ug-net/cygwin-ug-net.pdf] Error 1 (ignored) According to my previous experience this happens with previous version of Cygwin 64 bit on Wine, but works fine on Windows, and works fine on 32 bit Cygwin on Wine. I can't test latest git HEAD Cygwin version due to another known failure. I tried to track down the problem, and I found during the call of sem_init(sem, pshared=0, value=1), in some case pshared and value were unexpectedly changed to large integers after verifyable_object_isvalid(). I tried to reproduce with a simplified test case, and got the below code which behaviors wrong but not exactly in the same way: #include <unistd.h> #include <stdlib.h> #include <string.h> #include <semaphore.h> #include <pthread.h> int main(int argc, char *argv[]) { sem_t *p_sem = malloc(sizeof(sem_t)); memset(p_sem, 0xcc, sizeof(sem_t)); /* trigger exception handling code in Cygwin sem_init()-->verifyable_object_isvalid() */ sem_init(p_sem, 0, 1); return 0; } Compiled using Cygwin gcc -pthread, The above code works fine on Cygwin on Windows and 32 bit Cygwin on Wine, but causes a stack overflow on 64 bit Cygwin on Wine. Unfortunately it does not fail exatly in the same way to Cygiwn python, but at least it brings some interesting question. I think it is a Wine bug which does not handle exception correctly, and I'm trying to track down deeper. At the time could anyone provide some hint which piece of Cygwin code could I learn to write a pure Win32 test case emulating the above example? I also attached +seh log comparing 64 bit Cygwin and 32 bit Cygwin on Wine, which show the stackoverflow on 64 bit but handles fine on 32 bit, hopefully that helps. I created a Wine bug on [2]. Thank you! [1] https://tea-ci.org/cygwin/cygwin/4 [2] https://bugs.wine-staging.com/show_bug.cgi?id=691 -- Regards, Qian Hong - http://www.winehq.org
00ec:trace:seh:raise_exception code=c0000005 flags=0 addr=0x180154e5e ip=180154e5e tid=00ec 00ec:trace:seh:raise_exception rax=cccccccccccccccc rbx=0000000600010590 rcx=0000000600010590 rdx=00000000df0df04c 00ec:trace:seh:raise_exception rsi=0000000000000001 rdi=0000000000000000 rbp=00000000ffffcc10 rsp=00000000ffffcb10 00ec:trace:seh:raise_exception r8=0000000000000000 r9=0000000000000000 r10=00000000ffffcb40 r11=0000000100401130 00ec:trace:seh:raise_exception r12=0000000000001000 r13=000000007b47ead0 r14=00007fffff7e8000 r15=00007fffffffc3f8 00ec:trace:seh:RtlVirtualUnwind type 1 rip 180154e5e rsp ffffcb10 00ec:trace:seh:dump_unwind_info **** func 114dc0-114eaa 00ec:trace:seh:dump_unwind_info unwind info at 0x1802cd50c flags 1 prolog 0x4 bytes function 0x180154dc0-0x180154eaa 00ec:trace:seh:dump_unwind_info 0x4: subq $0x58,%rsp 00ec:trace:seh:dump_unwind_info handler 0x180071c30 data at 0x1802cd518 00ec:trace:seh:call_handler calling handler 0x180071c30 (rec=0xffffc9e0, frame=0xffffcb10 context=0xffffbab0, dispatch=0xffffb980) 00ec:Call ntdll.RtlUnwindEx(ffffcb10,180154e91,ffffc9e0,00000000,ffffbab0,ffffb9d0) ret=180071c5f 00ec:trace:seh:RtlUnwindEx code=c0000005 flags=2 end_frame=0xffffcb10 target_ip=0x180154e91 rip=000000007bc9d3ba 00ec:trace:seh:RtlUnwindEx rax=000000000033fe80 rbx=000000000033fe80 rcx=00000000ffffbab0 rdx=0000000000000000 00ec:trace:seh:RtlUnwindEx rsi=00000000ffffbab0 rdi=00000000ffffb250 rbp=00000000ffffbab0 rsp=00000000ffffb0b0 00ec:trace:seh:RtlUnwindEx r8=00000000ffffc9e0 r9=0000000000000000 r10=00007ffff77bafe0 r11=00007ffff75856f0 00ec:trace:seh:RtlUnwindEx r12=00000000ffffb250 r13=00000000ffffc9e0 r14=0000000180154e91 r15=00000000ffffb980 00ec:err:seh:setup_exception stack overflow 7472 bytes in thread 00ec eip 000000007bc99c63 esp 00000000ffff88d0 stack 0xffe00000-0xffffa000-0x100000000 00ec:warn:seh:abort_thread exit frame outside of stack limits in thread 00ec frame 0x33ff80 stack 0xffffa000-0x100000000
00ca:trace:seh:raise_exception code=c0000005 flags=0 addr=0x61124db9 ip=61124db9 tid=00ca 00ca:trace:seh:raise_exception info[0]=00000000 00ca:trace:seh:raise_exception info[1]=ccccccd0 00ca:trace:seh:raise_exception eax=cccccccc ebx=20010348 ecx=00000000 edx=6122aa90 esi=61320fe7 edi=0061ca04 00ca:trace:seh:raise_exception ebp=0061ca08 esp=0061c9d0 cs=0023 ds=002b es=002b fs=0063 gs=006b flags=00010286 00ca:trace:seh:call_stack_handlers calling handler at 0x61031aa0 code=c0000005 flags=0
-- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple