]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Default gdbarch_capability_bit to 0, not ptr_bit.
authorJohn Baldwin <jhb@FreeBSD.org>
Wed, 10 Aug 2022 19:25:10 +0000 (12:25 -0700)
committerJohn Baldwin <jhb@FreeBSD.org>
Thu, 1 Sep 2022 23:47:42 +0000 (16:47 -0700)
This allows testing for 0 to distinguish architectures without
capabilities.  Make use of this to only add in builtin types for
architectures which support capabilities.

gdb/c-lang.c
gdb/gdbarch-components.py
gdb/gdbarch.c
gdb/gdbtypes.c

index d72ab4b89c881d49b3a3ad28880ee291639fdb0c..538c5ff7d73a56fb522c0a09ab9db0e3b5e149b7 100644 (file)
@@ -759,8 +759,11 @@ c_language_arch_info (struct gdbarch *gdbarch,
   add (builtin->builtin_decfloat);
   add (builtin->builtin_decdouble);
   add (builtin->builtin_declong);
-  add (builtin->builtin_intcap_t);
-  add (builtin->builtin_uintcap_t);
+  if (gdbarch_capability_bit (gdbarch) != 0)
+    {
+      add (builtin->builtin_intcap_t);
+      add (builtin->builtin_uintcap_t);
+    }
 
   lai->set_string_char_type (builtin->builtin_char);
   lai->set_bool_type (builtin->builtin_int);
@@ -912,8 +915,11 @@ public:
     add (builtin->builtin_char16);
     add (builtin->builtin_char32);
     add (builtin->builtin_wchar);
-    add (builtin->builtin_intcap_t);
-    add (builtin->builtin_uintcap_t);
+    if (gdbarch_capability_bit (gdbarch) != 0)
+      {
+       add (builtin->builtin_intcap_t);
+       add (builtin->builtin_uintcap_t);
+      }
 
     lai->set_string_char_type (builtin->builtin_char);
     lai->set_bool_type (builtin->builtin_bool, "bool");
index 2ce2162734fa317d9457da00b679cd949c513c2d..a08063f2f4e25f6254d52d96d4b1993037a0a941 100644 (file)
@@ -348,9 +348,7 @@ capability_bit is the size of a target capability as represented in gdb
 """,
     type="int",
     name="capability_bit",
-    predefault="0",
-    postdefault="gdbarch_ptr_bit (gdbarch)",
-    invalid=True
+    invalid=False,
 )
 
 Value(
index cdd7f76e65777437d9f8dcefce94933d598ce1c0..c6766d9bee44116797e651439da0cec4bb27695c 100644 (file)
@@ -431,8 +431,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
     gdbarch->addr_bit = gdbarch_ptr_bit (gdbarch);
   if (gdbarch->dwarf2_addr_size == 0)
     gdbarch->dwarf2_addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
-  if (gdbarch->capability_bit == 0)
-    gdbarch->capability_bit = gdbarch_ptr_bit (gdbarch);
+  /* Skip verify of capability_bit, invalid_p == 0 */
   if (gdbarch->char_signed == -1)
     gdbarch->char_signed = 1;
   /* Skip verify of read_pc, has predicate.  */
@@ -1866,8 +1865,7 @@ int
 gdbarch_capability_bit (struct gdbarch *gdbarch)
 {
   gdb_assert (gdbarch != NULL);
-  /* Check variable changed from pre-default.  */
-  gdb_assert (gdbarch->capability_bit != 0);
+  /* Skip verify of capability_bit, invalid_p == 0 */
   if (gdbarch_debug >= 2)
     fprintf_unfiltered (gdb_stdlog, "gdbarch_capability_bit called\n");
   return gdbarch->capability_bit;
index ee0a1b6c77cd925f7e6f1d1143bb4e09b88b05e3..d18d7f0a0a47157e18147f82ea4f3b04e3c12cc7 100644 (file)
@@ -6255,32 +6255,35 @@ gdbtypes_post_init (struct gdbarch *gdbarch)
   builtin_type->builtin_func_func
     = lookup_function_type (builtin_type->builtin_func_ptr);
 
-  /* Capability types.  */
-  builtin_type->builtin_intcap_t
-    = arch_capability_type (gdbarch, gdbarch_capability_bit (gdbarch), 0,
-                           "__intcap_t");
-  builtin_type->builtin_intcap_t->set_tagged (true);
-  builtin_type->builtin_uintcap_t
-    = arch_capability_type (gdbarch, gdbarch_capability_bit (gdbarch), 1,
-                           "__uintcap_t");
-  builtin_type->builtin_uintcap_t->set_tagged (true);
-
-  /* Capability pointer types.  */
-  builtin_type->builtin_data_capability
-    = arch_pointer_type (gdbarch, gdbarch_capability_bit (gdbarch), "",
-                        builtin_type->builtin_void);
-  builtin_type->builtin_data_capability->set_instance_flags
-    (builtin_type->builtin_data_capability->instance_flags ()
-     | TYPE_INSTANCE_FLAG_CAPABILITY);
-  builtin_type->builtin_data_capability->set_tagged (true);
-
-  builtin_type->builtin_code_capability
-    = arch_pointer_type (gdbarch, gdbarch_capability_bit (gdbarch), "",
-                        lookup_function_type (builtin_type->builtin_void));
-  builtin_type->builtin_code_capability->set_instance_flags
-    (builtin_type->builtin_code_capability->instance_flags ()
-     | TYPE_INSTANCE_FLAG_CAPABILITY);
-  builtin_type->builtin_code_capability->set_tagged (true);
+  if (gdbarch_capability_bit (gdbarch) != 0)
+    {
+      /* Capability types.  */
+      builtin_type->builtin_intcap_t
+       = arch_capability_type (gdbarch, gdbarch_capability_bit (gdbarch), 0,
+                               "__intcap_t");
+      builtin_type->builtin_intcap_t->set_tagged (true);
+      builtin_type->builtin_uintcap_t
+       = arch_capability_type (gdbarch, gdbarch_capability_bit (gdbarch), 1,
+                               "__uintcap_t");
+      builtin_type->builtin_uintcap_t->set_tagged (true);
+
+      /* Capability pointer types.  */
+      builtin_type->builtin_data_capability
+       = arch_pointer_type (gdbarch, gdbarch_capability_bit (gdbarch), "",
+                            builtin_type->builtin_void);
+      builtin_type->builtin_data_capability->set_instance_flags
+       (builtin_type->builtin_data_capability->instance_flags ()
+        | TYPE_INSTANCE_FLAG_CAPABILITY);
+      builtin_type->builtin_data_capability->set_tagged (true);
+
+      builtin_type->builtin_code_capability
+       = arch_pointer_type (gdbarch, gdbarch_capability_bit (gdbarch), "",
+                            lookup_function_type (builtin_type->builtin_void));
+      builtin_type->builtin_code_capability->set_instance_flags
+       (builtin_type->builtin_code_capability->instance_flags ()
+        | TYPE_INSTANCE_FLAG_CAPABILITY);
+      builtin_type->builtin_code_capability->set_tagged (true);
+    }
 
   /* This type represents a GDB internal function.  */
   builtin_type->internal_fn