aboutsummaryrefslogtreecommitdiff
path: root/lib/arm64
diff options
context:
space:
mode:
authorcomex2015-02-24 20:57:12 -0500
committercomex2015-02-24 20:57:12 -0500
commit11d6f5764e35bdddae7a4aaf23fd859eecb48c8f (patch)
tree59d1be8a346c15c2e1287d31ce04eabd58eb3104 /lib/arm64
parentfix armv7 syscall registers :o (diff)
downloadsubstitute-11d6f5764e35bdddae7a4aaf23fd859eecb48c8f.tar.gz
Add unaligned read/write functions.
I thought I could get away without since I wasn't (presently) targeting systems without hardware support for unaligned accesses, but on armv7 clang insists on optimizing into the one ARM instruction that requires alignment anyway - LDM/STM. Oops. Damnit, clang.
Diffstat (limited to 'lib/arm64')
-rw-r--r--lib/arm64/dis-main.inc.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/arm64/dis-main.inc.h b/lib/arm64/dis-main.inc.h
index a009189..cb24065 100644
--- a/lib/arm64/dis-main.inc.h
+++ b/lib/arm64/dis-main.inc.h
@@ -65,7 +65,7 @@ static INLINE void P(GPR64_Rn_2_BLR)(tdis_ctx ctx, UNUSED struct bitslice Rn) {
}
static INLINE void P(dis)(tdis_ctx ctx) {
- uint32_t op = ctx->base.op = *(uint32_t *) ctx->base.ptr;
+ uint32_t op = ctx->base.op = unaligned_r32(ctx->base.ptr);
ctx->base.op_size = ctx->base.newop_size = 4;
/* clang doesn't realize that this is unreachable and generates code like
* "and ecx, 0x1f; cmp ecx, 0x1f; ja abort". Yeah, nice job there. */