Hi.

I've tried to disassemble ARM7TDMI Thumb code with openocd (built from 
repository version 1337) using command:

armv4_5 disassemble 0x1000 8 thumb

and have not get a Thumb disassembly.

I've checked this in file armv4_5.c and think it's a bug in 
handle_armv4_5_disassemble_command function. I'm attaching a solution, 
check if it's worth committing.



Index: src/target/armv4_5.c
===================================================================
--- src/target/armv4_5.c        (version 1337)
+++ src/target/armv4_5.c        (working copy)
@@ -404,6 +404,7 @@
        int i;
        arm_instruction_t cur_instruction;
        u32 opcode;
+       u16 thumb_opcode;
        int thumb = 0;

        if (armv4_5->common_magic != ARMV4_5_COMMON_MAGIC)
@@ -427,13 +428,27 @@

        for (i = 0; i < count; i++)
        {
-               if((retval = target_read_u32(target, address, &opcode)) != 
ERROR_OK)
+               if(thumb)
                {
-                       return retval;
+                       if((retval = target_read_u16(target, address, 
&thumb_opcode)) != 
ERROR_OK)
+                       {
+                               return retval;
+                       }
+                       if((retval = thumb_evaluate_opcode(thumb_opcode, 
address, 
&cur_instruction)) != ERROR_OK)
+                       {
+                               return retval;
+                       }
                }
-               if((retval = arm_evaluate_opcode(opcode, address, 
&cur_instruction)) 
!= ERROR_OK)
+               else
                {
-                       return retval;
+                       if((retval = target_read_u32(target, address, &opcode)) 
!= ERROR_OK)
+                       {
+                               return retval;
+                       }
+                       if((retval = arm_evaluate_opcode(opcode, address, 
&cur_instruction)) 
!= ERROR_OK)
+                       {
+                               return retval;
+                       }
                }
                command_print(cmd_ctx, "%s", cur_instruction.text);
                address += (thumb) ? 2 : 4;



-- 
Adam Dybkowski
                adybk...@wp.pl
                http://dybkowski.net/
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to