Fri Sep 4 13:57:43 1998 Jakub Jelinek <jj@sunsite.ms.mff.cuni.cz>
[deliverable/binutils-gdb.git] / gdb / objfiles.c
index 65732936ec6f78081381d900089f582c5435ae1c..8a64b6461a448d049f5dcc824679b6a273bc7028 100644 (file)
@@ -37,7 +37,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Prototypes for local functions */
 
-#if !defined(NO_MMALLOC) && defined(HAVE_MMAP)
+#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
 
 static int
 open_existing_mapped_file PARAMS ((char *, long, int));
@@ -48,7 +48,7 @@ open_mapped_file PARAMS ((char *filename, long mtime, int mapped));
 static PTR
 map_to_file PARAMS ((int));
 
-#endif  /* !defined(NO_MMALLOC) && defined(HAVE_MMAP) */
+#endif  /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
 
 static void
 add_to_objfile_sections PARAMS ((bfd *, sec_ptr, PTR));
@@ -67,6 +67,10 @@ int mapped_symbol_files;             /* Try to use mapped symbol files */
    objfile_p_char is a char * to get it through
    bfd_map_over_sections; we cast it back to its proper type.  */
 
+#ifndef TARGET_KEEP_SECTION
+#define TARGET_KEEP_SECTION(ASECT)     0
+#endif
+
 static void
 add_to_objfile_sections (abfd, asect, objfile_p_char)
      bfd *abfd;
@@ -78,8 +82,10 @@ add_to_objfile_sections (abfd, asect, objfile_p_char)
   flagword aflag;
 
   aflag = bfd_get_section_flags (abfd, asect);
-  if (!(aflag & SEC_ALLOC))
+
+  if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION(asect)))
     return;
+
   if (0 == bfd_section_size (abfd, asect))
     return;
   section.offset = 0;
@@ -129,7 +135,8 @@ allocate_objfile (abfd, mapped)
 
   mapped |= mapped_symbol_files;
 
-#if !defined(NO_MMALLOC) && defined(HAVE_MMAP)
+#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
+  if (abfd != NULL)
   {
 
     /* If we can support mapped symbol files, try to open/reopen the
@@ -211,7 +218,7 @@ allocate_objfile (abfd, mapped)
                 bfd_get_filename (abfd));
       }
   }
-#else  /* defined(NO_MMALLOC) || !defined(HAVE_MMAP) */
+#else  /* !defined(USE_MMALLOC) || !defined(HAVE_MMAP) */
 
   if (mapped)
     {
@@ -224,7 +231,7 @@ allocate_objfile (abfd, mapped)
       mapped_symbol_files = 0;
     }
 
-#endif /* !defined(NO_MMALLOC) && defined(HAVE_MMAP) */
+#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
 
   /* If we don't support mapped symbol files, didn't ask for the file to be
      mapped, or failed to open the mapped file for some reason, then revert
@@ -254,15 +261,18 @@ allocate_objfile (abfd, mapped)
     {
       mfree (objfile -> md, objfile -> name);
     }
-  objfile -> name = mstrsave (objfile -> md, bfd_get_filename (abfd));
-  objfile -> mtime = bfd_get_mtime (abfd);
+  if (abfd != NULL)
+    {
+      objfile -> name = mstrsave (objfile -> md, bfd_get_filename (abfd));
+      objfile -> mtime = bfd_get_mtime (abfd);
 
-  /* Build section table.  */
+      /* Build section table.  */
 
-  if (build_objfile_section_table (objfile))
-    {
-      error ("Can't find the file sections in `%s': %s", 
-            objfile -> name, bfd_errmsg (bfd_get_error ()));
+      if (build_objfile_section_table (objfile))
+       {
+         error ("Can't find the file sections in `%s': %s", 
+                objfile -> name, bfd_errmsg (bfd_get_error ()));
+       }
     }
 
   /* Add this file onto the tail of the linked list of other such files. */
@@ -412,7 +422,7 @@ free_objfile (objfile)
      case.  Note that the mmalloc_detach or the mfree is the last thing
      we can do with this objfile. */
 
-#if !defined(NO_MMALLOC) && defined(HAVE_MMAP)
+#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
 
   if (objfile -> flags & OBJF_MAPPED)
     {
@@ -426,7 +436,7 @@ free_objfile (objfile)
       close (mmfd);
     }
 
-#endif /* !defined(NO_MMALLOC) && defined(HAVE_MMAP) */
+#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
 
   /* If we still have an objfile, then either we don't support reusable
      objfiles or this one was not reusable.  So free it normally. */
@@ -626,7 +636,7 @@ objfile_relocate (objfile, new_offsets)
       }
   }
 
-  if (objfile->ei.entry_point != ~0)
+  if (objfile->ei.entry_point != ~(CORE_ADDR)0)
     objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT);
 
   if (objfile->ei.entry_func_lowpc != INVALID_ENTRY_LOWPC)
@@ -646,6 +656,9 @@ objfile_relocate (objfile, new_offsets)
       objfile->ei.main_func_lowpc  += ANOFFSET (delta, SECT_OFF_TEXT);
       objfile->ei.main_func_highpc += ANOFFSET (delta, SECT_OFF_TEXT);
     }
+
+  /* Relocate breakpoints as necessary, after things are relocated. */
+  breakpoint_re_set ();
 }
 \f
 /* Many places in gdb want to test just to see if we have any partial
@@ -705,7 +718,7 @@ have_minimal_symbols ()
   return 0;
 }
 
-#if !defined(NO_MMALLOC) && defined(HAVE_MMAP)
+#if defined(USE_MMALLOC) && defined(HAVE_MMAP)
 
 /* Given the name of a mapped symbol file in SYMSFILENAME, and the timestamp
    of the corresponding symbol file in MTIME, try to open an existing file
@@ -872,7 +885,7 @@ map_to_file (fd)
   return (md);
 }
 
-#endif /* !defined(NO_MMALLOC) && defined(HAVE_MMAP) */
+#endif /* defined(USE_MMALLOC) && defined(HAVE_MMAP) */
 
 /* Returns a section whose range includes PC and SECTION, 
    or NULL if none found.  Note the distinction between the return type, 
This page took 0.025002 seconds and 4 git commands to generate.