binutils-gdb/gdb/dwarf2
Tom Tromey 386de171cb Add PROP_VARIABLE_NAME
With -fgnat-encodings=minimal, an internal version (these patches will
be upstreamed in the near future) of the Ada compiler can emit DWARF
for an array where the bound comes from a variable, like:

 <1><12a7>: Abbrev Number: 7 (DW_TAG_array_type)
    <12a8>   DW_AT_name        : (indirect string, offset: 0x1ae9): pck__my_array
[...]
 <2><12b4>: Abbrev Number: 8 (DW_TAG_subrange_type)
    <12b5>   DW_AT_type        : <0x1294>
    <12b9>   DW_AT_upper_bound : <0x1277>

With the upper bound DIE being:

 <1><1277>: Abbrev Number: 2 (DW_TAG_variable)
    <1278>   DW_AT_name        : (indirect string, offset: 0x1a4d): pck__my_length___U
    <127c>   DW_AT_type        : <0x128f>
    <1280>   DW_AT_external    : 1
    <1280>   DW_AT_artificial  : 1
    <1280>   DW_AT_declaration : 1

Note that the variable is just a declaration -- in this situation, the
variable comes from another compilation unit, and must be found when
trying to compute the array bound.

This patch adds a new PROP_VARIABLE_NAME kind, to enable this search.

This same scenario can occur with DW_OP_GNU_variable_value, so this
patch adds support for that as well.

gdb/ChangeLog
2021-06-04  Tom Tromey  <tromey@adacore.com>

	* dwarf2/read.h (dwarf2_fetch_die_type_sect_off): Add 'var_name'
	parameter.
	* dwarf2/loc.c (dwarf2_evaluate_property) <case
	PROP_VARIABLE_NAME>: New case.
	(compute_var_value): New function.
	(sect_variable_value): Use compute_var_value.
	* dwarf2/read.c (attr_to_dynamic_prop): Handle DW_TAG_variable.
	(var_decl_name): New function.
	(dwarf2_fetch_die_type_sect_off): Add 'var_name' parameter.
	* gdbtypes.h (enum dynamic_prop_kind) <PROP_VARIABLE_NAME>: New
	constant.
	(union dynamic_prop_data) <variable_name>: New member.
	(struct dynamic_prop) <variable_name, set_variable_name>: New
	methods.

gdb/testsuite/ChangeLog
2021-06-04  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/array_of_symbolic_length.exp: New file.
	* gdb.ada/array_of_symbolic_length/foo.adb: New file.
	* gdb.ada/array_of_symbolic_length/gl.adb: New file.
	* gdb.ada/array_of_symbolic_length/gl.ads: New file.
	* gdb.ada/array_of_symbolic_length/pck.adb: New file.
	* gdb.ada/array_of_symbolic_length/pck.ads: New file.
2021-06-04 13:51:23 -06:00
..
abbrev.c Remove Irix 6 workaround from DWARF abbrev reader 2021-03-13 09:41:05 -07:00
abbrev.h Constify abbrev_table::lookup_abbrev 2021-03-13 09:41:05 -07:00
attribute.c [gdb/symtab] Handle DW_AT_decl_file with form DW_FORM_implicit_const 2021-02-24 23:58:42 +01:00
attribute.h [gdb/symtab] Handle DW_AT_decl_file with form DW_FORM_implicit_const 2021-02-24 23:58:42 +01:00
comp-unit-head.c Rename dwarf2/comp-unit.h 2021-05-17 14:16:07 -06:00
comp-unit-head.h Rename dwarf2/comp-unit.h 2021-05-17 14:16:07 -06:00
cu.c [gdb/symtab] Fix Dwarf Error: cannot find DIE 2021-05-27 15:22:38 +02:00
cu.h [gdb/symtab] Fix Dwarf Error: cannot find DIE 2021-05-27 15:22:38 +02:00
die.h gdb/dwarf: split dwarf2_cu::ranges_base in two 2021-02-02 10:42:11 -05:00
dwz.c Move dwarf2_get_dwz_file to dwarf2/dwz.h 2021-03-06 09:26:40 -07:00
dwz.h Move dwarf2_get_dwz_file to dwarf2/dwz.h 2021-03-06 09:26:40 -07:00
expr.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
expr.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
frame-tailcall.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
frame-tailcall.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
frame.c Introduce dwarf2/public.h 2021-03-20 17:23:40 -06:00
frame.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
index-cache.c gdb: generate the prefix name for prefix commands on demand 2021-05-12 11:19:22 +01:00
index-cache.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
index-common.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
index-common.h Handle unaligned mapping of .gdb_index 2021-04-17 13:56:36 -06:00
index-write.c gdb: fix tab after space indentation issues 2021-05-27 15:18:49 -04:00
index-write.h Introduce dwarf2/public.h 2021-03-20 17:23:40 -06:00
leb.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
leb.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
line-header.c Rename dwarf2/comp-unit.h 2021-05-17 14:16:07 -06:00
line-header.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
loc.c Add PROP_VARIABLE_NAME 2021-06-04 13:51:23 -06:00
loc.h Use std::vector for "registers_used" in compile feature 2021-01-23 20:33:25 -07:00
macro.c Avoid crash on missing dwz file 2021-03-06 09:26:39 -07:00
macro.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
public.h Simplify DWARF reader initialization 2021-03-28 10:43:15 -06:00
read.c Add PROP_VARIABLE_NAME 2021-06-04 13:51:23 -06:00
read.h Add PROP_VARIABLE_NAME 2021-06-04 13:51:23 -06:00
sect-names.h Move dwarf2_get_dwz_file to dwarf2/dwz.h 2021-03-06 09:26:40 -07:00
section.c gdb: Handle missing .debug_str section 2021-04-07 11:31:30 +01:00
section.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
stringify.c Reimplement dwarf_unit_type_name 2021-03-18 12:08:41 -06:00
stringify.h Fix typo in dwarf2/stringify.h 2021-03-31 09:48:56 -06:00