old-cross-binutils/gdb/testsuite/gdb.arch
Andrew Burgess 53e8a631a0 Add a TRY_CATCH to get_prev_frame_always to better manage errors during unwind.
https://sourceware.org/ml/gdb-patches/2014-05/msg00737.html

Currently a MEMORY_ERROR raised during unwinding a frame will cause the
unwind to stop with an error message, for example:

  (gdb) bt
  #0  breakpt () at amd64-invalid-stack-middle.c:27
  #1  0x00000000004008f0 in func5 () at amd64-invalid-stack-middle.c:32
  #2  0x0000000000400900 in func4 () at amd64-invalid-stack-middle.c:38
  #3  0x0000000000400910 in func3 () at amd64-invalid-stack-middle.c:44
  #4  0x0000000000400928 in func2 () at amd64-invalid-stack-middle.c:50
  Cannot access memory at address 0x2aaaaaab0000

However, frame #4 is marked as being the end of the stack unwind, so a
subsequent request for the backtrace looses the error message, such as:

  (gdb) bt
  #0  breakpt () at amd64-invalid-stack-middle.c:27
  #1  0x00000000004008f0 in func5 () at amd64-invalid-stack-middle.c:32
  #2  0x0000000000400900 in func4 () at amd64-invalid-stack-middle.c:38
  #3  0x0000000000400910 in func3 () at amd64-invalid-stack-middle.c:44
  #4  0x0000000000400928 in func2 () at amd64-invalid-stack-middle.c:50

When fetching the backtrace, or requesting the stack depth using the MI
interface the situation is even worse, the first time a request is made
we encounter the memory error and so the MI returns an error instead of
the correct result, for example:

  (gdb) -stack-info-depth
  ^error,msg="Cannot access memory at address 0x2aaaaaab0000"

Or,

  (gdb) -stack-list-frames
  ^error,msg="Cannot access memory at address 0x2aaaaaab0000"

However, once one of these commands has been used gdb has, internally,
walked the stack and figured that out that frame #4 is the bottom of the
stack, so the second time an MI command is tried you'll get the "expected"
result:

  (gdb) -stack-info-depth
  ^done,depth="5"

Or,

  (gdb) -stack-list-frames
  ^done,stack=[frame={level="0", .. snip lots .. }]

After this patch the MEMORY_ERROR encountered during the frame unwind is
attached to frame #4 as the stop reason, and is displayed in the CLI each
time the backtrace is requested.  In the MI, catching the error means that
the "expected" result is returned the first time the MI command is issued.
So, from the CLI the results of the backtrace will be:

  (gdb) bt
  #0  breakpt () at amd64-invalid-stack-middle.c:27
  #1  0x00000000004008f0 in func5 () at amd64-invalid-stack-middle.c:32
  #2  0x0000000000400900 in func4 () at amd64-invalid-stack-middle.c:38
  #3  0x0000000000400910 in func3 () at amd64-invalid-stack-middle.c:44
  #4  0x0000000000400928 in func2 () at amd64-invalid-stack-middle.c:50
  Backtrace stopped: Cannot access memory at address 0x2aaaaaab0000

Each and every time that the backtrace is requested, while the MI output
will similarly be consistently:

  (gdb) -stack-info-depth
  ^done,depth="5"

Or,

  (gdb) -stack-list-frames
  ^done,stack=[frame={level="0", .. snip lots .. }]

gdb/ChangeLog:

	* frame.c (struct frame_info): Add stop_string field.
	(get_prev_frame_always_1): Renamed from get_prev_frame_always.
	(get_prev_frame_always): Old content moved into
	get_prev_frame_always_1.  Call get_prev_frame_always_1 inside
	TRY_CATCH, handle MEMORY_ERROR exceptions.
	(frame_stop_reason_string): New function definition.
	* frame.h (unwind_stop_reason_to_string): Extend comment to
	mention frame_stop_reason_string.
	(frame_stop_reason_string): New function declaration.
	* stack.c (frame_info): Switch to frame_stop_reason_string.
	(backtrace_command_1): Switch to frame_stop_reason_string.
	* unwind_stop_reason.def: Add UNWIND_MEMORY_ERROR.
	(LAST_ENTRY): Changed to UNWIND_MEMORY_ERROR.
	* guile/lib/gdb.scm: Add FRAME_UNWIND_MEMORY_ERROR to export list.

gdb/doc/ChangeLog:

	* guile.texi (Frames In Guile): Mention FRAME_UNWIND_MEMORY_ERROR.
	* python.texi (Frames In Python): Mention
	gdb.FRAME_UNWIND_MEMORY_ERROR.

gdb/testsuite/ChangeLog:

	* gdb.arch/amd64-invalid-stack-middle.exp: Update expected results.
	* gdb.arch/amd64-invalid-stack-top.exp: Likewise.
2014-05-30 22:44:36 +01:00
..
aarch64-atomic-inst.c aarch64: detect atomic sequences like other ll/sc architectures 2014-05-07 09:41:50 -07:00
aarch64-atomic-inst.exp aarch64: detect atomic sequences like other ll/sc architectures 2014-05-07 09:41:50 -07:00
alpha-step.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
alpha-step.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
altivec-abi.c
altivec-abi.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
altivec-regs.c
altivec-regs.exp PowerPC64 little-endian fixes: AltiVec tests 2014-02-04 18:28:24 +01:00
amd64-byte.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-disp-step.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-disp-step.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-dword.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value-inline.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value-inline.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value-inline.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value-param.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value-param.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value-param.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value.cc Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-entry-value.s Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-i386-address.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-i386-address.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-invalid-stack-middle.c Remove previous frame if an error occurs when computing frame id during unwind. 2014-05-30 22:36:14 +01:00
amd64-invalid-stack-middle.exp Add a TRY_CATCH to get_prev_frame_always to better manage errors during unwind. 2014-05-30 22:44:36 +01:00
amd64-invalid-stack-middle.S Remove previous frame if an error occurs when computing frame id during unwind. 2014-05-30 22:36:14 +01:00
amd64-invalid-stack-top.c Remove previous frame if an error occurs when computing frame id during unwind. 2014-05-30 22:36:14 +01:00
amd64-invalid-stack-top.exp Add a TRY_CATCH to get_prev_frame_always to better manage errors during unwind. 2014-05-30 22:44:36 +01:00
amd64-prologue-xmm.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-prologue-xmm.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-prologue-xmm.s Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-pseudo.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-stap-optional-prefix.exp Extend recognized types of SDT probe's arguments 2014-05-02 17:50:45 -03:00
amd64-stap-optional-prefix.S Extend recognized types of SDT probe's arguments 2014-05-02 17:50:45 -03:00
amd64-stap-special-operands.exp Fix for PR tdep/16397: SystemTap SDT probe support for x86 doesn't work with "triplet operands" 2014-02-20 18:49:09 -03:00
amd64-stap-three-arg-disp.c Fix for PR tdep/16397: SystemTap SDT probe support for x86 doesn't work with "triplet operands" 2014-02-20 18:49:09 -03:00
amd64-stap-three-arg-disp.S Fix for PR tdep/16397: SystemTap SDT probe support for x86 doesn't work with "triplet operands" 2014-02-20 18:49:09 -03:00
amd64-stap-triplet.c Fix for PR tdep/16397: SystemTap SDT probe support for x86 doesn't work with "triplet operands" 2014-02-20 18:49:09 -03:00
amd64-stap-triplet.S Fix for PR tdep/16397: SystemTap SDT probe support for x86 doesn't work with "triplet operands" 2014-02-20 18:49:09 -03:00
amd64-tailcall-cxx.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-cxx1.cc Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-cxx1.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-cxx2.cc Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-cxx2.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-noret.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-noret.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-noret.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-ret.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-ret.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-tailcall-ret.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
amd64-word.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
arm-bl-branch-dest.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
arm-bl-branch-dest.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
arm-disp-step.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
arm-disp-step.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
e500-abi.c
e500-abi.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
e500-prologue.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
e500-prologue.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
e500-regs.c
e500-regs.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
gdb1291.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
gdb1291.s Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
gdb1431.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
gdb1431.s Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
gdb1558.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
gdb1558.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-avx.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-avx.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-avx512.c Add AVX512 registers support to GDB and GDBserver. 2014-04-24 16:30:03 +02:00
i386-avx512.exp Add AVX512 registers support to GDB and GDBserver. 2014-04-24 16:30:03 +02:00
i386-bp_permanent.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-byte.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-cfi-notcurrent.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-cfi-notcurrent.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-disp-step.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-disp-step.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-dr3-watch.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-dr3-watch.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-float.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-float.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-gnu-cfi-asm.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-gnu-cfi.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-gnu-cfi.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-mpx.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-mpx.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-permbkpt.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-permbkpt.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-prologue.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-prologue.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-pseudo.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-signal.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-signal.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-size-overlap.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-size-overlap.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-size.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-size.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-sse-stack-align.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-sse-stack-align.exp Fix i386-sse-stack-align.exp regression since GDB_PARALLEL. 2014-02-06 23:14:20 +01:00
i386-sse-stack-align.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-sse.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-sse.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-unwind.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-unwind.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
i386-word.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ia64-breakpoint-shadow.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ia64-breakpoint-shadow.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
iwmmxt-regs.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
iwmmxt-regs.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
Makefile.in Add AVX512 registers support to GDB and GDBserver. 2014-04-24 16:30:03 +02:00
mips-octeon-bbit.c 2012-08-19 Andrew Pinski <apinski@cavium.com> 2012-08-19 22:22:49 +00:00
mips-octeon-bbit.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-inmain.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-main.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-sin.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-sinfrob.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-sinfrob16.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-sinmain.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks-sinmips16.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mips16-thunks.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pa-nullify.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pa-nullify.s
pa64-nullify.s
powerpc-aix-prologue.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
powerpc-aix-prologue.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
powerpc-d128-regs.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
powerpc-d128-regs.exp PowerPC64 little-endian fixes: 128-bit DFP parameters / registers 2014-02-04 18:36:54 +01:00
powerpc-power.exp [testsuite patch] Test power{5,6,7} disassembly 2014-05-19 15:39:24 +02:00
powerpc-power.s [testsuite patch] Test power{5,6,7} disassembly 2014-05-19 15:39:24 +02:00
powerpc-prologue.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
powerpc-prologue.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ppc-dfp.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ppc-dfp.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ppc-fp.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ppc-fp.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ppc64-atomic-inst.exp gdb.arch/ppc64-atomic-inst.exp: Improve error handling. 2014-04-01 12:12:59 +11:00
ppc64-atomic-inst.S Fix ppc64 single step over atomic sequence testcase. 2014-04-01 12:12:48 +11:00
s390-multiarch.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
s390-multiarch.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
s390-tdbregs.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
s390-tdbregs.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
sparc-sysstep.c This changeset makes sparc64_linux_step_trap to return 0 when a 2014-01-29 07:15:05 -08:00
sparc-sysstep.exp This changeset makes sparc64_linux_step_trap to return 0 when a 2014-01-29 07:15:05 -08:00
spu-info.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
spu-info.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
spu-ls.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
spu-ls.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb-bx-pc.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb-bx-pc.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb-prologue.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb-prologue.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb-singlestep.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb-singlestep.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb2-it.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
thumb2-it.S Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
vsx-regs.c
vsx-regs.exp PowerPC64 little-endian fixes: VSX tests and pseudo-regs 2014-02-04 18:31:38 +01:00