arm_opcode: fix encoding of ARMv5 breakpoint instruction
authorAntonio Borneo <borneo.antonio@gmail.com>
Tue, 15 Jan 2019 14:51:13 +0000 (15:51 +0100)
committerMatthias Welwarsky <matthias@welwarsky.de>
Wed, 23 Jan 2019 15:26:39 +0000 (15:26 +0000)
The encoding of BKPT instruction is 0xE12###7#, where the four '#'
characters should be replaced by the 16 bits immediate value.
The macro uses an incorrect shift amount, thus the immediate value
is not properly coded and bits 20~23 of the opcode could get
corrupted.

Fixed by using the proper shift amount.

Change-Id: I32db8224ab57aad6d3b002f92f9f259056593675
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4854
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
src/target/arm_opcodes.h

index 482abe630a0025464427e7f1475df4b631507793..e94e8333b8e013a2251c0c2d096d97bfb308ea03 100644 (file)
 /* Breakpoint instruction (ARMv5)
  * Im: 16-bit immediate
  */
-#define ARMV5_BKPT(Im) (0xe1200070 | ((Im & 0xfff0) << 8) | (Im & 0xf))
+#define ARMV5_BKPT(Im) (0xe1200070 | ((Im & 0xfff0) << 4) | (Im & 0xf))
 
 
 /* Thumb mode instructions