Explorar o código

UserspaceEmulator: Fix stack for new processes

Fixes #8646.
Gunnar Beutner %!s(int64=4) %!d(string=hai) anos
pai
achega
cbdc7f9e41
Modificáronse 1 ficheiros con 4 adicións e 2 borrados
  1. 4 2
      Userland/DevTools/UserspaceEmulator/Emulator.cpp

+ 4 - 2
Userland/DevTools/UserspaceEmulator/Emulator.cpp

@@ -134,13 +134,15 @@ void Emulator::setup_stack(Vector<ELF::AuxiliaryValue> aux_vector)
         m_cpu.push32(shadow_wrap_as_initialized(argv_entries[i]));
         m_cpu.push32(shadow_wrap_as_initialized(argv_entries[i]));
     u32 argv = m_cpu.esp().value();
     u32 argv = m_cpu.esp().value();
 
 
-    m_cpu.push32(shadow_wrap_as_initialized<u32>(0)); // (alignment)
+    while ((m_cpu.esp().value() + 4) % 16 != 0)
+        m_cpu.push32(shadow_wrap_as_initialized<u32>(0)); // (alignment)
 
 
     u32 argc = argv_entries.size();
     u32 argc = argv_entries.size();
     m_cpu.push32(shadow_wrap_as_initialized(envp));
     m_cpu.push32(shadow_wrap_as_initialized(envp));
     m_cpu.push32(shadow_wrap_as_initialized(argv));
     m_cpu.push32(shadow_wrap_as_initialized(argv));
     m_cpu.push32(shadow_wrap_as_initialized(argc));
     m_cpu.push32(shadow_wrap_as_initialized(argc));
-    m_cpu.push32(shadow_wrap_as_initialized<u32>(0)); // (alignment)
+
+    VERIFY(m_cpu.esp().value() % 16 == 0);
 }
 }
 
 
 bool Emulator::load_elf()
 bool Emulator::load_elf()