ppc: Fix record support of Store String Word instructions
[deliverable/binutils-gdb.git] / gdb / symfile.c
index 58c4ff97c2ab4124cf713b2340f6fb6593479da4..7eb6cdc0c448f9810e18ec07eaf00caea03062be 100644 (file)
@@ -1,6 +1,6 @@
 /* Generic symbol file reading for the GNU debugger, GDB.
 
-   Copyright (C) 1990-2015 Free Software Foundation, Inc.
+   Copyright (C) 1990-2016 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
@@ -114,12 +114,8 @@ static int simple_read_overlay_table (void);
 
 static int simple_overlay_update_1 (struct obj_section *);
 
-static void add_filename_language (char *ext, enum language lang);
-
 static void info_ext_lang_command (char *args, int from_tty);
 
-static void init_filename_language_table (void);
-
 static void symfile_find_segment_sections (struct objfile *objfile);
 
 void _initialize_symfile (void);
@@ -1249,7 +1245,6 @@ void
 symbol_file_add_separate (bfd *bfd, const char *name, int symfile_flags,
                          struct objfile *objfile)
 {
-  struct objfile *new_objfile;
   struct section_addr_info *sap;
   struct cleanup *my_cleanup;
 
@@ -1259,7 +1254,7 @@ symbol_file_add_separate (bfd *bfd, const char *name, int symfile_flags,
   sap = build_section_addr_info_from_objfile (objfile);
   my_cleanup = make_cleanup_free_section_addr_info (sap);
 
-  new_objfile = symbol_file_add_with_addrs
+  symbol_file_add_with_addrs
     (bfd, name, symfile_flags, sap,
      objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
                       | OBJF_USERLOADED),
@@ -1466,7 +1461,7 @@ find_separate_debug_file (const char *dir,
   struct cleanup *back_to;
   int ix;
 
-  /* Set I to max (strlen (canon_dir), strlen (dir)).  */
+  /* Set I to std::max (strlen (canon_dir), strlen (dir)).  */
   i = strlen (dir);
   if (canon_dir != NULL && strlen (canon_dir) > i)
     i = strlen (canon_dir);
@@ -2142,8 +2137,6 @@ generic_load (const char *args, int from_tty)
   ui_out_text (uiout, ", load size ");
   ui_out_field_fmt (uiout, "load-size", "%lu", total_progress.data_count);
   ui_out_text (uiout, "\n");
-  /* We were doing this in remote-mips.c, I suspect it is right
-     for other targets too.  */
   regcache_write_pc (get_current_regcache (), entry);
 
   /* Reset breakpoints, now that we have changed the load image.  For
@@ -2156,12 +2149,6 @@ generic_load (const char *args, int from_tty)
 
   breakpoint_re_set ();
 
-  /* FIXME: are we supposed to call symbol_file_add or not?  According
-     to a comment from remote-mips.c (where a call to symbol_file_add
-     was commented out), making the call confuses GDB if more than one
-     file is loaded in.  Some targets do (e.g., remote-vx.c) but
-     others don't (or didn't - perhaps they have all been deleted).  */
-
   print_transfer_performance (gdb_stdout, total_progress.data_count,
                              total_progress.write_count,
                              &start_time, &end_time);
@@ -2391,7 +2378,6 @@ remove_symbol_file_command (char *args, int from_tty)
   struct objfile *objf = NULL;
   struct cleanup *my_cleanups;
   struct program_space *pspace = current_program_space;
-  struct gdbarch *gdbarch = get_current_arch ();
 
   dont_repeat ();
 
@@ -2723,26 +2709,23 @@ typedef struct
 {
   char *ext;
   enum language lang;
-}
-filename_language;
+} filename_language;
 
-static filename_language *filename_language_table;
-static int fl_table_size, fl_table_next;
+DEF_VEC_O (filename_language);
 
-static void
-add_filename_language (char *ext, enum language lang)
+static VEC (filename_language) *filename_language_table;
+
+/* See symfile.h.  */
+
+void
+add_filename_language (const char *ext, enum language lang)
 {
-  if (fl_table_next >= fl_table_size)
-    {
-      fl_table_size += 10;
-      filename_language_table = XRESIZEVEC (filename_language,
-                                           filename_language_table,
-                                           fl_table_size);
-    }
+  filename_language entry;
+
+  entry.ext = xstrdup (ext);
+  entry.lang = lang;
 
-  filename_language_table[fl_table_next].ext = xstrdup (ext);
-  filename_language_table[fl_table_next].lang = lang;
-  fl_table_next++;
+  VEC_safe_push (filename_language, filename_language_table, &entry);
 }
 
 static char *ext_args;
@@ -2762,6 +2745,7 @@ set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
   int i;
   char *cp = ext_args;
   enum language lang;
+  filename_language *entry;
 
   /* First arg is filename extension, starting with '.'  */
   if (*cp != '.')
@@ -2791,11 +2775,15 @@ set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
   lang = language_enum (cp);
 
   /* Now lookup the filename extension: do we already know it?  */
-  for (i = 0; i < fl_table_next; i++)
-    if (0 == strcmp (ext_args, filename_language_table[i].ext))
-      break;
+  for (i = 0;
+       VEC_iterate (filename_language, filename_language_table, i, entry);
+       ++i)
+    {
+      if (0 == strcmp (ext_args, entry->ext))
+       break;
+    }
 
-  if (i >= fl_table_next)
+  if (entry == NULL)
     {
       /* New file extension.  */
       add_filename_language (ext_args, lang);
@@ -2808,9 +2796,9 @@ set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
       /*   query ("Really make files of type %s '%s'?", */
       /*          ext_args, language_str (lang));           */
 
-      xfree (filename_language_table[i].ext);
-      filename_language_table[i].ext = xstrdup (ext_args);
-      filename_language_table[i].lang = lang;
+      xfree (entry->ext);
+      entry->ext = xstrdup (ext_args);
+      entry->lang = lang;
     }
 }
 
@@ -2818,63 +2806,14 @@ static void
 info_ext_lang_command (char *args, int from_tty)
 {
   int i;
+  filename_language *entry;
 
   printf_filtered (_("Filename extensions and the languages they represent:"));
   printf_filtered ("\n\n");
-  for (i = 0; i < fl_table_next; i++)
-    printf_filtered ("\t%s\t- %s\n",
-                    filename_language_table[i].ext,
-                    language_str (filename_language_table[i].lang));
-}
-
-static void
-init_filename_language_table (void)
-{
-  if (fl_table_size == 0)      /* Protect against repetition.  */
-    {
-      fl_table_size = 20;
-      fl_table_next = 0;
-      filename_language_table = XNEWVEC (filename_language, fl_table_size);
-
-      add_filename_language (".c", language_c);
-      add_filename_language (".d", language_d);
-      add_filename_language (".C", language_cplus);
-      add_filename_language (".cc", language_cplus);
-      add_filename_language (".cp", language_cplus);
-      add_filename_language (".cpp", language_cplus);
-      add_filename_language (".cxx", language_cplus);
-      add_filename_language (".c++", language_cplus);
-      add_filename_language (".java", language_java);
-      add_filename_language (".class", language_java);
-      add_filename_language (".m", language_objc);
-      add_filename_language (".f", language_fortran);
-      add_filename_language (".F", language_fortran);
-      add_filename_language (".for", language_fortran);
-      add_filename_language (".FOR", language_fortran);
-      add_filename_language (".ftn", language_fortran);
-      add_filename_language (".FTN", language_fortran);
-      add_filename_language (".fpp", language_fortran);
-      add_filename_language (".FPP", language_fortran);
-      add_filename_language (".f90", language_fortran);
-      add_filename_language (".F90", language_fortran);
-      add_filename_language (".f95", language_fortran);
-      add_filename_language (".F95", language_fortran);
-      add_filename_language (".f03", language_fortran);
-      add_filename_language (".F03", language_fortran);
-      add_filename_language (".f08", language_fortran);
-      add_filename_language (".F08", language_fortran);
-      add_filename_language (".s", language_asm);
-      add_filename_language (".sx", language_asm);
-      add_filename_language (".S", language_asm);
-      add_filename_language (".pas", language_pascal);
-      add_filename_language (".p", language_pascal);
-      add_filename_language (".pp", language_pascal);
-      add_filename_language (".adb", language_ada);
-      add_filename_language (".ads", language_ada);
-      add_filename_language (".a", language_ada);
-      add_filename_language (".ada", language_ada);
-      add_filename_language (".dg", language_ada);
-    }
+  for (i = 0;
+       VEC_iterate (filename_language, filename_language_table, i, entry);
+       ++i)
+    printf_filtered ("\t%s\t- %s\n", entry->ext, language_str (entry->lang));
 }
 
 enum language
@@ -2885,9 +2824,15 @@ deduce_language_from_filename (const char *filename)
 
   if (filename != NULL)
     if ((cp = strrchr (filename, '.')) != NULL)
-      for (i = 0; i < fl_table_next; i++)
-       if (strcmp (cp, filename_language_table[i].ext) == 0)
-         return filename_language_table[i].lang;
+      {
+       filename_language *entry;
+
+       for (i = 0;
+            VEC_iterate (filename_language, filename_language_table, i, entry);
+            ++i)
+         if (strcmp (cp, entry->ext) == 0)
+           return entry->lang;
+      }
 
   return language_unknown;
 }
@@ -3293,19 +3238,21 @@ find_pc_overlay (CORE_ADDR pc)
   struct obj_section *osect, *best_match = NULL;
 
   if (overlay_debugging)
-    ALL_OBJSECTIONS (objfile, osect)
-      if (section_is_overlay (osect))
-      {
-       if (pc_in_mapped_range (pc, osect))
+    {
+      ALL_OBJSECTIONS (objfile, osect)
+       if (section_is_overlay (osect))
          {
-           if (section_is_mapped (osect))
-             return osect;
-           else
+           if (pc_in_mapped_range (pc, osect))
+             {
+               if (section_is_mapped (osect))
+                 return osect;
+               else
+                 best_match = osect;
+             }
+           else if (pc_in_unmapped_range (pc, osect))
              best_match = osect;
          }
-       else if (pc_in_unmapped_range (pc, osect))
-         best_match = osect;
-      }
+    }
   return best_match;
 }
 
@@ -3320,9 +3267,11 @@ find_pc_mapped_section (CORE_ADDR pc)
   struct obj_section *osect;
 
   if (overlay_debugging)
-    ALL_OBJSECTIONS (objfile, osect)
-      if (pc_in_mapped_range (pc, osect) && section_is_mapped (osect))
-       return osect;
+    {
+      ALL_OBJSECTIONS (objfile, osect)
+       if (pc_in_mapped_range (pc, osect) && section_is_mapped (osect))
+         return osect;
+    }
 
   return NULL;
 }
@@ -3338,31 +3287,33 @@ list_overlays_command (char *args, int from_tty)
   struct obj_section *osect;
 
   if (overlay_debugging)
-    ALL_OBJSECTIONS (objfile, osect)
+    {
+      ALL_OBJSECTIONS (objfile, osect)
       if (section_is_mapped (osect))
-      {
-       struct gdbarch *gdbarch = get_objfile_arch (objfile);
-       const char *name;
-       bfd_vma lma, vma;
-       int size;
-
-       vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
-       lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
-       size = bfd_get_section_size (osect->the_bfd_section);
-       name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
-
-       printf_filtered ("Section %s, loaded at ", name);
-       fputs_filtered (paddress (gdbarch, lma), gdb_stdout);
-       puts_filtered (" - ");
-       fputs_filtered (paddress (gdbarch, lma + size), gdb_stdout);
-       printf_filtered (", mapped at ");
-       fputs_filtered (paddress (gdbarch, vma), gdb_stdout);
-       puts_filtered (" - ");
-       fputs_filtered (paddress (gdbarch, vma + size), gdb_stdout);
-       puts_filtered ("\n");
-
-       nmapped++;
-      }
+       {
+         struct gdbarch *gdbarch = get_objfile_arch (objfile);
+         const char *name;
+         bfd_vma lma, vma;
+         int size;
+
+         vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
+         lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
+         size = bfd_get_section_size (osect->the_bfd_section);
+         name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
+
+         printf_filtered ("Section %s, loaded at ", name);
+         fputs_filtered (paddress (gdbarch, lma), gdb_stdout);
+         puts_filtered (" - ");
+         fputs_filtered (paddress (gdbarch, lma + size), gdb_stdout);
+         printf_filtered (", mapped at ");
+         fputs_filtered (paddress (gdbarch, vma), gdb_stdout);
+         puts_filtered (" - ");
+         fputs_filtered (paddress (gdbarch, vma + size), gdb_stdout);
+         puts_filtered ("\n");
+
+         nmapped++;
+       }
+    }
   if (nmapped == 0)
     printf_filtered (_("No sections are mapped.\n"));
 }
@@ -3633,25 +3584,22 @@ simple_read_overlay_table (void)
 static int
 simple_overlay_update_1 (struct obj_section *osect)
 {
-  int i, size;
+  int i;
   bfd *obfd = osect->objfile->obfd;
   asection *bsect = osect->the_bfd_section;
   struct gdbarch *gdbarch = get_objfile_arch (osect->objfile);
   int word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
-  size = bfd_get_section_size (osect->the_bfd_section);
   for (i = 0; i < cache_novlys; i++)
     if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
-       && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
-       /* && cache_ovly_table[i][OSIZE] == size */ )
+       && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect))
       {
        read_target_long_array (cache_ovly_table_base + i * word_size,
                                (unsigned int *) cache_ovly_table[i],
                                4, word_size, byte_order);
        if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
-           && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
-           /* && cache_ovly_table[i][OSIZE] == size */ )
+           && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect))
          {
            osect->ovly_mapped = cache_ovly_table[i][MAPPED];
            return 1;
@@ -3709,15 +3657,13 @@ simple_overlay_update (struct obj_section *osect)
   ALL_OBJSECTIONS (objfile, osect)
     if (section_is_overlay (osect))
     {
-      int i, size;
+      int i;
       bfd *obfd = osect->objfile->obfd;
       asection *bsect = osect->the_bfd_section;
 
-      size = bfd_get_section_size (bsect);
       for (i = 0; i < cache_novlys; i++)
        if (cache_ovly_table[i][VMA] == bfd_section_vma (obfd, bsect)
-           && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect)
-           /* && cache_ovly_table[i][OSIZE] == size */ )
+           && cache_ovly_table[i][LMA] == bfd_section_lma (obfd, bsect))
          { /* obj_section matches i'th entry in ovly_table.  */
            osect->ovly_mapped = cache_ovly_table[i][MAPPED];
            break;              /* finished with inner for loop: break out.  */
@@ -4017,7 +3963,6 @@ A load OFFSET may also be given."), &cmdlist);
           _("Read the overlay mapping state from the target."), &overlaylist);
 
   /* Filename extension to source language lookup table: */
-  init_filename_language_table ();
   add_setshow_string_noescape_cmd ("extension-language", class_files,
                                   &ext_args, _("\
 Set mapping between filename extension and source language."), _("\
This page took 0.028617 seconds and 4 git commands to generate.