gas: Update commit 4780e5e4933
[binutils-gdb.git] / gdb / ia64-libunwind-tdep.c
index 1fb018ad9ee12fa553a23af3b884010962914821..27ef26aa16fd2325ce9634577dae2bbd839e2fac 100644 (file)
@@ -1,6 +1,6 @@
 /* Frame unwinder for ia64 frames using the libunwind library.
 
-   Copyright (C) 2003-2020 Free Software Foundation, Inc.
+   Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
    Written by Jeff Johnston, contributed by Red Hat Inc.
 
@@ -35,7 +35,6 @@
 
 #include "ia64-libunwind-tdep.h"
 
-#include "complaints.h"
 #include "gdbsupport/preprocessor.h"
 
 /* IA-64 is the only target that currently uses ia64-libunwind-tdep.
@@ -133,10 +132,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 +150,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;
@@ -263,7 +255,7 @@ libunwind_find_dyn_list (unw_addr_space_t as, unw_dyn_info_t *di, void *arg)
    libunwind frame unwinding.  */
 int
 libunwind_frame_sniffer (const struct frame_unwind *self,
-                         struct frame_info *this_frame, void **this_cache)
+                        struct frame_info *this_frame, void **this_cache)
 {
   unw_cursor_t cursor;
   unw_accessors_t *acc;
@@ -309,7 +301,7 @@ libunwind_frame_sniffer (const struct frame_unwind *self,
 
 void
 libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
-                        struct frame_id *this_id)
+                        struct frame_id *this_id)
 {
   struct libunwind_frame_cache *cache =
     libunwind_frame_cache (this_frame, this_cache);
@@ -320,7 +312,7 @@ libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
 
 struct value *
 libunwind_frame_prev_register (struct frame_info *this_frame,
-                               void **this_cache, int regnum)
+                              void **this_cache, int regnum)
 {
   struct libunwind_frame_cache *cache =
     libunwind_frame_cache (this_frame, this_cache);
@@ -342,7 +334,7 @@ libunwind_frame_prev_register (struct frame_info *this_frame,
 
   gdb_assert (regnum >= 0);
 
-  if (!target_has_registers)
+  if (!target_has_registers ())
     error (_("No registers."));
 
   if (uw_regnum < 0)
@@ -359,29 +351,29 @@ libunwind_frame_prev_register (struct frame_info *this_frame,
 
     case UNW_SLT_REG:
       val = frame_unwind_got_register (this_frame, regnum,
-                                       descr->uw2gdb (sl.u.regnum));
+                                      descr->uw2gdb (sl.u.regnum));
       break;
     case UNW_SLT_NONE:
       {
-        /* The register is not stored at a specific memory address nor
-           inside another register.  So use libunwind to fetch the register
-           value for us, and create a constant value with the result.  */
-        if (descr->is_fpreg (uw_regnum))
-          {
-            ret = unw_get_fpreg_p (&cache->cursor, uw_regnum, &fpval);
-            if (ret < 0)
-              return frame_unwind_got_constant (this_frame, regnum, 0);
-            val = frame_unwind_got_bytes (this_frame, regnum,
-                                          (gdb_byte *) &fpval);
-          }
-        else
-          {
-            ret = unw_get_reg_p (&cache->cursor, uw_regnum, &intval);
-            if (ret < 0)
-              return frame_unwind_got_constant (this_frame, regnum, 0);
-            val = frame_unwind_got_constant (this_frame, regnum, intval);
-          }
-        break;
+       /* The register is not stored at a specific memory address nor
+          inside another register.  So use libunwind to fetch the register
+          value for us, and create a constant value with the result.  */
+       if (descr->is_fpreg (uw_regnum))
+         {
+           ret = unw_get_fpreg_p (&cache->cursor, uw_regnum, &fpval);
+           if (ret < 0)
+             return frame_unwind_got_constant (this_frame, regnum, 0);
+           val = frame_unwind_got_bytes (this_frame, regnum,
+                                         (gdb_byte *) &fpval);
+         }
+       else
+         {
+           ret = unw_get_reg_p (&cache->cursor, uw_regnum, &intval);
+           if (ret < 0)
+             return frame_unwind_got_constant (this_frame, regnum, 0);
+           val = frame_unwind_got_constant (this_frame, regnum, intval);
+         }
+       break;
       }
     }
 
@@ -403,8 +395,8 @@ libunwind_search_unwind_table (void *as, long ip, void *di,
 /* Verify if we are in a sigtramp frame and we can use libunwind to unwind.  */
 int
 libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
-                                  struct frame_info *this_frame,
-                                  void **this_cache)
+                                 struct frame_info *this_frame,
+                                 void **this_cache)
 {
   unw_cursor_t cursor;
   unw_accessors_t *acc;
@@ -591,11 +583,12 @@ libunwind_is_initialized (void)
   return libunwind_initialized;
 }
 
+void _initialize_libunwind_frame ();
 void
-_initialize_libunwind_frame (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 ();
 }