[arm] Fix displaced stepping for thumb alu reg instruction
authorYao Qi <yao.qi@linaro.org>
Fri, 10 Apr 2015 09:33:01 +0000 (10:33 +0100)
committerYao Qi <yao.qi@linaro.org>
Fri, 10 Apr 2015 09:33:01 +0000 (10:33 +0100)
commitef713951c571c8490ca57c17c88785c6df1ed840
tree04c543ebae288bd41e2187b401aaa8cda5372c3a
parent906d60cf467b2d5a20ff04dbc4805a84ef313229
[arm] Fix displaced stepping for thumb alu reg instruction

Recent patch series "V2 All-stop on top of non-stop" causes a SIGSEGV
in the test case,

> -PASS: gdb.base/info-shared.exp: continue to breakpoint: library function #4
> +FAIL: gdb.base/info-shared.exp: continue to breakpoint: library function #4
>
> continue^M
> Continuing.^M
> ^M
> Program received signal SIGSEGV, Segmentation fault.^M
> 0x40021564 in ?? () gdb/testsuite/gdb.base/info-shared-solib1.so^M
> (gdb) FAIL: gdb.base/info-shared.exp: continue to breakpoint: library function #4

and an ARM displaced stepping bug is exposed.  It can be reproduced by
the modified gdb.arch/arm-disp-step.exp as below,

continue^M
Continuing.^M
^M
Program received signal SIGSEGV, Segmentation fault.^M
0xa713cfcc in ?? ()^M
(gdb) FAIL: gdb.arch/arm-disp-step.exp: continue to breakpoint: continue to test_add_rn_pc_end

This patch is to fix it.

gdb:

2015-04-10  Yao Qi  <yao.qi@linaro.org>

* arm-tdep.c (install_alu_reg): Update comment.
(thumb_copy_alu_reg): Remove local variable rn.  Update
debugging message.  Use r2 instead of r1 in the modified
instruction.

gdb/testsuite:

2015-04-10  Yao Qi  <yao.qi@linaro.org>

* gdb.arch/arm-disp-step.S (main): Call test_add_rn_pc.
(test_add_rn_pc): New function.
* gdb.arch/arm-disp-step.exp (test_add_rn_pc): New proc.
(top level): Invoke test_add_rn_pc.
gdb/ChangeLog
gdb/arm-tdep.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.arch/arm-disp-step.S
gdb/testsuite/gdb.arch/arm-disp-step.exp