LINUX.ORG.RU

История изменений

Исправление panzerito, (текущая версия) :

А это баг qemu/gdb или так должно быть?

Дебаг arm программы на qemu

$ qemu-system-arm -M lm3s6965evb -cpu cortex-m3 -S -gdb tcp::1234 -nographic -kernel test.bin

(gdb) disas main
Dump of assembler code for function main:
   0x000000b8 <+0>:     push    {r7}
   0x000000ba <+2>:     sub     sp, #20
...
(gdb) x /2i 0xb8
   0xb8 <main>: push    {r7}
   0xba <main+2>:       sub     sp, #20
(gdb) x /4xb 0xb8
0xb8 <main>:    0x80    0xb4    0x85    0xb0
(gdb) monitor x /4xb 0xb8
000000b8: 0x80 0xb4 0x85 0xb0
(gdb) monitor x /2i 0xb8
0x000000b8:  b085b480      addlt        fp, r5, r0, lsl #9
0x000000bc:  f245af00      vmax.f32     d26, d5, d0
(gdb) monitor x /2i 0xb9
0x000000b9:  b480       push    {r7}
0x000000bb:  b085       sub     sp, #20
(gdb) monitor x /4xb 0xb9
000000b9: 0xb4 0x85 0xb0 0x00

На команду

(gdb) monitor x /2i 0xb8
происходит интерпретация thumb-кода как arm-кода. С 0xb9 все почему-то становится правильно, но ведь инструкции должны дизассемблироваться как 0x85b4 0x00b0.

Исправление panzerito, :

А это баг qemu/gdb или так должно быть?

Дебаг arm программы на qemu

$ qemu-system-arm -M lm3s6965evb -cpu cortex-m3 -S -gdb tcp::1234 -nographic -kernel test.bin

(gdb) disas main
Dump of assembler code for function main:
   0x000000b8 <+0>:     push    {r7}
   0x000000ba <+2>:     sub     sp, #20
...
(gdb) x /2i 0xb8
   0xb8 <main>: push    {r7}
   0xba <main+2>:       sub     sp, #20
(gdb) x /4xb 0xb8
0xb8 <main>:    0x80    0xb4    0x85    0xb0
(gdb) monitor x /4xb 0xb8
000000b8: 0x80 0xb4 0x85 0xb0
(gdb) monitor x /2i 0xb8
0x000000b8:  b085b480      addlt        fp, r5, r0, lsl #9
0x000000bc:  f245af00      vmax.f32     d26, d5, d0
(gdb) monitor x /2i 0xb9
0x000000b9:  b480       push    {r7}
0x000000bb:  b085       sub     sp, #20
(gdb) monitor x /4xb 0xb9
000000b9: 0xb4 0x85 0xb0 0x00

На команду

(gdb) monitor x /2i 0xb8
происходит интерпретация thumb-кода как arm-кода. С 0xb9 все становится правильно, но ведь инструкции должны дизассемблироваться как 0x85b4 0x00b0.

Исправление panzerito, :

А это баг qemu/gdb или так должно быть?

Дебаг arm программы на qemu

$ qemu-system-arm -M lm3s6965evb -cpu cortex-m3 -S -gdb tcp::1234 -nographic -kernel test.bin

(gdb) disas main
Dump of assembler code for function main:
   0x000000b8 <+0>:     push    {r7}
   0x000000ba <+2>:     sub     sp, #20
...
(gdb) x /2i 0xb8
   0xb8 <main>: push    {r7}
   0xba <main+2>:       sub     sp, #20
(gdb) x /4xb 0xb8
0xb8 <main>:    0x80    0xb4    0x85    0xb0
(gdb) monitor x /4xb 0xb8
000000b8: 0x80 0xb4 0x85 0xb0
(gdb) monitor x /2i 0xb8
0x000000b8:  b085b480      addlt        fp, r5, r0, lsl #9
0x000000bc:  f245af00      vmax.f32     d26, d5, d0
(gdb) monitor x /2i 0xb9
0x000000b9:  b480       push    {r7}
0x000000bb:  b085       sub     sp, #20
(gdb) monitor x /4xb 0xb9
000000b9: 0xb4 0x85 0xb0 0x00

С адреса 0xb9 инструкции должны же дизассемблироваться как 0x85b4 0x00b0.

Исправление panzerito, :

А это баг qemu/gdb или так должно быть?

Дебаг arm программы на qemu

$ qemu-system-arm  -M lm3s6965evb -cpu cortex-m3 -S -gdb tcp::1234 -nographic -kernel test.bin

(gdb) disas main
Dump of assembler code for function main:
   0x000000b8 <+0>:     push    {r7}
   0x000000ba <+2>:     sub     sp, #20
...
(gdb) x /2i 0xb8
   0xb8 <main>: push    {r7}
   0xba <main+2>:       sub     sp, #20
(gdb) x /4xb 0xb8
0xb8 <main>:    0x80    0xb4    0x85    0xb0
(gdb) monitor x /4xb 0xb8
000000b8: 0x80 0xb4 0x85 0xb0
(gdb) monitor x /2i 0xb8
0x000000b8:  b085b480      addlt        fp, r5, r0, lsl #9
0x000000bc:  f245af00      vmax.f32     d26, d5, d0
(gdb) monitor x /2i 0xb9
0x000000b9:  b480       push    {r7}
0x000000bb:  b085       sub     sp, #20
(gdb) monitor x /4xb 0xb9
000000b9: 0xb4 0x85 0xb0 0x00

С адреса 0xb9 инструкции должны же дизассемблироваться как 0x85b4 0x00b0.

Исходная версия panzerito, :

А это баг qemu/gdb или так должно быть?

Дебаг arm программы на qemu

$ qemu-system-arm  -M lm3s6965evb -cpu cortex-m3 -S -gdb tcp::1234 -nographic -kernel test.bin

(gdb) disas main
Dump of assembler code for function main:
   0x000000b8 <+0>:     push    {r7}
   0x000000ba <+2>:     sub     sp, #20
...
(gdb) x /2i 0xb8
   0xb8 <main>: push    {r7}
   0xba <main+2>:       sub     sp, #20
(gdb) x /4xb 0xb8
0xb8 <main>:    0x80    0xb4    0x85    0xb0
(gdb) monitor x /4xb 0xb8
000000b8: 0x80 0xb4 0x85 0xb0
(gdb) monitor x /2i 0xb8
0x000000b8:  b085b480      addlt        fp, r5, r0, lsl #9
0x000000bc:  f245af00      vmax.f32     d26, d5, d0
(gdb) monitor x /2i 0xb9
0x000000b9:  b480       push    {r7}
0x000000bb:  b085       sub     sp, #20
(gdb) monitor x /4xb 0xb9
000000b9: 0xb4 0x85 0xb0 0x00

С 0xb9 инструкции должны же дизассемблироваться как 0x85b4 0x00b0.