aboutsummaryrefslogtreecommitdiff
path: root/src/core/loader/nca.cpp
Commit message (Collapse)AuthorAgeFilesLines
* service: sm/kernel/loader: Implement QueryPointerBufferSize, automatic ↵JPikachu2025-04-301-2/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | pointer buffer sizing, and SM service improvements This commit introduces multiple improvements to IPC handling and system management services, enhancing game compatibility and emulator stability. --- 1. Fully Implemented QueryPointerBufferSize Service: - Exposes the per-process IPC pointer buffer size through `QueryPointerBufferSize` instead of returning stubbed values. - Added `m_pointer_buffer_size` field to `KProcess`, initialized with a safe default (0x8000). - Introduced getter and setter methods (`GetPointerBufferSize()` / `SetPointerBufferSize()`). - Registered new handler in `sm_controller` for handling QueryPointerBufferSize requests. - Ensures accurate buffer size reporting for games relying on this service. --- 2. Automatic Pointer Buffer Sizing Per-Game: - Automatically determines heap size by parsing `main.npdm` from the game’s ExeFS: - Heap size > 1 GiB → pointer buffer size set to `0x10000`. - Heap size > 512 MiB → pointer buffer size set to `0xC000`. - Otherwise, defaults to `0x8000`. - Gracefully handles missing or malformed `main.npdm` by falling back to default settings. - Automatically configures pointer buffer size during `AppLoader_NCA::Load`. - Added logging for heap size detection and buffer size configuration for easier debugging. --- 3. SM Service Improvements: - Added full implementation of `QueryPointerBufferSize` within the SM service framework. - Cleaned up stubbed methods and ensured correct domain handling. - Registered new service commands (e.g., `SetPointerBufferSize` and `QueryPointerBufferSize`) in `sm_controller`. - Improved session handling with proper conversion to domain objects where necessary. --- Benefits: - Greatly improves compatibility with games that require larger IPC pointer buffers - Eliminates the need for manual per-game pointer buffer overrides. - More accurate emulation of Switch system services, improving stability for both commercial titles and homebrew. - Provides cleaner logging for easier debugging and maintenance. - Future-proofs IPC handling for upcoming titles with higher memory demands. --- Additional Notes: - Default pointer buffer size remains 0x8000 for smaller titles or if heap size cannot be determined. - Falls back to safe defaults without affecting overall emulator performance. - All new service calls properly registered and integrated without breaking existing functionality.
* scope_exit: Make constexprFearlessTobi2024-02-191-1/+3
| | | | | Allows the use of the macro in constexpr-contexts. Also avoids some potential problems when nesting braces inside it.
* fsp-srv: use program registry for SetCurrentProcessLiam2024-01-111-2/+4
|
* file_sys: handle null romfsLiam2023-12-011-4/+2
|
* core: implement basic integrity verificationLiam2023-09-061-0/+76
|
* vfs: expand support for NCA readingLiam2023-08-151-10/+18
|
* 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.
* core: Remove unused includesameerj2021-11-031-1/+0
|
* common: fs: Rework the Common Filesystem interface to make use of ↵Morph2021-05-251-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | std::filesystem (#6270) * common: fs: fs_types: Create filesystem types Contains various filesystem types used by the Common::FS library * common: fs: fs_util: Add std::string to std::u8string conversion utility * common: fs: path_util: Add utlity functions for paths Contains various utility functions for getting or manipulating filesystem paths used by the Common::FS library * common: fs: file: Rewrite the IOFile implementation * common: fs: Reimplement Common::FS library using std::filesystem * common: fs: fs_paths: Add fs_paths to replace common_paths * common: fs: path_util: Add the rest of the path functions * common: Remove the previous Common::FS implementation * general: Remove unused fs includes * string_util: Remove unused function and include * nvidia_flags: Migrate to the new Common::FS library * settings: Migrate to the new Common::FS library * logging: backend: Migrate to the new Common::FS library * core: Migrate to the new Common::FS library * perf_stats: Migrate to the new Common::FS library * reporter: Migrate to the new Common::FS library * telemetry_session: Migrate to the new Common::FS library * key_manager: Migrate to the new Common::FS library * bis_factory: Migrate to the new Common::FS library * registered_cache: Migrate to the new Common::FS library * xts_archive: Migrate to the new Common::FS library * service: acc: Migrate to the new Common::FS library * applets/profile: Migrate to the new Common::FS library * applets/web: Migrate to the new Common::FS library * service: filesystem: Migrate to the new Common::FS library * loader: Migrate to the new Common::FS library * gl_shader_disk_cache: Migrate to the new Common::FS library * nsight_aftermath_tracker: Migrate to the new Common::FS library * vulkan_library: Migrate to the new Common::FS library * configure_debug: Migrate to the new Common::FS library * game_list_worker: Migrate to the new Common::FS library * config: Migrate to the new Common::FS library * configure_filesystem: Migrate to the new Common::FS library * configure_per_game_addons: Migrate to the new Common::FS library * configure_profile_manager: Migrate to the new Common::FS library * configure_ui: Migrate to the new Common::FS library * input_profiles: Migrate to the new Common::FS library * yuzu_cmd: config: Migrate to the new Common::FS library * yuzu_cmd: Migrate to the new Common::FS library * vfs_real: Migrate to the new Common::FS library * vfs: Migrate to the new Common::FS library * vfs_libzip: Migrate to the new Common::FS library * service: bcat: Migrate to the new Common::FS library * yuzu: main: Migrate to the new Common::FS library * vfs_real: Delete the contents of an existing file in CreateFile Current usages of CreateFile expect to delete the contents of an existing file, retain this behavior for now. * input_profiles: Don't iterate the input profile dir if it does not exist Silences an error produced in the log if the directory does not exist. * game_list_worker: Skip parsing file if the returned VfsFile is nullptr Prevents crashes in GetLoader when the virtual file is nullptr * common: fs: Validate paths for path length * service: filesystem: Open the mod load directory as read only
* hle: kernel: Rename Process to KProcess.bunnei2021-05-051-2/+2
|
* loader: Resolve instances of variable shadowingLioncash2021-04-271-11/+28
| | | | | Eliminates variable shadowing cases across all the loaders to bring us closer to enabling variable shadowing as an error in core.
* file_sys/romfs_factory: Eliminate usage of the global system accessorLioncash2020-09-161-2/+2
|
* core/loader: Remove dependencies on the global system instanceLioncash2020-09-161-3/+3
| | | | | | | | | Now all that remains is: 18 instances in file_sys code 14 instances in GDB stub code (this can be tossed wholesale) 4 instances in HLE code 2 instances in settings code.
* yuzu: Port old usages of Filesystem namespace to FilesystemControllerZach Hilman2019-09-211-1/+3
|
* loader: Move NSO module tracking to AppLoaderZach Hilman2019-05-261-0/+9
| | | Also cleanup of general stuff
* core/core: Move process execution start to System's Load()Lioncash2019-04-111-12/+14
| | | | | | | | | This gives us significantly more control over where in the initialization process we start execution of the main process. Previously we were running the main process before the CPU or GPU threads were initialized (not good). This amends execution to start after all of our threads are properly set up.
* loader: Propagate NCA logo section to ReadBanner and ReadLogoZach Hilman2019-01-151-0/+19
|
* loader: Make the Load() function take a process as a regular reference, not ↵Lioncash2018-09-291-1/+1
| | | | | | | | | | a SharedPtr A process should never require being reference counted in this situation. If the handle to a process is freed before this function is called, it's definitely a bug with our lifetime management, so we can put the requirement in place for the API that the process must be a valid instance.
* bktr: Implement IVFC offset shiftingZach Hilman2018-09-041-0/+6
| | | | Fixes base game read errors
* patch_manager: Add usages of patches to ExeFSZach Hilman2018-09-041-1/+1
|
* service/filesystem: Use forward declarations where applicableLioncash2018-08-201-0/+1
| | | | | | | | Avoids the need to rebuild multiple source files if the filesystem code headers change. This also gets rid of a few instances of indirect inclusions being relied upon
* loader/nca: Remove unnecessary includes and member variablesLioncash2018-08-151-11/+3
|
* loader: Add more descriptive errorsZach Hilman2018-08-091-5/+5
| | | Full list of new errors and descriptions in core/loader/loader.h
* Avoid parsing RomFS to directory in NCAZach Hilman2018-08-061-2/+2
|
* loader: Make AppLoader_NCA rely on directory loading codeZach Hilman2018-08-051-36/+8
| | | Eliminates duplicate code shared between their Load methods, after all the only difference is how the romfs is handled.
* Remove files that are not usedZach Hilman2018-08-011-6/+13
|
* loader/{nca, nro}: std::move VirtualFile in the constructors where applicableLioncash2018-07-201-1/+2
| | | | This avoids unnecessary atomic reference count increments and decrements
* Virtual Filesystem 2: Electric Boogaloo (#676)Zach Hilman2018-07-181-223/+25
| | | | | | | | | | * Virtual Filesystem * Fix delete bug and documentate * Review fixes + other stuff * Fix puyo regression
* General Filesystem and Save Data Fixes (#670)Zach Hilman2018-07-171-2/+1
|
* More improvements to GDBStub (#653)Hedges2018-07-121-0/+4
| | | | | | | | | | | * More improvements to GDBStub - Debugging of threads should work correctly with source and assembly level stepping and modifying registers and memory, meaning threads and callstacks are fully clickable in VS. - List of modules is available to the client, with assumption that .nro and .nso are backed up by an .elf with symbols, while deconstructed ROMs keep N names. - Initial support for floating point registers. * Tidy up as requested in PR feedback * Tidy up as requested in PR feedback
* Revert "Virtual Filesystem (#597)"bunnei2018-07-071-23/+229
| | | | This reverts commit 12e9522b32d972a8e9b327c7ee7c14040a61ffdd.
* Virtual Filesystem (#597)Zach Hilman2018-07-061-229/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add VfsFile and VfsDirectory classes * Finish abstract Vfs classes * Implement RealVfsFile (computer fs backend) * Finish RealVfsFile and RealVfsDirectory * Finished OffsetVfsFile * More changes * Fix import paths * Major refactor * Remove double const * Use experimental/filesystem or filesystem depending on compiler * Port partition_filesystem * More changes * More Overhaul * FSP_SRV fixes * Fixes and testing * Try to get filesystem to compile * Filesystem on linux * Remove std::filesystem and document/test * Compile fixes * Missing include * Bug fixes * Fixes * Rename v_file and v_dir * clang-format fix * Rename NGLOG_* to LOG_* * Most review changes * Fix TODO * Guess 'main' to be Directory by filename
* Rename logging macro back to LOG_*James Rowe2018-07-021-7/+7
|
* Add support for decrypted NCA files (#567)Zach Hilman2018-06-211-0/+303
* Start to add NCA support in loader * More nca stuff * More changes to nca.cpp * Now identifies decrypted NCA cont. * Game list fixes and more structs and stuff * More updates to Nca class * Now reads ExeFs (i think) * ACTUALLY LOADS EXEFS! * RomFS loads and games execute * Cleanup and Finalize * plumbing, cleanup and testing * fix some things that i didnt think of before * Preliminary Review Changes * Review changes for bunnei and subv