diff options
author | Joel Brobecker <brobecker@adacore.com> | 2014-08-11 16:37:10 -0700 |
---|---|---|
committer | Joel Brobecker <brobecker@adacore.com> | 2014-08-18 18:12:53 +0200 |
commit | 3cdcd0ce16272ae8e8183699a341d081b6eb1b21 (patch) | |
tree | 3309ad37199b955af054b55452df2af528117a60 /gdb/dwarf2read.c | |
parent | 08412b0722301c4ffbd9fd51d4056bc436b69658 (diff) | |
download | gdb-3cdcd0ce16272ae8e8183699a341d081b6eb1b21.zip gdb-3cdcd0ce16272ae8e8183699a341d081b6eb1b21.tar.gz gdb-3cdcd0ce16272ae8e8183699a341d081b6eb1b21.tar.bz2 |
Add support for DW_AT_data_location.
gdb/ChangeLog:
* gdbtypes.h (struct main_type): Add field "data_location".
(TYPE_DATA_LOCATION, TYPE_DATA_LOCATION_BATON)
(TYPE_DATA_LOCATION_ADDR, TYPE_DATA_LOCATION_KIND): New macros.
* gdbtypes.c (is_dynamic_type): Return 1 if the type has
a dynamic data location.
(resolve_dynamic_type): Add DW_AT_data_location handling.
(copy_recursive, copy_type): Copy the data_location information
when present.
* dwarf2read.c (set_die_type): Add DW_AT_data_location handling.
* value.c (value_from_contents_and_address): Add
DW_AT_data_location handling.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 801f05d..11580cc 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -21669,6 +21669,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) { struct dwarf2_per_cu_offset_and_type **slot, ofs; struct objfile *objfile = cu->objfile; + struct attribute *attr; + struct dynamic_prop prop; /* For Ada types, make sure that the gnat-specific data is always initialized (if not already set). There are a few types where @@ -21683,6 +21685,15 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu) && !HAVE_GNAT_AUX_INFO (type)) INIT_GNAT_SPECIFIC (type); + /* Read DW_AT_data_location and set in type. */ + attr = dwarf2_attr (die, DW_AT_data_location, cu); + if (attr_to_dynamic_prop (attr, die, cu, &prop)) + { + TYPE_DATA_LOCATION (type) + = obstack_alloc (&objfile->objfile_obstack, sizeof (prop)); + *TYPE_DATA_LOCATION (type) = prop; + } + if (dwarf2_per_objfile->die_type_hash == NULL) { dwarf2_per_objfile->die_type_hash = |