Przeglądaj źródła

kernel/process: Store the main thread stack size to a data member

This will be necessary in order to properly report memory usage within
svcGetInfo.
Lioncash 7 lat temu
rodzic
commit
5d4ab5ec2f
2 zmienionych plików z 7 dodań i 4 usunięć
  1. 4 4
      src/core/hle/kernel/process.cpp
  2. 3 0
      src/core/hle/kernel/process.h

+ 4 - 4
src/core/hle/kernel/process.cpp

@@ -110,15 +110,15 @@ ResultCode Process::LoadFromMetadata(const FileSys::ProgramMetadata& metadata) {
 
 void Process::Run(VAddr entry_point, s32 main_thread_priority, u64 stack_size) {
     // The kernel always ensures that the given stack size is page aligned.
-    stack_size = Common::AlignUp(stack_size, Memory::PAGE_SIZE);
+    main_thread_stack_size = Common::AlignUp(stack_size, Memory::PAGE_SIZE);
 
     // Allocate and map the main thread stack
     // TODO(bunnei): This is heap area that should be allocated by the kernel and not mapped as part
     // of the user address space.
+    const VAddr mapping_address = vm_manager.GetTLSIORegionEndAddress() - main_thread_stack_size;
     vm_manager
-        .MapMemoryBlock(vm_manager.GetTLSIORegionEndAddress() - stack_size,
-                        std::make_shared<std::vector<u8>>(stack_size, 0), 0, stack_size,
-                        MemoryState::Stack)
+        .MapMemoryBlock(mapping_address, std::make_shared<std::vector<u8>>(main_thread_stack_size),
+                        0, main_thread_stack_size, MemoryState::Stack)
         .Unwrap();
 
     vm_manager.LogLayout();

+ 3 - 0
src/core/hle/kernel/process.h

@@ -247,6 +247,9 @@ private:
     /// Memory manager for this process.
     Kernel::VMManager vm_manager;
 
+    /// Size of the main thread's stack in bytes.
+    u64 main_thread_stack_size = 0;
+
     /// Current status of the process
     ProcessStatus status;