Module Name: src
Committed By: matt
Date: Thu Jan 30 06:38:00 UTC 2014
Modified Files:
src/sys/arch/arm/include: locore.h
Log Message:
ldrht is v6t2 or later so use ldrt and extract the right halfword.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/include/locore.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/include/locore.h
diff -u src/sys/arch/arm/include/locore.h:1.8 src/sys/arch/arm/include/locore.h:1.9
--- src/sys/arch/arm/include/locore.h:1.8 Wed Jan 29 18:45:20 2014
+++ src/sys/arch/arm/include/locore.h Thu Jan 30 06:38:00 2014
@@ -197,7 +197,16 @@ read_thumb_insn(vaddr_t va, bool user_p)
va &= ~1;
uint32_t insn;
if (user_p) {
+#ifdef _ARM_ARCH_T2
__asm __volatile("ldrht %0, [%1]" : "=&r"(insn) : "r"(va));
+#else
+ __asm __volatile("ldrt %0, [%1]" : "=&r"(insn) : "r"(va & ~3));
+#ifdef __ARMEB__
+ insn = (uint16_t) (insn >> (((va ^ 2) & 2) << 3));
+#else
+ insn = (uint16_t) (insn >> ((va & 2) << 3));
+#endif
+#endif
} else {
insn = *(const uint16_t *)va;
}