diff options
Diffstat (limited to 'src/core/loader/nso.cpp')
| -rw-r--r-- | src/core/loader/nso.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index c225e2d24..28c6dd9b7 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp | |||
| @@ -129,12 +129,14 @@ VAddr AppLoader_NSO::LoadModule(FileSys::VirtualFile file, VAddr load_base, | |||
| 129 | 129 | ||
| 130 | if (should_pass_arguments && !Settings::values.program_args.empty()) { | 130 | if (should_pass_arguments && !Settings::values.program_args.empty()) { |
| 131 | const auto arg_data = Settings::values.program_args; | 131 | const auto arg_data = Settings::values.program_args; |
| 132 | codeset->DataSegment().size += 0x9000; | 132 | codeset->DataSegment().size += NSO_ARGUMENT_DATA_ALLOCATION_SIZE; |
| 133 | NSOArgumentHeader args_header{0x9000, static_cast<u32_le>(arg_data.size()), {}}; | 133 | NSOArgumentHeader args_header{ |
| 134 | program_image.resize(static_cast<u32>(program_image.size()) + 0x9000); | 134 | NSO_ARGUMENT_DATA_ALLOCATION_SIZE, static_cast<u32_le>(arg_data.size()), {}}; |
| 135 | std::memcpy(program_image.data() + program_image.size() - 0x9000, &args_header, | 135 | const auto end_offset = program_image.size(); |
| 136 | sizeof(NSOArgumentHeader)); | 136 | program_image.resize(static_cast<u32>(program_image.size()) + |
| 137 | std::memcpy(program_image.data() + program_image.size() - 0x8FE0, arg_data.data(), | 137 | NSO_ARGUMENT_DATA_ALLOCATION_SIZE); |
| 138 | std::memcpy(program_image.data() + end_offset, &args_header, sizeof(NSOArgumentHeader)); | ||
| 139 | std::memcpy(program_image.data() + end_offset + sizeof(NSOArgumentHeader), arg_data.data(), | ||
| 138 | arg_data.size()); | 140 | arg_data.size()); |
| 139 | } | 141 | } |
| 140 | 142 | ||