https://bugs.winehq.org/show_bug.cgi?id=52157
Bug ID: 52157 Summary: ntdll:wow64 fails on 64-bit Wine Product: Wine Version: unspecified Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: fgouget@codeweavers.com Distribution: ---
ntdll:wow64 fails on 64-bit Wine:
wow64.c:329: Test failed: debugging failed wow64.c:332: Test failed: BeingDebugged is 0 wow64.c:337: Test failed: BeingDebugged is 0
https://test.winehq.org/data/patterns.html#ntdll:wow64
The timeout only happens on WoW64 wineprefixes but impacts both real machines (cw-gtx560, cw-rx460) and VMs (notably the TestBot's debiant2 VM).
A bisect shows that this started with the commit below:
commit a041075cd2c26874757e0b6e1449c23c1326241c Author: Alexandre Julliard julliard@winehq.org Date: Thu Dec 2 09:59:49 2021 +0100
makefiles: Support per-platform values for EXTRADLLFLAGS.
Signed-off-by: Alexandre Julliard julliard@winehq.org
However the current thought is that the commit only revealed a preexisting bug by changing the ntdll base address.
https://bugs.winehq.org/show_bug.cgi?id=52157
François Gouget fgouget@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Regression SHA1| |a041075cd2c26874757e0b6e144 | |9c23c1326241c Keywords| |source, testcase
https://bugs.winehq.org/show_bug.cgi?id=52157
Bernhard Übelacker bernhardu@mailbox.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |bernhardu@mailbox.org
--- Comment #1 from Bernhard Übelacker bernhardu@mailbox.org --- It looks like the call to DbgUiIssueRemoteBreakin expects the target process to be of the same bitness as itself.
It tries to create a thread in the 32-bit process with the address of the 64-bit function DbgUiRemoteBreakin.
This pointer get truncated the the func variable, therefore the check in invoke_system_apc fails and returns STATUS_INVALID_PARAMETER.
dlls/ntdll/unix/server.c:541 if (reserve == call->create_thread.reserve && commit == ... && (ULONG_PTR)func == call->create_thread.func && ...)
But I am not completely sure because that way the test shouldn't have succeeded before?
# ntdll_test.exe wow64 (rr) print/x call->create_thread $47 = {type = 0xc, flags = 0x0, func = 0x170043270, arg = 0x0, zero_bits = 0x0, reserve = 0x0, commit = 0x0} (rr) print DbgUiRemoteBreakin $48 = {void (void *)} 0x170043270 <DbgUiRemoteBreakin>
# C:\windows\syswow64\notepad.exe (rr) print/x call->create_thread $22 = {type = 0xc, flags = 0x0, func = 0x170043270, arg = 0x0, zero_bits = 0x0, reserve = 0x0, commit = 0x0} (rr) print func $23 = (void *) 0x70043270
# 0x7bc412e1 in DbgUiRemoteBreakin@4
https://bugs.winehq.org/show_bug.cgi?id=52157
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|NEW |RESOLVED Fixed by SHA1| |e16ccaf05d845ea490d845d896c | |b284b5b00aa87
--- Comment #2 from Alexandre Julliard julliard@winehq.org --- Fixed by e16ccaf05d845ea490d845d896cb284b5b00aa87.
https://bugs.winehq.org/show_bug.cgi?id=52157
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #3 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 7.0-rc5.