Fix wrong prefix in py-breakpoint.exp
[deliverable/binutils-gdb.git] / gdb / symfile.c
index 1c9f836eb31f9d985848c4adbdbd9ca58f18573c..5a1447d9d51e517c055495d4dd2acc9da22e9593 100644 (file)
@@ -81,6 +81,7 @@ static void clear_symtab_users_cleanup (void *ignore);
 
 /* Global variables owned by this file.  */
 int readnow_symbol_files;      /* Read full symbols immediately.  */
+int readnever_symbol_files;    /* Never read full symbols.  */
 
 /* Functions this file defines.  */
 
@@ -1131,6 +1132,12 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
       flags |= OBJF_READNOW;
       add_flags &= ~SYMFILE_NO_READ;
     }
+  else if (readnever_symbol_files
+          || (parent != NULL && (parent->flags & OBJF_READNEVER)))
+    {
+      flags |= OBJF_READNEVER;
+      add_flags |= SYMFILE_NO_READ;
+    }
 
   /* Give user a chance to burp if we'd be
      interactively wiping out any existing symbols.  */
@@ -1594,6 +1601,16 @@ find_separate_debug_file_by_debuglink (struct objfile *objfile)
   return debugfile;
 }
 
+/* Make sure that OBJF_{READNOW,READNEVER} are not set
+   simultaneously.  */
+
+static void
+validate_readnow_readnever (objfile_flags flags)
+{
+  if ((flags & OBJF_READNOW) && (flags & OBJF_READNEVER))
+    error (_("-readnow and -readnever cannot be used simultaneously"));
+}
+
 /* This is the symbol-file command.  Read the file, analyze its
    symbols, and add a struct symtab to a symtab list.  The syntax of
    the command is rather bizarre:
@@ -1641,6 +1658,8 @@ symbol_file_command (const char *args, int from_tty)
            }
          else if (strcmp (arg, "-readnow") == 0)
            flags |= OBJF_READNOW;
+         else if (strcmp (arg, "-readnever") == 0)
+           flags |= OBJF_READNEVER;
          else if (strcmp (arg, "--") == 0)
            stop_processing_options = true;
          else
@@ -1650,6 +1669,8 @@ symbol_file_command (const char *args, int from_tty)
       if (name == NULL)
        error (_("no symbol file name was specified"));
 
+      validate_readnow_readnever (flags);
+
       symbol_file_add_main_1 (name, add_flags, flags);
     }
 }
@@ -2236,6 +2257,8 @@ add_symbol_file_command (const char *args, int from_tty)
        }
       else if (strcmp (arg, "-readnow") == 0)
        flags |= OBJF_READNOW;
+      else if (strcmp (arg, "-readnever") == 0)
+       flags |= OBJF_READNEVER;
       else if (strcmp (arg, "-s") == 0)
        {
          if (argv[argcnt + 1] == NULL)
@@ -2257,6 +2280,8 @@ add_symbol_file_command (const char *args, int from_tty)
   if (filename == NULL)
     error (_("You must provide a filename to be loaded."));
 
+  validate_readnow_readnever (flags);
+
   /* This command takes at least two arguments.  The first one is a
      filename, and the second is the address where this file has been
      loaded.  Abort now if this address hasn't been provided by the
@@ -2954,7 +2979,6 @@ section_is_overlay (struct obj_section *section)
 {
   if (overlay_debugging && section)
     {
-      bfd *abfd = section->objfile->obfd;
       asection *bfd_section = section->the_bfd_section;
 
       if (bfd_section_lma (abfd, bfd_section) != 0
@@ -3084,7 +3108,6 @@ overlay_unmapped_address (CORE_ADDR pc, struct obj_section *section)
 {
   if (section_is_overlay (section) && pc_in_mapped_range (pc, section))
     {
-      bfd *abfd = section->objfile->obfd;
       asection *bfd_section = section->the_bfd_section;
 
       return pc + bfd_section_lma (abfd, bfd_section)
@@ -3103,7 +3126,6 @@ overlay_mapped_address (CORE_ADDR pc, struct obj_section *section)
 {
   if (section_is_overlay (section) && pc_in_unmapped_range (pc, section))
     {
-      bfd *abfd = section->objfile->obfd;
       asection *bfd_section = section->the_bfd_section;
 
       return pc + bfd_section_vma (abfd, bfd_section)
@@ -3501,7 +3523,6 @@ static int
 simple_overlay_update_1 (struct obj_section *osect)
 {
   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;
@@ -3574,7 +3595,6 @@ simple_overlay_update (struct obj_section *osect)
     if (section_is_overlay (osect))
     {
       int i;
-      bfd *obfd = osect->objfile->obfd;
       asection *bsect = osect->the_bfd_section;
 
       for (i = 0; i < cache_novlys; i++)
@@ -3882,26 +3902,29 @@ _initialize_symfile (void)
 
   observer_attach_free_objfile (symfile_free_objfile);
 
-#define READNOW_HELP \
+#define READNOW_READNEVER_HELP \
   "The '-readnow' option will cause GDB to read the entire symbol file\n\
 immediately.  This makes the command slower, but may make future operations\n\
-faster."
+faster.\n\
+The '-readnever' option will prevent GDB from reading the symbol file's\n\
+symbolic debug information."
 
   c = add_cmd ("symbol-file", class_files, symbol_file_command, _("\
 Load symbol table from executable file FILE.\n\
-Usage: symbol-file [-readnow] FILE\n\
+Usage: symbol-file [-readnow | -readnever] FILE\n\
 The `file' command can also load symbol tables, as well as setting the file\n\
-to execute.\n" READNOW_HELP), &cmdlist);
+to execute.\n" READNOW_READNEVER_HELP), &cmdlist);
   set_cmd_completer (c, filename_completer);
 
   c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command, _("\
 Load symbols from FILE, assuming FILE has been dynamically loaded.\n\
-Usage: add-symbol-file FILE ADDR [-readnow | -s SECT-NAME SECT-ADDR]...\n\
+Usage: add-symbol-file FILE ADDR [-readnow | -readnever | \
+-s SECT-NAME SECT-ADDR]...\n\
 ADDR is the starting address of the file's text.\n\
 Each '-s' argument provides a section name and address, and\n\
 should be specified if the data and bss segments are not contiguous\n\
 with the text.  SECT-NAME is a section name to be loaded at SECT-ADDR.\n"
-READNOW_HELP),
+READNOW_READNEVER_HELP),
               &cmdlist);
   set_cmd_completer (c, filename_completer);
 
This page took 0.042566 seconds and 4 git commands to generate.