aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2023-03-13 13:25:41 -0600
committerTom Tromey <tom@tromey.com>2023-03-18 11:12:38 -0600
commit526648585ca87251acdda0a271f7c4b4591231ae (patch)
treebbcc884596ed6954dcc9be6ff57591cd973530ee
parent9e76b17aa5a62d866d9446bcc397e35748596193 (diff)
downloadbinutils-526648585ca87251acdda0a271f7c4b4591231ae.zip
binutils-526648585ca87251acdda0a271f7c4b4591231ae.tar.gz
binutils-526648585ca87251acdda0a271f7c4b4591231ae.tar.bz2
Use type allocator for set types
This changes the set type creation function to accept a type allocator, and updates all the callers. Note that symbol readers should generally allocate on the relevant objfile, regardless of the underlying type of the set, which is what this patch implements. Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
-rw-r--r--gdb/dwarf2/read.c3
-rw-r--r--gdb/gdbtypes.c5
-rw-r--r--gdb/gdbtypes.h3
-rw-r--r--gdb/stabsread.c11
4 files changed, 13 insertions, 9 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 3019bbd..e1ae98f 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -13825,7 +13825,8 @@ read_set_type (struct die_info *die, struct dwarf2_cu *cu)
if (set_type)
return set_type;
- set_type = create_set_type (NULL, domain_type);
+ type_allocator alloc (cu->per_objfile->objfile);
+ set_type = create_set_type (alloc, domain_type);
attr = dwarf2_attr (die, DW_AT_byte_size, cu);
if (attr != nullptr && attr->form_is_unsigned ())
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 3c2fdc6..1b0adbd 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -1445,10 +1445,9 @@ lookup_string_range_type (struct type *string_char_type,
}
struct type *
-create_set_type (struct type *result_type, struct type *domain_type)
+create_set_type (type_allocator &alloc, struct type *domain_type)
{
- if (result_type == NULL)
- result_type = type_allocator (domain_type).new_type ();
+ struct type *result_type = alloc.new_type ();
result_type->set_code (TYPE_CODE_SET);
result_type->set_num_fields (1);
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index e664c2c..f26eff4 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -2547,7 +2547,8 @@ extern struct type *create_string_type (type_allocator &alloc,
extern struct type *lookup_string_range_type (struct type *, LONGEST, LONGEST);
-extern struct type *create_set_type (struct type *, struct type *);
+extern struct type *create_set_type (type_allocator &alloc,
+ struct type *domain_type);
extern struct type *lookup_unsigned_typename (const struct language_defn *,
const char *);
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index c8c49e1..89d778d 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -2016,10 +2016,13 @@ again:
break;
case 'S': /* Set type */
- type1 = read_type (pp, objfile);
- type = create_set_type (NULL, type1);
- if (typenums[0] != -1)
- *dbx_lookup_type (typenums, objfile) = type;
+ {
+ type1 = read_type (pp, objfile);
+ type_allocator alloc (objfile);
+ type = create_set_type (alloc, type1);
+ if (typenums[0] != -1)
+ *dbx_lookup_type (typenums, objfile) = type;
+ }
break;
default: