summaryrefslogtreecommitdiffstats
path: root/src/core/loader/nso.cpp (follow)
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* general: Make most settings a BasicSettinglat9nq2021-06-281-2/+2
| | | | | | | | | | | Creates a new BasicSettings class in common/settings, and forces setting a default and label for each setting that uses it in common/settings. Moves defaults and labels from both frontends into common settings. Creates a helper function in each frontend to facillitate reading the settings now with the new default and label properties. Settings::Setting is also now a subclass of Settings::BasicSetting. Also adds documentation for both Setting and BasicSetting.
* common: fs: Rework the Common Filesystem interface to make use of std::filesystem (#6270)Morph2021-05-261-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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-061-3/+3
|
* loader: Resolve instances of variable shadowingLioncash2021-04-271-11/+11
| | | | | Eliminates variable shadowing cases across all the loaders to bring us closer to enabling variable shadowing as an error in core.
* common: Move settings to common from core.bunnei2021-04-151-1/+1
| | | | - Removes a dependency on core and input_common from common.
* hle: kernel: Migrate PageHeap/PageTable to KPageHeap/KPageTable.bunnei2021-02-191-1/+1
|
* hle: kernel: KThread: Reorganize thread priority defaults.bunnei2021-01-291-2/+2
|
* core: hle: kernel: Rename Thread to KThread.bunnei2021-01-291-1/+1
|
* core: Eliminate remaining usages of the global system instanceLioncash2020-11-271-4/+1
| | | | | | Removes all remaining usages of the global system instance. After this, migration can begin to migrate to being constructed and managed entirely by the various frontends.
* patch_manager: Remove usages of the global system instanceLioncash2020-11-181-1/+1
| | | | | | | With this, only 19 usages of the global system instance remain within the core library. We're almost there.
* core/CMakeLists: Make some warnings errorsLioncash2020-10-131-1/+1
| | | | | | | | | Makes our error coverage a little more consistent across the board by applying it to Linux side of things as well. This also makes it more consistent with the warning settings in other libraries in the project. This also updates httplib to 0.7.9, as there are several warning cleanups made that allow us to enable several warnings as errors.
* General: Make use of std::nullopt where applicableLioncash2020-09-221-3/+3
| | | | | | | | Allows some implementations to avoid completely zeroing out the internal buffer of the optional, and instead only set the validity byte within the structure. This also makes it consistent how we return empty optionals.
* loader/nso: Remove unnecessary [[maybe_unused]]Lioncash2020-09-171-2/+1
|
* core/loader: Remove dependencies on the global system instanceLioncash2020-09-161-4/+4
| | | | | | | | | 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.
* loader/nso: Resolve moves not occurring in DecompressSegmentLioncash2020-04-181-1/+1
| | | | | | | | Given the std::vector was const, an automatic move out of the function could not occur. We can allow automatic return value optimizations to occur by making the buffer non-const.
* loader: nso: Fix loader size and arguments.bunnei2020-04-171-10/+12
|
* core: memory: Move to Core::Memory namespace.bunnei2020-04-171-2/+2
| | | | - helpful to disambiguate Kernel::Memory namespace.
* loader: nso: Fix loading of static objects to be properly sized and aligned.bunnei2020-04-171-19/+9
|
* loader: provide default arguments (zero byte) to NSOsMichael Scire2020-01-231-3/+8
| | | | | | | | | | Certain newer unity games (Terraria, Pokemon Mystery Dungeon) require that the argument region be populated. Failure to do so results in an integer underflow in argument count, and eventually an unmapped read at 0x800000000. Providing this default fixes this. Note that the behavior of official software is as yet unverified, arguments-wise.
* core/loaders: Simplify PhysicalMemory usage.Markus Wick2020-01-181-5/+7
| | | | | It is currently a std::vector, however we might want to replace it with a more fancy allocator. So we can't use the C++ iterators any more.
* core/loader: Track the NSO build ID of the current processZach Hilman2019-09-301-0/+1
|
* nso: Pass build ID directlyZach Hilman2019-09-221-2/+1
| | | As opposed to converting to string and then back to hex array
* VM_Manager: Align allocated memory to 256bytesFernando Sahmkow2019-07-191-1/+1
| | | | | | This commit ensures that all backing memory allocated for the Guest CPU is aligned to 256 bytes. This due to how gpu memory works and the heavy constraints it has in the alignment of physical memory.
* Merge pull request #2482 from DarkLordZach/prepobunnei2019-06-211-0/+9
|\ | | | | core: Add detailed local reporting feature for development
| * loader: Move NSO module tracking to AppLoaderZach Hilman2019-05-261-3/+9
| | | | | | Also cleanup of general stuff
| * core: Track load offsets of NSO modulesZach Hilman2019-05-251-0/+3
| | | | | | | | Needed for backtrace decomposition
* | common/hex_util: Combine HexVectorToString() and HexArrayToString()Lioncash2019-06-121-2/+2
| | | | | | | | | | | | These can be generified together by using a concept type to designate them. This also has the benefit of not making copies of potentially very large arrays.
* | loader/nso: Silence sign-comparison warningLioncash2019-05-251-1/+1
|/ | | | | This was previously performing a size_t == int comparison. Silences a -Wsign-compare warning.
* loader/nso: Remove left-in debug pragmaLioncash2019-05-011-2/+0
| | | | Unintentionally introduced in 552d5071fa171165e4054392d8bb6bf2ecc924e2
* core/core: Move process execution start to System's Load()Lioncash2019-04-121-6/+5
| | | | | | | | | 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.
* Merge pull request #1957 from DarkLordZach/title-providerbunnei2019-04-101-2/+4
|\ | | | | file_sys: Provide generic interface for accessing game data
| * patch_manager: Dump NSO name with build IDZach Hilman2019-03-281-2/+4
| |
* | Merge pull request #2093 from FreddyFunk/disk-cache-better-compressionbunnei2019-04-041-10/+7
|\ \ | | | | | | Better LZ4 compression utilization for the disk based shader cache and the yuzu build system
| * | Addressed feedbackunknown2019-03-291-4/+4
| | |
| * | core: Do not link LZ4 to core. Use common/data_compression for nso segment decompression instead.unknown2019-03-291-10/+7
| |/
* | Merge pull request #2281 from lioncash/memorybunnei2019-04-021-1/+1
|\ \ | |/ |/| kernel/codeset: Make CodeSet's memory data member a regular std::vector
| * kernel/codeset: Make CodeSet's memory data member a regular std::vectorLioncash2019-03-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | The use of a shared_ptr is an implementation detail of the VMManager itself when mapping memory. Because of that, we shouldn't require all users of the CodeSet to have to allocate the shared_ptr ahead of time. It's intended that CodeSet simply pass in the required direct data, and that the memory manager takes care of it from that point on. This means we just do the shared pointer allocation in a single place, when loading modules, as opposed to in each loader.
* | Merge pull request #2280 from lioncash/nsobunnei2019-03-231-59/+42
|\ \ | | | | | | loader/nso: Minor refactoring
| * | loader/nso: Place translation unit specific functions into an anonymous namespaceLioncash2019-03-221-20/+21
| | | | | | | | | | | | | | | Makes it impossible to indirectly violate the ODR in some other translation unit due to these existing.
| * | loader/nso: Clean up use of magic constantsLioncash2019-03-221-4/+6
| | | | | | | | | | | | | | | Now that the NSO header has the proper size, we can just use sizeof on it instead of having magic constants.
| * | file_sys/patch_manager: Deduplicate NSO headerLioncash2019-03-221-50/+18
| | | | | | | | | | | | | | | | | | This source file was utilizing its own version of the NSO header. Instead of keeping this around, we can have the patch manager also use the version of the header that we have defined in loader/nso.h
| * | loader/nso: Fix definition of the NSO header structLioncash2019-03-221-3/+15
| |/ | | | | | | | | | | | | | | The total struct itself is 0x100 (256) bytes in size, so we should be providing that amount of data. Without the data, this can result in omitted data from the final loaded NSO file.
* / file_sys/cheat_engine: Remove use of global system accessorsLioncash2019-03-221-4/+4
|/ | | | | Instead, pass in the core timing instance and make the dependency explicit in the interface.
* Merge pull request #1933 from DarkLordZach/cheat-enginebunnei2019-03-221-0/+12
|\ | | | | file_sys: Implement parser and interpreter for game memory cheats
| * vm_manager: Remove cheat-specific ranges from VMManagerZach Hilman2019-03-051-7/+3
| |
| * loader/nso: Set main code region in VMManagerZach Hilman2019-03-051-1/+17
| | | | | | | | For rom directories (and by extension, XCI/NSP/NAX/NCA) this is for the NSO with name 'main', for regular NSOs, this is the NSO.
* | kernel: Move CodeSet structure to its own source filesLioncash2019-03-201-0/+1
|/ | | | | | | | Given this is utilized by the loaders, this allows avoiding inclusion of the kernel process definitions where avoidable. This also keeps the loading format for all executable data separate from the kernel objects.
* loader/nso: Remove dependency on the System classLioncash2018-12-031-4/+4
| | | | | Similar to the NRO changes, we can also pass the process explicitly as a parameter from Load instead of indirecting through the System class.
* patch_manager: Add support for dumping decompressed NSOsZach Hilman2018-10-291-1/+1
| | | | When enabled in settings, PatchNSO will dump the unmodified NSO that it was passed to a file named <build id>.nso in the dump root for the current title ID.
* nso: Return an optional address from LoadModuleLioncash2018-10-151-5/+7
| | | | | If a malformed NSO is attempted to be loaded, we shouldn't continue onwards. We should be reporting an error and bailing out.
* nso: Make LoadModule take a VfsFile by const referenceLioncash2018-10-151-9/+6
|
* kernel/process: Make CodeSet a regular non-inherited objectLioncash2018-10-121-12/+9
| | | | | | | | These only exist to ferry data into a Process instance and end up going out of scope quite early. Because of this, we can just make it a plain struct for holding things and just std::move it into the relevant function. There's no need to make this inherit from the kernel's Object type.
* nso/nro: Use default allocation size for arg_dataZach Hilman2018-10-071-6/+8
|
* cmd: Support passing game arguments from command lineZach Hilman2018-10-071-1/+1
| | | | Uses -p (--program) and following string as args.
* nso/nro: Add NSO arguments structure to data sectionZach Hilman2018-10-071-1/+14
| | | | Only added if arguments string is non-empty and a pass is requested by loader.
* nso: Optimize loading of IPS patchesZach Hilman2018-10-021-2/+2
| | | | Avoid resource-heavy classes and remove quasi-duplicated code.
* nso: Add framework to support patching of uncompressed NSOsZach Hilman2018-10-011-1/+14
|
* nso: Replace NSOHeader padding bytes with build IDZach Hilman2018-10-011-2/+1
|
* kernel/process: Make data member variables privateLioncash2018-09-301-1/+1
| | | | | | | Makes the public interface consistent in terms of how accesses are done on a process object. It also makes it slightly nicer to reason about the logic of the process class, as we don't want to expose everything to external code.
* loader: Make the Load() function take a process as a regular reference, not a SharedPtrLioncash2018-09-291-3/+3
| | | | | | | | 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.
* memory: Dehardcode the use of fixed memory range constantsLioncash2018-09-251-4/+5
| | | | | | | | The locations of these can actually vary depending on the address space layout, so we shouldn't be using these when determining where to map memory or be using them as offsets for calculations. This keeps all the memory ranges flexible and malleable based off of the virtual memory manager instance state.
* process/vm_manager: Amend API to allow reading parameters from NPDM metadataLioncash2018-09-241-5/+0
| | | | | | | | | Rather than hard-code the address range to be 36-bit, we can derive the parameters from supplied NPDM metadata if the supplied exectuable supports it. This is the bare minimum necessary for this to be possible. The following commits will rework the memory code further to adjust to this.
* Added support for uncompressed NSOs (#1374)David2018-09-211-3/+12
| | | | | | * Added support for uncompressed NSOs * Moved compressed section check to NsoHeader
* kernel/thread: Include thread-related enums within the kernel namespaceLioncash2018-09-131-1/+2
| | | | | | Previously, these were sitting outside of the Kernel namespace, which doesn't really make sense, given they're related to the Thread class which is within the Kernel namespace.
* core/core: Replace includes with forward declarations where applicableLioncash2018-08-311-0/+1
| | | | | | | | | | | The follow-up to e2457418dae19b889b2ad85255bb95d4cd0e4bff, which replaces most of the includes in the core header with forward declarations. This makes it so that if any of the headers the core header was previously including change, then no one will need to rebuild the bulk of the core, due to core.h being quite a prevalent inclusion. This should make turnaround for changes much faster for developers.
* kernel: Eliminate kernel global stateLioncash2018-08-291-2/+4
| | | | | | | | | | | | | | | | | | | | | | As means to pave the way for getting rid of global state within core, This eliminates kernel global state by removing all globals. Instead this introduces a KernelCore class which acts as a kernel instance. This instance lives in the System class, which keeps its lifetime contained to the lifetime of the System class. This also forces the kernel types to actually interact with the main kernel instance itself instead of having transient kernel state placed all over several translation units, keeping everything together. It also has a nice consequence of making dependencies much more explicit. This also makes our initialization a tad bit more correct. Previously we were creating a kernel process before the actual kernel was initialized, which doesn't really make much sense. The KernelCore class itself follows the PImpl idiom, which allows keeping all the implementation details sealed away from everything else, which forces the use of the exposed API and allows us to avoid any unnecessary inclusions within the main kernel header.
* loader: Remove address mapping remnants from citraLioncash2018-08-151-1/+0
| | | | These mappings are leftovers from citra and don't apply to the Switch.
* kernel/process: Use accessors instead of class members for referencing segment arrayLioncash2018-08-031-1/+1
| | | | | | | Using member variables for referencing the segments array increases the size of the class in memory for little benefit. The same behavior can be achieved through the use of accessors that just return the relevant segment.
* nso: Silence implicit sign conversion warningsLioncash2018-07-201-4/+6
|
* nso: Remove unused function ReadSegment()Lioncash2018-07-201-13/+0
|
* Merge pull request #718 from lioncash/readbunnei2018-07-201-4/+6
|\ | | | | loader/nso: Check if read succeeded in IdentifyFile() before checking magic value
| * loader/nso: Check if read succeeded in IdentifyFile() before checking magic valueLioncash2018-07-191-4/+6
| | | | | | | | | | | | We should always assume the filesystem is volatile and check each IO operation. While we're at it reorganize checks so that early-out errors are near one another.
* | loader/nso: Remove unnecessary vector resizesLioncash2018-07-191-4/+2
| | | | | | | | We can just initialize these vectors directly via their constructor.
* | loader/nso: Resolve sign mismatch warningsLioncash2018-07-191-1/+1
|/
* Virtual Filesystem 2: Electric Boogaloo (#676)Zach Hilman2018-07-191-76/+17
| | | | | | | | | | * 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-1/+1
|
* More improvements to GDBStub (#653)Hedges2018-07-131-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-081-16/+75
| | | | This reverts commit 77c684c1140f6bf3fb7d4560d06d2efb1a2ee5e2.
* Virtual Filesystem (#597)Zach Hilman2018-07-061-75/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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-031-2/+2
|
* Add support for decrypted NCA files (#567)Zach Hilman2018-06-211-11/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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
* general: Make formatting of logged hex values more straightforwardLioncash2018-05-021-1/+1
| | | | | | This makes the formatting expectations more obvious (e.g. any zero padding specified is padding that's entirely dedicated to the value being printed, not any pretty-printing that also gets tacked on).
* general: Convert assertion macros over to be fmt-compatibleLioncash2018-04-271-1/+1
|
* loader: Move old logging macros over to new fmt-capable onesLioncash2018-04-251-3/+2
|
* Kernel: Use 0x2C as default main thread priority for homebrew and lone NRO/NSOsSubv2018-04-211-1/+1
|
* memory: Fix stack region.bunnei2018-03-311-1/+1
|
* kernel: Move stack region outside of application heap.bunnei2018-03-161-1/+1
|
* core: Move process creation out of global state.bunnei2018-03-141-3/+2
|
* Kernel: Store the program id in the Process class instead of the CodeSet class.Subv2018-03-021-4/+4
| | | | There may be many CodeSets per Process, so it's wasteful and overcomplicated to store the program id in each of them.
* loader: Check error on NPDM load, use TID for CodeSetshinyquagsire232018-02-251-3/+3
|
* nso: Silence formatting specifier warningsLioncash2018-02-141-2/+4
|
* loader: Clean up ctors and includes.bunnei2018-01-201-0/+4
|
* loader: Refactor to also pass filepath into IdentifyType.bunnei2018-01-201-2/+1
|
* nso: Remove code specific to directory loading.bunnei2018-01-201-16/+4
|
* Remove relocation on NSO/NROgdkchan2018-01-171-9/+1
|
* Merge pull request #44 from Rozelette/masterbunnei2018-01-161-3/+7
|\ | | | | nso: Modify .bss size calculation logic
| * nso: Modify .bss size calculation logicRozlette2018-01-161-3/+7
| |
* | clang-formatMerryMage2018-01-161-1/+2
|/
* nso: Load subsdk4 if available.bunnei2018-01-151-1/+1
|
* yuzu: Update license text to be consistent across project.bunnei2018-01-131-1/+1
|
* nso: Always load the filepath specified by the user.bunnei2018-01-071-1/+3
|
* nso: Load more common submodules.bunnei2017-10-231-15/+11
|
* memory: Support 32-bit paging, move heap address space up.bunnei2017-10-231-1/+1
|
* core: Refactor MakeMagic usage and remove dead code.bunnei2017-10-151-3/+4
|
* nso: Add a log for loading submodules.bunnei2017-10-141-0/+1
|
* Merge remote-tracking branch 'upstream/master' into nxbunnei2017-10-101-6/+6
| | | | | | | | | | | | | | | | | # Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
* loader: Various improvements for NSO/NRO loaders.bunnei2017-10-101-26/+24
|
* loader: Add support for NRO, as well as various fixes and shared linker.bunnei2017-10-061-128/+15
|
* nso: Fixes to support homebrew NSOs without a MOD header.bunnei2017-10-041-16/+22
|
* nso: Refactor and allocate .bss section.bunnei2017-09-301-112/+111
|
* loader: Add support for loading an NSO.bunnei2017-09-301-0/+295