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;
 	}

Reply via email to