1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:47:44 +00:00

UserpaceEmulator: Handle possibly unaligned IO

We also should add some UB warnings for that in the future
This commit is contained in:
Hendiadyoin1 2021-07-13 17:18:39 +02:00 committed by Ali Mohammad Pur
parent d761c5024b
commit 54c005754a
3 changed files with 85 additions and 41 deletions

View file

@ -8,6 +8,7 @@
#include "Region.h"
#include "ValueWithShadow.h"
#include <AK/ByteReader.h>
#include <LibX86/Instruction.h>
#include <LibX86/Interpreter.h>
@ -1223,7 +1224,8 @@ ALWAYS_INLINE u16 SoftCPU::read16()
if (!m_cached_code_region || !m_cached_code_region->contains(m_eip))
update_code_cache();
u16 value = *reinterpret_cast<const u16*>(&m_cached_code_base_ptr[m_eip - m_cached_code_region->base()]);
u16 value;
ByteReader::load<u16>(&m_cached_code_base_ptr[m_eip - m_cached_code_region->base()], value);
m_eip += 2;
return value;
}
@ -1233,7 +1235,9 @@ ALWAYS_INLINE u32 SoftCPU::read32()
if (!m_cached_code_region || !m_cached_code_region->contains(m_eip))
update_code_cache();
u32 value = *reinterpret_cast<const u32*>(&m_cached_code_base_ptr[m_eip - m_cached_code_region->base()]);
u32 value;
ByteReader::load<u32>(&m_cached_code_base_ptr[m_eip - m_cached_code_region->base()], value);
m_eip += 4;
return value;
}
@ -1243,7 +1247,9 @@ ALWAYS_INLINE u64 SoftCPU::read64()
if (!m_cached_code_region || !m_cached_code_region->contains(m_eip))
update_code_cache();
auto value = *reinterpret_cast<const u64*>(&m_cached_code_base_ptr[m_eip - m_cached_code_region->base()]);
u64 value;
ByteReader::load<u64>(&m_cached_code_base_ptr[m_eip - m_cached_code_region->base()], value);
m_eip += 8;
return value;
}