From: Luis Machado Date: Thu, 30 Dec 2021 14:10:07 +0000 (-0300) Subject: Simplify tag management in value structs X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e7352b83bdb32494720ee9112d6d25371599797;p=thirdparty%2Fbinutils-gdb.git Simplify tag management in value structs Instead of actively setting the tagged field of struct value *, initialize the tagged field right when allocating a new value. This simplifies the management of this field. --- diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 125145b4102..13d48ff136e 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -1491,10 +1491,7 @@ aarch64_prologue_prev_register (struct frame_info *this_frame, /* Copy the capability tag over, if it exists. */ if (prev_regnum == tdep->cap_reg_pcc && value_tagged (lr_value)) - { - set_value_tagged (lr_value_adjusted, 1); - set_value_tag (lr_value_adjusted, value_tag (lr_value)); - } + set_value_tag (lr_value_adjusted, value_tag (lr_value)); return lr_value_adjusted; } @@ -1692,10 +1689,7 @@ aarch64_dwarf2_prev_register (struct frame_info *this_frame, /* Copy the capability tag over, if it exists. */ if (regnum == tdep->cap_reg_pcc && value_tagged (lr_value)) - { - set_value_tagged (lr_value_adjusted, 1); - set_value_tag (lr_value_adjusted, value_tag (lr_value)); - } + set_value_tag (lr_value_adjusted, value_tag (lr_value)); return lr_value_adjusted; } @@ -3511,7 +3505,6 @@ morello_extract_return_value (struct value *value, struct regcache *regs, if (aapcs64_cap) { regno = tdep->cap_reg_base + AARCH64_X0_REGNUM; - set_value_tagged (value, true); set_value_tag (value, true); } else diff --git a/gdb/value.c b/gdb/value.c index 160fe6ee0ea..b871aa2448d 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -181,10 +181,13 @@ struct value initialized (1), stack (0), is_zero (false), - tagged (0), type (type_), enclosing_type (type_) { + if (type_ != nullptr + && (type_->code () == TYPE_CODE_CAPABILITY + || TYPE_CAPABILITY (type_))) + tagged = 1; } ~value () @@ -348,7 +351,7 @@ struct value LONGEST pointed_to_offset = 0; /* The tag value, if tagged. */ - bool tag; + bool tag = false; /* Actual contents of the value. Target byte-order. @@ -3964,7 +3967,6 @@ value_fetch_lazy_memory (struct value *val) if (TYPE_CAPABILITY (type)) { - set_value_tagged (val, true); bool tag = gdbarch_get_cap_tag_from_address (get_value_arch (val), addr); set_value_tag (val, tag); }