I haven't seen any software that uses this, but some older software out there might use it, so it's good idea to export it.
--
v5: ntoskrnl.exe: add KeNumberProcessors export.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1139
Log: get_dc_attr always failed for meta dc,so GdiGetCodePage always
return CP_ACP. And GetTextCharset is similar to this situation.
Finally, leading to an error result of text_mbtowc call by ExtTextOutA
and an error result of METADC_ExtTextOut.
Signed-off-by: chenjiangyi <chenjiangyi(a)uniontech.com>
Change-Id: Icb6a8d57848935bc5c1b3913c155148af43eca0d
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6385
Overriding the SDL_VIDEODRIVER variable (for Wayland support as an example)
on the Linux side can lead to some games under Wine failing to load (so treat
that variable as special).
--
v6: ntdll: Add SDL audio driver variables to the special variables list.
ntdll: Add SDL video driver variables to the special variables list.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5231
This serie is a first attempt to provide a solution to bug 57308 [1].
Basically, Arch distro is looking for Wine support in distributing
debug information for Wine PE modules separated from image.
A quick overview of distro (Debian, Fedora, Arch) situation i
(I may have missed a couple of items), but:
- no distro ship separate debug information for PE modules
(they do it for ELF ones though)
- at best, they ship unstripped PE modules.
IMO, we need to help them pave the way to what should be the best
expected situation (in Wine and wrt distros) to support separate
debug information for PE images.
First, I believe we need to use a (solid) key to bind the
stripped image and the file holding the debug information.
In ELF format, this is typically done by inserting a
.note.gnu.build-id section (in both stripped image and
debug information file) which contains the key.
This key is used to either search in fixed location
(eg /usr/lib/.debug), or as key to download the debug
information from a remote server (debuginfod).
The key is generally made of a hash of (some sections of)
the image file.
This allows (esp. in the case of downloading the debug
information from a debugger) to discriminate between
several versions of the same module.
I think we should target this kind of solution instead of
storing the debug information alongside the module
(usually done as ntdll.dll.debug).
This wouldn't let debuggers download the expected debug info
upon request.
Fortunately, gcc and clang provide a build-id option
(when generating PE images) which stores this key in
the PE image.
What this serie does:
- fixes & improves dbghelp in the support of the
build-id information from gcc/mingw & clang,
- improves Wine's configure script so that
clang can be used to generate dwarf debug information
and build-id information in PE builds,
- adds a couple of additional search locations for
debug information files,
It takes the following assumptions for the storage:
- debug information files for PE images are stored
in same hierarchy as debug information files for
ELF images (eg /usr/lib/.debug)
- naming of such files is done as ELF, ie by using
the hex string generated from the binary blob
of the key. This is *NOT* the usual way how the
GUID will be printed (because the first 3 integers
of the GUID are stored in little-endian format).
(Note: I had to make a choice here. I don't have
strong arguments one way or the other, but we
need to agree on the convention here).
What distro should do to support separate debug info:
- configure Wine with --enable-build-id
- adapt at least the packaging tool to extract the
key out of unstripped image [2],
- if binutils isn't compiled with PE support (this
is apparently the Arch case), adapt the scripts to
use x86_64-objcopy instead of objcopy (and friends).
I marked this MR as draft for now, as:
- I still need to polish some items (like the default
location for looking up debug information files),
- wait for feedback on this proposal (it does make
a couple of assumptions that need sharing IMO),
Further steps:
- the steps above are mainly targetted to have a solution
for packaged download of debug information files,
- this should be integrated in debuginfod (server side:
ingestion of PE files and client side: ensure gdb, lldb
are compatible; implement debuginfod in winedbg).
Feed back welcomed!
[1]: https://bugs.winehq.org/show_bug.cgi?id=57308
[2]:
The least invasive readelf replacement (assuming binutils is compiled with PE support).
(otherwise, use x86_64-objdump)
BUILDID=`objdump -p "$INPUT" | sed -n "/RSDS signature / {s/.*signature //; s/ age.*//p; q;}"`
BUILDID=${BUILDID:6:2}${BUILDID:4:2}${BUILDID:2:2}${BUILDID:0:2}${BUILDID:10:2}${BUILDID:8:2}${BUILDID:14:2}${BUILDID:12:2}${BUILDID:16}
Additional note: gcc/mingw puts the desired debug entry inside a dedicated
section (.buildid), while clangs keeps it in .rdata (as msvc does).
So, this invalidates any attempt to get information from the .buildid section
(as stated in bug report).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6715
I think it would be very nice to have something like that to reduce the burden of implementing COM interfaces. This shows for instance on the windows.gaming.input module a 30% LoC reduction (from ~6800 to ~4700), even though the module already had a boilerplate helper macros already.
The MR introduces macros to automatically implement each IUnknown method, as well as all of them at once. It also includes a helper to implement IInspectable methods at once, as well as macros to forward both interface methods to a base interface or an outer object. Last, it provides higher-level macros to implement a main interface and any number of sub interfaces and generate IUnknown, forwarding and vtables for all of them at once, with IInspectable support when needed.
It uses widl to generate additional per-interface macros, for things like inheritance and vtable generation. The rest of the macros are otherwise shared in a Wine-specific header.
The implementation is split to show individual macro being used, although they are later replaced by higher-level macros. The individual helpers are still useful in some corner cases where specific behavior needs to be implemented, or for aggregating classes.
--
v3: include: Add a parameter to COM helper END to control QI traces.
windows.gaming.input: Use the new COM macros everywhere possible.
include: Introduce new macros for COM heritage implementation.
widl: Generate some INTERFACE_IMPL/FWD helper macros.
include: Introduce new macros for IInspectable WinRT implementation.
include: Introduce new macros for COM IUnknown implementation.
include: Introduce new macros for COM QueryInterface implementation.
widl: Generate some QUERY_INTERFACE helper macros.
include: Introduce new macros for COM AddRef/Release implementation.
include: Introduce new helper macros for COM implementation.
windows.gaming.input: Use the new INTERFACE_VTBL macros.
widl: Generate some INTERFACE_VTBL helper macros.
windows.gaming.input: Use a separate interface for IAgileObject.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6207
Some games with support for the haptic feedback and speaker features of the Sony DualSense controller select the controller's audio output by filtering on the ContainerId IMMDevice property to find one that matches the controller's HID's. This MR allows this information to be accessible from the IMMDevice's property store when the audio driver provides it (none for now, but I intend to add that feature to `winepulse.drv` and maybe `winealsa.drv`)
This is made specific to containerId rather than supporting VT_CLSID on every property because Wine currently stores VT_BLOBs directly in the registry value, which does not allow us to safely disambiguate between VT_CLSID and VT_BLOB values when reading from registry.
--
v7: mmdevapi: Invalidate ContainerID of unavailable audio devices.
https://gitlab.winehq.org/wine/wine/-/merge_requests/359