Arm64Emitter: Get rid of pointer casts in PoisonMemory

The previous code invokes undefined behavior.
This commit is contained in:
Lioncash 2017-03-23 05:58:16 -04:00
parent 6a17d87b07
commit a7ec2d3831
1 changed files with 7 additions and 4 deletions

View File

@ -4,6 +4,7 @@
#pragma once
#include <cstring>
#include <functional>
#include "Common/ArmCommon.h"
@ -1137,14 +1138,16 @@ class ARM64CodeBlock : public CodeBlock<ARM64XEmitter>
private:
void PoisonMemory() override
{
u32* ptr = (u32*)region;
u32* maxptr = (u32*)(region + region_size);
// If our memory isn't a multiple of u32 then this won't write the last remaining bytes with
// anything
// Less than optimal, but there would be nothing we could do but throw a runtime warning anyway.
// AArch64: 0xD4200000 = BRK 0
while (ptr < maxptr)
*ptr++ = 0xD4200000;
constexpr u32 brk_0 = 0xD4200000;
for (size_t i = 0; i < region_size; i += sizeof(u32))
{
std::memcpy(region + i, &brk_0, sizeof(u32));
}
}
};
}