/* Print and select stack frames for GDB, the GNU debugger.
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
- 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
- Foundation, Inc.
+ 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
+ Software Foundation, Inc.
This file is part of GDB.
{
int frameless;
- frameless = FRAMELESS_FUNCTION_INVOCATION (fi);
+ frameless = (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION_P ()
+ && DEPRECATED_FRAMELESS_FUNCTION_INVOCATION (fi));
if (frameless)
printf_filtered (" (FRAMELESS),");
}
printf_filtered (" source language %s.\n",
language_str (s->language));
-#ifdef DEPRECATED_PRINT_EXTRA_FRAME_INFO
- DEPRECATED_PRINT_EXTRA_FRAME_INFO (fi);
-#endif
-
{
/* Address of the argument list for this frame, or 0. */
CORE_ADDR arg_list = get_frame_args_address (fi);
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
- if (STREQ (DEPRECATED_SYMBOL_NAME (sym), "default"))
+ if (DEPRECATED_STREQ (DEPRECATED_SYMBOL_NAME (sym), "default"))
{
if (*have_default)
continue;
is discarded, side effects such as "return i++" still
occure. */
return_value = NULL;
+ /* FIXME: cagney/2004-01-17: If the architecture implements both
+ return_value and extract_returned_value_address, should allow
+ "return" to work - don't set return_value to NULL. */
else if (!gdbarch_return_value_p (current_gdbarch)
&& (TYPE_CODE (return_type) == TYPE_CODE_STRUCT
|| TYPE_CODE (return_type) == TYPE_CODE_UNION))
STORE_RETURN_VALUE (return_type, current_regcache,
VALUE_CONTENTS (return_value));
}
+ /* FIXME: cagney/2004-01-17: If extract_returned_value_address
+ is available and the function is using
+ RETURN_VALUE_STRUCT_CONVENTION, should use it to find the
+ address of the returned value so that it can be assigned. */
else
{
gdb_assert (gdbarch_return_value (current_gdbarch, return_type,
if (deprecated_selected_frame)
{
- s = find_pc_symtab (get_frame_pc (deprecated_selected_frame));
+ /* We determine the current frame language by looking up its
+ associated symtab. To retrieve this symtab, we use the frame PC.
+ However we cannot use the frame pc as is, because it usually points
+ to the instruction following the "call", which is sometimes the first
+ instruction of another function. So we rely on
+ get_frame_address_in_block(), it provides us with a PC which is
+ guaranteed to be inside the frame's code block. */
+ s = find_pc_symtab (get_frame_address_in_block (deprecated_selected_frame));
if (s)
flang = s->language;
else