[gdb] Ensure listing of unused static var in info locals
authorTom de Vries <tdevries@suse.de>
Mon, 24 Feb 2020 14:32:36 +0000 (15:32 +0100)
committerTom de Vries <tdevries@suse.de>
Mon, 24 Feb 2020 14:32:36 +0000 (15:32 +0100)
commita88ef40d0f21342bb5ce01ce677846995ca0d133
treef39875b106d267f37ed3513477ad8668231ed1f8
parentc9af65210c36aa0b5362b8ce2814ca8a5b09af92
[gdb] Ensure listing of unused static var in info locals

Consider a test-case compiled with -g:
...
int main (void) {
  static int b = 2;
  return 0;
}
...

When running info locals in main, we get:
...
(gdb) info locals
No locals.
...

The info locals documentation states:
...
Print the local variables of the selected frame, each on a separate line.
These are all variables (declared either static or automatic) accessible at
the point of execution of the selected frame.
...
So, "info locals" should have printed static variable b.

The variable is present in dwarf info:
...
 <2><14a>: Abbrev Number: 6 (DW_TAG_variable)
    <14b>   DW_AT_name        : b
    <153>   DW_AT_const_value : 2
...
but instead of a location attribute, it has a const_value attribute, which
causes the corresponding symbol to have LOC_CONST, which causes info locals to
skip it.

Fix this by handling LOC_CONST in iterate_over_block_locals.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-02-24  Tom de Vries  <tdevries@suse.de>

PR gdb/25592
* stack.c (iterate_over_block_locals): Handle LOC_CONST.

gdb/testsuite/ChangeLog:

2020-02-24  Tom de Vries  <tdevries@suse.de>

PR gdb/25592
* gdb.base/info-locals-unused-static-var.c: New test.
* gdb.base/info-locals-unused-static-var.exp: New file.
gdb/ChangeLog
gdb/stack.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/info-locals-unused-static-var.c [new file with mode: 0644]
gdb/testsuite/gdb.base/info-locals-unused-static-var.exp [new file with mode: 0644]