Commit Graph
112 Commits
Author SHA1 Message Date
Ryan Houdek a42bdd9c2f Fixes 64bit ppoll
32bit ppoll is completely wrong here.
Will be fixed in upcoming PR
2020-10-20 18:33:46 -07:00
Ryan Houdek db77d5f580 Shuffles more x86-64 specific syscalls to the correct folder 2020-10-13 16:56:09 -07:00
Ryan Houdek ee55204eaa Fixes 32bit syscalls
This doesn't change behaviour on the 64bit side of things.

Currently the 32bit syscall implementation is "best effort".
Anything that easily maps is passed through, and a few minor ones that
rely on iovec are handled.

Still around 80 syscalls that aren't punched through yet.

Few of these changes could have been split up so it's a bit of a
nightmare.
2020-10-06 18:46:26 -07:00
Ryan Houdek c39781275f Merge pull request #396 from FEX-Emu/skmp/execve-only-existing-files
syscalls: execve should fail on missing files
2020-09-22 15:25:08 -07:00
Stefanos Kornilios Mitsis Poiitidis a8a0a270f6 Syscalls: Execve should fail for not existing files 2020-09-23 01:22:14 +03:00
Stefanos Kornilios Mitsis Poiitidis 2425ab994b Thunks: Generation script refactor, generic callbacks 2020-09-22 14:35:38 +03:00
Ryan Houdek d0de92f97a Removes error and die in multithreaded forks
This can result in some terrible behaviour if something doesn't
immediately execve once it forks. Allow it instead of crashing out
though.
2020-09-16 11:29:57 -07:00
Ryan Houdek ddecec12ec Spam out a wackload more syscalls
Almost all of these end up being simple passthrough.
This covers most syscalls, the remaining ones are signal related, exec
related, or rseq required.

All of these syscalls exist prior to Linux 5.0. We are using these with
the expectation still that the host Linux implementation is 5.0 or
higher.
Once we implement newer syscalls we will need to start checking for host
Linux version. We don't really have a care about devices shipping older
4.x kernels atm.
2020-09-16 10:48:56 -07:00
Ryan Houdek 6f5e55c141 Merge pull request #372 from FEX-Emu/skmp/fix-brk-limit
Syscalls/BRK: Don't use more memory than mapped
2020-09-11 14:59:21 -07:00
Stefanos Kornilios Mitsis Poiitidis abcdff6a50 EmulatedFiles: Don't crash on too long paths 2020-09-12 00:53:39 +03:00
Stefanos Kornilios Mitsis Poiitidis b3ae845071 Syscalls/BRK: Don't use more memory than mapped 2020-09-12 00:39:11 +03:00
Stefanos Kornilios Mitsis Poiitidis 87dbefd0a3 Merge pull request #367 from Sonicadvance1/sigsuspend
Implements sigsuspend
2020-09-11 10:43:50 +03:00
Ryan Houdek 1309b4a0c5 Merge pull request #363 from Sonicadvance1/fix_thread_fork_shutdown
Ensures a process that has forked won't shutdown the other process
2020-09-11 00:05:22 -07:00
Stefanos Kornilios Mitsis Poiitidis f11b1a5c4b Merge pull request #360 from Sonicadvance1/memory_syscalls
Implements two more memory syscalls
2020-09-11 09:22:21 +03:00
Ryan Houdek fb6e3535d8 Implements capget and capset syscalls
These are safe to pass through to the host, there isn't any system data
handled here.

Some game I was testing used these
2020-09-10 22:30:51 -07:00
Ryan Houdek a3ee4dff45 Implements sigsuspend
This helps out Mono's garbage collector specifically. There is a minor
race that can currently occur with signal 63 but that technically should
only occur on a pause or stop condition.

Might need to change this behaviour if it becomes a problem
2020-09-10 21:50:29 -07:00
Ryan Houdek 0df06960e1 Ensures a process that has forked won't shutdown the other process
Since we track the PID and TID of the threads for signaling purposes, we
had the problem that if a process forked and the child then shuts down.
It was still tracking the parent thread as executing, thus it would send
it a tgkill to shut it down.

This was unintended behaviour and is now stopped
2020-09-10 18:21:16 -07:00
Ryan Houdek fb459701f4 Implements two more memory syscalls
These don't really do much in a coherent and UMA situation, but some
games are hitting them, so may as well as implement them
2020-09-10 16:38:37 -07:00
Ryan Houdek d39fe11427 Fixes getpriority syscall
Just use the syscall directly rather than call through the glibc
interface.

The getpriority syscall biases the return value so it never returns a
negative, while the glibc interface returns [-20,19), so you need to do
some errno juggling for the -1 return.

Just use the syscall directly instead

Fixes some game complaining heavily when getpriority results were wrong
2020-09-10 16:34:20 -07:00
Ryan Houdek 61072ba37e Has /proc/cpuinfo generated from CPUID
Instead of having this file mostly just copy and pasted, it'll now be
generated.
We end up losing a lot of supported flags with this change, which is for
the best since we wouldn't have actually supported those things.
2020-09-05 16:59:10 -07:00
Ryan Houdek 50349db4c6 Moves our entire execution model over to signal execution
This requires implementing custom ASM dispatchers for the interpreter
side of things so it works correctly.
Allows all of our CPU backends to safely support signaling.
This is a bit of a nightmare change and requires rethinking logic about
debugging in some instances.
2020-09-02 16:00:17 -07:00
Stefanos Kornilios Mitsis Poiitidis 45288506e1 Syscalls: Actually fix sched_getaffinity 2020-08-29 03:11:06 +03:00
Stefanos Kornilios Mitsis Poiitidis f16f7dcdd7 Syscalls: Fix sched_getaffinity 2020-08-29 00:18:20 +03:00
Ryan Houdek 758de4deaa Implements rt_sigpending
Any time a guest signal is blocked, add it to the guest signal mask.
This doesn't use a signal queue so repeat signals can end up being lost.
This is expected behaviour

This doesn't help with implementing the problem of unblocking signals
causing the masked signal to be resent
2020-08-20 13:47:03 -07:00
Ryan Houdek c7d14a33d4 Implements ioperm syscall as no permissions
This syscall requires the application to have root and will fail with
-EPERM otherwise.
Implementing this as just an -EPERM return allows Crispy Doom to run
2020-08-19 23:31:06 -07:00
Ryan Houdek 7700a4d24b Adds support for guest sigprocmask
This was causing our SIGBUS handling to fail in FTL
2020-08-18 21:00:33 +01:00
Stefanos Kornilios Mitsis Poiitidis cb34056f18 Merge pull request #294 from Sonicadvance1/aarch64_signals
Signals for AArch64
2020-08-12 19:47:10 +03:00
Ryan Houdek f705baf2f0 Extends SignalDelegator duty
It needs to track guest SigAltAction and have its own definitions for
sigaction and sa_mask. sa_mask specifically is defined differently
between the kernel and glibc.

Also fixes some issues with the SignalDelegator that posix tests found
2020-08-11 00:33:49 +01:00
Stefanos Kornilios Mitsis Poiitidis db633b8394 Thunklibs: Add partial X11, SDL, GL, EGL, asound, cmake integration 2020-08-08 14:48:20 +03:00
Ryan Houdek 5b6420ae4b Implements getitimer and setitimer syscalls 2020-08-02 18:17:00 -07:00
Stefanos Kornilios Mitsis Poiitidis 106892f824 Thunks: Use shared_mutex 2020-07-20 14:58:49 +03:00
Stefanos Kornilios Mitsis Poiitidis 8c8e6294b6 Thunks: ALTINST, OP_THUNK, basic infrastructure 2020-07-20 13:52:28 +03:00
Scott Mansell 183c5d9e22 Filesystem HLE: Intercept /proc/${getpid}/exe too 2020-07-18 09:16:59 +12:00
Ryan Houdek a1db6a0dec Adds new signal delegator class
Allows us to register host and guest signal delegators.
Currently only host signals are handled, guest signal delegation will
take a bit of work still.
2020-07-11 06:12:06 +01:00
Stefanos Kornilios Mitsis Poiitidis 630d66942c uname: Should return x86_64, not x64_64
Run into this in CS:GO.
With this fix it progresses much further, but still doesn't get to the menu.
2020-07-08 20:58:57 +03:00
Stefanos Kornilios Mitsis Poiitidis fc2d7656e0 syscalls: Warn on clone + ptrace instead of assert 2020-07-04 19:04:08 +03:00
Stefanos Kornilios Mitsis Poiitidis cb8f250078 syscalls: fork, vfork, eventfd2 2020-07-03 11:17:51 +03:00
Ryan Houdek 95f1775df5 Merge pull request #255 from FEX-Emu/skmp/implement-execve
syscalls: implement execve
2020-07-02 14:41:13 -07:00
Ryan Houdek 59cc3b576e Merge pull request #256 from FEX-Emu/skmp/implement-some-syscalls
syscalls: Implement a few easy ones
2020-07-02 14:40:25 -07:00
Ryan Houdek 03e084c7f0 Merge pull request #248 from FEX-Emu/fork_syscall
clone: Some support for fork, Flag validation
2020-07-02 14:39:23 -07:00
Stefanos Kornilios Mitsis Poiitidis 370397198b syscalls: (*)get/setxattr 2020-07-02 19:46:41 +03:00
Stefanos Kornilios Mitsis Poiitidis 9c48c7f487 syscalls: truncate,creat,chown,fchown,lchown,setpgid,getpgid,setfsuid,setfsgid,getsid,sync,syncfs 2020-07-02 19:34:21 +03:00
Stefanos Kornilios Mitsis Poiitidis 8234ffce3d syscalls: implement execve 2020-07-02 18:14:28 +03:00
Ryan Houdek 62f9917b79 Removes syscall strace parsing if not enabled
This was spending ~60seconds of time compiling on my c630.
Something about fmt string formatting causing heavy compile times on
ARM.
Better to just compile it out anyway.
2020-07-01 06:11:35 +01:00
Stefanos Kornilios Mitsis Poiitidis 2ccaea7d66 clone: Validate flags, cleanup 2020-06-30 16:23:43 +03:00
Ryan Houdek 8a5813e4d0 [WIP] Fork syscall support
Bit buggy
2020-06-30 16:22:47 +03:00
Ryan Houdek b73b585db3 Merge pull request #246 from FEX-Emu/skmp/fix-syscall-forward-macro
Syscalls/x64: Fix SYSCALL_FORWARD_ERRNO
2020-06-25 04:58:15 -07:00
Stefanos Kornilios Mitsis Poiitidis 7b7c4a9730 Syscalls/x64: Fix SYSCALL_FORWARD_ERRNO 2020-06-25 14:51:01 +03:00
Stefanos Kornilios Mitsis Poiitidis 4e515abb33 Syscalls: Add a wrapping class for better backtrace 2020-06-25 14:29:02 +03:00
Stefanos Kornilios Mitsis Poiitidis df1ed9442b Syscalls/x64: Add stubs for all syscalls, remove some syscall entries that are too new 2020-06-19 20:30:06 +03:00