OSDN Git Service

* infcmd.c (post_create_inferior): Ignore NOT_AVAILABLE_ERROR
authorpalves <palves>
Tue, 22 Mar 2011 14:39:38 +0000 (14:39 +0000)
committerpalves <palves>
Tue, 22 Mar 2011 14:39:38 +0000 (14:39 +0000)
errors when reading the `stop_pc'.
* printcmd.c (pc_prefix): Use get_frame_pc_if_available instead of
get_frame_pc.

gdb/ChangeLog
gdb/infcmd.c
gdb/printcmd.c

index 9e4c43a..98d6456 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-22  Pedro Alves  <pedro@codesourcery.com>
+
+       * infcmd.c (post_create_inferior): Ignore NOT_AVAILABLE_ERROR
+       errors when reading the `stop_pc'.
+       * printcmd.c (pc_prefix): Use get_frame_pc_if_available instead of
+       get_frame_pc.
+
 2011-03-22  Phil Muldoon  <pmuldoon@redhat.com>
 
        * NEWS: Document gdb.Write stream keyword.
index 8a85915..3dc13e3 100644 (file)
@@ -395,6 +395,8 @@ strip_bg_char (char **args)
 void
 post_create_inferior (struct target_ops *target, int from_tty)
 {
+  volatile struct gdb_exception ex;
+
   /* Be sure we own the terminal in case write operations are performed.  */ 
   target_terminal_ours ();
 
@@ -404,8 +406,16 @@ post_create_inferior (struct target_ops *target, int from_tty)
      don't need to.  */
   target_find_description ();
 
-  /* Now that we know the register layout, retrieve current PC.  */
-  stop_pc = regcache_read_pc (get_current_regcache ());
+  /* Now that we know the register layout, retrieve current PC.  But
+     if the PC is unavailable (e.g., we're opening a core file with
+     missing registers info), ignore it.  */
+  stop_pc = 0;
+  TRY_CATCH (ex, RETURN_MASK_ERROR)
+    {
+      stop_pc = regcache_read_pc (get_current_regcache ());
+    }
+  if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
+    throw_exception (ex);
 
   if (exec_bfd)
     {
index 81360ad..f1ebb7e 100644 (file)
@@ -759,9 +759,7 @@ pc_prefix (CORE_ADDR addr)
       CORE_ADDR pc;
 
       frame = get_selected_frame (NULL);
-      pc = get_frame_pc (frame);
-
-      if (pc == addr)
+      if (get_frame_pc_if_available (frame, &pc) && pc == addr)
        return "=> ";
     }
   return "   ";