414 Commits

Author SHA1 Message Date
Elad
6a4b9430c0 Thread.h: Add a few noexcept 2024-12-24 21:31:57 +02:00
Elad
575a245f8d
IDM: Implement lock-free smart pointers (#16403)
Replaces `std::shared_pointer` with `stx::atomic_ptr` and `stx::shared_ptr`.

Notes to programmers:

* This pr kills the use of `dynamic_cast`, `std::dynamic_pointer_cast` and `std::weak_ptr` on IDM objects, possible replacement is to save the object ID on the base object, then use idm::check/get_unlocked to the destination type via the saved ID which may be null. Null pointer check is how you can tell type mismatch (as dynamic cast) or object destruction (as weak_ptr locking).
* Double-inheritance on IDM objects should be used with care, `stx::shared_ptr` does not support constant-evaluated pointer offsetting to parent/child type.
* `idm::check/get_unlocked` can now be used anywhere.

Misc fixes:
* Fixes some segfaults with RPCN with interaction with IDM.
* Fix deadlocks in access violation handler due locking recursion.
* Fixes race condition in process exit-spawn on memory containers read.
* Fix bug that theoretically can prevent RPCS3 from booting - fix `id_manager::typeinfo` comparison to compare members instead of `memcmp` which can fail spuriously on padding bytes.
* Ensure all IDM inherited types of base, either has `id_base` or `id_type` defined locally, this allows to make getters such as `idm::get_unlocked<lv2_socket, lv2_socket_raw>()` which were broken before. (requires save-states invalidation)
* Removes broken operator[] overload of `stx::shared_ptr` and `stx::single_ptr` for non-array types.
2024-12-22 20:59:48 +02:00
Elad
926de68a79 Debugger: Dump related thread information on crash 2024-11-28 13:32:52 +02:00
Megamouse
2262ac1684 Qt: Replace QMap with std::map
This should reduce the amount of string conversions during list refreshes
2024-11-06 09:34:32 +01:00
kd-11
31ce32709e build: Disble fixed base for windows-on-arm 2024-09-08 17:41:29 +03:00
kd-11
4f27af9949 Fix compilation warning 2024-09-08 17:41:29 +03:00
kd-11
a60eab6e36 aarch64: Fix compilation for windows-on-arm 2024-09-04 07:49:49 +03:00
kd-11
470f8674df aarch64 - Support for apple exceptions 2024-08-24 14:13:14 +03:00
kd-11
4bb79b6c31 Rework aarch64 signal handling 2024-08-21 16:16:28 +03:00
kd-11
3ea24183b9 Improve "write" instruction detection. 2024-08-20 05:18:53 +03:00
kd-11
c2f5de1c55 Fix compiler warnings about unused args for aarch64 2024-08-20 05:18:53 +03:00
Elad Ashkenazi
1bd4565186 Implement thread_ctrl::wait_until() 2024-08-17 06:38:49 +03:00
Megamouse
ab923bc2c3 Add comment for thread_scheduler_mode::old to get_affinity_mask 2024-05-18 16:16:08 +02:00
Megamouse
dfee5b9a6c threads: replace magic number id_type with thread_class 2024-05-18 16:16:08 +02:00
Elad Ashkenazi
302fe53704 Log SPU access violation in always-level 2024-05-14 19:36:48 +03:00
Elad Ashkenazi
7c313703a2 Savestates: Fix SPU pause from access violation handler 2024-05-14 19:36:48 +03:00
Eladash
4905cd425f Thread.cpp: Prevent repeatedly halting the debugger 2024-05-04 14:15:51 +03:00
Eladash
316b3a8851 Thread.cpp: Reduce logging 2024-03-27 19:59:22 +02:00
Eladash
d39361705a report_fatal_error: Minor cleanup and improvement 2024-03-06 20:32:22 +02:00
Eladash
77ba2b40e7 Thread.cpp: Explicitly state difference type in thread_ctrl::wait_for_accurate 2024-02-11 23:01:40 +02:00
pastalian
e8ad6ec673
Add missing headers (#15075)
Some systems must explicitly include these headers.
2024-01-24 17:22:37 +01:00
Eladash
f696107c90 Add savestate data validity asserts 2023-12-29 11:11:53 +02:00
Eladash
0c410f8a14 Postpone thread launching on g_fxo->init 2023-12-19 15:34:07 +02:00
Eladash
f9d213650c Utilities/Thread.cpp: Fix threads memory leak 2023-10-24 22:14:12 +03:00
Eladash
53ba38e98d Thread.cpp: Flush log and make thread context dump on exception 2023-09-05 06:20:57 +03:00
Eladash
cd98e84ca5 Debugger/RSX: Add FP/VP hash of current shader 2023-08-19 04:21:37 +03:00
Ivan Chikish
d34287b2cc Linux: use futex_waitv syscall for atomic waiting
In order to make this possible, some unnecessary features were removed.
2023-08-02 21:46:06 +03:00
Ivan Chikish
831a9fe012 Remove thread pool
Prevents implementing thread priority on Linux.
2023-08-02 21:46:06 +03:00
Eladash
1184d6aecb Thread.cpp: Fixup SPU access violation log message 2023-07-31 11:55:31 +03:00
Eladash
12fe55a258 Thread.cpp: Always print SPU thread name in access violation
Suppress GUI log window prefix removal.
2023-07-23 17:58:54 +03:00
oltolm
0c94606fcf
Make compile with msvc, clang and gcc on Windows 2023-07-11 21:40:30 +03:00
Eladash
17d8f2884e Debug fixes 2023-07-09 13:33:03 +03:00
Eladash
300701a06b Make page faults entry enqueue and event atomic 2023-06-02 08:54:46 +03:00
Eladash
3d8d9ef61c Threads.cpp: Fix infinite looping 2023-06-02 08:54:46 +03:00
Eladash
f031cd9b42 Take advantage of WIN10 Thread Name API 2023-05-24 20:39:51 +02:00
oltolm
b7b87096d8 fix: make ASAN work on Windows 2023-05-06 10:17:58 +02:00
Ivan Chikish
3cf8c629fa X86 SigHandler: Add support for BEXTR instruction
BEXTR is emitted for znver CPUs in recent LLVM.
2023-05-05 18:03:50 +03:00
RipleyTom
0f45a8c180 Fix inaccuracies pointed out by PVS-Studio 2023-03-25 08:45:30 +01:00
Megamouse
92ae57c9ee Windows: log more descriptive errors 2023-03-04 18:34:56 +01:00
Jan Beich
3eaa29e7c2 Thread: silence -Wsign-compare on FreeBSD aarch64
Utilities/Thread.cpp:1805:48: error: comparison of integers of different signs: 'uptr' (aka 'unsigned long') and '__register_t' (aka 'long') [-Werror,-Wsign-compare]
        const bool is_executing = uptr(info->si_addr) == RIP(context);
                                  ~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~
2023-01-19 18:49:06 +03:00
Eladash
8980fc5524 rsx: Fix exceptions 2022-12-17 14:27:20 +01:00
kd-11
0aaa40cd53 ux: Update vcredist links and optionally disable help text from error dialog 2022-12-06 20:46:35 +01:00
Megamouse
a6b44ea1bb Qt: support fatal error as htmk 2022-12-06 20:46:35 +01:00
Eladash
e9e139c364 logs improvements
* Do not use unsafe pointer arithmetics exceeding existing memory. (exceeding m_fptr)
* Properly use the enire 32MB of the buffer, previously only 16MB were used for cuncurrent access.
* Fix a bug occurring after attempting to push 1TB (40 bits).
* Flush the log before hitting a debugging breakpoint.
2022-11-28 18:52:11 +03:00
Eladash
8b934abcf2 Improve error_code, make HDD1 errors be warnings 2022-11-26 16:33:47 +03:00
Nekotekina
b49a1f27eb Warning fixes 2022-09-17 16:35:02 +03:00
Elad Ashkenazi
b7599c0f30 Update Thread.cpp 2022-08-31 22:19:05 +03:00
Elad Ashkenazi
d8494ef1ae Update Thread.cpp 2022-08-31 22:19:05 +03:00
Elad Ashkenazi
727b32e886 RawSPU: Do not assume GPU memory fault on SPU MMIO 2022-08-31 22:19:05 +03:00
Eladash
ddba30988b vm: Attempt to not remove cpu_flag::wait flag during access violation 2022-08-21 15:02:01 +03:00