binutils-gdb/gdb/testsuite/gdb.reverse
Yao Qi 4a7e075c3f Tweak gdb.reverse/step-precsave.exp and gdb.reverse/step-reverse.exp
I see the following test fail in arm-linux with -marm and -fomit-frame-pointer,

 step
 callee () at /home/yao/SourceCode/gnu/gdb/git/gdb/testsuite/gdb.reverse/step-reverse.c:27
 27      }                       /* RETURN FROM CALLEE */
 (gdb) step
 main () at /home/yao/SourceCode/gnu/gdb/git/gdb/testsuite/gdb.reverse/step-reverse.c:58
 58         callee();    /* STEP INTO THIS CALL */
 (gdb) FAIL: gdb.reverse/step-precsave.exp: reverse step into fn call

As we can see, the "step" has already stepped into the function callee,
but in the last line.  The second "step" attempts to step to function
body, but it goes out of callee, which isn't expected.

The program is compiled with -marm and -fomit-frame-pointer, the
function callee is prologue-less, because nothing needs to be saved
on stack,

(gdb) disassemble callee
Dump of assembler code for function callee:
   0x00010680 <+0>:	movw	r3, #2364	; 0x93c
   0x00010684 <+4>:	movt	r3, #2
   0x00010688 <+8>:	ldr	r3, [r3]
   0x0001068c <+12>:	add	r2, r3, #1
   0x00010690 <+16>:	movw	r3, #2364	; 0x93c
   0x00010694 <+20>:	movt	r3, #2
   0x00010698 <+24>:	str	r2, [r3]
   0x0001069c <+28>:	mov	r3, #0
   0x000106a0 <+32>:	mov	r0, r3
   0x000106a4 <+36>:	bx	lr

program stops at the 0x106a0 (passed the epilogue) after the first
"step".  When second "step" is executed, the stepping range is
[0x10680-0x106a0], which starts from the first instruction of function
callee (because it doesn't have prologue).

infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=0, current thread [LWP 2461] at 0x1069c^M
infrun: prepare_to_wait^M
infrun: target_wait (-1.0.0, status) =^M
infrun:   2461.2461.0 [LWP 2461],^M
infrun:   status->kind = stopped, signal = GDB_SIGNAL_TRAP^M
infrun: TARGET_WAITKIND_STOPPED^M
infrun: stop_pc = 0x10698^M
infrun: stepping inside range [0x10680-0x106a0]

When program goes out of the range, it stops at the caller of callee,
and test fails.  IOW, if function callee has prologue, the stepping
range won't start from the first instruction of the function, and
program stops at the prologue and test passes.

IMO, GDB does nothing wrong, but test shouldn't expect the program
stops in callee after the second "step".  I decide to fix test rather
than GDB.  In this patch, I change to test to do one "step", and check
the program is still in callee, then, do multiple "step" until program
goes out of the callee.

gdb/testsuite:

2016-04-22  Yao Qi  <yao.qi@linaro.org>

	* gdb.reverse/step-precsave.exp: Do one step and test program
	stops in "callee" and do multiple steps until program goes out
	of "callee".
	* gdb.reverse/step-reverse.exp: Likewise.
2016-04-22 12:14:40 +01:00
..
amd64-tailcall-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
amd64-tailcall-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
amd64-tailcall-reverse.S GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
break-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
break-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
break-reverse.exp Add quotation mark in test message 2016-03-24 09:53:50 +00:00
consecutive-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
consecutive-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
consecutive-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
finish-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
finish-reverse-bkpt.exp Fix gdb.reverse/finish-reverse-bkpt.exp 2016-04-07 17:06:14 +01:00
finish-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
finish-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
fstatat-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
fstatat-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
getresuid-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
getresuid-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i386-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i386-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i386-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i386-sse-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i386-sse-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i387-env-reverse.c
i387-env-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
i387-stack-reverse.c
i387-stack-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
insn-reverse.c Fix various bugs in arm_record_exreg_ld_st_insn 2016-02-26 15:00:36 +00:00
insn-reverse.exp Rename gdb.reverse/aarch64.{exp,c} to gdb.reverse/insn-reverse.{exp,c} 2016-02-26 15:00:36 +00:00
machinestate-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
machinestate.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
machinestate.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
ms1.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
next-reverse-bkpt-over-sr.exp Fix gdb.reverse/next-reverse-bkpt-over-sr.exp 2016-04-07 16:57:09 +01:00
pipe-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
pipe-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
readv-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
readv-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
recvmsg-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
recvmsg-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
rerun-prec.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
rerun-prec.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
s390-mvcle.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
s390-mvcle.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
shr1.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
shr2.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
shr.h GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
sigall-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
sigall-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
sigall-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
singlejmp-reverse-nodebug.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
singlejmp-reverse-nodebug.S GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
singlejmp-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
singlejmp-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
singlejmp-reverse.S GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
solib-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
solib-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
solib-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
step-precsave.exp Tweak gdb.reverse/step-precsave.exp and gdb.reverse/step-reverse.exp 2016-04-22 12:14:40 +01:00
step-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
step-reverse.exp Tweak gdb.reverse/step-precsave.exp and gdb.reverse/step-reverse.exp 2016-04-22 12:14:40 +01:00
time-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
time-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
until-precsave.exp Simplify gdb.reverse/until-reverse.c 2016-03-30 16:36:51 +01:00
until-reverse.c Simplify gdb.reverse/until-reverse.c 2016-03-30 16:36:51 +01:00
until-reverse.exp Simplify gdb.reverse/until-reverse.c 2016-03-30 16:36:51 +01:00
ur1.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
waitpid-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
waitpid-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
watch-precsave.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
watch-reverse.c GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00
watch-reverse.exp GDB copyright headers update after running GDB's copyright.py script. 2016-01-01 08:43:22 +04:00