[Ada] Add a symbol lookup cache
[deliverable/binutils-gdb.git] / gdb / corelow.c
index 46da88106742a6ba1436c14c5178674cd03c6c61..5f1e55faedd41da20110cd153418713f523796b5 100644 (file)
@@ -1,6 +1,6 @@
 /* Core dump and executable file functions below target vector, for GDB.
 
-   Copyright (C) 1986-2013 Free Software Foundation, Inc.
+   Copyright (C) 1986-2014 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,7 +19,7 @@
 
 #include "defs.h"
 #include "arch-utils.h"
-#include "gdb_string.h"
+#include <string.h>
 #include <errno.h>
 #include <signal.h>
 #include <fcntl.h>
@@ -67,7 +67,7 @@ static struct core_fns *core_vec = NULL;
 /* FIXME: kettenis/20031023: Eventually this variable should
    disappear.  */
 
-struct gdbarch *core_gdbarch = NULL;
+static struct gdbarch *core_gdbarch = NULL;
 
 /* Per-core data.  Currently, only the section table.  Note that these
    target sections are *not* mapped in the current address spaces' set
@@ -85,8 +85,6 @@ static int gdb_check_format (bfd *);
 
 static void core_open (char *, int);
 
-static void core_detach (struct target_ops *ops, char *, int);
-
 static void core_close (void);
 
 static void core_close_cleanup (void *ignore);
@@ -350,7 +348,7 @@ core_open (char *filename, int from_tty)
 
   validate_files ();
 
-  core_data = XZALLOC (struct target_section_table);
+  core_data = XCNEW (struct target_section_table);
 
   /* Find the data section */
   if (build_section_table (core_bfd,
@@ -429,6 +427,9 @@ core_open (char *filename, int from_tty)
   if (p)
     printf_filtered (_("Core was generated by `%s'.\n"), p);
 
+  /* Clearing any previous state of convenience variables.  */
+  clear_exit_convenience_vars ();
+
   siggy = bfd_core_file_failing_signal (core_bfd);
   if (siggy > 0)
     {
@@ -444,8 +445,13 @@ core_open (char *filename, int from_tty)
                                                               siggy)
                             : gdb_signal_from_host (siggy));
 
-      printf_filtered (_("Program terminated with signal %d, %s.\n"),
-                      siggy, gdb_signal_to_string (sig));
+      printf_filtered (_("Program terminated with signal %s, %s.\n"),
+                      gdb_signal_to_name (sig), gdb_signal_to_string (sig));
+
+      /* Set the value of the internal variable $_exitsignal,
+        which holds the signal uncaught by the inferior.  */
+      set_internalvar_integer (lookup_internalvar ("_exitsignal"),
+                              siggy);
     }
 
   /* Fetch all registers from core file.  */
@@ -453,11 +459,11 @@ core_open (char *filename, int from_tty)
 
   /* Now, set up the frame cache, and print the top of stack.  */
   reinit_frame_cache ();
-  print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
+  print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
 }
 
 static void
-core_detach (struct target_ops *ops, char *args, int from_tty)
+core_detach (struct target_ops *ops, const char *args, int from_tty)
 {
   if (args)
     error (_("Too many arguments"));
@@ -467,24 +473,6 @@ core_detach (struct target_ops *ops, char *args, int from_tty)
     printf_filtered (_("No core file now.\n"));
 }
 
-#ifdef DEPRECATED_IBM6000_TARGET
-
-/* Resize the core memory's section table, by NUM_ADDED.  Returns a
-   pointer into the first new slot.  This will not be necessary when
-   the rs6000 target is converted to use the standard solib
-   framework.  */
-
-struct target_section *
-deprecated_core_resize_section_table (int num_added)
-{
-  int old_count;
-
-  old_count = resize_section_table (core_data, num_added);
-  return core_data->sections + old_count;
-}
-
-#endif
-
 /* Try to retrieve registers from a section in core_bfd, and supply
    them to core_vec->core_read_registers, as the register set numbered
    WHICH.
@@ -661,7 +649,7 @@ add_to_spuid_list (bfd *abfd, asection *asect, void *list_p)
    the to_xfer_partial interface.  */
 
 static LONGEST
-get_core_siginfo (bfd *abfd, gdb_byte *readbuf, ULONGEST offset, LONGEST len)
+get_core_siginfo (bfd *abfd, gdb_byte *readbuf, ULONGEST offset, ULONGEST len)
 {
   asection *section;
   char *section_name;
@@ -688,7 +676,7 @@ static LONGEST
 core_xfer_partial (struct target_ops *ops, enum target_object object,
                   const char *annex, gdb_byte *readbuf,
                   const gdb_byte *writebuf, ULONGEST offset,
-                  LONGEST len)
+                  ULONGEST len)
 {
   switch (object)
     {
@@ -710,7 +698,7 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
 
          section = bfd_get_section_by_name (core_bfd, ".auxv");
          if (section == NULL)
-           return -1;
+           return TARGET_XFER_E_IO;
 
          size = bfd_section_size (core_bfd, section);
          if (offset >= size)
@@ -723,12 +711,12 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
                                            (file_ptr) offset, size))
            {
              warning (_("Couldn't read NT_AUXV note in core file."));
-             return -1;
+             return TARGET_XFER_E_IO;
            }
 
          return size;
        }
-      return -1;
+      return TARGET_XFER_E_IO;
 
     case TARGET_OBJECT_WCOOKIE:
       if (readbuf)
@@ -742,7 +730,7 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
 
          section = bfd_get_section_by_name (core_bfd, ".wcookie");
          if (section == NULL)
-           return -1;
+           return TARGET_XFER_E_IO;
 
          size = bfd_section_size (core_bfd, section);
          if (offset >= size)
@@ -755,25 +743,37 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
                                            (file_ptr) offset, size))
            {
              warning (_("Couldn't read StackGhost cookie in core file."));
-             return -1;
+             return TARGET_XFER_E_IO;
            }
 
          return size;
        }
-      return -1;
+      return TARGET_XFER_E_IO;
 
     case TARGET_OBJECT_LIBRARIES:
       if (core_gdbarch
          && gdbarch_core_xfer_shared_libraries_p (core_gdbarch))
        {
          if (writebuf)
-           return -1;
+           return TARGET_XFER_E_IO;
          return
            gdbarch_core_xfer_shared_libraries (core_gdbarch,
                                                readbuf, offset, len);
        }
       /* FALL THROUGH */
 
+    case TARGET_OBJECT_LIBRARIES_AIX:
+      if (core_gdbarch
+         && gdbarch_core_xfer_shared_libraries_aix_p (core_gdbarch))
+       {
+         if (writebuf)
+           return TARGET_XFER_E_IO;
+         return
+           gdbarch_core_xfer_shared_libraries_aix (core_gdbarch,
+                                                   readbuf, offset, len);
+       }
+      /* FALL THROUGH */
+
     case TARGET_OBJECT_SPU:
       if (readbuf && annex)
        {
@@ -789,7 +789,7 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
 
          section = bfd_get_section_by_name (core_bfd, sectionstr);
          if (section == NULL)
-           return -1;
+           return TARGET_XFER_E_IO;
 
          size = bfd_section_size (core_bfd, section);
          if (offset >= size)
@@ -802,7 +802,7 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
                                            (file_ptr) offset, size))
            {
              warning (_("Couldn't read SPU section in core file."));
-             return -1;
+             return TARGET_XFER_E_IO;
            }
 
          return size;
@@ -820,19 +820,19 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
          bfd_map_over_sections (core_bfd, add_to_spuid_list, &list);
          return list.written;
        }
-      return -1;
+      return TARGET_XFER_E_IO;
 
     case TARGET_OBJECT_SIGNAL_INFO:
       if (readbuf)
        return get_core_siginfo (core_bfd, readbuf, offset, len);
-      return -1;
+      return TARGET_XFER_E_IO;
 
     default:
       if (ops->beneath != NULL)
        return ops->beneath->to_xfer_partial (ops->beneath, object,
                                              annex, readbuf,
                                              writebuf, offset, len);
-      return -1;
+      return TARGET_XFER_E_IO;
     }
 }
 
@@ -842,7 +842,8 @@ core_xfer_partial (struct target_ops *ops, enum target_object object,
    breakpoint_init_inferior).  */
 
 static int
-ignore (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
+ignore (struct target_ops *ops, struct gdbarch *gdbarch,
+       struct bp_target_info *bp_tgt)
 {
   return 0;
 }
This page took 0.042008 seconds and 4 git commands to generate.