* target.h (struct thread_resume): Delete leave_stopped member.
[deliverable/binutils-gdb.git] / gdb / stack.c
index f185841ac20df3defbd8e732b5f8505056875e57..dfe3900e7c090332ce9d79d06f5d4bf6c15b73aa 100644 (file)
@@ -58,7 +58,7 @@ void (*deprecated_selected_frame_level_changed_hook) (int);
 
 static const char *print_frame_arguments_choices[] =
   {"all", "scalars", "none", NULL};
-static const char *print_frame_arguments = "all";
+static const char *print_frame_arguments = "scalars";
 
 /* Prototypes for local functions. */
 
@@ -181,9 +181,9 @@ print_this_frame_argument_p (struct symbol *sym)
   /* The user asked to print only the scalar arguments, so do not
      print the non-scalar ones.  */
 
-  type = CHECK_TYPEDEF (SYMBOL_TYPE (sym));
+  type = check_typedef (SYMBOL_TYPE (sym));
   while (TYPE_CODE (type) == TYPE_CODE_REF)
-    type = CHECK_TYPEDEF (TYPE_TARGET_TYPE (type));
+    type = check_typedef (TYPE_TARGET_TYPE (type));
   switch (TYPE_CODE (type))
     {
       case TYPE_CODE_ARRAY:
@@ -644,20 +644,16 @@ print_frame_info (struct frame_info *frame, int print_level,
   gdb_flush (gdb_stdout);
 }
 
-static void
-print_frame (struct frame_info *frame, int print_level,
-            enum print_what print_what, int print_args,
-            struct symtab_and_line sal)
+/* Attempt to obtain the FUNNAME and FUNLANG of the function corresponding
+   to FRAME.  */
+void
+find_frame_funname (struct frame_info *frame, char **funname,
+                   enum language *funlang)
 {
   struct symbol *func;
-  char *funname = NULL;
-  enum language funlang = language_unknown;
-  struct ui_stream *stb;
-  struct cleanup *old_chain, *list_chain;
-  struct value_print_options opts;
 
-  stb = ui_out_stream_new (uiout);
-  old_chain = make_cleanup_ui_out_stream_delete (stb);
+  *funname = NULL;
+  *funlang = language_unknown;
 
   func = find_pc_function (get_frame_address_in_block (frame));
   if (func)
@@ -690,24 +686,24 @@ print_frame (struct frame_info *frame, int print_level,
          /* We also don't know anything about the function besides
             its address and name.  */
          func = 0;
-         funname = SYMBOL_PRINT_NAME (msymbol);
-         funlang = SYMBOL_LANGUAGE (msymbol);
+         *funname = SYMBOL_PRINT_NAME (msymbol);
+         *funlang = SYMBOL_LANGUAGE (msymbol);
        }
       else
        {
-         funname = SYMBOL_PRINT_NAME (func);
-         funlang = SYMBOL_LANGUAGE (func);
-         if (funlang == language_cplus)
+         *funname = SYMBOL_PRINT_NAME (func);
+         *funlang = SYMBOL_LANGUAGE (func);
+         if (*funlang == language_cplus)
            {
              /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
                 to display the demangled name that we already have
                 stored in the symbol table, but we stored a version
                 with DMGL_PARAMS turned on, and here we don't want to
                 display parameters.  So remove the parameters.  */
-             char *func_only = cp_remove_params (funname);
+             char *func_only = cp_remove_params (*funname);
              if (func_only)
                {
-                 funname = func_only;
+                 *funname = func_only;
                  make_cleanup (xfree, func_only);
                }
            }
@@ -720,10 +716,27 @@ print_frame (struct frame_info *frame, int print_level,
 
       if (msymbol != NULL)
        {
-         funname = SYMBOL_PRINT_NAME (msymbol);
-         funlang = SYMBOL_LANGUAGE (msymbol);
+         *funname = SYMBOL_PRINT_NAME (msymbol);
+         *funlang = SYMBOL_LANGUAGE (msymbol);
        }
     }
+}
+
+static void
+print_frame (struct frame_info *frame, int print_level,
+            enum print_what print_what, int print_args,
+            struct symtab_and_line sal)
+{
+  char *funname = NULL;
+  enum language funlang = language_unknown;
+  struct ui_stream *stb;
+  struct cleanup *old_chain, *list_chain;
+  struct value_print_options opts;
+
+  stb = ui_out_stream_new (uiout);
+  old_chain = make_cleanup_ui_out_stream_delete (stb);
+
+  find_frame_funname (frame, &funname, &funlang);
 
   annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
                        get_frame_pc (frame));
@@ -759,7 +772,7 @@ print_frame (struct frame_info *frame, int print_level,
       struct print_args_args args;
       struct cleanup *args_list_chain;
       args.frame = frame;
-      args.func = func;
+      args.func = find_pc_function (get_frame_address_in_block (frame));
       args.stream = gdb_stdout;
       args_list_chain = make_cleanup_ui_out_list_begin_end (uiout, "args");
       catch_errors (print_args_stub, &args, "", RETURN_MASK_ERROR);
@@ -1694,13 +1707,7 @@ select_and_print_frame (struct frame_info *frame)
 struct block *
 get_selected_block (CORE_ADDR *addr_in_block)
 {
-  if (!target_has_stack)
-    return 0;
-
-  if (is_exited (inferior_ptid))
-    return 0;
-
-  if (is_executing (inferior_ptid))
+  if (!has_stack_frames ())
     return 0;
 
   return get_frame_block (get_selected_frame (NULL), addr_in_block);
This page took 0.025467 seconds and 4 git commands to generate.