old-cross-binutils/gdb/testsuite/gdb.dwarf2
Pedro Alves 782d47dfbd Fix "info frame" in the outermost frame.
Doing "info frame" in the outermost frame, when that was indicated by
the next frame saying the unwound PC is undefined/not saved, results
in error and incomplete output:

 (gdb) bt
 #0  thread_function0 (arg=0x0) at threads.c:63
 #1  0x00000034cf407d14 in start_thread (arg=0x7ffff7fcb700) at pthread_create.c:309
 #2  0x000000323d4f168d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115

 (gdb) frame 2
 #2  0x000000323d4f168d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
 115             call    *%rax

 (gdb) info frame
 Stack level 2, frame at 0x0:
  rip = 0x323d4f168d in clone (../sysdeps/unix/sysv/linux/x86_64/clone.S:115); saved rip Register 16 was not saved
 (gdb)

Not saved register values are treated as optimized out values
internally throughout.  stack.c:frame_info is handing unvailable
values, but not optimized out ones.  The patch deletes the
frame_unwind_caller_pc_if_available wrapper function and instead lets
errors propagate to frame_info (it's only user).

As frame_unwind_pc now needs to be able to handle and cache two
different error scenarios, the prev_pc.p variable is replaced with an
enumeration.

(FWIW, I looked into making gdbarch_unwind_pc or a variant return
struct value's instead, but it results in lots of boxing and unboxing
for no real gain -- e.g., the mips and arm implementations need to do
computation on the unboxed PC value.  Might as well throw an error on
first attempt to get at invalid contents.)

After the patch, we get:

 (gdb) info frame
 Stack level 2, frame at 0x0:
  rip = 0x323d4f168d in clone (../sysdeps/unix/sysv/linux/x86_64/clone.S:115); saved rip = <not saved>
  Outermost frame: outermost
  caller of frame at 0x7ffff7fcafc0
  source language asm.
  Arglist at 0x7ffff7fcafb8, args:
  Locals at 0x7ffff7fcafb8, Previous frame's sp is 0x7ffff7fcafc8
 (gdb)

A new test is added.  It's based off dw2-reg-undefined.exp, and tweaked to
mark the return address (rip) of "stop_frame" as undefined.

Tested on x86_64 Fedora 17.

gdb/
2013-12-06  Pedro Alves  <palves@redhat.com>

	* frame.c (enum cached_copy_status): New enum.
	(struct frame_info) <prev_pc.p>: Change type to enum
	cached_copy_status.
	(fprint_frame): Handle not saved and unavailable prev_pc values.
	(frame_unwind_pc_if_available): Delete and merge contents into ...
	(frame_unwind_pc): ... here.  Handle OPTIMIZED_OUT_ERROR.  Adjust
	to use enum cached_copy_status.
	(frame_unwind_caller_pc_if_available): Delete.
	(create_new_frame): Adjust.
	* frame.h (frame_unwind_caller_pc_if_available): Delete
	declaration.
	* stack.c (frame_info): Use frame_unwind_caller_pc instead of
	frame_unwind_caller_pc_if_available, and handle
	NOT_AVAILABLE_ERROR and OPTIMIZED_OUT_ERROR errors.
	* valprint.c (val_print_optimized_out): Use val_print_not_saved.
	(val_print_not_saved): New function.
	* valprint.h (val_print_not_saved): Declare.

gdb/testsuite/
2013-12-06  Pedro Alves  <palves@redhat.com>

	* gdb.dwarf2/dw2-undefined-ret-addr.S: New file.
	* gdb.dwarf2/dw2-undefined-ret-addr.c: New file.
	* gdb.dwarf2/dw2-undefined-ret-addr.exp: New file.
2013-12-06 19:50:10 +00:00
..
callframecfa.exp
callframecfa.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
clztest.c
clztest.exp fix some gdb.dwarf2 tests for parallel safety 2013-08-22 13:39:13 +00:00
clztest.S
dup-psym.exp
dup-psym.S
dw2-ada-ffffffff.exp
dw2-ada-ffffffff.S
dw2-anon-mptr.exp
dw2-anon-mptr.S
dw2-anonymous-func.exp
dw2-anonymous-func.S
dw2-bad-parameter-type.exp
dw2-bad-parameter-type.S
dw2-basic.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-basic.S
dw2-canonicalize-type.exp
dw2-canonicalize-type.S
dw2-case-insensitive-debug.S testsuite/gdb.dwarf2: dw2-case-insensitive.exp: p fuNC_lang fails on arm 2013-11-14 15:18:17 +00:00
dw2-case-insensitive.c testsuite/gdb.dwarf2: dw2-case-insensitive.exp: p fuNC_lang fails on arm 2013-11-14 15:18:17 +00:00
dw2-case-insensitive.exp
dw2-common-block.exp
dw2-common-block.S
dw2-compdir-oldgcc.exp
dw2-compdir-oldgcc.S
dw2-compressed.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-compressed.S
dw2-const.exp
dw2-const.S
dw2-cp-infcall-ref-static-main.c
dw2-cp-infcall-ref-static.exp
dw2-cp-infcall-ref-static.S
dw2-cu-size.exp
dw2-cu-size.S
dw2-dir-file-name.c Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-dir-file-name.exp * gdb.dwarf2/dw2-dir-file-name.exp: Don't use brace expansion, 2013-05-21 07:25:51 +00:00
dw2-dos-drive.exp gdb/ 2013-01-17 20:40:44 +00:00
dw2-dos-drive.S gdb/ 2013-01-17 20:40:44 +00:00
dw2-double-set-die-type.exp
dw2-double-set-die-type.S
dw2-dup-frame.c Don't let two frames with the same id end up in the frame chain. 2013-11-22 13:50:48 +00:00
dw2-dup-frame.exp Don't let two frames with the same id end up in the frame chain. 2013-11-22 13:50:48 +00:00
dw2-dup-frame.S Don't let two frames with the same id end up in the frame chain. 2013-11-22 13:50:48 +00:00
dw2-empty-namespace.exp
dw2-empty-namespace.S
dw2-empty-pc-range.exp
dw2-empty-pc-range.S Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-entry-value-main.c
dw2-entry-value.exp
dw2-entry-value.S
dw2-error.c Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-error.exp * gdb.dwarf2/dw2-error.exp: Pass test name to "file" test. 2013-01-23 21:04:45 +00:00
dw2-error.S Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-filename.exp
dw2-filename.S
dw2-icc-opaque.exp
dw2-icc-opaque.S
dw2-ifort-parameter-debug.S
dw2-ifort-parameter.c
dw2-ifort-parameter.exp
dw2-inheritance.exp
dw2-inheritance.S
dw2-inline-break.exp
dw2-inline-break.S
dw2-inline-param-main.c
dw2-inline-param.exp * lib/future.exp (gdb_find_objcopy, gdb_find_readelf): New procs. 2013-09-20 21:47:06 +00:00
dw2-inline-param.S
dw2-intercu.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-intercu.S
dw2-intermix.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-intermix.S
dw2-linkage-name-trust-main.cc
dw2-linkage-name-trust.exp
dw2-linkage-name-trust.S
dw2-minsym-in-cu.exp fix some gdb.dwarf2 tests for parallel safety 2013-08-22 13:39:13 +00:00
dw2-minsym-in-cu.S
dw2-modula2-self-type.exp
dw2-modula2-self-type.S
dw2-namespaceless-anonymous.exp
dw2-namespaceless-anonymous.S
dw2-noloc-main.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-noloc.exp gdb/testsuite/ 2013-03-15 01:41:29 +00:00
dw2-noloc.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-objfile-overlap-inner.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-objfile-overlap-outer.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-objfile-overlap.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-op-call.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-op-call.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-op-out-param.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-op-out-param.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-op-stack-value.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-op-stack-value.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-param-error-main.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-param-error.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-param-error.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-producer.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-producer.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-ranges.c Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
dw2-ranges.exp gdb/testsuite/ 2013-03-14 13:34:06 +00:00
dw2-ranges2.c Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
dw2-ranges3.c Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
dw2-ref-missing-frame-func.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-ref-missing-frame-main.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-ref-missing-frame.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-ref-missing-frame.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-reg-undefined.c http://sourceware.org/ml/gdb-patches/2013-07/msg00059.html 2013-07-04 11:11:25 +00:00
dw2-reg-undefined.exp Print registers not saved in the frame as "<not saved>" instead of "<optimized out>". 2013-10-02 16:15:46 +00:00
dw2-reg-undefined.S http://sourceware.org/ml/gdb-patches/2013-07/msg00059.html 2013-07-04 11:11:25 +00:00
dw2-restore.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-restore.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
dw2-restrict.c Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-restrict.exp Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-restrict.S Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-simple-locdesc.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-simple-locdesc.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-skip-prologue.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-skip-prologue.exp * lib/future.exp (gdb_find_objcopy, gdb_find_readelf): New procs. 2013-09-20 21:47:06 +00:00
dw2-skip-prologue.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-stack-boundary.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-stack-boundary.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-strp.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-strp.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-undefined-ret-addr.c Fix "info frame" in the outermost frame. 2013-12-06 19:50:10 +00:00
dw2-undefined-ret-addr.exp Fix "info frame" in the outermost frame. 2013-12-06 19:50:10 +00:00
dw2-undefined-ret-addr.S Fix "info frame" in the outermost frame. 2013-12-06 19:50:10 +00:00
dw2-unresolved-main.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-unresolved.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-unresolved.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-var-zero-addr.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-var-zero-addr.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw4-sig-type-unused.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw4-sig-type-unused.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw4-sig-types-b.cc
dw4-sig-types.cc
dw4-sig-types.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw4-sig-types.h
dwp-symlink.c Record objfile->original_name as an absolute path 2013-12-02 22:24:32 +01:00
dwp-symlink.exp Record objfile->original_name as an absolute path 2013-12-02 22:24:32 +01:00
dwz.exp fix recursively_compute_inclusions and add dwz test case 2013-08-07 19:57:51 +00:00
dwzbuildid.exp gdb.dwarf2/dwzbuildid.exp: Avoid reserved variable name 2013-11-01 20:34:49 +00:00
file1.txt
fission-base.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
fission-base.exp fix some fission tests 2013-11-04 11:02:11 -07:00
fission-base.S fix some fission tests 2013-11-04 11:02:11 -07:00
fission-loclists.exp fix some fission tests 2013-11-04 11:02:11 -07:00
fission-loclists.S fix some fission tests 2013-11-04 11:02:11 -07:00
fission-mix.c PR symtab/15691 2013-08-02 00:33:07 +00:00
fission-mix.exp PR symtab/15691 2013-08-02 00:33:07 +00:00
fission-mix.h PR symtab/15691 2013-08-02 00:33:07 +00:00
fission-mix2.c PR symtab/15691 2013-08-02 00:33:07 +00:00
fission-reread.exp * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00:00
fission-reread.S * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00:00
gdb-index.exp * lib/future.exp (gdb_find_objcopy, gdb_find_readelf): New procs. 2013-09-20 21:47:06 +00:00
implptr-64bit.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr-64bit.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr-optimized-out.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr-optimized-out.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr.S
implptrconst.c * dwarf2loc.c (invalid_synthetic_pointer): Move earlier. 2013-05-06 19:44:04 +00:00
implptrconst.exp Fix PR symtab/15391 2013-06-18 18:11:19 +00:00
implptrpiece.exp Fix PR symtab/15391 2013-06-18 18:11:19 +00:00
mac-fileno.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
mac-fileno.S gdb/testsuite/gdb.dwarf2: Replace @ with % for ARM compatability. 2013-07-19 10:01:26 +00:00
main.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
Makefile.in PR symtab/15885 2013-08-26 18:43:40 +00:00
member-ptr-forwardref.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
member-ptr-forwardref.S gdb/testsuite/gdb.dwarf2: Replace @ with % for ARM compatability. 2013-07-19 10:01:26 +00:00
method-ptr.cc PR c++/14998: 2013-01-31 17:41:09 +00:00
method-ptr.exp * lib/dwarf.exp (Dwarf): New variable _abbrev_section. 2013-05-20 22:11:37 +00:00
missing-sig-type.exp * lib/dwarf.exp (Dwarf): New variable _abbrev_section. 2013-05-20 22:11:37 +00:00
nostaticblock.exp * lib/dwarf.exp (Dwarf): New variable _abbrev_section. 2013-05-20 22:11:37 +00:00
pieces-optimized-out.c value_fetch_lazy, ensure parent is not lazy and check parent for validity. 2013-07-30 15:05:01 +00:00
pieces-optimized-out.exp Don't raise an error for optimized out sub-fields. 2013-07-30 15:36:18 +00:00
pieces-optimized-out.S value_fetch_lazy, ensure parent is not lazy and check parent for validity. 2013-07-30 15:05:01 +00:00
pieces.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
pieces.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
pieces.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
pr10770.c
pr10770.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
pr11465.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
pr11465.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
pr13961.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
pr13961.S gdb/testsuite/gdb.dwarf2: Replace @ with % for ARM compatability. 2013-07-19 10:01:26 +00:00
subrange.exp * lib/dwarf.exp (Dwarf): New variable _abbrev_section. 2013-05-20 22:11:37 +00:00
trace-crash.exp PR c++/14999: 2013-01-18 18:32:35 +00:00
trace-crash.S PR c++/14999: 2013-01-18 18:32:35 +00:00
typeddwarf-amd64.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
typeddwarf.c
typeddwarf.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
typeddwarf.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
valop.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
valop.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
watch-notconst.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
watch-notconst.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
watch-notconst2.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
watch-notconst2.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00