diff options
author | Tom Tromey <tom@tromey.com> | 2024-02-01 18:56:43 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2024-02-05 12:12:18 -0700 |
commit | 4b858d4dbbdc2d497231d6340a49414c88db7dbb (patch) | |
tree | a787975b8955035e3b44468bb11a028671e7fd00 | |
parent | 9c0aa4c53104b1c4333d55aeaf11b41053307929 (diff) | |
download | gdb-4b858d4dbbdc2d497231d6340a49414c88db7dbb.zip gdb-4b858d4dbbdc2d497231d6340a49414c88db7dbb.tar.gz gdb-4b858d4dbbdc2d497231d6340a49414c88db7dbb.tar.bz2 |
Avoid an allocation in attr_to_dynamic_prop
I noticed that attr_to_dynamic_prop allocates a dwarf_block, when no
allocation is required. This patch stack-allocates the object
instead.
Reviewed-By: Tom de Vries <tdevries@suse.de>
-rw-r--r-- | gdb/dwarf2/read.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index eab56ec..a5a22c0 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -15371,24 +15371,23 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die, baton->locexpr.per_cu = cu->per_cu; baton->locexpr.per_objfile = per_objfile; - struct dwarf_block *block; + struct dwarf_block block; if (attr->form == DW_FORM_data16) { size_t data_size = 16; - block = XOBNEW (obstack, struct dwarf_block); - block->size = (data_size - + 2 /* Extra bytes for DW_OP and arg. */); - gdb_byte *data = XOBNEWVEC (obstack, gdb_byte, block->size); + block.size = (data_size + + 2 /* Extra bytes for DW_OP and arg. */); + gdb_byte *data = XOBNEWVEC (obstack, gdb_byte, block.size); data[0] = DW_OP_implicit_value; data[1] = data_size; memcpy (&data[2], attr->as_block ()->data, data_size); - block->data = data; + block.data = data; } else - block = attr->as_block (); + block = *attr->as_block (); - baton->locexpr.size = block->size; - baton->locexpr.data = block->data; + baton->locexpr.size = block.size; + baton->locexpr.data = block.data; switch (attr->name) { case DW_AT_string_length: |