OSDN Git Service

* frame.c (create_new_frame): Update the frame's cached PC before
authorpalves <palves>
Mon, 26 Jan 2009 19:09:58 +0000 (19:09 +0000)
committerpalves <palves>
Mon, 26 Jan 2009 19:09:58 +0000 (19:09 +0000)
finding its unwinder.  Use frame_id_build to build the new frame's
id.
* stack.c (parse_frame_specification_1): Correct setting ``addrs''
array values from the ``args'' array values.

gdb/ChangeLog
gdb/frame.c
gdb/stack.c

index 032afd8..4743846 100644 (file)
@@ -1,5 +1,13 @@
 2009-01-26  Pedro Alves  <pedro@codesourcery.com>
 
+       * frame.c (create_new_frame): Update the frame's cached PC before
+       finding its unwinder.  Use frame_id_build to build the new frame's
+       id.
+       * stack.c (parse_frame_specification_1): Correct setting ``addrs''
+       array values from the ``args'' array values.
+
+2009-01-26  Pedro Alves  <pedro@codesourcery.com>
+
        * gdbtypes.c (alloc_type, alloc_type_instance, create_range_type)
        (create_array_type, create_set_type, init_flags_type)
        (copy_type_recursive): Replace pairs of calls to XALLOC and memset
index 7afb70f..7f67d2e 100644 (file)
@@ -1106,17 +1106,19 @@ create_new_frame (CORE_ADDR addr, CORE_ADDR pc)
 
   fi->next = create_sentinel_frame (get_current_regcache ());
 
+  /* Set/update this frame's cached PC value, found in the next frame.
+     Do this before looking for this frame's unwinder.  A sniffer is
+     very likely to read this, and the corresponding unwinder is
+     entitled to rely that the PC doesn't magically change.  */
+  fi->next->prev_pc.value = pc;
+  fi->next->prev_pc.p = 1;
+
   /* Select/initialize both the unwind function and the frame's type
      based on the PC.  */
   fi->unwind = frame_unwind_find_by_frame (fi, &fi->prologue_cache);
 
   fi->this_id.p = 1;
-  fi->this_id.value.stack_addr = addr;
-  /* While we're at it, update this frame's cached PC value, found
-     in the next frame.  Oh for the day when "struct frame_info"
-     is opaque and this hack on hack can just go away.  */
-  fi->next->prev_pc.value = pc;
-  fi->next->prev_pc.p = 1;
+  fi->this_id.value = frame_id_build (addr, pc);
 
   if (frame_debug)
     {
index c2b94f3..a1a7696 100644 (file)
@@ -832,7 +832,7 @@ parse_frame_specification_1 (const char *frame_exp, const char *message,
   {
     int i;
     for (i = 0; i < numargs; i++)
-      addrs[i] = value_as_address (args[0]);
+      addrs[i] = value_as_address (args[i]);
   }
 
   /* Assume that the single arg[0] is an address, use that to identify