aboutsummaryrefslogtreecommitdiff
path: root/src/core/memory.cpp
AgeCommit message (Collapse)Author
2023-07-28Merge pull request #11155 from liamwhite/memory3liamwhite
memory: check page against address space size
2023-07-26Merge pull request #10990 from comex/ubsanliamwhite
Fixes and workarounds to make UBSan happier on macOS
2023-07-25memory: check page against address space sizeLiam
2023-07-22memory: minimize dependency on processLiam
2023-07-15Fixes and workarounds to make UBSan happier on macOScomex
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.
2023-07-14k_process: PageTable -> GetPageTableLiam
2023-07-02Use spans over guest memory where possible instead of copying data.Kelebek1
2023-06-28Memory Tracking: Optimize tracking to only use atomic writes when contested ↵Fernando Sahmkow
with the host GPU
2023-06-28MemoryTracking: Initial setup of atomic writes.Fernando Sahmkow
2023-05-07Address feedback, add CR notice, etcFernando Sahmkow
2023-05-07Settings: add option to enable / disable reactive flushingFernando Sahmkow
2023-05-07GPU: Add Reactive flushingFernando Sahmkow
2023-04-23Accuracy Normal: reduce accuracy further for perf improvements in Project LimeFernando Sahmkow
2023-03-23memory: rename global memory references to application memoryLiam
2023-03-22kernel: use KTypedAddress for addressesLiam
2023-02-13general: rename CurrentProcess to ApplicationProcessLiam
2023-01-25Revert "MemoryManager: use fastmem directly."Merry
This reverts commit af5ecb0b15d4449f58434e70eed835cf71fc5527.
2023-01-15memory: fix watchpoint use when fastmem is enabledLiam
2023-01-05MemoryManager: use fastmem directly.Fernando Sahmkow
2022-12-11Merge pull request #9415 from liamwhite/dcMai
memory: correct semantics of data cache management operations
2022-12-11memory: correct semantics of data cache management operationsLiam
2022-12-10memory: remove DEBUG_ASSERT pointer testLiam
2022-11-12kernel: implement FlushProcessDataCacheLiam
2022-10-22general: Resolve -Wunused-lambda-capture and C5233Morph
2022-10-18core: device_memory: Templatize GetPointer(..).bunnei
2022-10-06MemoryManager: Fix errors popping out.Fernando Sahmkow
2022-08-19code: dodge PAGE_SIZE #defineKyle Kienapfel
Some header files, specifically for OSX and Musl libc define PAGE_SIZE to be a number This is great except in yuzu we're using PAGE_SIZE as a variable Specific example `static constexpr u64 PAGE_SIZE = u64(1) << PAGE_BITS;` PAGE_SIZE PAGE_BITS PAGE_MASK are all similar variables. Simply deleted the underscores, and then added YUZU_ prefix Might be worth noting that there are multiple uses in different classes/namespaces This list may not be exhaustive Core::Memory 12 bits (4096) QueryCacheBase 12 bits ShaderCache 14 bits (16384) TextureCache 20 bits (1048576, or 1MB) Fixes #8779
2022-07-27chore: make yuzu REUSE compliantAndrea Pappacoda
[REUSE] is a specification that aims at making file copyright information consistent, so that it can be both human and machine readable. It basically requires that all files have a header containing copyright and licensing information. When this isn't possible, like when dealing with binary assets, generated files or embedded third-party dependencies, it is permitted to insert copyright information in the `.reuse/dep5` file. Oh, and it also requires that all the licenses used in the project are present in the `LICENSES` folder, that's why the diff is so huge. This can be done automatically with `reuse download --all`. The `reuse` tool also contains a handy subcommand that analyzes the project and tells whether or not the project is (still) compliant, `reuse lint`. Following REUSE has a few advantages over the current approach: - Copyright information is easy to access for users / downstream - Files like `dist/license.md` do not need to exist anymore, as `.reuse/dep5` is used instead - `reuse lint` makes it easy to ensure that copyright information of files like binary assets / images is always accurate and up to date To add copyright information of files that didn't have it I looked up who committed what and when, for each file. As yuzu contributors do not have to sign a CLA or similar I couldn't assume that copyright ownership was of the "yuzu Emulator Project", so I used the name and/or email of the commit author instead. [REUSE]: https://reuse.software Follow-up to 01cf05bc75b1e47beb08937439f3ed9339e7b254
2022-07-22Project AndioKelebek1
2022-06-16core/debugger: memory breakpoint supportLiam
2022-06-01core/debugger: Implement new GDB stub debuggerLiam
2022-03-26Revert "Memory GPU <-> CPU: reduce infighting in the texture cache by adding ↵bunnei
CPU Cached memory."
2022-03-25Memory: Don't protect reads on Normal accuracy.Fernando Sahmkow
2022-02-21core: device_memory: Use memory size reported by KSystemControl.bunnei
- That way, we can consolidate the memory layout to one place.
2021-09-29prevent access violation from iob in Memory::IsValidVirtualAddressAndrew Strelsky
2021-08-07memory: Address lioncash's reviewyzct12345
2021-08-07memory: Dedup Read and Write and fix logging bugsyzct12345
2021-08-05memory: Clean up CopyBlock tooyzct12345
2021-08-05memory: Address lioncash's reviewyzct12345
2021-08-05memory: Clean up codeyzct12345
2021-06-11General: Add settings for fastmem and disabling adress space check.FernandoS27
2021-06-11core: Make use of fastmemMarkus Wick
2021-05-29core/memory: Check our memory fallbacks for out-of-bound behavior.Markus Wick
This makes it by far harder to crash yuzu. Also implement the 48bit masking of AARCH64 while touching this code.
2021-05-20hle: kernel: Use host memory allocations for KSlabMemory.bunnei
- There are some issues with the current workaround, we will just use host memory until we have a complete kernel memory implementation.
2021-05-05hle: kernel: Rename Process to KProcess.bunnei
2021-05-05core: memory: Add a work-around to allocate and access kernel memory regions ↵bunnei
by vaddr.
2021-02-18hle: kernel: Migrate PageHeap/PageTable to KPageHeap/KPageTable.bunnei
2021-01-01memory: Remove MemoryHookMerryMage
2020-12-29core/memory: Read and write page table atomicallyReinUsesLisp
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]
2020-12-24core: memory: Ensure thread safe access when pages are rasterizer cached (#5206)bunnei
* core: memory: Ensure thread safe access when pages are rasterizer cached.