aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2020-04-06 13:01:05 -0400
committerSimon Marchi <simon.marchi@efficios.com>2020-05-12 15:24:51 -0400
commit2a651b1f4a5b56a52be54766ac06d75fc030a0b0 (patch)
treeac967fa86ac1c4eca8d4b14838a992397f08c19f
parentbd3914c7808027e0b4a90b308718f7e5defb641b (diff)
downloadgdb-2a651b1f4a5b56a52be54766ac06d75fc030a0b0.zip
gdb-2a651b1f4a5b56a52be54766ac06d75fc030a0b0.tar.gz
gdb-2a651b1f4a5b56a52be54766ac06d75fc030a0b0.tar.bz2
Add dwarf2_per_objfile parameter to get_die_type_at_offset
This allows removing some dwarf2_per_cu_data::dwarf2_per_objfile references. gdb/ChangeLog: * dwarf2/read.h (dwarf2_get_die_type): Add dwarf2_per_objfile parameter. * dwarf2/read.c (get_die_type_at_offset): Likewise. (read_namespace_alias): Update. (lookup_die_type): Update. (dwarf2_get_die_type): Add dwarf2_per_objfile parameter. * dwarf2/loc.c (class dwarf_evaluate_loc_desc) <get_base_type>: Update. (disassemble_dwarf_expression): Update.
-rw-r--r--gdb/dwarf2/loc.c10
-rw-r--r--gdb/dwarf2/read.c21
-rw-r--r--gdb/dwarf2/read.h3
3 files changed, 19 insertions, 15 deletions
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index a4b7edf..cd30455 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -673,7 +673,7 @@ public:
struct type *get_base_type (cu_offset die_offset, int size) override
{
- struct type *result = dwarf2_get_die_type (die_offset, per_cu);
+ struct type *result = dwarf2_get_die_type (die_offset, per_cu, per_objfile);
if (result == NULL)
error (_("Could not find type for DW_OP_const_type"));
if (size != 0 && TYPE_LENGTH (result) != size)
@@ -4162,7 +4162,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_uleb128 (data, end, &ul);
cu_offset offset = (cu_offset) ul;
- type = dwarf2_get_die_type (offset, per_cu);
+ type = dwarf2_get_die_type (offset, per_cu, per_objfile);
fprintf_filtered (stream, "<");
type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]> %d",
@@ -4178,7 +4178,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_uleb128 (data, end, &ul);
cu_offset type_die = (cu_offset) ul;
- type = dwarf2_get_die_type (type_die, per_cu);
+ type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
fprintf_filtered (stream, "<");
type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]>",
@@ -4202,7 +4202,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
data = safe_read_uleb128 (data, end, &ul);
cu_offset type_die = (cu_offset) ul;
- type = dwarf2_get_die_type (type_die, per_cu);
+ type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
fprintf_filtered (stream, "<");
type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]> [$%s]",
@@ -4225,7 +4225,7 @@ disassemble_dwarf_expression (struct ui_file *stream,
{
struct type *type;
- type = dwarf2_get_die_type (type_die, per_cu);
+ type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
fprintf_filtered (stream, "<");
type_print (type, "", stream, -1);
fprintf_filtered (stream, " [0x%s]>",
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index e8ba115..3e5f915 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -1599,7 +1599,8 @@ static void dwarf2_mark (struct dwarf2_cu *);
static void dwarf2_clear_marks (struct dwarf2_per_cu_data *);
static struct type *get_die_type_at_offset (sect_offset,
- struct dwarf2_per_cu_data *);
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile);
static struct type *get_die_type (struct die_info *die, struct dwarf2_cu *cu);
@@ -10556,7 +10557,7 @@ read_namespace_alias (struct die_info *die, struct dwarf2_cu *cu)
struct type *type;
sect_offset sect_off = attr->get_ref_die_offset ();
- type = get_die_type_at_offset (sect_off, cu->per_cu);
+ type = get_die_type_at_offset (sect_off, cu->per_cu, cu->per_objfile);
if (type != NULL && TYPE_CODE (type) == TYPE_CODE_NAMESPACE)
{
/* This declaration is a global namespace alias. Add
@@ -21351,13 +21352,14 @@ lookup_die_type (struct die_info *die, const struct attribute *attr,
per_cu = dwarf2_find_containing_comp_unit (sect_off, 1,
dwarf2_per_objfile);
- this_type = get_die_type_at_offset (sect_off, per_cu);
+ this_type = get_die_type_at_offset (sect_off, per_cu, dwarf2_per_objfile);
}
else if (attr->form_is_ref ())
{
sect_offset sect_off = attr->get_ref_die_offset ();
- this_type = get_die_type_at_offset (sect_off, cu->per_cu);
+ this_type = get_die_type_at_offset (sect_off, cu->per_cu,
+ dwarf2_per_objfile);
}
else if (attr->form == DW_FORM_ref_sig8)
{
@@ -22557,10 +22559,11 @@ dwarf2_fetch_die_type_sect_off (sect_offset sect_off,
struct type *
dwarf2_get_die_type (cu_offset die_offset,
- struct dwarf2_per_cu_data *per_cu)
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile)
{
sect_offset die_offset_sect = per_cu->sect_off + to_underlying (die_offset);
- return get_die_type_at_offset (die_offset_sect, per_cu);
+ return get_die_type_at_offset (die_offset_sect, per_cu, per_objfile);
}
/* Follow type unit SIG_TYPE referenced by SRC_DIE.
@@ -23750,10 +23753,10 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
static struct type *
get_die_type_at_offset (sect_offset sect_off,
- struct dwarf2_per_cu_data *per_cu)
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *dwarf2_per_objfile)
{
struct dwarf2_per_cu_offset_and_type *slot, ofs;
- struct dwarf2_per_objfile *dwarf2_per_objfile = per_cu->dwarf2_per_objfile;
if (dwarf2_per_objfile->die_type_hash == NULL)
return NULL;
@@ -23774,7 +23777,7 @@ get_die_type_at_offset (sect_offset sect_off,
static struct type *
get_die_type (struct die_info *die, struct dwarf2_cu *cu)
{
- return get_die_type_at_offset (die->sect_off, cu->per_cu);
+ return get_die_type_at_offset (die->sect_off, cu->per_cu, cu->per_objfile);
}
/* Add a dependence relationship from CU to REF_PER_CU. */
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index 3dada48..cc1fd91 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -569,7 +569,8 @@ extern dwz_file *dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd);
PER_CU. */
struct type *dwarf2_get_die_type (cu_offset die_offset,
- struct dwarf2_per_cu_data *per_cu);
+ dwarf2_per_cu_data *per_cu,
+ dwarf2_per_objfile *per_objfile);
/* Given an index in .debug_addr, fetch the value.
NOTE: This can be called during dwarf expression evaluation,