[Bug 47464] wineboot crashes after building as PE file starting with Wine 4.12

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Jul 6 04:25:43 CDT 2019


https://bugs.winehq.org/show_bug.cgi?id=47464

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at gmx.net
           Keywords|                            |regression
            Summary|wineboot keep crash after   |wineboot crashes after
                   |build with msvcrt.          |building as PE file
                   |                            |starting with Wine 4.12
          Component|-unknown                    |programs
             Status|UNCONFIRMED                 |NEW
    Regression SHA1|                            |4a8483044ea346e09b4f2769fd1
                   |                            |f869a6e4533f6
            Version|unspecified                 |4.12
           Severity|normal                      |critical
           Hardware|x86                         |x86-64
     Ever confirmed|0                           |1

--- Comment #2 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

confirming. Wine 4.12 release is unfortunately broken due to this. New prefixes
are left in corrupted state and existing prefix updates won't work.

--- snip ---
$ WINEDEBUG=+seh,+relay wineboot >>log.txt 2>&1
...
000b:Call KERNEL32.CreateEventW(0032ee20,00000001,00000000,0040b7e0
L"__wineboot_event") ret=00406871
000b:Call kernelbase.CreateEventW(0032ee20,00000001,00000000,0040b7e0
L"__wineboot_event") ret=7bc935ff
000b:Call ntdll.RtlInitUnicodeString(0032ebf0,0040b7e0 L"__wineboot_event")
ret=7106f407
000b:Ret  ntdll.RtlInitUnicodeString() retval=00000022 ret=7106f407
000b:Call ntdll._vsnwprintf(0032eb00,00000040,710800e0
L"\\Sessions\\%u\\BaseNamedObjects",0032eaa8) ret=7106f2b4
000b:Ret  ntdll._vsnwprintf() retval=0000001c ret=7106f2b4
000b:Call ntdll.RtlInitUnicodeString(0032eac0,0032eb00
L"\\Sessions\\1\\BaseNamedObjects") ret=7106f32e
000b:Ret  ntdll.RtlInitUnicodeString() retval=0000003a ret=7106f32e
000b:Call ntdll.NtOpenDirectoryObject(0032eab8,00000006,0032ead0) ret=7106f373
000b: open_directory( access=00000006, attributes=00000000, rootdir=0000,
directory_name=L"\\Sessions\\1\\BaseNamedObjects" )
000b: open_directory() = 0 { handle=0014 }
000b:Ret  ntdll.NtOpenDirectoryObject() retval=00000000 ret=7106f373
000b:Call ntdll.NtCreateEvent(0032ebe8,001f0003,0032ec00,00000000,00000000)
ret=7106fa89
000b: create_event( access=001f0003, manual_reset=1, initial_state=0,
objattr={rootdir=0014,attributes=00000082,sd={},name=L"__wineboot_event"} )
000b: create_event() = OBJECT_NAME_EXISTS { handle=0018 }
000b:Ret  ntdll.NtCreateEvent() retval=40000000 ret=7106fa89
000b:Ret  kernelbase.CreateEventW() retval=00000018 ret=7bc935ff
000b:Ret  KERNEL32.CreateEventW() retval=00000018 ret=00406871
000b:Call KERNEL32.ResetEvent(00000018) ret=00406881
000b:Call kernelbase.ResetEvent(00000018) ret=7bc935ff
000b:Call ntdll.NtResetEvent(00000018,00000000) ret=7106fed5
000b: event_op( handle=0018, op=2 )
000b: event_op() = 0 { state=0 }
000b:Ret  ntdll.NtResetEvent() retval=00000000 ret=7106fed5
000b:Ret  kernelbase.ResetEvent() retval=00000001 ret=7bc935ff
000b:Ret  KERNEL32.ResetEvent() retval=00000001 ret=00406881
000b:Call ntdll.NtQuerySystemInformation(00000001,0032ee10,0000000c,00000000)
ret=0040697f
000b:Ret  ntdll.NtQuerySystemInformation() retval=00000000 ret=0040697f
000b:Call ntdll.RtlAllocateHeap(00010000,00000000,000000c0) ret=0040699a
000b:Ret  ntdll.RtlAllocateHeap() retval=0002db60 ret=0040699a
000b:Call
ntdll.NtPowerInformation(0000000b,00000000,00000000,0002db60,000000c0)
ret=004069c2
000b:Ret  ntdll.NtPowerInformation() retval=00000000 ret=004069c2
000b:Call msvcrt.wcscmp(0032f050 L"",0040b700 L"AuthenticAMD") ret=004081a8
000b:Ret  msvcrt.wcscmp() retval=ffffffbf ret=004081a8
000b:trace:seh:NtRaiseException code=c0000005 flags=0 addr=0x402555 ip=402555
tid=000b
000b:trace:seh:NtRaiseException  info[0]=0000000000000001
000b:trace:seh:NtRaiseException  info[1]=000000000040b6e0
000b:trace:seh:NtRaiseException  rax=0000000000000001 rbx=0000000000000000
rcx=0000000000000000 rdx=0000000000000000
000b:trace:seh:NtRaiseException  rsi=000000000040b6e0 rdi=00000000000000c0
rbp=0000000000000000 rsp=000000000032ecc0
000b:trace:seh:NtRaiseException   r8=000000000007ffff  r9=000000000032e542
r10=0000000000000000 r11=0000000000000246
000b:trace:seh:NtRaiseException  r12=0000000000000000 r13=00000000000000c0
r14=0000000000000000 r15=000000000040a685 
--- snip ---

Problem is the assembly wrapper for 'cpuid'

https://source.winehq.org/git/wine.git/blob/4a8483044ea346e09b4f2769fd1f869a6e4533f6:/programs/wineboot/wineboot.c#l188

--- snip ---
 188 extern void do_cpuid( unsigned int ax, unsigned int *p );
 189 #if defined(_MSC_VER)
 190 void do_cpuid( unsigned int ax, unsigned int *p )
 191 {
 192     __cpuid( p, ax );
 193 }
 194 #elif defined(__i386__)
 195 __ASM_GLOBAL_FUNC( do_cpuid,
 196                    "pushl %esi\n\t"
 197                    "pushl %ebx\n\t"
 198                    "movl 12(%esp),%eax\n\t"
 199                    "movl 16(%esp),%esi\n\t"
 200                    "cpuid\n\t"
 201                    "movl %eax,(%esi)\n\t"
 202                    "movl %ebx,4(%esi)\n\t"
 203                    "movl %ecx,8(%esi)\n\t"
 204                    "movl %edx,12(%esi)\n\t"
 205                    "popl %ebx\n\t"
 206                    "popl %esi\n\t"
 207                    "ret" )
 208 #elif defined(__x86_64__)
 209 __ASM_GLOBAL_FUNC( do_cpuid,
 210                    "pushq %rbx\n\t"
 211                    "movl %edi,%eax\n\t"
 212                    "cpuid\n\t"
 213                    "movl %eax,(%rsi)\n\t"
 214                    "movl %ebx,4(%rsi)\n\t"
 215                    "movl %ecx,8(%rsi)\n\t"
 216                    "movl %edx,12(%rsi)\n\t"
 217                    "popq %rbx\n\t"
 218                    "ret" )
 219 #else
 220 void do_cpuid( unsigned int ax, unsigned int *p )
 221 {
 222     FIXME("\n");
 223 }
 224 #endif

...
 249 static void get_identifier( WCHAR *buf, size_t size, const WCHAR *arch )
 250 {
 251     static const WCHAR fmtW[] = {'%','s',' ','F','a','m','i','l','y','
','%','u',' ','M','o','d','e','l',
 252                                  ' ','%','u','
','S','t','e','p','p','i','n','g',' ','%','u',0};
 253     unsigned int regs[4] = {0, 0, 0, 0}, family, model, stepping;
 254 
 255     do_cpuid( 1, regs );
 256     model = get_model( regs[0], &stepping, &family );
 257     swprintf( buf, size, fmtW, arch, family, model, stepping );
 258 }
--- snip ---

There are other crashes as well, they need to be treated separately.

I think the release procedure should be changed that last-day changes need to
pass at least a basic test, i.e. creating/updating WINEPREFIX and maybe running
some winetricks recipes.

$ wine --version
wine-4.12

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list