]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Simplify tag management in value structs
authorLuis Machado <luis.machado@linaro.org>
Thu, 30 Dec 2021 14:10:07 +0000 (11:10 -0300)
committerJohn Baldwin <jhb@FreeBSD.org>
Thu, 1 Sep 2022 22:59:24 +0000 (15:59 -0700)
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.

gdb/aarch64-tdep.c
gdb/value.c

index 125145b410279a050f0c1e13ac31ec61c9b13517..13d48ff136eb94d9eafd4c95c09d19766fd7204f 100644 (file)
@@ -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
index 160fe6ee0ea498b29c4d0e945df795c008f775ce..b871aa2448dd0a5925df59ec55f90c094e7a14e6 100644 (file)
@@ -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);
     }