diff options
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index a6c377cfc..db3ae3eb8 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -1120,7 +1120,7 @@ static ResultCode GetThreadContext(Core::System& system, VAddr thread_context, H | |||
| 1120 | std::fill(ctx.vector_registers.begin() + 16, ctx.vector_registers.end(), u128{}); | 1120 | std::fill(ctx.vector_registers.begin() + 16, ctx.vector_registers.end(), u128{}); |
| 1121 | } | 1121 | } |
| 1122 | 1122 | ||
| 1123 | Memory::WriteBlock(thread_context, &ctx, sizeof(ctx)); | 1123 | system.Memory().WriteBlock(thread_context, &ctx, sizeof(ctx)); |
| 1124 | return RESULT_SUCCESS; | 1124 | return RESULT_SUCCESS; |
| 1125 | } | 1125 | } |
| 1126 | 1126 | ||
| @@ -1280,20 +1280,21 @@ static ResultCode QueryProcessMemory(Core::System& system, VAddr memory_info_add | |||
| 1280 | return ERR_INVALID_HANDLE; | 1280 | return ERR_INVALID_HANDLE; |
| 1281 | } | 1281 | } |
| 1282 | 1282 | ||
| 1283 | auto& memory = system.Memory(); | ||
| 1283 | const auto& vm_manager = process->VMManager(); | 1284 | const auto& vm_manager = process->VMManager(); |
| 1284 | const MemoryInfo memory_info = vm_manager.QueryMemory(address); | 1285 | const MemoryInfo memory_info = vm_manager.QueryMemory(address); |
| 1285 | 1286 | ||
| 1286 | Memory::Write64(memory_info_address, memory_info.base_address); | 1287 | memory.Write64(memory_info_address, memory_info.base_address); |
| 1287 | Memory::Write64(memory_info_address + 8, memory_info.size); | 1288 | memory.Write64(memory_info_address + 8, memory_info.size); |
| 1288 | Memory::Write32(memory_info_address + 16, memory_info.state); | 1289 | memory.Write32(memory_info_address + 16, memory_info.state); |
| 1289 | Memory::Write32(memory_info_address + 20, memory_info.attributes); | 1290 | memory.Write32(memory_info_address + 20, memory_info.attributes); |
| 1290 | Memory::Write32(memory_info_address + 24, memory_info.permission); | 1291 | memory.Write32(memory_info_address + 24, memory_info.permission); |
| 1291 | Memory::Write32(memory_info_address + 32, memory_info.ipc_ref_count); | 1292 | memory.Write32(memory_info_address + 32, memory_info.ipc_ref_count); |
| 1292 | Memory::Write32(memory_info_address + 28, memory_info.device_ref_count); | 1293 | memory.Write32(memory_info_address + 28, memory_info.device_ref_count); |
| 1293 | Memory::Write32(memory_info_address + 36, 0); | 1294 | memory.Write32(memory_info_address + 36, 0); |
| 1294 | 1295 | ||
| 1295 | // Page info appears to be currently unused by the kernel and is always set to zero. | 1296 | // Page info appears to be currently unused by the kernel and is always set to zero. |
| 1296 | Memory::Write32(page_info_address, 0); | 1297 | memory.Write32(page_info_address, 0); |
| 1297 | 1298 | ||
| 1298 | return RESULT_SUCCESS; | 1299 | return RESULT_SUCCESS; |
| 1299 | } | 1300 | } |
| @@ -2290,12 +2291,13 @@ static ResultCode GetProcessList(Core::System& system, u32* out_num_processes, | |||
| 2290 | return ERR_INVALID_ADDRESS_STATE; | 2291 | return ERR_INVALID_ADDRESS_STATE; |
| 2291 | } | 2292 | } |
| 2292 | 2293 | ||
| 2294 | auto& memory = system.Memory(); | ||
| 2293 | const auto& process_list = kernel.GetProcessList(); | 2295 | const auto& process_list = kernel.GetProcessList(); |
| 2294 | const auto num_processes = process_list.size(); | 2296 | const auto num_processes = process_list.size(); |
| 2295 | const auto copy_amount = std::min(std::size_t{out_process_ids_size}, num_processes); | 2297 | const auto copy_amount = std::min(std::size_t{out_process_ids_size}, num_processes); |
| 2296 | 2298 | ||
| 2297 | for (std::size_t i = 0; i < copy_amount; ++i) { | 2299 | for (std::size_t i = 0; i < copy_amount; ++i) { |
| 2298 | Memory::Write64(out_process_ids, process_list[i]->GetProcessID()); | 2300 | memory.Write64(out_process_ids, process_list[i]->GetProcessID()); |
| 2299 | out_process_ids += sizeof(u64); | 2301 | out_process_ids += sizeof(u64); |
| 2300 | } | 2302 | } |
| 2301 | 2303 | ||
| @@ -2329,13 +2331,14 @@ static ResultCode GetThreadList(Core::System& system, u32* out_num_threads, VAdd | |||
| 2329 | return ERR_INVALID_ADDRESS_STATE; | 2331 | return ERR_INVALID_ADDRESS_STATE; |
| 2330 | } | 2332 | } |
| 2331 | 2333 | ||
| 2334 | auto& memory = system.Memory(); | ||
| 2332 | const auto& thread_list = current_process->GetThreadList(); | 2335 | const auto& thread_list = current_process->GetThreadList(); |
| 2333 | const auto num_threads = thread_list.size(); | 2336 | const auto num_threads = thread_list.size(); |
| 2334 | const auto copy_amount = std::min(std::size_t{out_thread_ids_size}, num_threads); | 2337 | const auto copy_amount = std::min(std::size_t{out_thread_ids_size}, num_threads); |
| 2335 | 2338 | ||
| 2336 | auto list_iter = thread_list.cbegin(); | 2339 | auto list_iter = thread_list.cbegin(); |
| 2337 | for (std::size_t i = 0; i < copy_amount; ++i, ++list_iter) { | 2340 | for (std::size_t i = 0; i < copy_amount; ++i, ++list_iter) { |
| 2338 | Memory::Write64(out_thread_ids, (*list_iter)->GetThreadID()); | 2341 | memory.Write64(out_thread_ids, (*list_iter)->GetThreadID()); |
| 2339 | out_thread_ids += sizeof(u64); | 2342 | out_thread_ids += sizeof(u64); |
| 2340 | } | 2343 | } |
| 2341 | 2344 | ||