summaryrefslogtreecommitdiffstats
path: root/src/common/page_table.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Fixes and workarounds to make UBSan happier on macOScomex2023-07-151-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are still some other issues not addressed here, but it's a start. Workarounds for false-positive reports: - `RasterizerAccelerated`: Put a gigantic array behind a `unique_ptr`, because UBSan has a [hardcoded limit](https://stackoverflow.com/questions/64531383/c-runtime-error-using-fsanitize-undefined-object-has-a-possibly-invalid-vp) of how big it thinks objects can be, specifically when dealing with offset-to-top values used with multiple inheritance. Hopefully this doesn't have a performance impact. - `QueryCacheBase::QueryCacheBase`: Avoid an operation that UBSan thinks is UB even though it at least arguably isn't. See the link in the comment for more information. Fixes for correct reports: - `PageTable`, `Memory`: Use `uintptr_t` values instead of pointers to avoid UB from pointer overflow (when pointer arithmetic wraps around the address space). - `KScheduler::Reload`: `thread->GetOwnerProcess()` can be `nullptr`; avoid calling methods on it in this case. (The existing code returns a garbage reference to a field, which is then passed into `LoadWatchpointArray`, and apparently it's never used, so it's harmless in practice but still triggers UBSan.) - `KAutoObject::Close`: This function calls `this->Destroy()`, which overwrites the beginning of the object with junk (specifically a free list pointer). Then it calls `this->UnregisterWithKernel()`. UBSan complains about a type mismatch because the vtable has been overwritten, and I believe this is indeed UB. `UnregisterWithKernel` also loads `m_kernel` from the 'freed' object, which seems to be technically safe (the overwriting doesn't extend as far as that field), but seems dubious. Switch to a `static` method and load `m_kernel` in advance.
* Use spans over guest memory where possible instead of copying data.Kelebek12023-07-031-0/+1
|
* core/debugger: memory breakpoint supportLiam2022-06-161-0/+3
|
* general: Convert source file copyright comments over to SPDXMorph2022-04-231-3/+2
| | | | | This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
* common: Reduce unused includesameerj2022-03-191-1/+0
|
* fixup! core: hle: kernel: KPageTable: Improve Un/MapPhysicalMemory.bunnei2022-02-191-2/+2
|
* core: hle: kernel: KPageTable: Improve Un/MapPhysicalMemory.bunnei2022-02-191-4/+20
| | | | - Improves the implementations of MapPhysicalMemory and UnmapPhysicalMemory to more closely reflect latest HOS.
* core: Make use of fastmemMarkus Wick2021-06-111-0/+2
|
* core/memory: Check our memory fallbacks for out-of-bound behavior.Markus Wick2021-05-291-0/+6
| | | | | | This makes it by far harder to crash yuzu. Also implement the 48bit masking of AARCH64 while touching this code.
* general: Fix various spelling errorsMorph2021-01-021-1/+1
|
* memory: Remove MemoryHookMerryMage2021-01-011-18/+0
|
* core/memory: Read and write page table atomicallyReinUsesLisp2020-12-301-11/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | Squash attributes into the pointer's integer, making them an uintptr_t pair containing 2 bits at the bottom and then the pointer. These bits are currently unused thanks to alignment requirements. Configure Dynarmic to mask out these bits on pointer reads. While we are at it, remove some unused attributes carried over from Citra. Read/Write and other hot functions use a two step unpacking process that is less readable to stop MSVC from emitting an extra AND instruction in the hot path: mov rdi,rcx shr rdx,0Ch mov r8,qword ptr [rax+8] mov rax,qword ptr [r8+rdx*8] mov rdx,rax -and al,3 and rdx,0FFFFFFFFFFFFFFFCh je Core::Memory::Memory::Impl::Read<unsigned char> mov rax,qword ptr [vaddr] movzx eax,byte ptr [rdx+rax]
* page_table: Allow page tables to be movedLioncash2020-11-181-1/+9
| | | | | | | | Makes page tables and virtual buffers able to be moved, but not copied, making the interface more flexible. Previously, with the destructor specified, but no move assignment or constructor specified, they wouldn't be implicitly generated.
* page_table: Add missing doxygen parameters to Resize()Lioncash2020-11-181-0/+2
| | | | Resolves two -Wdocumentation warnings.
* page_table: Remove unnecessary header inclusionsLioncash2020-11-181-4/+0
| | | | Prevents indirect inclusions for these headers.
* common: Make use of [[nodiscard]] where applicableLioncash2020-08-151-2/+2
| | | | | | Now that clang-format makes [[nodiscard]] attributes format sensibly, we can apply them to several functions within the common library to allow the compiler to complain about any misuses of the functions.
* common: page_table: Update to use VirtualBuffer and simplify.bunnei2020-04-171-28/+9
|
* PageTable: move backing addresses to a children class as the CPU page table does not need them.Fernando Sahmkow2020-03-141-2/+13
| | | | | | This PR aims to reduce the memory usage in the CPU page table by moving GPU specific parameters into a child class. This saves 1Gb of Memory for most games.
* gpu: Rewrite virtual memory manager using PageTable.bunnei2019-03-211-1/+5
|
* core: Move PageTable struct into Common.bunnei2019-03-171-0/+80