* README-vms: Delete.
[deliverable/binutils-gdb.git] / gdb / symfile.c
index f4bae330e775198ed620e075c6f1198d28ef35f6..971c530beb4bbc9559404fd20c4dfc4e6952e86d 100644 (file)
@@ -1,7 +1,7 @@
 /* Generic symbol file reading for the GNU debugger, GDB.
 
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
@@ -48,6 +48,8 @@
 #include "readline/readline.h"
 #include "gdb_assert.h"
 #include "block.h"
+#include "observer.h"
+#include "exec.h"
 
 #include <sys/types.h>
 #include <fcntl.h>
 #include "gdb_stat.h"
 #include <ctype.h>
 #include <time.h>
+#include <sys/time.h>
 
 #ifndef O_BINARY
 #define O_BINARY 0
 #endif
 
-#ifdef HPUXHPPA
-
-/* Some HP-UX related globals to clear when a new "main"
-   symbol file is loaded. HP-specific.  */
-
-extern int hp_cxx_exception_support_initialized;
-#define RESET_HP_UX_GLOBALS() do {\
-                                    deprecated_hp_som_som_object_present = 0;             /* indicates HP-compiled code */        \
-                                    hp_cxx_exception_support_initialized = 0;  /* must reinitialize exception stuff */ \
-                              } while (0)
-#endif
-
-int (*ui_load_progress_hook) (const char *section, unsigned long num);
-void (*show_load_progress) (const char *section,
+int (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num);
+void (*deprecated_show_load_progress) (const char *section,
                            unsigned long section_sent,
                            unsigned long section_size,
                            unsigned long total_sent,
                            unsigned long total_size);
-void (*pre_add_symbol_hook) (const char *);
-void (*post_add_symbol_hook) (void);
-void (*target_new_objfile_hook) (struct objfile *);
+void (*deprecated_pre_add_symbol_hook) (const char *);
+void (*deprecated_post_add_symbol_hook) (void);
+void (*deprecated_target_new_objfile_hook) (struct objfile *);
 
 static void clear_symtab_users_cleanup (void *ignore);
 
@@ -150,8 +141,6 @@ static int simple_overlay_update_1 (struct obj_section *);
 
 static void add_filename_language (char *ext, enum language lang);
 
-static void set_ext_lang_command (char *args, int from_tty);
-
 static void info_ext_lang_command (char *args, int from_tty);
 
 static char *find_separate_debug_file (struct objfile *objfile);
@@ -174,6 +163,15 @@ int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
 #else
 int symbol_reloading = 0;
 #endif
+static void
+show_symbol_reloading (struct ui_file *file, int from_tty,
+                      struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("\
+Dynamic symbol table reloading multiple times in one run is %s.\n"),
+                   value);
+}
+
 
 /* If non-zero, shared library symbols will be added automatically
    when the inferior is created, new libraries are loaded, or when
@@ -207,8 +205,8 @@ compare_psymbols (const void *s1p, const void *s2p)
   struct partial_symbol *const *s1 = s1p;
   struct partial_symbol *const *s2 = s2p;
 
-  return strcmp_iw_ordered (SYMBOL_NATURAL_NAME (*s1),
-                           SYMBOL_NATURAL_NAME (*s2));
+  return strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*s1),
+                           SYMBOL_SEARCH_NAME (*s2));
 }
 
 void
@@ -336,6 +334,32 @@ alloc_section_addr_info (size_t num_sections)
   return sap;
 }
 
+
+/* Return a freshly allocated copy of ADDRS.  The section names, if
+   any, are also freshly allocated copies of those in ADDRS.  */
+struct section_addr_info *
+copy_section_addr_info (struct section_addr_info *addrs)
+{
+  struct section_addr_info *copy
+    = alloc_section_addr_info (addrs->num_sections);
+  int i;
+
+  copy->num_sections = addrs->num_sections;
+  for (i = 0; i < addrs->num_sections; i++)
+    {
+      copy->other[i].addr = addrs->other[i].addr;
+      if (addrs->other[i].name)
+        copy->other[i].name = xstrdup (addrs->other[i].name);
+      else
+        copy->other[i].name = NULL;
+      copy->other[i].sectindex = addrs->other[i].sectindex;
+    }
+
+  return copy;
+}
+
+
+
 /* Build (allocate and populate) a section_addr_info struct from
    an existing section table. */
 
@@ -434,6 +458,84 @@ init_objfile_sect_indices (struct objfile *objfile)
     }
 }
 
+/* The arguments to place_section.  */
+
+struct place_section_arg
+{
+  struct section_offsets *offsets;
+  CORE_ADDR lowest;
+};
+
+/* Find a unique offset to use for loadable section SECT if
+   the user did not provide an offset.  */
+
+void
+place_section (bfd *abfd, asection *sect, void *obj)
+{
+  struct place_section_arg *arg = obj;
+  CORE_ADDR *offsets = arg->offsets->offsets, start_addr;
+  int done;
+
+  /* We are only interested in loadable sections.  */
+  if ((bfd_get_section_flags (abfd, sect) & SEC_LOAD) == 0)
+    return;
+
+  /* If the user specified an offset, honor it.  */
+  if (offsets[sect->index] != 0)
+    return;
+
+  /* Otherwise, let's try to find a place for the section.  */
+  do {
+    asection *cur_sec;
+    ULONGEST align = 1 << bfd_get_section_alignment (abfd, sect);
+
+    start_addr = (arg->lowest + align - 1) & -align;
+    done = 1;
+
+    for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
+      {
+       int indx = cur_sec->index;
+       CORE_ADDR cur_offset;
+
+       /* We don't need to compare against ourself.  */
+       if (cur_sec == sect)
+         continue;
+
+       /* We can only conflict with loadable sections.  */
+       if ((bfd_get_section_flags (abfd, cur_sec) & SEC_LOAD) == 0)
+         continue;
+
+       /* We do not expect this to happen; just ignore sections in a
+          relocatable file with an assigned VMA.  */
+       if (bfd_section_vma (abfd, cur_sec) != 0)
+         continue;
+
+       /* If the section offset is 0, either the section has not been placed
+          yet, or it was the lowest section placed (in which case LOWEST
+          will be past its end).  */
+       if (offsets[indx] == 0)
+         continue;
+
+       /* If this section would overlap us, then we must move up.  */
+       if (start_addr + bfd_get_section_size (sect) > offsets[indx]
+           && start_addr < offsets[indx] + bfd_get_section_size (cur_sec))
+         {
+           start_addr = offsets[indx] + bfd_get_section_size (cur_sec);
+           start_addr = (start_addr + align - 1) & -align;
+           done = 0;
+           continue;
+         }
+
+       /* Otherwise, we appear to be OK.  So far.  */
+      }
+    }
+  while (!done);
+
+  offsets[sect->index] = start_addr;
+  arg->lowest = start_addr + bfd_get_section_size (sect);
+
+  exec_set_section_address (bfd_get_filename (abfd), sect->index, start_addr);
+}
 
 /* Parse the user's idea of an offset for dynamic linking, into our idea
    of how to represent it for fast symbol reading.  This is the default
@@ -470,6 +572,19 @@ default_symfile_offsets (struct objfile *objfile,
       (objfile->section_offsets)->offsets[osp->sectindex] = osp->addr;
     }
 
+  /* For relocatable files, all loadable sections will start at zero.
+     The zero is meaningless, so try to pick arbitrary addresses such
+     that no loadable sections overlap.  This algorithm is quadratic,
+     but the number of sections in a single object file is generally
+     small.  */
+  if ((bfd_get_file_flags (objfile->obfd) & (EXEC_P | DYNAMIC)) == 0)
+    {
+      struct place_section_arg arg;
+      arg.offsets = objfile->section_offsets;
+      arg.lowest = 0;
+      bfd_map_over_sections (objfile->obfd, place_section, &arg);
+    }
+
   /* Remember the bfd indexes for the .text, .data, .bss and
      .rodata sections. */
   init_objfile_sect_indices (objfile);
@@ -587,11 +702,11 @@ syms_from_objfile (struct objfile *objfile,
        bfd_map_over_sections (objfile->obfd, find_lowest_section,
                               &lower_sect);
       if (lower_sect == NULL)
-       warning ("no loadable sections found in added symbol-file %s",
+       warning (_("no loadable sections found in added symbol-file %s"),
                 objfile->name);
       else
        if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE) == 0)
-         warning ("Lowest section in %s is %s at %s",
+         warning (_("Lowest section in %s is %s at %s"),
                   objfile->name,
                   bfd_section_name (objfile->obfd, lower_sect),
                   paddr (bfd_section_vma (objfile->obfd, lower_sect)));
@@ -626,7 +741,7 @@ syms_from_objfile (struct objfile *objfile,
                   }
                 else
                   {
-                    warning ("section %s not found in %s",
+                    warning (_("section %s not found in %s"),
                              addrs->other[i].name,
                              objfile->name);
                     addrs->other[i].addr = 0;
@@ -784,7 +899,7 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
   struct objfile *objfile;
   struct partial_symtab *psymtab;
   char *debugfile;
-  struct section_addr_info *orig_addrs;
+  struct section_addr_info *orig_addrs = NULL;
   struct cleanup *my_cleanups;
   const char *name = bfd_get_filename (abfd);
 
@@ -797,19 +912,15 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
       && mainline
       && from_tty
       && !query ("Load new symbol table from \"%s\"? ", name))
-    error ("Not confirmed.");
+    error (_("Not confirmed."));
 
   objfile = allocate_objfile (abfd, flags);
   discard_cleanups (my_cleanups);
 
-  orig_addrs = alloc_section_addr_info (bfd_count_sections (abfd));
-  my_cleanups = make_cleanup (xfree, orig_addrs);
   if (addrs)
     {
-      int i;
-      orig_addrs->num_sections = addrs->num_sections;
-      for (i = 0; i < addrs->num_sections; i++)
-       orig_addrs->other[i] = addrs->other[i];
+      orig_addrs = copy_section_addr_info (addrs);
+      make_cleanup_free_section_addr_info (orig_addrs);
     }
 
   /* We either created a new mapped symbol table, mapped an existing
@@ -817,11 +928,11 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
      performed, or need to read an unmapped symbol table. */
   if (from_tty || info_verbose)
     {
-      if (pre_add_symbol_hook)
-       pre_add_symbol_hook (name);
+      if (deprecated_pre_add_symbol_hook)
+       deprecated_pre_add_symbol_hook (name);
       else
        {
-         printf_unfiltered ("Reading symbols from %s...", name);
+         printf_unfiltered (_("Reading symbols from %s..."), name);
          wrap_here ("");
          gdb_flush (gdb_stdout);
        }
@@ -838,7 +949,7 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
     {
       if (from_tty || info_verbose)
        {
-         printf_unfiltered ("expanding to full symbols...");
+         printf_unfiltered (_("expanding to full symbols..."));
          wrap_here ("");
          gdb_flush (gdb_stdout);
        }
@@ -877,17 +988,21 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
   if (!have_partial_symbols () && !have_full_symbols ())
     {
       wrap_here ("");
-      printf_unfiltered ("(no debugging symbols found)...");
+      printf_filtered (_("(no debugging symbols found)"));
+      if (from_tty || info_verbose)
+        printf_filtered ("...");
+      else
+        printf_filtered ("\n");
       wrap_here ("");
     }
 
   if (from_tty || info_verbose)
     {
-      if (post_add_symbol_hook)
-       post_add_symbol_hook ();
+      if (deprecated_post_add_symbol_hook)
+       deprecated_post_add_symbol_hook ();
       else
        {
-         printf_unfiltered ("done.\n");
+         printf_unfiltered (_("done.\n"));
        }
     }
 
@@ -903,13 +1018,30 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
 
   new_symfile_objfile (objfile, mainline, from_tty);
 
-  if (target_new_objfile_hook)
-    target_new_objfile_hook (objfile);
+  if (deprecated_target_new_objfile_hook)
+    deprecated_target_new_objfile_hook (objfile);
 
+  bfd_cache_close_all ();
   return (objfile);
 }
 
 
+/* Process the symbol file ABFD, as either the main file or as a
+   dynamically loaded file.
+
+   See symbol_file_add_with_addrs_or_offsets's comments for
+   details.  */
+struct objfile *
+symbol_file_add_from_bfd (bfd *abfd, int from_tty,
+                          struct section_addr_info *addrs,
+                          int mainline, int flags)
+{
+  return symbol_file_add_with_addrs_or_offsets (abfd,
+                                               from_tty, addrs, 0, 0,
+                                                mainline, flags);
+}
+
+
 /* Process a symbol file, as either the main file or as a dynamically
    loaded file.  See symbol_file_add_with_addrs_or_offsets's comments
    for details.  */
@@ -917,9 +1049,8 @@ struct objfile *
 symbol_file_add (char *name, int from_tty, struct section_addr_info *addrs,
                 int mainline, int flags)
 {
-  return symbol_file_add_with_addrs_or_offsets (symfile_bfd_open (name),
-                                               from_tty, addrs, 0, 0,
-                                                mainline, flags);
+  return symbol_file_add_from_bfd (symfile_bfd_open (name), from_tty,
+                                   addrs, mainline, flags);
 }
 
 
@@ -942,10 +1073,6 @@ symbol_file_add_main_1 (char *args, int from_tty, int flags)
 {
   symbol_file_add (args, from_tty, NULL, 1, flags);
 
-#ifdef HPUXHPPA
-  RESET_HP_UX_GLOBALS ();
-#endif
-
   /* Getting new symbols may change our opinion about
      what is frameless.  */
   reinit_frame_cache ();
@@ -960,7 +1087,7 @@ symbol_file_clear (int from_tty)
       && from_tty
       && !query ("Discard symbol table from `%s'? ",
                 symfile_objfile->name))
-    error ("Not confirmed.");
+    error (_("Not confirmed."));
     free_all_objfiles ();
 
     /* solib descriptors may have handles to objfiles.  Since their
@@ -973,10 +1100,7 @@ symbol_file_clear (int from_tty)
 
     symfile_objfile = NULL;
     if (from_tty)
-      printf_unfiltered ("No symbol file now.\n");
-#ifdef HPUXHPPA
-    RESET_HP_UX_GLOBALS ();
-#endif
+      printf_unfiltered (_("No symbol file now.\n"));
 }
 
 static char *
@@ -1031,6 +1155,14 @@ separate_debug_file_exists (const char *name, unsigned long crc)
 }
 
 static char *debug_file_directory = NULL;
+static void
+show_debug_file_directory (struct ui_file *file, int from_tty,
+                          struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("\
+The directory where separate debug symbols are searched for is \"%s\".\n"),
+                   value);
+}
 
 #if ! defined (DEBUG_SUBDIRECTORY)
 #define DEBUG_SUBDIRECTORY ".debug"
@@ -1126,10 +1258,6 @@ find_separate_debug_file (struct objfile *objfile)
    used in GDB (perhaps "set mapped on", "set readnow on" would be
    better), (3) the order of options matters, which is contrary to GNU
    conventions (because it is confusing and inconvenient).  */
-/* Note: ezannoni 2000-04-17. This function used to have support for
-   rombug (see remote-os9k.c). It consisted of a call to target_link()
-   (target.c) to get the address of the text segment from the target,
-   and pass that to symbol_file_add(). This is no longer supported. */
 
 void
 symbol_file_command (char *args, int from_tty)
@@ -1157,7 +1285,7 @@ symbol_file_command (char *args, int from_tty)
          if (strcmp (*argv, "-readnow") == 0)
            flags |= OBJF_READNOW;
          else if (**argv == '-')
-           error ("unknown option `%s'", *argv);
+           error (_("unknown option `%s'"), *argv);
          else
            {
              name = *argv;
@@ -1169,7 +1297,7 @@ symbol_file_command (char *args, int from_tty)
 
       if (name == NULL)
        {
-         error ("no symbol file name was specified");
+         error (_("no symbol file name was specified"));
        }
       do_cleanups (cleanups);
     }
@@ -1225,14 +1353,15 @@ symfile_bfd_open (char *name)
   name = tilde_expand (name);  /* Returns 1st new malloc'd copy */
 
   /* Look down path for it, allocate 2nd new malloc'd copy.  */
-  desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);
+  desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, name, O_RDONLY | O_BINARY,
+               0, &absolute_name);
 #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
   if (desc < 0)
     {
       char *exename = alloca (strlen (name) + 5);
       strcat (strcpy (exename, name), ".exe");
-      desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY,
-                   0, &absolute_name);
+      desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename,
+                   O_RDONLY | O_BINARY, 0, &absolute_name);
     }
 #endif
   if (desc < 0)
@@ -1244,12 +1373,12 @@ symfile_bfd_open (char *name)
   name = absolute_name;                /* Keep 2nd malloc'd copy in bfd */
   /* It'll be freed in free_objfile(). */
 
-  sym_bfd = bfd_fdopenr (name, gnutarget, desc);
+  sym_bfd = bfd_fopen (name, gnutarget, FOPEN_RB, desc);
   if (!sym_bfd)
     {
       close (desc);
       make_cleanup (xfree, name);
-      error ("\"%s\": can't open to read symbols: %s.", name,
+      error (_("\"%s\": can't open to read symbols: %s."), name,
             bfd_errmsg (bfd_get_error ()));
     }
   bfd_set_cacheable (sym_bfd, 1);
@@ -1261,7 +1390,7 @@ symfile_bfd_open (char *name)
          bfd).  */
       bfd_close (sym_bfd);     /* This also closes desc */
       make_cleanup (xfree, name);
-      error ("\"%s\": can't read symbols: %s.", name,
+      error (_("\"%s\": can't read symbols: %s."), name,
             bfd_errmsg (bfd_get_error ()));
     }
   return (sym_bfd);
@@ -1317,7 +1446,7 @@ find_sym_fns (struct objfile *objfile)
          return;
        }
     }
-  error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
+  error (_("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown."),
         bfd_get_target (objfile->obfd));
 }
 \f
@@ -1345,6 +1474,14 @@ load_command (char *arg, int from_tty)
    performance compares.  */
 
 static int download_write_size = 512;
+static void
+show_download_write_size (struct ui_file *file, int from_tty,
+                         struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("\
+The write size used when downloading a program is %s.\n"),
+                   value);
+}
 static int validate_download = 0;
 
 /* Callback service function for generic_load (bfd_map_over_sections).  */
@@ -1354,7 +1491,7 @@ add_section_size_callback (bfd *abfd, asection *asec, void *data)
 {
   bfd_size_type *sum = data;
 
-  *sum += bfd_get_section_size_before_reloc (asec);
+  *sum += bfd_get_section_size (asec);
 }
 
 /* Opaque data for load_section_callback.  */
@@ -1374,7 +1511,7 @@ load_section_callback (bfd *abfd, asection *asec, void *data)
 
   if (bfd_get_section_flags (abfd, asec) & SEC_LOAD)
     {
-      bfd_size_type size = bfd_get_section_size_before_reloc (asec);
+      bfd_size_type size = bfd_get_section_size (asec);
       if (size > 0)
        {
          char *buffer;
@@ -1427,10 +1564,10 @@ load_section_callback (bfd *abfd, asection *asec, void *data)
                    make_cleanup (xfree, check);
 
                  if (target_read_memory (lma, check, len) != 0)
-                   error ("Download verify read failed at 0x%s",
+                   error (_("Download verify read failed at 0x%s"),
                           paddr (lma));
                  if (memcmp (buffer, check, len) != 0)
-                   error ("Download verify compare failed at 0x%s",
+                   error (_("Download verify compare failed at 0x%s"),
                           paddr (lma));
                  do_cleanups (verify_cleanups);
                }
@@ -1440,18 +1577,19 @@ load_section_callback (bfd *abfd, asection *asec, void *data)
              args->write_count += 1;
              sent += len;
              if (quit_flag
-                 || (ui_load_progress_hook != NULL
-                     && ui_load_progress_hook (sect_name, sent)))
-               error ("Canceled the download");
-
-             if (show_load_progress != NULL)
-               show_load_progress (sect_name, sent, size,
-                                   args->data_count, args->total_size);
+                 || (deprecated_ui_load_progress_hook != NULL
+                     && deprecated_ui_load_progress_hook (sect_name, sent)))
+               error (_("Canceled the download"));
+
+             if (deprecated_show_load_progress != NULL)
+               deprecated_show_load_progress (sect_name, sent, size,
+                                              args->data_count,
+                                              args->total_size);
            }
          while (sent < size);
 
          if (err != 0)
-           error ("Memory access error while loading section %s.", sect_name);
+           error (_("Memory access error while loading section %s."), sect_name);
 
          do_cleanups (old_chain);
        }
@@ -1463,7 +1601,7 @@ generic_load (char *args, int from_tty)
 {
   asection *s;
   bfd *loadfile_bfd;
-  time_t start_time, end_time; /* Start and end times of download */
+  struct timeval start_time, end_time;
   char *filename;
   struct cleanup *old_cleanups;
   char *offptr;
@@ -1487,7 +1625,7 @@ generic_load (char *args, int from_tty)
 
       cbdata.load_offset = strtoul (offptr, &endptr, 0);
       if (offptr == endptr)
-       error ("Invalid download offset:%s\n", offptr);
+       error (_("Invalid download offset:%s."), offptr);
       *offptr = '\0';
     }
   else
@@ -1508,18 +1646,18 @@ generic_load (char *args, int from_tty)
 
   if (!bfd_check_format (loadfile_bfd, bfd_object))
     {
-      error ("\"%s\" is not an object file: %s", filename,
+      error (_("\"%s\" is not an object file: %s"), filename,
             bfd_errmsg (bfd_get_error ()));
     }
 
   bfd_map_over_sections (loadfile_bfd, add_section_size_callback,
                         (void *) &cbdata.total_size);
 
-  start_time = time (NULL);
+  gettimeofday (&start_time, NULL);
 
   bfd_map_over_sections (loadfile_bfd, load_section_callback, &cbdata);
 
-  end_time = time (NULL);
+  gettimeofday (&end_time, NULL);
 
   entry = bfd_get_start_address (loadfile_bfd);
   ui_out_text (uiout, "Start address ");
@@ -1535,10 +1673,10 @@ generic_load (char *args, int from_tty)
      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 - perhaphs they have all been deleted).  */
+     others don't (or didn't - perhaps they have all been deleted).  */
 
   print_transfer_performance (gdb_stdout, cbdata.data_count,
-                             cbdata.write_count, end_time - start_time);
+                             cbdata.write_count, &start_time, &end_time);
 
   do_cleanups (old_cleanups);
 }
@@ -1553,21 +1691,35 @@ void
 report_transfer_performance (unsigned long data_count, time_t start_time,
                             time_t end_time)
 {
-  print_transfer_performance (gdb_stdout, data_count,
-                             end_time - start_time, 0);
+  struct timeval start, end;
+
+  start.tv_sec = start_time;
+  start.tv_usec = 0;
+  end.tv_sec = end_time;
+  end.tv_usec = 0;
+
+  print_transfer_performance (gdb_stdout, data_count, 0, &start, &end);
 }
 
 void
 print_transfer_performance (struct ui_file *stream,
                            unsigned long data_count,
                            unsigned long write_count,
-                           unsigned long time_count)
+                           const struct timeval *start_time,
+                           const struct timeval *end_time)
 {
+  unsigned long time_count;
+
+  /* Compute the elapsed time in milliseconds, as a tradeoff between
+     accuracy and overflow.  */
+  time_count = (end_time->tv_sec - start_time->tv_sec) * 1000;
+  time_count += (end_time->tv_usec - start_time->tv_usec) / 1000;
+
   ui_out_text (uiout, "Transfer rate: ");
   if (time_count > 0)
     {
       ui_out_field_fmt (uiout, "transfer-rate", "%lu",
-                       (data_count * 8) / time_count);
+                       1000 * (data_count * 8) / time_count);
       ui_out_text (uiout, " bits/sec");
     }
   else
@@ -1625,7 +1777,7 @@ add_symbol_file_command (char *args, int from_tty)
   dont_repeat ();
 
   if (args == NULL)
-    error ("add-symbol-file takes a file name and an address");
+    error (_("add-symbol-file takes a file name and an address"));
 
   /* Make a copy of the string that we can safely write into. */
   args = xstrdup (args);
@@ -1708,7 +1860,7 @@ add_symbol_file_command (char *args, int from_tty)
                        }
                    }
                  else
-                   error ("USAGE: add-symbol-file <filename> <textaddress> [-mapped] [-readnow] [-s <secname> <addr>]*");
+                   error (_("USAGE: add-symbol-file <filename> <textaddress> [-mapped] [-readnow] [-s <secname> <addr>]*"));
              }
          }
       argcnt++;
@@ -1717,10 +1869,10 @@ add_symbol_file_command (char *args, int from_tty)
   /* Print the prompt for the query below. And save the arguments into
      a sect_addr_info structure to be passed around to other
      functions.  We have to split this up into separate print
-     statements because local_hex_string returns a local static
+     statements because hex_string returns a local static
      string. */
 
-  printf_unfiltered ("add symbol table from file \"%s\" at\n", filename);
+  printf_unfiltered (_("add symbol table from file \"%s\" at\n"), filename);
   section_addrs = alloc_section_addr_info (section_index);
   make_cleanup (xfree, section_addrs);
   for (i = 0; i < section_index; i++)
@@ -1736,8 +1888,7 @@ add_symbol_file_command (char *args, int from_tty)
       section_addrs->other[sec_num].name = sec;
       section_addrs->other[sec_num].addr = addr;
       printf_unfiltered ("\t%s_addr = %s\n",
-                      sec,
-                      local_hex_string ((unsigned long)addr));
+                      sec, hex_string ((unsigned long)addr));
       sec_num++;
 
       /* The object's sections are initialized when a
@@ -1748,7 +1899,7 @@ add_symbol_file_command (char *args, int from_tty)
     }
 
   if (from_tty && (!query ("%s", "")))
-    error ("Not confirmed.");
+    error (_("Not confirmed."));
 
   symbol_file_add (filename, from_tty, section_addrs, 0, flags);
 
@@ -1764,91 +1915,10 @@ add_shared_symbol_files_command (char *args, int from_tty)
 #ifdef ADD_SHARED_SYMBOL_FILES
   ADD_SHARED_SYMBOL_FILES (args, from_tty);
 #else
-  error ("This command is not available in this configuration of GDB.");
+  error (_("This command is not available in this configuration of GDB."));
 #endif
 }
 \f
-/* Read inferior memory at ADDR to find the header of a loaded object file
-   and read its in-core symbols out of inferior memory.  TEMPL is a bfd
-   representing the target's format.  */
-struct objfile *
-symbol_file_add_from_memory (bfd *templ, CORE_ADDR addr, int from_tty)
-{
-  struct objfile *objf;
-  bfd *nbfd;
-  asection *sec;
-  bfd_vma loadbase;
-  struct section_addr_info *sai;
-  unsigned int i;
-
-  if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
-    error ("add-symbol-file-from-memory not supported for this target");
-
-  nbfd = bfd_elf_bfd_from_remote_memory (templ, addr, &loadbase,
-                                        target_read_memory);
-  if (nbfd == NULL)
-    {
-      error ("Failed to read a valid object file image from memory.");
-      return NULL;
-    }
-
-  nbfd->filename = xstrdup ("shared object read from target memory");
-
-  if (!bfd_check_format (nbfd, bfd_object))
-    {
-      /* FIXME: should be checking for errors from bfd_close (for one thing,
-         on error it does not free all the storage associated with the
-         bfd).  */
-      bfd_close (nbfd);
-      error ("Got object file from memory but can't read symbols: %s.",
-            bfd_errmsg (bfd_get_error ()));
-      return NULL;
-    }
-
-  sai = alloc_section_addr_info (bfd_count_sections (nbfd));
-  make_cleanup (xfree, sai);
-  i = 0;
-  for (sec = nbfd->sections; sec != NULL; sec = sec->next)
-    if ((bfd_get_section_flags (nbfd, sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
-      {
-       sai->other[i].addr = bfd_get_section_vma (nbfd, sec) + loadbase;
-       sai->other[i].name = (char *) bfd_get_section_name (nbfd, sec);
-       sai->other[i].sectindex = sec->index;
-       ++i;
-      }
-
-  objf = symbol_file_add_with_addrs_or_offsets (nbfd, from_tty,
-                                               sai, NULL, 0, 0, OBJF_SHARED);
-
-  /* This might change our ideas about frames already looked at.  */
-  reinit_frame_cache ();
-
-  return objf;
-}
-
-static void
-add_symbol_file_from_memory_command (char *args, int from_tty)
-{
-  CORE_ADDR addr;
-  bfd *templ;
-
-  if (args == NULL)
-    error ("add-symbol-file-from-memory requires an expression argument");
-
-  addr = parse_and_eval_address (args);
-
-  /* We need some representative bfd to know the target we are looking at.  */
-  if (symfile_objfile != NULL)
-    templ = symfile_objfile->obfd;
-  else
-    templ = exec_bfd;
-  if (templ == NULL)
-    error ("\
-Must use symbol-file or exec-file before add-symbol-file-from-memory.");
-
-  (void) symbol_file_add_from_memory (templ, addr, from_tty);
-}
-\f
 /* Re-read symbols if a symbol-file has changed.  */
 void
 reread_symbols (void)
@@ -1881,7 +1951,7 @@ reread_symbols (void)
          if (res != 0)
            {
              /* FIXME, should use print_sys_errmsg but it's not filtered. */
-             printf_unfiltered ("`%s' has disappeared; keeping its symbols.\n",
+             printf_unfiltered (_("`%s' has disappeared; keeping its symbols.\n"),
                               objfile->name);
              continue;
            }
@@ -1893,7 +1963,7 @@ reread_symbols (void)
              int num_offsets;
              char *obfd_filename;
 
-             printf_unfiltered ("`%s' has changed; re-reading symbols.\n",
+             printf_unfiltered (_("`%s' has changed; re-reading symbols.\n"),
                               objfile->name);
 
              /* There are various functions like symbol_file_add,
@@ -1915,14 +1985,14 @@ reread_symbols (void)
                 BFD without closing the descriptor.  */
              obfd_filename = bfd_get_filename (objfile->obfd);
              if (!bfd_close (objfile->obfd))
-               error ("Can't close BFD for %s: %s", objfile->name,
+               error (_("Can't close BFD for %s: %s"), objfile->name,
                       bfd_errmsg (bfd_get_error ()));
              objfile->obfd = bfd_openr (obfd_filename, gnutarget);
              if (objfile->obfd == NULL)
-               error ("Can't open %s to read symbols.", objfile->name);
+               error (_("Can't open %s to read symbols."), objfile->name);
              /* bfd_openr sets cacheable to true, which is what we want.  */
              if (!bfd_check_format (objfile->obfd, bfd_object))
-               error ("Can't read symbols from %s: %s.", objfile->name,
+               error (_("Can't read symbols from %s: %s."), objfile->name,
                       bfd_errmsg (bfd_get_error ()));
 
              /* Save the offsets, we will nuke them with the rest of the
@@ -1940,11 +2010,11 @@ reread_symbols (void)
              /* FIXME: Do we have to free a whole linked list, or is this
                 enough?  */
              if (objfile->global_psymbols.list)
-               xmfree (objfile->md, objfile->global_psymbols.list);
+               xfree (objfile->global_psymbols.list);
              memset (&objfile->global_psymbols, 0,
                      sizeof (objfile->global_psymbols));
              if (objfile->static_psymbols.list)
-               xmfree (objfile->md, objfile->static_psymbols.list);
+               xfree (objfile->static_psymbols.list);
              memset (&objfile->static_psymbols, 0,
                      sizeof (objfile->static_psymbols));
 
@@ -1965,7 +2035,7 @@ reread_symbols (void)
              objfile->free_psymtabs = NULL;
              objfile->cp_namespace_symtab = NULL;
              objfile->msymbols = NULL;
-             objfile->sym_private = NULL;
+             objfile->deprecated_sym_private = NULL;
              objfile->minimal_symbol_count = 0;
              memset (&objfile->msymbol_hash, 0,
                      sizeof (objfile->msymbol_hash));
@@ -1989,7 +2059,7 @@ reread_symbols (void)
              obstack_init (&objfile->objfile_obstack);
              if (build_objfile_section_table (objfile))
                {
-                 error ("Can't find the file sections in `%s': %s",
+                 error (_("Can't find the file sections in `%s': %s"),
                         objfile->name, bfd_errmsg (bfd_get_error ()));
                }
               terminate_minimal_symbol_table (objfile);
@@ -2009,9 +2079,6 @@ reread_symbols (void)
              if (objfile == symfile_objfile)
                {
                  (*objfile->sf->sym_new_init) (objfile);
-#ifdef HPUXHPPA
-                 RESET_HP_UX_GLOBALS ();
-#endif
                }
 
              (*objfile->sf->sym_init) (objfile);
@@ -2023,7 +2090,7 @@ reread_symbols (void)
              if (!have_partial_symbols () && !have_full_symbols ())
                {
                  wrap_here ("");
-                 printf_unfiltered ("(no debugging symbols found)\n");
+                 printf_unfiltered (_("(no debugging symbols found)\n"));
                  wrap_here ("");
                }
              objfile->flags |= OBJF_SYMS;
@@ -2050,7 +2117,13 @@ reread_symbols (void)
     }
 
   if (reread_one)
-    clear_symtab_users ();
+    {
+      clear_symtab_users ();
+      /* At least one objfile has changed, so we can consider that
+         the executable we're debugging has changed too.  */
+      observer_notify_executable_changed (NULL);
+    }
+      
 }
 
 
@@ -2148,9 +2221,17 @@ add_filename_language (char *ext, enum language lang)
 }
 
 static char *ext_args;
+static void
+show_ext_args (struct ui_file *file, int from_tty,
+              struct cmd_list_element *c, const char *value)
+{
+  fprintf_filtered (file, _("\
+Mapping between filename extension and source language is \"%s\".\n"),
+                   value);
+}
 
 static void
-set_ext_lang_command (char *args, int from_tty)
+set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
 {
   int i;
   char *cp = ext_args;
@@ -2158,14 +2239,14 @@ set_ext_lang_command (char *args, int from_tty)
 
   /* First arg is filename extension, starting with '.' */
   if (*cp != '.')
-    error ("'%s': Filename extension must begin with '.'", ext_args);
+    error (_("'%s': Filename extension must begin with '.'"), ext_args);
 
   /* Find end of first arg.  */
   while (*cp && !isspace (*cp))
     cp++;
 
   if (*cp == '\0')
-    error ("'%s': two arguments required -- filename extension and language",
+    error (_("'%s': two arguments required -- filename extension and language"),
           ext_args);
 
   /* Null-terminate first arg */
@@ -2176,7 +2257,7 @@ set_ext_lang_command (char *args, int from_tty)
     cp++;
 
   if (*cp == '\0')
-    error ("'%s': two arguments required -- filename extension and language",
+    error (_("'%s': two arguments required -- filename extension and language"),
           ext_args);
 
   /* Lookup the language from among those we know.  */
@@ -2211,7 +2292,7 @@ info_ext_lang_command (char *args, int from_tty)
 {
   int i;
 
-  printf_filtered ("Filename extensions and the languages they represent:");
+  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",
@@ -2245,6 +2326,10 @@ init_filename_language_table (void)
       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);
     }
 }
 
@@ -2385,15 +2470,19 @@ clear_symtab_users (void)
 {
   /* Someday, we should do better than this, by only blowing away
      the things that really need to be blown.  */
+
+  /* Clear the "current" symtab first, because it is no longer valid.
+     breakpoint_re_set may try to access the current symtab.  */
+  clear_current_source_symtab_and_line ();
+
   clear_value_history ();
   clear_displays ();
   clear_internalvars ();
   breakpoint_re_set ();
   set_default_breakpoint (0, 0, 0, 0);
-  clear_current_source_symtab_and_line ();
   clear_pc_function_cache ();
-  if (target_new_objfile_hook)
-    target_new_objfile_hook (NULL);
+  if (deprecated_target_new_objfile_hook)
+    deprecated_target_new_objfile_hook (NULL);
 }
 
 static void
@@ -2576,17 +2665,15 @@ again2:
          || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
          || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
        {
-         complaint (&symfile_complaints, "Replacing old symbols for `%s'",
+         complaint (&symfile_complaints, _("Replacing old symbols for `%s'"),
                     name);
          clear_symtab_users_queued++;
          make_cleanup (clear_symtab_users_once, 0);
          blewit = 1;
        }
       else
-       {
-         complaint (&symfile_complaints, "Empty symbol table found for `%s'",
-                    name);
-       }
+       complaint (&symfile_complaints, _("Empty symbol table found for `%s'"),
+                  name);
 
       free_symtab (s);
     }
@@ -2771,11 +2858,11 @@ init_psymbol_list (struct objfile *objfile, int total_symbols)
 
   if (objfile->global_psymbols.list)
     {
-      xmfree (objfile->md, objfile->global_psymbols.list);
+      xfree (objfile->global_psymbols.list);
     }
   if (objfile->static_psymbols.list)
     {
-      xmfree (objfile->md, objfile->static_psymbols.list);
+      xfree (objfile->static_psymbols.list);
     }
 
   /* Current best guess is that approximately a twentieth
@@ -2789,15 +2876,15 @@ init_psymbol_list (struct objfile *objfile, int total_symbols)
     {
       objfile->global_psymbols.next =
        objfile->global_psymbols.list = (struct partial_symbol **)
-       xmmalloc (objfile->md, (objfile->global_psymbols.size
-                               * sizeof (struct partial_symbol *)));
+       xmalloc ((objfile->global_psymbols.size
+                 * sizeof (struct partial_symbol *)));
     }
   if (objfile->static_psymbols.size > 0)
     {
       objfile->static_psymbols.next =
        objfile->static_psymbols.list = (struct partial_symbol **)
-       xmmalloc (objfile->md, (objfile->static_psymbols.size
-                               * sizeof (struct partial_symbol *)));
+       xmalloc ((objfile->static_psymbols.size
+                 * sizeof (struct partial_symbol *)));
     }
 }
 
@@ -2961,7 +3048,7 @@ pc_in_unmapped_range (CORE_ADDR pc, asection *section)
   if (overlay_debugging)
     if (section && section_is_overlay (section))
       {
-       size = bfd_get_section_size_before_reloc (section);
+       size = bfd_get_section_size (section);
        if (section->lma <= pc && pc < section->lma + size)
          return 1;
       }
@@ -2981,7 +3068,7 @@ pc_in_mapped_range (CORE_ADDR pc, asection *section)
   if (overlay_debugging)
     if (section && section_is_overlay (section))
       {
-       size = bfd_get_section_size_before_reloc (section);
+       size = bfd_get_section_size (section);
        if (section->vma <= pc && pc < section->vma + size)
          return 1;
       }
@@ -2997,9 +3084,9 @@ sections_overlap (asection *a, asection *b)
   /* FIXME: need bfd *, so we can use bfd_section_vma methods. */
 
   CORE_ADDR a_start = a->vma;
-  CORE_ADDR a_end = a->vma + bfd_get_section_size_before_reloc (a);
+  CORE_ADDR a_end = a->vma + bfd_get_section_size (a);
   CORE_ADDR b_start = b->vma;
-  CORE_ADDR b_end = b->vma + bfd_get_section_size_before_reloc (b);
+  CORE_ADDR b_end = b->vma + bfd_get_section_size (b);
 
   return (a_start < b_end && b_start < a_end);
 }
@@ -3134,23 +3221,23 @@ list_overlays_command (char *args, int from_tty)
 
        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_before_reloc (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);
-       print_address_numeric (lma, 1, gdb_stdout);
+       deprecated_print_address_numeric (lma, 1, gdb_stdout);
        puts_filtered (" - ");
-       print_address_numeric (lma + size, 1, gdb_stdout);
+       deprecated_print_address_numeric (lma + size, 1, gdb_stdout);
        printf_filtered (", mapped at ");
-       print_address_numeric (vma, 1, gdb_stdout);
+       deprecated_print_address_numeric (vma, 1, gdb_stdout);
        puts_filtered (" - ");
-       print_address_numeric (vma + size, 1, gdb_stdout);
+       deprecated_print_address_numeric (vma + size, 1, gdb_stdout);
        puts_filtered ("\n");
 
        nmapped++;
       }
   if (nmapped == 0)
-    printf_filtered ("No sections are mapped.\n");
+    printf_filtered (_("No sections are mapped.\n"));
 }
 
 /* Function: map_overlay_command
@@ -3164,12 +3251,12 @@ map_overlay_command (char *args, int from_tty)
   asection *bfdsec;
 
   if (!overlay_debugging)
-    error ("\
+    error (_("\
 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
-the 'overlay manual' command.");
+the 'overlay manual' command."));
 
   if (args == 0 || *args == 0)
-    error ("Argument required: name of an overlay section");
+    error (_("Argument required: name of an overlay section"));
 
   /* First, find a section matching the user supplied argument */
   ALL_OBJSECTIONS (objfile, sec)
@@ -3193,14 +3280,14 @@ the 'overlay manual' command.");
                                  sec2->the_bfd_section))
        {
          if (info_verbose)
-           printf_unfiltered ("Note: section %s unmapped by overlap\n",
+           printf_unfiltered (_("Note: section %s unmapped by overlap\n"),
                             bfd_section_name (objfile->obfd,
                                               sec2->the_bfd_section));
          sec2->ovly_mapped = 0;        /* sec2 overlaps sec: unmap sec2 */
        }
       return;
     }
-  error ("No overlay section called %s", args);
+  error (_("No overlay section called %s"), args);
 }
 
 /* Function: unmap_overlay_command
@@ -3214,23 +3301,23 @@ unmap_overlay_command (char *args, int from_tty)
   struct obj_section *sec;
 
   if (!overlay_debugging)
-    error ("\
+    error (_("\
 Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
-the 'overlay manual' command.");
+the 'overlay manual' command."));
 
   if (args == 0 || *args == 0)
-    error ("Argument required: name of an overlay section");
+    error (_("Argument required: name of an overlay section"));
 
   /* First, find a section matching the user supplied argument */
   ALL_OBJSECTIONS (objfile, sec)
     if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
     {
       if (!sec->ovly_mapped)
-       error ("Section %s is not mapped", args);
+       error (_("Section %s is not mapped"), args);
       sec->ovly_mapped = 0;
       return;
     }
-  error ("No overlay section called %s", args);
+  error (_("No overlay section called %s"), args);
 }
 
 /* Function: overlay_auto_command
@@ -3243,7 +3330,7 @@ overlay_auto_command (char *args, int from_tty)
   overlay_debugging = ovly_auto;
   enable_overlay_breakpoints ();
   if (info_verbose)
-    printf_unfiltered ("Automatic overlay debugging enabled.");
+    printf_unfiltered (_("Automatic overlay debugging enabled."));
 }
 
 /* Function: overlay_manual_command
@@ -3256,7 +3343,7 @@ overlay_manual_command (char *args, int from_tty)
   overlay_debugging = ovly_on;
   disable_overlay_breakpoints ();
   if (info_verbose)
-    printf_unfiltered ("Overlay debugging enabled.");
+    printf_unfiltered (_("Overlay debugging enabled."));
 }
 
 /* Function: overlay_off_command
@@ -3269,7 +3356,7 @@ overlay_off_command (char *args, int from_tty)
   overlay_debugging = ovly_off;
   disable_overlay_breakpoints ();
   if (info_verbose)
-    printf_unfiltered ("Overlay debugging disabled.");
+    printf_unfiltered (_("Overlay debugging disabled."));
 }
 
 static void
@@ -3278,7 +3365,7 @@ overlay_load_command (char *args, int from_tty)
   if (target_overlay_update)
     (*target_overlay_update) (NULL);
   else
-    error ("This target does not know how to read its overlay state.");
+    error (_("This target does not know how to read its overlay state."));
 }
 
 /* Function: overlay_command
@@ -3399,18 +3486,18 @@ simple_read_overlay_table (void)
   novlys_msym = lookup_minimal_symbol ("_novlys", NULL, NULL);
   if (! novlys_msym)
     {
-      error ("Error reading inferior's overlay table: "
+      error (_("Error reading inferior's overlay table: "
              "couldn't find `_novlys' variable\n"
-             "in inferior.  Use `overlay manual' mode.");
+             "in inferior.  Use `overlay manual' mode."));
       return 0;
     }
 
   ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
   if (! ovly_table_msym)
     {
-      error ("Error reading inferior's overlay table: couldn't find "
+      error (_("Error reading inferior's overlay table: couldn't find "
              "`_ovly_table' array\n"
-             "in inferior.  Use `overlay manual' mode.");
+             "in inferior.  Use `overlay manual' mode."));
       return 0;
     }
 
@@ -3474,7 +3561,7 @@ simple_overlay_update_1 (struct obj_section *osect)
   bfd *obfd = osect->objfile->obfd;
   asection *bsect = osect->the_bfd_section;
 
-  size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
+  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)
@@ -3535,7 +3622,7 @@ simple_overlay_update (struct obj_section *osect)
       bfd *obfd = osect->objfile->obfd;
       asection *bsect = osect->the_bfd_section;
 
-      size = bfd_get_section_size_before_reloc (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)
@@ -3592,108 +3679,104 @@ _initialize_symfile (void)
 {
   struct cmd_list_element *c;
 
-  c = add_cmd ("symbol-file", class_files, symbol_file_command,
-              "Load symbol table from executable file FILE.\n\
+  c = add_cmd ("symbol-file", class_files, symbol_file_command, _("\
+Load symbol table from executable file FILE.\n\
 The `file' command can also load symbol tables, as well as setting the file\n\
-to execute.", &cmdlist);
+to execute."), &cmdlist);
   set_cmd_completer (c, filename_completer);
 
-  c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
-              "Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
+  c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command, _("\
+Usage: add-symbol-file FILE ADDR [-s <SECT> <SECT_ADDR> -s <SECT> <SECT_ADDR> ...]\n\
 Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
 ADDR is the starting address of the file's text.\n\
 The optional arguments are section-name section-address pairs and\n\
 should be specified if the data and bss segments are not contiguous\n\
-with the text.  SECT is a section name to be loaded at SECT_ADDR.",
+with the text.  SECT is a section name to be loaded at SECT_ADDR."),
               &cmdlist);
   set_cmd_completer (c, filename_completer);
 
-  c = add_cmd ("add-symbol-file-from-memory", class_files,
-              add_symbol_file_from_memory_command,
-              "\
-Load the symbols out of memory from a dynamically loaded object file.\n\
-Give an expression for the address of the file's shared object file header.",
-              &cmdlist);
-
   c = add_cmd ("add-shared-symbol-files", class_files,
-              add_shared_symbol_files_command,
-   "Load the symbols from shared objects in the dynamic linker's link map.",
+              add_shared_symbol_files_command, _("\
+Load the symbols from shared objects in the dynamic linker's link map."),
               &cmdlist);
   c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
                     &cmdlist);
 
-  c = add_cmd ("load", class_files, load_command,
-              "Dynamically load FILE into the running program, and record its symbols\n\
-for access from GDB.", &cmdlist);
+  c = add_cmd ("load", class_files, load_command, _("\
+Dynamically load FILE into the running program, and record its symbols\n\
+for access from GDB."), &cmdlist);
   set_cmd_completer (c, filename_completer);
 
-  add_show_from_set
-    (add_set_cmd ("symbol-reloading", class_support, var_boolean,
-                 (char *) &symbol_reloading,
-           "Set dynamic symbol table reloading multiple times in one run.",
-                 &setlist),
-     &showlist);
+  add_setshow_boolean_cmd ("symbol-reloading", class_support,
+                          &symbol_reloading, _("\
+Set dynamic symbol table reloading multiple times in one run."), _("\
+Show dynamic symbol table reloading multiple times in one run."), NULL,
+                          NULL,
+                          show_symbol_reloading,
+                          &setlist, &showlist);
 
   add_prefix_cmd ("overlay", class_support, overlay_command,
-                 "Commands for debugging overlays.", &overlaylist,
+                 _("Commands for debugging overlays."), &overlaylist,
                  "overlay ", 0, &cmdlist);
 
   add_com_alias ("ovly", "overlay", class_alias, 1);
   add_com_alias ("ov", "overlay", class_alias, 1);
 
   add_cmd ("map-overlay", class_support, map_overlay_command,
-          "Assert that an overlay section is mapped.", &overlaylist);
+          _("Assert that an overlay section is mapped."), &overlaylist);
 
   add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
-          "Assert that an overlay section is unmapped.", &overlaylist);
+          _("Assert that an overlay section is unmapped."), &overlaylist);
 
   add_cmd ("list-overlays", class_support, list_overlays_command,
-          "List mappings of overlay sections.", &overlaylist);
+          _("List mappings of overlay sections."), &overlaylist);
 
   add_cmd ("manual", class_support, overlay_manual_command,
-          "Enable overlay debugging.", &overlaylist);
+          _("Enable overlay debugging."), &overlaylist);
   add_cmd ("off", class_support, overlay_off_command,
-          "Disable overlay debugging.", &overlaylist);
+          _("Disable overlay debugging."), &overlaylist);
   add_cmd ("auto", class_support, overlay_auto_command,
-          "Enable automatic overlay debugging.", &overlaylist);
+          _("Enable automatic overlay debugging."), &overlaylist);
   add_cmd ("load-target", class_support, overlay_load_command,
-          "Read the overlay mapping state from the target.", &overlaylist);
+          _("Read the overlay mapping state from the target."), &overlaylist);
 
   /* Filename extension to source language lookup table: */
   init_filename_language_table ();
-  c = add_set_cmd ("extension-language", class_files, var_string_noescape,
-                  (char *) &ext_args,
-                  "Set mapping between filename extension and source language.\n\
-Usage: set extension-language .foo bar",
-                  &setlist);
-  set_cmd_cfunc (c, set_ext_lang_command);
+  add_setshow_string_noescape_cmd ("extension-language", class_files,
+                                  &ext_args, _("\
+Set mapping between filename extension and source language."), _("\
+Show mapping between filename extension and source language."), _("\
+Usage: set extension-language .foo bar"),
+                                  set_ext_lang_command,
+                                  show_ext_args,
+                                  &setlist, &showlist);
 
   add_info ("extensions", info_ext_lang_command,
-           "All filename extensions associated with a source language.");
-
-  add_show_from_set
-    (add_set_cmd ("download-write-size", class_obscure,
-                 var_integer, (char *) &download_write_size,
-                 "Set the write size used when downloading a program.\n"
-                 "Only used when downloading a program onto a remote\n"
-                 "target. Specify zero, or a negative value, to disable\n"
-                 "blocked writes. The actual size of each transfer is also\n"
-                 "limited by the size of the target packet and the memory\n"
-                 "cache.\n",
-                 &setlist),
-     &showlist);
+           _("All filename extensions associated with a source language."));
+
+  add_setshow_integer_cmd ("download-write-size", class_obscure,
+                          &download_write_size, _("\
+Set the write size used when downloading a program."), _("\
+Show the write size used when downloading a program."), _("\
+Only used when downloading a program onto a remote\n\
+target. Specify zero, or a negative value, to disable\n\
+blocked writes. The actual size of each transfer is also\n\
+limited by the size of the target packet and the memory\n\
+cache."),
+                          NULL,
+                          show_download_write_size,
+                          &setlist, &showlist);
 
   debug_file_directory = xstrdup (DEBUGDIR);
-  c = (add_set_cmd
-       ("debug-file-directory", class_support, var_string,
-        (char *) &debug_file_directory,
-        "Set the directory where separate debug symbols are searched for.\n"
-        "Separate debug symbols are first searched for in the same\n"
-        "directory as the binary, then in the `" DEBUG_SUBDIRECTORY
-        "' subdirectory,\n"
-        "and lastly at the path of the directory of the binary with\n"
-        "the global debug-file directory prepended\n",
-        &setlist));
-  add_show_from_set (c, &showlist);
-  set_cmd_completer (c, filename_completer);
+  add_setshow_optional_filename_cmd ("debug-file-directory", class_support,
+                                    &debug_file_directory, _("\
+Set the directory where separate debug symbols are searched for."), _("\
+Show the directory where separate debug symbols are searched for."), _("\
+Separate debug symbols are first searched for in the same\n\
+directory as the binary, then in the `" DEBUG_SUBDIRECTORY "' subdirectory,\n\
+and lastly at the path of the directory of the binary with\n\
+the global debug-file directory prepended."),
+                                    NULL,
+                                    show_debug_file_directory,
+                                    &setlist, &showlist);
 }
This page took 0.043418 seconds and 4 git commands to generate.