Ryan Houdek
341a5196ba
Merge pull request #5701 from lioncash/thread
...
Thread: Amend new thread handling in HandleNewClone()
2026-07-11 17:09:59 -07:00
Ryan Houdek
48ce5bf6e6
Merge pull request #5714 from lioncash/readahead
...
x32/FD: Fix readahead upper offset type
2026-07-11 11:20:49 -07:00
Ryan Houdek
617a518714
Merge pull request #5713 from lioncash/select
...
x32/FD: Correct total word calculation in select() variants
2026-07-11 11:19:29 -07:00
Ryan Houdek
480f45f2f3
Merge pull request #5712 from lioncash/bpf
...
BPFEmitter: Amend instruction class checking in HandleStore()
2026-07-11 11:08:58 -07:00
Ryan Houdek
0e8b01c1b5
Merge pull request #5711 from lioncash/fault
...
x64/Thread: Amend faulting copy handling related to LDTs
2026-07-11 11:04:47 -07:00
LC
a90a7dbec7
x32/FD: Fix readahead upper offset type
...
This should be a uint32_t
2026-07-11 13:33:11 -04:00
LC
2250bd58a2
x32/FD: Deduplicate guest and host fd set management
...
Same behavior, but less copy pastey
2026-07-11 13:23:19 -04:00
LC
126be45ed1
x32/FD: Correct total word calculation in select() variants
...
Previously this would result in a larger amount of words specified than
necessary.
e.g. Given nfds = 1:
With AlignUp(1, 32) / 4, we'd end up with supposedly eight words, when it
should only be one word.
On the other extreme, given a full fd set of 1024 fds, then we'd end up
with 256 words, when it should only be 32.
2026-07-11 12:53:08 -04:00
LC
e021a55abd
BPFEmitter: Amend instruction class checking in HandleStore()
...
This was previously checking for a load class, which would result in ST
clobbering the index register.
2026-07-11 12:26:11 -04:00
LC
2ad6254894
x64/Thread: Amend faulting copy handling related to LDTs
...
CopyToUser doesn't return the number of bytes copied, but rather returns
0 to indicate success, otherwise a fault has occurred (and the SIGSEGV
handler has set X0 to EFAULT)
2026-07-11 11:57:38 -04:00
LC
f16bc12b7d
SignalDelegator: Remove odd double negation in GuestSigProcMask
...
We can just reduce it to normal null comparisons.
2026-07-11 05:42:48 -04:00
Ryan Houdek
d2f096187c
Merge pull request #5705 from lioncash/thread3
2026-07-10 22:34:04 -07:00
LC
8b0f07b2dc
Syscalls: Remove unnecessary usages of namespace FEXCore::IR
...
These aren't necessary.
2026-07-10 21:02:12 -04:00
LC
017c898ed0
x64/Signals: Amend set size in rt_sigtimedwait
...
We should be checking the size passed in, not the sizeof of it.
2026-07-10 19:40:05 -04:00
LC
85b8e91b57
Thread: Amend new thread handling in HandleNewClone()
...
Ensures that newly cloned threads get tracked properly.
2026-07-10 18:35:58 -04:00
Ryan Houdek
0bdf15977f
Merge pull request #5697 from lioncash/thread
...
x32/Thread: Move writability check around in waitpid
2026-07-10 10:34:56 -07:00
Ryan Houdek
8a844f9cca
Merge pull request #5695 from lioncash/socket
...
Socket: Pass size by reference in getsockopt
2026-07-10 10:34:33 -07:00
Ryan Houdek
8fbde84380
Merge pull request #5696 from lioncash/time
...
x32/Time: Correct sizeof expression in utimensat
2026-07-10 10:31:47 -07:00
Ryan Houdek
00826d3327
Merge pull request #5694 from lioncash/rlimit
...
x32/Info: Only modify output in getrlimit/ugetrlimit if successful
2026-07-10 10:27:51 -07:00
Ryan Houdek
5dd0477440
Merge pull request #5689 from lioncash/msg
...
x32/Msg: Fix result comparison in mq_getsetattr
2026-07-10 10:15:15 -07:00
Ryan Houdek
c6f823f855
Merge pull request #5688 from lioncash/pidfd
...
Thread: Amend pidfd_open check
2026-07-10 10:14:49 -07:00
Ryan Houdek
2af7c24e79
Merge pull request #5687 from lioncash/limit
...
x32/Thread: Fix off-by-one in get_thread_area
2026-07-10 10:14:29 -07:00
Ryan Houdek
94ccfefa84
Merge pull request #5686 from lioncash/fd
...
x32/FD: Ensure sendfile updates offset if set
2026-07-10 10:14:18 -07:00
LC
f4c50105ba
x32/Thread: Move writability check around in waitpid
...
Same behavior, but catches the write before it actually occurs.
2026-07-10 08:08:45 -04:00
LC
3395bedc2b
x32/Time: Correct sizeof expression in utimensat
...
Ensures we check the proper type.
2026-07-10 08:04:56 -04:00
LC
7a14210e2b
Socket: Pass size by reference in getsockopt
...
Previously this was passing by value.
2026-07-10 08:01:29 -04:00
LC
d206b67ca8
x32/Info: Only modify output in getrlimit/ugetrlimit if successful
...
Avoids trampling over input data.
2026-07-10 07:49:44 -04:00
LC
d5ae87b5ca
Thread: Amend pidfd_open check
...
Checks for success.
2026-07-10 06:25:43 -04:00
LC
02028eb1ad
x32/Msg: Fix result comparison in mq_getsetattr
...
Checks against failure instead of 1.
2026-07-10 06:19:11 -04:00
LC
37b1432514
x32/Thread: Fix off-by-one in get_thread_area
...
12, 13, and 14 are the only valid TLS areas.
2026-07-10 06:06:30 -04:00
LC
6e8bc337aa
x32/FD: Ensure sendfile updates offset if set
2026-07-10 05:58:49 -04:00
LC
4069a9f7d5
Timer: Fix typo in timer_gettime
...
This should be passed by reference rather than by value.
2026-07-10 05:33:06 -04:00
Ryan Houdek
24647820d7
Linux: Ensure 64-bit vsyscall page is tracked
...
It's a purely virtual page even on x86, so we need to manually add it to
tracking.
2026-06-03 18:03:31 -07:00
Ryan Houdek
7e8aa711ef
Linux: Pass gettimeofday through glibc
...
This ensures that it hits the VDSO path if possible.
2026-06-03 17:45:41 -07:00
Pepper Gray
92dce9a2ea
add missing header <thread>
...
building using musl fails due to missing defintions:
```
Source/Tools/LinuxEmulation/LinuxSyscalls/Syscalls.cpp:913:23: error: no member named 'sleep_for' in namespace 'std::this_thread'
913 | std::this_thread::sleep_for(std::chrono::milliseconds {10});
| ^~~~~~~~~
1 error generated.
```
Signed-off-by: Pepper Gray <hello@peppergray.xyz >
2026-05-29 13:19:24 +02:00
Tony Wasserka
a040740974
CodeCache: Ensure atomicity of code page finalization
2026-05-13 22:53:09 +02:00
Tony Wasserka
5be0dc9fc5
CodeCache: Implement lazy code loading
2026-05-13 21:25:47 +02:00
Tony Wasserka
52ad434d24
LinuxSyscalls: Defer MappedResource deletion until after code invalidation
...
This ensures that any code buffer memory owned by the MappedResource is
invalidated before being deallocated.
2026-05-13 21:25:47 +02:00
Ryan Houdek
7506cb4ea1
Merge pull request #5483 from neobrain/fix_guest_wrapper_code_cache
...
CodeCache: Delay cache loading for guest library wrappers until after LoadLib
2026-05-06 18:04:55 -07:00
Tony Wasserka
b13b46eefe
CodeCache: Delay cache loading for guest library wrappers until after LoadLib
...
These libraries need to be initialized before relocating their caches,
since the guest function hashes won't be registered before.
2026-05-05 16:29:39 +02:00
Tony Wasserka
06d77c1c19
SignalDelegator: Simplify support for musl's sigset_t
2026-05-04 16:28:47 +02:00
Ryan Houdek
85773995e1
Merge pull request #5470 from peppergrayxyz/header_redirect
...
fix include redirect for <poll.h> and <signal.h>
2026-05-03 04:41:18 -07:00
Pepper Gray
00b4777290
fix include redirect for <poll.h> and <signal.h>
...
building on musl/clang causes redirecting incorrect #includes warnings:
```
warning: redirecting incorrect #include <sys/poll.h> to <poll.h> [-W#warnings]
warning: redirecting incorrect #include <sys/signal.h> to <signal.h> [-W#warnings]
```
include headers instead of sys/headers.
fix : #5469
Signed-off-by: Pepper Gray <hello@peppergray.xyz >
2026-05-03 13:22:32 +02:00
Ryan Houdek
197e6de194
Merge pull request #5462 from peppergrayxyz/uc_sigmask
...
determine sigset_t fieldname to enhance portability (musl)
2026-05-03 03:48:53 -07:00
Ryan Houdek
c402b15bd3
Merge pull request #5464 from peppergrayxyz/tgkill
...
add header and classpath for tgkill
2026-05-03 03:46:07 -07:00
Pepper Gray
b1aab0e498
determine sigset_t fieldname to enhance portability (musl)
...
musl build fails due to access to internal glibc member:
```
FEX/Source/Tools/LinuxEmulation/LinuxSyscalls/SignalDelegator.cpp:655:39: error: no member named '__val' in '__sigset_t'
655 | .SigMask = _context->uc_sigmask.__val[0],
| ~~~~~~~~~~~~~~~~~~~~ ^
1 error generated.
```
add check to determine private glibc or musl member name or throw an error.
fixes : #5461
Signed-off-by: Pepper Gray <hello@peppergray.xyz >
2026-05-03 12:17:09 +02:00
Pepper Gray
57d9dc037d
add header and classpath for tgkill
...
building on clang/musl fails with:
```
FEX/Source/Tools/LinuxEmulation/LinuxSyscalls/GdbServer.cpp:1174:5: error: use of undeclared identifier 'tgkill'
1174 | tgkill(::getpid(), ::getpid(), SIGKILL);
| ^~~~~~
1 error generated.
```
include and use `FHU::Syscalls::tgkill`.
fixes : #5463
Signed-off-by: Pepper Gray <hello@peppergray.xyz >
2026-05-03 11:50:23 +02:00
Pepper Gray
e3cfe28848
use <signal.h> instead of glibc header to enhance portability (musl)
...
building using musl fails with:
```
FEX/Source/Tools/LinuxEmulation/LinuxSyscalls/ThreadManager.h:33:10: fatal error: 'bits/types/sigset_t.h' file not found
33 | #include <bits/types/sigset_t.h>
| ^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
```
`<bits/types/sigset_t.h>` is a glibc internal header, use <signal.h> instead.
fixes : #5459
Signed-off-by: Pepper Gray <hello@peppergray.xyz >
2026-05-03 11:03:38 +02:00
Ryan Houdek
01a3ab6ca7
FEXCore: Use WritePriorityMutex for Code Invalidation Mutex
...
The previous `ForkableSharedMutex` using `std::shared_mutex` was showing
up as significant CPU time on arm64ec. In particular it was showing up
upwards of 700ms/S of CPU time for read-contented workloads at only
~2700 locks per second. The libc++ implementation for arm64ec must be
particularly gnarly for this to be so slow.
With this swapped over, it's now only spending around 56ms/S on the
contended shared lock, but at ~8000 locks per second. So a significant
uplift.
2026-03-31 19:02:51 -07:00
LC
5b4a5969cc
Merge pull request #5401 from Sonicadvance1/126
...
Linux/GuestFrames: Ensure MXCSR is saved and restored on signal
2026-03-28 22:25:59 -04:00