Constify some target_so_ops instances
[binutils-gdb.git] / gdb / solib-target.c
index 35e50a3e00b4d371bc2d318ccb89ff918253d373..6eb0d171147481f737ccef69c78ae79fb55f41f0 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for targets which report shared library events.
 
-   Copyright (C) 2007-2020 Free Software Foundation, Inc.
+   Copyright (C) 2007-2022 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -25,6 +25,7 @@
 #include "target.h"
 #include "solib-target.h"
 #include <vector>
+#include "inferior.h"
 
 /* Private data for each loaded library.  */
 struct lm_info_target : public lm_info_base
@@ -233,8 +234,8 @@ solib_target_current_sos (void)
 
   /* Fetch the list of shared libraries.  */
   gdb::optional<gdb::char_vector> library_document
-    = target_read_stralloc (current_top_target (), TARGET_OBJECT_LIBRARIES,
-                           NULL);
+    = target_read_stralloc (current_inferior ()->top_target (),
+                           TARGET_OBJECT_LIBRARIES, NULL);
   if (!library_document)
     return NULL;
 
@@ -386,9 +387,9 @@ Could not relocate shared library \"%s\": bad offsets"), so->so_name);
                 "info sharedlibrary".  Report any consecutive segments
                 which were relocated as a single unit.  */
              gdb_assert (li->segment_bases.size () > 0);
-             orig_delta = li->segment_bases[0] - data->segment_bases[0];
+             orig_delta = li->segment_bases[0] - data->segments[0].base;
 
-             for (i = 1; i < data->num_segments; i++)
+             for (i = 1; i < data->segments.size (); i++)
                {
                  /* If we have run out of offsets, assume all
                     remaining segments have the same offset.  */
@@ -397,14 +398,14 @@ Could not relocate shared library \"%s\": bad offsets"), so->so_name);
 
                  /* If this segment does not have the same offset, do
                     not include it in the library's range.  */
-                 if (li->segment_bases[i] - data->segment_bases[i]
+                 if (li->segment_bases[i] - data->segments[i].base
                      != orig_delta)
                    break;
                }
 
              so->addr_low = li->segment_bases[0];
-             so->addr_high = (data->segment_bases[i - 1]
-                              + data->segment_sizes[i - 1]
+             so->addr_high = (data->segments[i - 1].base
+                              + data->segments[i - 1].size
                               + orig_delta);
              gdb_assert (so->addr_low <= so->addr_high);
            }
@@ -434,27 +435,15 @@ solib_target_in_dynsym_resolve_code (CORE_ADDR pc)
   return in_plt_section (pc);
 }
 
-struct target_so_ops solib_target_so_ops;
-
-void _initialize_solib_target ();
-void
-_initialize_solib_target ()
+const struct target_so_ops solib_target_so_ops =
 {
-  solib_target_so_ops.relocate_section_addresses
-    = solib_target_relocate_section_addresses;
-  solib_target_so_ops.free_so = solib_target_free_so;
-  solib_target_so_ops.clear_solib = solib_target_clear_solib;
-  solib_target_so_ops.solib_create_inferior_hook
-    = solib_target_solib_create_inferior_hook;
-  solib_target_so_ops.current_sos = solib_target_current_sos;
-  solib_target_so_ops.open_symbol_file_object
-    = solib_target_open_symbol_file_object;
-  solib_target_so_ops.in_dynsym_resolve_code
-    = solib_target_in_dynsym_resolve_code;
-  solib_target_so_ops.bfd_open = solib_bfd_open;
-
-  /* Set current_target_so_ops to solib_target_so_ops if not already
-     set.  */
-  if (current_target_so_ops == 0)
-    current_target_so_ops = &solib_target_so_ops;
-}
+  solib_target_relocate_section_addresses,
+  solib_target_free_so,
+  nullptr,
+  solib_target_clear_solib,
+  solib_target_solib_create_inferior_hook,
+  solib_target_current_sos,
+  solib_target_open_symbol_file_object,
+  solib_target_in_dynsym_resolve_code,
+  solib_bfd_open,
+};