binutils-gdb/gdb/testsuite/gdb.dwarf2
Pedro Alves 901461f8eb Print registers not saved in the frame as "<not saved>" instead of "<optimized out>".
Currently, in some scenarios, GDB prints <optimized out> when printing
outer frame registers.  An <optimized out> register is a confusing
concept.  What this really means is that the register is
call-clobbered, or IOW, not saved by the callee.  This patch makes GDB
say that instead.

Before patch:

 (gdb) p/x $rax $1 = <optimized out>
 (gdb) info registers rax
 rax            <optimized out>

After patch:

 (gdb) p/x $rax
 $1 = <not saved>
 (gdb) info registers rax
 rax            <not saved>

However, if for some reason the debug info describes a variable as
being in such a register (**), we still want to print <optimized out>
when printing the variable.  IOW, <not saved> is reserved for
inspecting registers at the machine level.  The patch uses
lval_register+optimized_out to encode the not saved registers, and
makes it so that optimized out variables always end up in
!lval_register values.

** See <https://sourceware.org/ml/gdb-patches/2012-08/msg00787.html>.
Current/recent enough GCC doesn't mark variables/arguments as being in
call-clobbered registers in the ranges corresponding to function
calls, while older GCCs did.  Newer GCCs will just not say where the
variable is, so GDB will end up realizing the variable is optimized
out.

frame_unwind_got_optimized creates not_lval optimized out registers,
so by default, in most cases, we'll see <optimized out>.

value_of_register is the function eval.c uses for evaluating
OP_REGISTER (again, $pc, etc.), and related bits.  It isn't used for
anything else.  This function makes sure to return lval_register
values.  The patch makes "info registers" and the MI equivalent use it
too.  I think it just makes a lot of sense, as this makes it so that
when printing machine registers ($pc, etc.), we go through a central
function.

We're likely to need a different encoding at some point, if/when we
support partially saved registers.  Even then, I think
value_of_register will still be the spot to tag the intention to print
machine register values differently.

value_from_register however may also return optimized out
lval_register values, so at a couple places where we're computing a
variable's location from a dwarf expression, we convert the resulting
value away from lval_register to a regular optimized out value.

Tested on x86_64 Fedora 17

gdb/
2013-10-02  Pedro Alves  <palves@redhat.com>

	* cp-valprint.c (cp_print_value_fields): Adjust calls to
	val_print_optimized_out.
	* jv-valprint.c (java_print_value_fields): Likewise.
	* p-valprint.c (pascal_object_print_value_fields): Likewise.
	* dwarf2loc.c (dwarf2_evaluate_loc_desc_full)
	<DWARF_VALUE_REGISTER>: If the register was not saved, return a
	new optimized out value.
	* findvar.c (address_from_register): Likewise.
	* frame.c (put_frame_register): Tweak error string to say the
	register was not saved, rather than optimized out.
	* infcmd.c (default_print_one_register_info): Adjust call to
	val_print_optimized_out.  Use value_of_register instead of
	get_frame_register_value.
	* mi/mi-main.c (output_register): Use value_of_register instead of
	get_frame_register_value.
	* valprint.c (valprint_check_validity): Likewise.
	(val_print_optimized_out): New value parameter.  If the value is
	lval_register, print <not saved> instead.
	(value_check_printable, val_print_scalar_formatted): Adjust calls
	to val_print_optimized_out.
	* valprint.h (val_print_optimized_out): New value parameter.
	* value.c (struct value) <optimized_out>: Extend comment.
	(error_value_optimized_out): New function.
	(require_not_optimized_out): Use it.  Use a different string for
	lval_register values.
	* value.h (error_value_optimized_out): New declaration.
	* NEWS: Mention <not saved>.

gdb/testsuite/
2013-10-02  Pedro Alves  <palves@redhat.com>

	* gdb.dwarf2/dw2-reg-undefined.exp <pattern_rax_rbx_rcx_print,
	pattern_rax_rbx_rcx_info>: Set to "<not saved>".
	* gdb.mi/mi-reg-undefined.exp (opt_out_pattern): Delete.
	(not_saved_pattern): New.
	Replace use of the former with the latter.

gdb/doc/
2013-10-02  Pedro Alves  <palves@redhat.com>

	* gdb.texinfo (Registers): Expand description of saved registers
	in frames.  Explain <not saved>.
2013-10-02 16:15:46 +00:00
..
Makefile.in PR symtab/15885 2013-08-26 18:43:40 +00:00
callframecfa.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
callframecfa.exp
clztest.S
clztest.c
clztest.exp fix some gdb.dwarf2 tests for parallel safety 2013-08-22 13:39:13 +00:00
dup-psym.S
dup-psym.exp
dw2-ada-ffffffff.S
dw2-ada-ffffffff.exp
dw2-anon-mptr.S
dw2-anon-mptr.exp
dw2-anonymous-func.S
dw2-anonymous-func.exp
dw2-bad-parameter-type.S
dw2-bad-parameter-type.exp
dw2-basic.S
dw2-basic.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-canonicalize-type.S
dw2-canonicalize-type.exp
dw2-case-insensitive-debug.S
dw2-case-insensitive.c
dw2-case-insensitive.exp
dw2-common-block.S
dw2-common-block.exp
dw2-compdir-oldgcc.S
dw2-compdir-oldgcc.exp
dw2-compressed.S
dw2-compressed.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-const.S
dw2-const.exp
dw2-cp-infcall-ref-static-main.c
dw2-cp-infcall-ref-static.S
dw2-cp-infcall-ref-static.exp
dw2-cu-size.S
dw2-cu-size.exp
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.S gdb/ 2013-01-17 20:40:44 +00:00
dw2-dos-drive.exp gdb/ 2013-01-17 20:40:44 +00:00
dw2-double-set-die-type.S
dw2-double-set-die-type.exp
dw2-empty-namespace.S
dw2-empty-namespace.exp
dw2-empty-pc-range.S Update some copyright years. 2013-02-12 18:27:29 +00:00
dw2-empty-pc-range.exp
dw2-entry-value-main.c
dw2-entry-value.S
dw2-entry-value.exp
dw2-error.S Update some copyright years. 2013-02-12 18:27:29 +00:00
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-filename.S
dw2-filename.exp
dw2-icc-opaque.S
dw2-icc-opaque.exp
dw2-ifort-parameter-debug.S
dw2-ifort-parameter.c
dw2-ifort-parameter.exp
dw2-inheritance.S
dw2-inheritance.exp
dw2-inline-break.S
dw2-inline-break.exp
dw2-inline-param-main.c
dw2-inline-param.S
dw2-inline-param.exp * lib/future.exp (gdb_find_objcopy, gdb_find_readelf): New procs. 2013-09-20 21:47:06 +00:00
dw2-intercu.S
dw2-intercu.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-intermix.S
dw2-intermix.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
dw2-linkage-name-trust-main.cc
dw2-linkage-name-trust.S
dw2-linkage-name-trust.exp
dw2-minsym-in-cu.S
dw2-minsym-in-cu.exp fix some gdb.dwarf2 tests for parallel safety 2013-08-22 13:39:13 +00:00
dw2-modula2-self-type.S
dw2-modula2-self-type.exp
dw2-namespaceless-anonymous.S
dw2-namespaceless-anonymous.exp
dw2-noloc-main.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-noloc.S 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-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.S 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-out-param.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-stack-value.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-param-error-main.c 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-param-error.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-producer.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-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.S 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-reg-undefined.S http://sourceware.org/ml/gdb-patches/2013-07/msg00059.html 2013-07-04 11:11:25 +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-restore.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
dw2-restore.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-restrict.S Update some copyright years. 2013-02-12 18:27:29 +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-simple-locdesc.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-simple-locdesc.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
dw2-skip-prologue.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-stack-boundary.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-strp.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-unresolved-main.c 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-unresolved.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
dw2-var-zero-addr.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-type-unused.exp 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 Support .dwp with the name of symlinked binary file 2013-09-24 14:03:43 +00:00
dwp-symlink.exp Support .dwp with the name of symlinked binary file 2013-09-24 14:03:43 +00:00
dwz.exp fix recursively_compute_inclusions and add dwz test case 2013-08-07 19:57:51 +00:00
file1.txt
fission-base.S * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00:00
fission-base.c Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
fission-base.exp * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00:00
fission-loclists.S * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00:00
fission-loclists.exp * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00: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.S * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. 2013-09-20 22:43:28 +00:00
fission-reread.exp * 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.S Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr-64bit.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-optimized-out.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
implptr.S
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
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.S gdb/testsuite/gdb.dwarf2: Replace @ with % for ARM compatability. 2013-07-19 10:01:26 +00:00
mac-fileno.exp introduce gdb_remote_download and finish parallel fixes in gdb.dwarf2 2013-08-22 13:44:16 +00:00
main.c 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
member-ptr-forwardref.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +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.S value_fetch_lazy, ensure parent is not lazy and check parent for validity. 2013-07-30 15:05:01 +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.S Fix formating in copyright headers. 2013-06-07 14:39:33 +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
pr10770.c
pr10770.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
pr11465.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
pr13961.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +00:00
subrange.exp * lib/dwarf.exp (Dwarf): New variable _abbrev_section. 2013-05-20 22:11:37 +00:00
trace-crash.S PR c++/14999: 2013-01-18 18:32:35 +00:00
trace-crash.exp 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.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
valop.S Fix formating in copyright headers. 2013-06-07 14:39:33 +00:00
valop.exp Update years in copyright notice for the GDB files. 2013-01-01 06:41:43 +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.S 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