Billy Laws
621af9e7e8
ARM64EC: Switch to exception-based native syscall dispatch
...
The previous approach assumed that ntdll wouldn't have been patched
before FEX was loaded, but that isn't necessarily the case thanks to
CEF. This takes the same approach used by xtajit which wine recently gained
support for wine. The overhead to this isn't ideal but most syscalls
aren't directly done through x86 code anyway and in the future FEX could
forward unpatched thunks to their ARM variants at JIT time.
2024-09-07 15:30:00 +00:00
Billy Laws
f4d107c8f0
ARM64EC: Split out FEX -> packed EC context conversion from reconstruction
2024-09-07 15:29:48 +00:00
Ryan Houdek
49b40b71a6
Merge pull request #4030 from bylaws/eccfg
...
Windows: Load per-application configs
2024-09-03 16:11:42 -07:00
Ryan Houdek
e415b9443f
Merge pull request #4032 from bylaws/small
...
Windows: Fix missing pragma and license text
2024-09-03 13:47:43 -07:00
Billy Laws
b0474816c7
Windows: Fix missing pragma and license text
2024-09-03 20:30:07 +00:00
Billy Laws
941b065da6
Windows: Fill in per-core MIDR information
2024-09-03 20:29:37 +00:00
Billy Laws
ccba993ca9
Windows: Load per-application configs
2024-09-03 20:25:21 +00:00
Ryan Houdek
c413d7950b
FEXInterpreter: Support portable installs
2024-09-02 09:37:21 -07:00
Ryan Houdek
fbf62f1296
Merge pull request #3998 from Sonicadvance1/move_midr_fetch
...
HostFeatures: Moves MIDR querying to the frontend
2024-08-23 15:19:18 -07:00
Billy Laws
fc2917117e
ARM64EC: Always use the CPU area context for BeginSimulation
...
New wine tests suggest x0 holding the pointer to the correct context is
just a coincidence so avoid relying on it.
2024-08-23 21:43:09 +00:00
Ryan Houdek
0ec724cf1f
HostFeatures: Moves MIDR querying to the frontend
...
The MIDR querying is inherently OS specific and needs a bit of special
casing. Instead let the frontend inform FEXCore how many CPU cores there
are and their MIDRs instead.
This lets us keep the Linux specific code in the frontend.
2024-08-23 00:53:53 -07:00
Ryan Houdek
b6cb897896
Merge pull request #3994 from bylaws/iofix
...
Windows: Fix some file operations on actual Windows
2024-08-22 14:01:56 -07:00
Billy Laws
6aa95d82f2
Windows: Query FileStandardInformation for getting file EOF info
...
FileEOFInformation is write-only on actual windows.
2024-08-22 14:34:45 +00:00
Billy Laws
7c34f449d1
Windows: Translate file open flags passed to NtCreateFile
2024-08-22 14:34:45 +00:00
Billy Laws
e9435203a0
Windows: Fix access() implementation
...
Had the result inverted.
2024-08-22 14:33:06 +00:00
Billy Laws
8d9ba0e102
ARM64EC: Fix ContextFlag member tests
...
There is a common arch bit that is included in each individual mask,
explicitly test for equality against the whole mask to avoid just
testing for this.
2024-08-22 14:31:11 +00:00
Ryan Houdek
eadb502059
Merge pull request #3978 from bylaws/create
...
Windows: Implement CreateDirectoryW CRT function
2024-08-20 11:39:57 -07:00
Ryan Houdek
8e1695afa3
Merge pull request #3977 from bylaws/wowex
...
WOW64: Improve exception handling
2024-08-20 11:39:22 -07:00
Ryan Houdek
1caa31c5cb
Merge pull request #3962 from Sonicadvance1/remove_vixl_requirement
...
HostFeatures: Removes vixl usage
2024-08-19 14:31:13 -07:00
Billy Laws
9067f3513a
Windows: Implement CreateDirectoryW CRT function
...
Used when the .fex-emu config dir doesn't exist. Also fixes up
CreateFile to not leak memory.
2024-08-19 19:11:17 +00:00
Billy Laws
409d691877
WOW64: Only handle unaligned atomics in JIT code
2024-08-19 19:07:30 +00:00
Billy Laws
1762ff0393
WOW64: Spill EFlags into the FEX state when reconstructing JIT context
2024-08-19 19:07:30 +00:00
Billy Laws
4d26178f25
Windows: Commonise guest exception handling logic and use for WOW64
2024-08-19 19:07:29 +00:00
Ryan Houdek
33cef7c8cd
CRT: New symbols that fmt uses
2024-08-18 13:21:17 -07:00
Billy Laws
ea6c05a46a
Windows: Install libraries to CMAKE_INSTALL_LIBDIR
2024-08-16 23:43:55 +00:00
Ryan Houdek
40d12c4d0e
HostFeatures: Removes vixl usage
...
If we query the CPU flags ourselves then vixl is no longer a
compile-time or runtime dependency unless the vixl disassembler or
simulator is built.
A bit spicy from all the feature bits we need to load up.
2024-08-16 08:36:52 -07:00
Ryan Houdek
ef4c4f6e9b
FEXCore: Disable vixl linking if vixl disasm or simulator is disabled
...
This was mostly there, just needed to remove some extraneous headers and
only insert vixl in to the library list if the options were enabled.
2024-08-16 07:29:41 -07:00
Ryan Houdek
df0ecad15b
Merge pull request #3933 from bylaws/arm64-suspend
...
Support cooperative suspend on ARM64EC
2024-08-15 01:22:28 -07:00
Billy Laws
16b007df33
Windows: Partially implement the registry read API
2024-08-13 13:31:32 +00:00
Billy Laws
3cbc421c7e
Windows: Detect CPU features using the registry
...
Native Windows does not support ID instruction emulation, instead it
populates registry keys containing their values.
2024-08-13 13:31:32 +00:00
Ryan Houdek
03ca3e7e68
Merge pull request #3934 from bylaws/wow64-b
...
WOW64: Support the JIT API as used by Windows
2024-08-10 09:07:58 -07:00
Ryan Houdek
2c3e6cbe65
Merge pull request #3932 from bylaws/arm64-callchk
...
ARM64EC: Install a custom call checker to bypass NTDLL function patches
2024-08-10 09:07:31 -07:00
Ryan Houdek
0ecfc651b6
Merge pull request #3931 from Sonicadvance1/move_hostfeatures_init
...
FEXCore: Pass HostFeatures in to CreateNewContext directly
2024-08-09 20:30:17 -07:00
Ryan Houdek
4a3250ddea
Merge pull request #3928 from bylaws/winval
...
InvalidationTracker: Better match Windows code invalidation behaviour
2024-08-09 20:29:57 -07:00
Billy Laws
ea4004ec9d
ARM64EC: Support cooperative suspend
...
When a suspend request occurs on a running thread, Windows gives the JIT
~10s to pause and NtContinue with the x86 context. Resumption is then
done through BeginSimulation.
2024-08-09 14:34:17 +00:00
Billy Laws
26a8a2717c
WOW64: Mark the CPU area context as dirty initially
...
After thread creation, the WOW64 CPU area context needs to be flushed
into the FEX state before entering the JIT. Wine explicitly calls
BTCpuSetContext to trigger this but Windows doesn't.
2024-08-09 11:57:09 +00:00
Billy Laws
4c0e6d5779
WOW64: Shift down used TLS slots
...
Fixes a crash on native Windows.
2024-08-09 11:57:09 +00:00
Billy Laws
a350ef5d1b
WOW64: Match the Windows function protoypes
2024-08-09 11:57:09 +00:00
Billy Laws
2cc0a867a9
ARM64EC: Set the InSimulation TEB flag when inside the JIT
...
This is used by the kernel to determine whether to perform cooperative
suspend.
2024-08-09 11:52:03 +00:00
Billy Laws
9d9bd750e2
ARM64EC: Install a custom call checker to bypass NTDLL function patches
...
Some programs will hook the NTDLL exports that FEX depends on, the
regular ARM64EC call checker will detect such patches and invoke the
JIT to run them, which leads to infinite recursion if those same
exports are used during code compilation. Fix this by resolving all
patchable FFSs to their native ARM implementations for all indirect
calls performed by FEX, skipping any x86 patches.
2024-08-09 11:48:18 +00:00
Ryan Houdek
85d1b573ef
Merge pull request #3927 from bylaws/winafp
...
ARM64EC: Set appropriate AFP and SVE256 state on JIT entry/exit
2024-08-08 22:21:23 -07:00
Ryan Houdek
2f8c5b4820
FEXCore: Pass HostFeatures in to CreateNewContext directly
...
The class constructor for ContextImpl::CPUID requires HostFeatures to be
available at construction time. Pass the host features struct directly
through during construction time instead, which cleans up the interface
slightly and fixes that issue.
2024-08-08 21:02:41 -07:00
Ryan Houdek
7b1d9540b7
Merge pull request #3925 from bylaws/arm64ecrt
...
ARM64EC: Introduce FEX-side CRT and Windows API replacements
2024-08-08 17:57:25 -07:00
Ryan Houdek
24ea4b7537
Merge pull request #3924 from bylaws/svc
...
ARM64EC: Handle direct syscall instructions
2024-08-08 17:32:56 -07:00
Billy Laws
93ab57454a
InvalidationTracker: Better match Windows code invalidation behaviour
...
When given a NULL base address, Windows invalidation callbacks will
ignore the given size and invalidate all code.
2024-08-08 12:46:49 +00:00
Billy Laws
fe43a2bcb2
ARM64EC: Set appropriate AFP and SVE256 state on JIT entry/exit
2024-08-07 18:34:35 +00:00
Billy Laws
e836639427
ARM64EC: Manually define the ARM64EC linker structures
2024-08-07 15:49:41 +00:00
Billy Laws
8f372821f8
Windows: Use the FEX CRT
2024-08-07 15:49:41 +00:00
Billy Laws
6376d06bed
Windows: Introduce a minimal Windows API replacement
2024-08-07 15:49:41 +00:00
Billy Laws
1bb293d4be
Windows: Pull in some math and formatting functions from Musl
2024-08-07 15:49:41 +00:00