AArch64: Add MOVPRFX tests and update testsuite
[deliverable/binutils-gdb.git] / gdb / solib-aix.c
index 74f0eaa60f0ef5e3bb0d765374bc7a2006b08d24..8e8901e8e21dcfca69488903d3c418f70b3164c1 100644 (file)
@@ -24,7 +24,7 @@
 #include "objfiles.h"
 #include "symtab.h"
 #include "xcoffread.h"
-#include "observer.h"
+#include "observable.h"
 #include "gdbcmd.h"
 
 /* Variable controlling the output of the debugging traces for
@@ -134,30 +134,30 @@ static void
 library_list_start_library (struct gdb_xml_parser *parser,
                            const struct gdb_xml_element *element,
                            void *user_data,
-                           VEC (gdb_xml_value_s) *attributes)
+                           std::vector<gdb_xml_value> &attributes)
 {
   VEC (lm_info_aix_p) **list = (VEC (lm_info_aix_p) **) user_data;
   lm_info_aix *item = new lm_info_aix;
   struct gdb_xml_value *attr;
 
   attr = xml_find_attribute (attributes, "name");
-  item->filename = xstrdup ((const char *) attr->value);
+  item->filename = xstrdup ((const char *) attr->value.get ());
 
   attr = xml_find_attribute (attributes, "member");
   if (attr != NULL)
-    item->member_name = xstrdup ((const char *) attr->value);
+    item->member_name = xstrdup ((const char *) attr->value.get ());
 
   attr = xml_find_attribute (attributes, "text_addr");
-  item->text_addr = * (ULONGEST *) attr->value;
+  item->text_addr = * (ULONGEST *) attr->value.get ();
 
   attr = xml_find_attribute (attributes, "text_size");
-  item->text_size = * (ULONGEST *) attr->value;
+  item->text_size = * (ULONGEST *) attr->value.get ();
 
   attr = xml_find_attribute (attributes, "data_addr");
-  item->data_addr = * (ULONGEST *) attr->value;
+  item->data_addr = * (ULONGEST *) attr->value.get ();
 
   attr = xml_find_attribute (attributes, "data_size");
-  item->data_size = * (ULONGEST *) attr->value;
+  item->data_size = * (ULONGEST *) attr->value.get ();
 
   VEC_safe_push (lm_info_aix_p, *list, item);
 }
@@ -167,9 +167,11 @@ library_list_start_library (struct gdb_xml_parser *parser,
 static void
 library_list_start_list (struct gdb_xml_parser *parser,
                          const struct gdb_xml_element *element,
-                         void *user_data, VEC (gdb_xml_value_s) *attributes)
+                         void *user_data,
+                        std::vector<gdb_xml_value> &attributes)
 {
-  char *version = (char *) xml_find_attribute (attributes, "version")->value;
+  char *version
+    = (char *) xml_find_attribute (attributes, "version")->value.get ();
 
   if (strcmp (version, "1.0") != 0)
     gdb_xml_error (parser,
@@ -277,10 +279,10 @@ solib_aix_get_library_list (struct inferior *inf, const char *warning_msg)
   if (data->library_list != NULL)
     return data->library_list;
 
-  gdb::unique_xmalloc_ptr<char> library_document
-    = target_read_stralloc (&current_target, TARGET_OBJECT_LIBRARIES_AIX,
+  gdb::optional<gdb::char_vector> library_document
+    = target_read_stralloc (current_top_target (), TARGET_OBJECT_LIBRARIES_AIX,
                            NULL);
-  if (library_document == NULL && warning_msg != NULL)
+  if (!library_document && warning_msg != NULL)
     {
       warning (_("%s (failed to read TARGET_OBJECT_LIBRARIES_AIX)"),
               warning_msg);
@@ -290,9 +292,9 @@ solib_aix_get_library_list (struct inferior *inf, const char *warning_msg)
   if (solib_aix_debug)
     fprintf_unfiltered (gdb_stdlog,
                        "DEBUG: TARGET_OBJECT_LIBRARIES_AIX = \n%s\n",
-                       library_document.get ());
+                       library_document->data ());
 
-  data->library_list = solib_aix_parse_libraries (library_document.get ());
+  data->library_list = solib_aix_parse_libraries (library_document->data ());
   if (data->library_list == NULL && warning_msg != NULL)
     {
       warning (_("%s (missing XML support?)"), warning_msg);
@@ -437,14 +439,14 @@ solib_aix_clear_solib (void)
    The resulting array is computed on the heap and must be
    deallocated after use.  */
 
-static struct section_offsets *
+static gdb::unique_xmalloc_ptr<struct section_offsets>
 solib_aix_get_section_offsets (struct objfile *objfile,
                               lm_info_aix *info)
 {
-  struct section_offsets *offsets;
   bfd *abfd = objfile->obfd;
 
-  offsets = XCNEWVEC (struct section_offsets, objfile->num_sections);
+  gdb::unique_xmalloc_ptr<struct section_offsets> offsets
+    (XCNEWVEC (struct section_offsets, objfile->num_sections));
 
   /* .text */
 
@@ -513,12 +515,10 @@ solib_aix_solib_create_inferior_hook (int from_tty)
 
   if (symfile_objfile != NULL)
     {
-      struct section_offsets *offsets
+      gdb::unique_xmalloc_ptr<struct section_offsets> offsets
        = solib_aix_get_section_offsets (symfile_objfile, exec_info);
-      struct cleanup *cleanup = make_cleanup (xfree, offsets);
 
-      objfile_relocate (symfile_objfile, offsets);
-      do_cleanups (cleanup);
+      objfile_relocate (symfile_objfile, offsets.get ());
     }
 }
 
@@ -600,7 +600,7 @@ solib_aix_in_dynsym_resolve_code (CORE_ADDR pc)
 /* Implement the "bfd_open" target_so_ops method.  */
 
 static gdb_bfd_ref_ptr
-solib_aix_bfd_open (char *pathname)
+solib_aix_bfd_open (const char *pathname)
 {
   /* The pathname is actually a synthetic filename with the following
      form: "/path/to/sharedlib(member.o)" (double-quotes excluded).
@@ -609,10 +609,9 @@ solib_aix_bfd_open (char *pathname)
      FIXME: This is a little hacky.  Perhaps we should provide access
      to the solib's lm_info here?  */
   const int path_len = strlen (pathname);
-  char *sep;
+  const char *sep;
   int filename_len;
   int found_file;
-  char *found_pathname;
 
   if (pathname[path_len - 1] != ')')
     return solib_bfd_open (pathname);
@@ -636,10 +635,12 @@ solib_aix_bfd_open (char *pathname)
   /* Calling solib_find makes certain that sysroot path is set properly
      if program has a dependency on .a archive and sysroot is set via
      set sysroot command.  */
-  found_pathname = solib_find (filename.c_str (), &found_file);
+  gdb::unique_xmalloc_ptr<char> found_pathname
+    = solib_find (filename.c_str (), &found_file);
   if (found_pathname == NULL)
       perror_with_name (pathname);
-  gdb_bfd_ref_ptr archive_bfd (solib_bfd_fopen (found_pathname, found_file));
+  gdb_bfd_ref_ptr archive_bfd (solib_bfd_fopen (found_pathname.get (),
+                                               found_file));
   if (archive_bfd == NULL)
     {
       warning (_("Could not open `%s' as an executable file: %s"),
@@ -788,7 +789,7 @@ _initialize_solib_aix (void)
 
   solib_aix_inferior_data_handle = register_inferior_data ();
 
-  observer_attach_normal_stop (solib_aix_normal_stop_observer);
+  gdb::observers::normal_stop.attach (solib_aix_normal_stop_observer);
 
   /* Debug this file's internals.  */
   add_setshow_boolean_cmd ("aix-solib", class_maintenance,
This page took 0.028275 seconds and 4 git commands to generate.