While using [x64dbg](https://x64dbg.com/) I was experiencing incredibly strange issue - `int3` was swallowed and `KiUserExceptionDispatcher` was never invoked.
Turns out that x64dbg ([TitanEngine](https://github.com/x64dbg/TitanEngine/blob/x64dbg/TitanEngine/…) expects system breakpoint to be first breakpoint that will be triggered and it always swallows it (it's hardcoded no setting to change it's behavior).
That means if you have a DLL with `int3` for example
```c
LONG ExceptionHandler(EXCEPTION_POINTERS *ExceptionInfo) {
ExceptionInfo->ContextRecord->Rip++;
return EXCEPTION_CONTINUE_EXECUTION;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
AddVectoredExceptionHandler(1, ExceptionHandler);
asm("int $0x03; nop; nop;");
}
return TRUE;
}
```
That `int3` would be swallowed and `ExceptionHandler` never invoked when running under x64dbg.
Now with this MR applied it works correctly and as expected (same as on Windows).
Another interesting thing is that without this MR it wouldn't just swallow `int3` but even skip first `nop` aswell and RIP would end up on 2nd `nop`.
--
v3: ntdll: loader_init() invoke breakpoint before loading dlls
https://gitlab.winehq.org/wine/wine/-/merge_requests/4655
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v5: vkd3d-shader/hlsl: Parse Buffer types.
tests/shader-runner: Change probe directive syntax on shader_test files.
tests/shader-runner: Change resource declaration syntax on shader_test files.
tests/shader-runner: Support SRV buffers.
tests/shader-runner: Separate resource_type into type and dimension.
vkd3d-shader/hlsl: Use positive logic on add_*_method_call() functions.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569
On Tue Feb 6 18:17:58 2024 +0000, Piotr Caban wrote:
> That's a shame, I was hoping that there will be correlation between
> maximum values. I'm OK with current patch in this case.
Note that most "extreme" differences from UTC time zone are:
- +14 hours at Line Islands (Kiribati)
- -12 hours in and around Baker Islands
I guess that may by the cause of 14 hours range difference.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5024#note_60424
--
v4: win32u: Don't move an owned window on top of its owner if it's not activated ever.
user32/tests: Test the z-order for an owned window that's not activated ever.
win32u: Skip windows that are not activated even once in activate_other_window().
user32/tests: Add window activation tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4066
--
v14: tests/d3d12: Test multiple clip distance inputs in test_clip_distance().
tests/d3d12: Use five clip distances for the multiple test in test_clip_distance().
vkd3d-shader/ir: Transform clip/cull outputs and patch constants into arrays.
vkd3d-shader/ir: Transform clip/cull inputs into an array.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/564
Checking flags of the thread desktop to determine whether virtual desktop is on is unreliable.
For example, CEF applications create their own desktop and so is_virtual_desktop() could incorrectly
report that virtual desktop is off.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55810
--
v4: server: inherit wine internal desktop flags when creating desktops.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4786