Minor bug fixes from last big checkin.
[deliverable/binutils-gdb.git] / gdb / stack.c
index f0625e219f495598d1fc65f9f243db1e937ca243..4aeb7c40f927733d2b0128df161cd34d42613ead 100644 (file)
@@ -779,7 +779,7 @@ print_frame_label_vars (frame, this_level_only, stream)
 
   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
   blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
-  bzero (blocks_printed, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
+  (void) memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
 
   while (block != 0)
     {
@@ -1066,7 +1066,7 @@ up_silently_command (count_exp, from_tty)
     count = parse_and_eval_address (count_exp);
   count1 = count;
   
-  if (!target_has_stack)
+  if (target_has_stack == 0 || selected_frame == 0)
     error ("No stack.");
 
   frame = find_relative_frame (selected_frame, &count1);
@@ -1099,7 +1099,7 @@ down_silently_command (count_exp, from_tty)
     count = - parse_and_eval_address (count_exp);
   count1 = count;
   
-  if (!target_has_stack)
+  if (target_has_stack == 0 || selected_frame == 0)
     error ("No stack.");
 
   frame = find_relative_frame (selected_frame, &count1);
@@ -1129,6 +1129,7 @@ return_command (retval_exp, from_tty)
   FRAME frame;
   char *funcname;
   struct cleanup *back_to;
+  value return_value;
 
   if (selected_frame == NULL)
     error ("No selected frame.");
@@ -1136,6 +1137,16 @@ return_command (retval_exp, from_tty)
   selected_frame_addr = FRAME_FP (selected_frame);
   selected_frame_pc = (get_frame_info (selected_frame))->pc;
 
+  /* Compute the return value (if any -- possibly getting errors here).
+     Call VALUE_CONTENTS to make sure we have fully evaluated it, since
+     it might live in the stack frame we're about to pop.  */
+
+  if (retval_exp)
+    {
+      return_value = parse_and_eval (retval_exp);
+      (void) (VALUE_CONTENTS (return_value));
+    }
+
   /* If interactive, require confirmation.  */
 
   if (from_tty)
@@ -1173,7 +1184,7 @@ return_command (retval_exp, from_tty)
      for return values.  */
 
   if (retval_exp)
-    set_return_value (parse_and_eval (retval_exp));
+    set_return_value (return_value);
 
   /* If interactive, print the frame that is now current.  */
 
This page took 0.023818 seconds and 4 git commands to generate.