gdb: Remove deprecated_set_gdbarch_data
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 8 Jun 2020 13:06:08 +0000 (14:06 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 6 Jul 2020 14:06:04 +0000 (15:06 +0100)
There are currently two remaining uses of deprecated_set_gdbarch_data,
both of which are needed because during gdbarch initialisation we call
gdbarch_data for a data field that is registered using:

  gdbarch_data_register_post_init (....)

However, in both of these cases, the only thing that the call back
needs from the gdbarch struct is its obstack.  Given this there is
nothing stopping us changing the post-init hooks into pre-init hooks.
The pre-init hooks don't get passed the full gdbarch, they only get
passed its obstack.

The IA64 change is completely untested.  The user-regs change has been
tested a little by locally adding some user-regs to the x86-64 target,
and also by running the RISC-V tests, which do use user-regs.

gdb/ChangeLog:

* gdbarch.c: Regenerate.
* gdbarch.h: Regenerate.
* gdbarch.sh (deprecated_set_gdbarch_data): Delete.
(gdbarch_data): Use internal_error for the case where
deprecated_set_gdbarch_data was originally needed.
* ia64-libunwind-tdep.c (libunwind_descr_init): Update parameters,
and use passed in obstack.
(libunwind_frame_set_descr): Should no longer get back NULL from
gdbarch_data.
(_initialize_libunwind_frame): Register as a pre-init gdbarch data
type.
* user-regs.c (user_regs_init): Update parameters, and use passed
in obstack.
(user_reg_add): Should no longer get back NULL from gdbarch_data.
(_initialize_user_regs): Register as a pre-init gdbarch data type.

gdb/ChangeLog
gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/ia64-libunwind-tdep.c
gdb/user-regs.c

index a07dd38291f0e5b9b1d2377ac5a5c219df75951e..0b73be8123c6890397790cd1b61ebcb1cc9c0560 100644 (file)
@@ -1,3 +1,21 @@
+2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdbarch.c: Regenerate.
+       * gdbarch.h: Regenerate.
+       * gdbarch.sh (deprecated_set_gdbarch_data): Delete.
+       (gdbarch_data): Use internal_error for the case where
+       deprecated_set_gdbarch_data was originally needed.
+       * ia64-libunwind-tdep.c (libunwind_descr_init): Update parameters,
+       and use passed in obstack.
+       (libunwind_frame_set_descr): Should no longer get back NULL from
+       gdbarch_data.
+       (_initialize_libunwind_frame): Register as a pre-init gdbarch data
+       type.
+       * user-regs.c (user_regs_init): Update parameters, and use passed
+       in obstack.
+       (user_reg_add): Should no longer get back NULL from gdbarch_data.
+       (_initialize_user_regs): Register as a pre-init gdbarch data type.
+
 2020-07-06  Tom de Vries  <tdevries@suse.de>
 
        * buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Handle
index 6d1bb0d2808750bb87de2cb29be728805c834ec4..21ee840e88f83210d19b3cfedaeaa0a73e587a4c 100644 (file)
@@ -5208,20 +5208,6 @@ alloc_gdbarch_data (struct gdbarch *gdbarch)
   gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
 }
 
-/* Initialize the current value of the specified per-architecture
-   data-pointer.  */
-
-void
-deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-                            struct gdbarch_data *data,
-                            void *pointer)
-{
-  gdb_assert (data->index < gdbarch->nr_data);
-  gdb_assert (gdbarch->data[data->index] == NULL);
-  gdb_assert (data->pre_init == NULL);
-  gdbarch->data[data->index] = pointer;
-}
-
 /* Return the current value of the specified per-architecture
    data-pointer.  */
 
@@ -5251,11 +5237,9 @@ gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
          data->init_p = 1;
        }
       else
-       /* The architecture initialization hasn't completed - punt -
-        hope that the caller knows what they are doing.  Once
-        deprecated_set_gdbarch_data has been initialized, this can be
-        changed to an internal error.  */
-       return NULL;
+       internal_error (__FILE__, __LINE__,
+                       _("gdbarch post-init data field can only be used "
+                         "after gdbarch is fully initialised"));
       gdb_assert (gdbarch->data[data->index] != NULL);
     }
   return gdbarch->data[data->index];
index 4e51c295b36df745c9a853cb4a44c614732895cd..0940156aeb8f558fea72b231365cc84357782550 100644 (file)
@@ -1839,9 +1839,6 @@ typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack);
 extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
 typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
 extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
-extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-                                         struct gdbarch_data *data,
-                                        void *pointer);
 
 extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
 
index ad27a4eca05e9a7fee5479e14537c5b0191ce0cd..41e7b8d5cc3b0ad6302a04560d30bfb14add2eaf 100755 (executable)
@@ -1630,9 +1630,6 @@ typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack);
 extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
 typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
 extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
-extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-                                         struct gdbarch_data *data,
-                                        void *pointer);
 
 extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
 
@@ -2237,20 +2234,6 @@ alloc_gdbarch_data (struct gdbarch *gdbarch)
   gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *);
 }
 
-/* Initialize the current value of the specified per-architecture
-   data-pointer.  */
-
-void
-deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
-                            struct gdbarch_data *data,
-                            void *pointer)
-{
-  gdb_assert (data->index < gdbarch->nr_data);
-  gdb_assert (gdbarch->data[data->index] == NULL);
-  gdb_assert (data->pre_init == NULL);
-  gdbarch->data[data->index] = pointer;
-}
-
 /* Return the current value of the specified per-architecture
    data-pointer.  */
 
@@ -2280,11 +2263,9 @@ gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data)
          data->init_p = 1;
        }
       else
-       /* The architecture initialization hasn't completed - punt -
-        hope that the caller knows what they are doing.  Once
-        deprecated_set_gdbarch_data has been initialized, this can be
-        changed to an internal error.  */
-       return NULL;
+       internal_error (__FILE__, __LINE__,
+                       _("gdbarch post-init data field can only be used "
+                         "after gdbarch is fully initialised"));
       gdb_assert (gdbarch->data[data->index] != NULL);
     }
   return gdbarch->data[data->index];
index 59b7df13d2fdb455dda6b31e67d5c927ae406245..94881bbfb5dac287016bd9a62bf4abecf2ffd4c9 100644 (file)
@@ -133,10 +133,10 @@ libunwind_descr (struct gdbarch *gdbarch)
 }
 
 static void *
-libunwind_descr_init (struct gdbarch *gdbarch)
+libunwind_descr_init (struct obstack *obstack)
 {
   struct libunwind_descr *descr
-    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct libunwind_descr);
+    = OBSTACK_ZALLOC (obstack, struct libunwind_descr);
 
   return descr;
 }
@@ -151,14 +151,7 @@ libunwind_frame_set_descr (struct gdbarch *gdbarch,
 
   arch_descr = ((struct libunwind_descr *)
                gdbarch_data (gdbarch, libunwind_descr_handle));
-
-  if (arch_descr == NULL)
-    {
-      /* First time here.  Must initialize data area.  */
-      arch_descr = (struct libunwind_descr *) libunwind_descr_init (gdbarch);
-      deprecated_set_gdbarch_data (gdbarch,
-                                  libunwind_descr_handle, arch_descr);
-    }
+  gdb_assert (arch_descr != NULL);
 
   /* Copy new descriptor info into arch descriptor.  */
   arch_descr->gdb2uw = descr->gdb2uw;
@@ -596,7 +589,7 @@ void
 _initialize_libunwind_frame ()
 {
   libunwind_descr_handle
-    = gdbarch_data_register_post_init (libunwind_descr_init);
+    = gdbarch_data_register_pre_init (libunwind_descr_init);
 
   libunwind_initialized = libunwind_load ();
 }
index cb922313b0c855b616ba8228022f3245882f4548..d461f8573901a47ade0e5c14fbd29d3ad5ffa875 100644 (file)
@@ -98,16 +98,15 @@ user_reg_add_builtin (const char *name, user_reg_read_ftype *xread,
 static struct gdbarch_data *user_regs_data;
 
 static void *
-user_regs_init (struct gdbarch *gdbarch)
+user_regs_init (struct obstack *obstack)
 {
   struct user_reg *reg;
-  struct gdb_user_regs *regs 
-    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct gdb_user_regs);
+  struct gdb_user_regs *regs = OBSTACK_ZALLOC (obstack, struct gdb_user_regs);
 
   regs->last = &regs->first;
   for (reg = builtin_user_regs.first; reg != NULL; reg = reg->next)
     append_user_reg (regs, reg->name, reg->xread, reg->baton,
-                    GDBARCH_OBSTACK_ZALLOC (gdbarch, struct user_reg));
+                    OBSTACK_ZALLOC (obstack, struct user_reg));
   return regs;
 }
 
@@ -117,14 +116,7 @@ user_reg_add (struct gdbarch *gdbarch, const char *name,
 {
   struct gdb_user_regs *regs
     = (struct gdb_user_regs *) gdbarch_data (gdbarch, user_regs_data);
-
-  if (regs == NULL)
-    {
-      /* ULGH, called during architecture initialization.  Patch
-         things up.  */
-      regs = (struct gdb_user_regs *) user_regs_init (gdbarch);
-      deprecated_set_gdbarch_data (gdbarch, user_regs_data, regs);
-    }
+  gdb_assert (regs != NULL);
   append_user_reg (regs, name, xread, baton,
                   GDBARCH_OBSTACK_ZALLOC (gdbarch, struct user_reg));
 }
@@ -240,7 +232,7 @@ void _initialize_user_regs ();
 void
 _initialize_user_regs ()
 {
-  user_regs_data = gdbarch_data_register_post_init (user_regs_init);
+  user_regs_data = gdbarch_data_register_pre_init (user_regs_init);
 
   add_cmd ("user-registers", class_maintenance,
           maintenance_print_user_registers,