From: Tom Tromey Date: Fri, 2 Feb 2024 01:56:43 +0000 (-0700) Subject: Avoid an allocation in attr_to_dynamic_prop X-Git-Tag: gdb-15-branchpoint~1055 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b858d4dbbdc2d497231d6340a49414c88db7dbb;p=thirdparty%2Fbinutils-gdb.git 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 --- diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index eab56ec505d..a5a22c068eb 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: