[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.
This commit is contained in:
parent
c9af65210c
commit
a88ef40d0f
5 changed files with 76 additions and 0 deletions
|
@ -2237,6 +2237,7 @@ iterate_over_block_locals (const struct block *b,
|
|||
{
|
||||
switch (SYMBOL_CLASS (sym))
|
||||
{
|
||||
case LOC_CONST:
|
||||
case LOC_LOCAL:
|
||||
case LOC_REGISTER:
|
||||
case LOC_STATIC:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue