* x86-64-tdep.h: Tewak comment.
[deliverable/binutils-gdb.git] / gdb / infcall.c
index 75c7f4e2ee3667d67334f8f43a9cd7f2df49ee13..11ce018087ca8b66bad0d51a3377fba0b9705d1f 100644 (file)
@@ -1,8 +1,8 @@
 /* Perform an inferior function call, 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.
 
@@ -30,7 +30,7 @@
 #include "block.h"
 #include "gdbcore.h"
 #include "language.h"
-#include "symfile.h"
+#include "objfiles.h"
 #include "gdbcmd.h"
 #include "command.h"
 #include "gdb_string.h"
@@ -275,18 +275,21 @@ legacy_push_dummy_code (struct gdbarch *gdbarch,
      DUMMY_ADDR is pretty messed up.  It comes from constant tinkering
      with the values.  Instead a DEPRECATED_FIX_CALL_DUMMY replacement
      (PUSH_DUMMY_BREAKPOINT?) should just do everything.  */
+  if (!gdbarch_push_dummy_call_p (current_gdbarch))
+    {
 #ifdef GDB_TARGET_IS_HPPA
-  (*real_pc) = DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs,
-                                         args, value_type, using_gcc);
+      (*real_pc) = DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs,
+                                             args, value_type, using_gcc);
 #else
-  if (DEPRECATED_FIX_CALL_DUMMY_P ())
-    {
-      /* gdb_assert (CALL_DUMMY_LOCATION == ON_STACK) true?  */
-      DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
-                                value_type, using_gcc);
-    }
-  (*real_pc) = start_sp;
+      if (DEPRECATED_FIX_CALL_DUMMY_P ())
+       {
+         /* gdb_assert (CALL_DUMMY_LOCATION == ON_STACK) true?  */
+         DEPRECATED_FIX_CALL_DUMMY (dummy1, start_sp, funaddr, nargs, args,
+                                    value_type, using_gcc);
+       }
+      (*real_pc) = start_sp;
 #endif
+    }
   /* Yes, the offset is applied to the real_pc and not the dummy addr.
      Ulgh!  Blame the HP/UX target.  */
   (*bp_addr) = (*real_pc) + DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET;
@@ -348,7 +351,8 @@ push_dummy_code (struct gdbarch *gdbarch,
   if (gdbarch_push_dummy_code_p (gdbarch))
     return gdbarch_push_dummy_code (gdbarch, sp, funaddr, using_gcc,
                                    args, nargs, value_type, real_pc, bp_addr);
-  else if (DEPRECATED_FIX_CALL_DUMMY_P ())
+  else if (DEPRECATED_FIX_CALL_DUMMY_P ()
+          && !gdbarch_push_dummy_call_p (gdbarch))
     return legacy_push_dummy_code (gdbarch, sp, funaddr, using_gcc,
                                   args, nargs, value_type, real_pc, bp_addr);
   else    
@@ -546,7 +550,8 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
        }
       break;
     case AT_ENTRY_POINT:
-      if (DEPRECATED_FIX_CALL_DUMMY_P ())
+      if (DEPRECATED_FIX_CALL_DUMMY_P ()
+         && !gdbarch_push_dummy_call_p (current_gdbarch))
        {
          /* Sigh.  Some targets use DEPRECATED_FIX_CALL_DUMMY to
              shove extra stuff onto the stack or into registers.  That
@@ -559,9 +564,6 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
        }
       real_pc = funaddr;
       dummy_addr = entry_point_address ();
-      if (DEPRECATED_CALL_DUMMY_ADDRESS_P ())
-       /* Override it.  */
-       dummy_addr = DEPRECATED_CALL_DUMMY_ADDRESS ();
       /* Make certain that the address points at real code, and not a
          function descriptor.  */
       dummy_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
@@ -763,31 +765,6 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
        }
     }
 
-  /* elz: on HPPA no need for this extra alignment, maybe it is needed
-     on other architectures. This is because all the alignment is
-     taken care of in the above code (ifdef DEPRECATED_REG_STRUCT_HAS_ADDR)
-     and in hppa_push_arguments */
-  /* NOTE: cagney/2003-03-24: The below code is very broken.  Given an
-     odd sized parameter the below will mis-align the stack.  As was
-     suggested back in '96, better to let PUSH_ARGUMENTS handle it.  */
-  if (DEPRECATED_EXTRA_STACK_ALIGNMENT_NEEDED)
-    {
-      /* MVS 11/22/96: I think at least some of this stack_align code
-        is really broken.  Better to let push_dummy_call() adjust the
-        stack in a target-defined manner.  */
-      if (DEPRECATED_STACK_ALIGN_P () && INNER_THAN (1, 2))
-       {
-         /* If stack grows down, we must leave a hole at the top. */
-         int len = 0;
-         int i;
-         for (i = nargs - 1; i >= 0; i--)
-           len += TYPE_LENGTH (VALUE_ENCLOSING_TYPE (args[i]));
-         if (DEPRECATED_CALL_DUMMY_STACK_ADJUST_P ())
-           len += DEPRECATED_CALL_DUMMY_STACK_ADJUST;
-         sp -= DEPRECATED_STACK_ALIGN (len) - len;
-       }
-    }
-
   /* Create the dummy stack frame.  Pass in the call dummy address as,
      presumably, the ABI code knows where, in the call dummy, the
      return address should be pointed.  */
@@ -833,23 +810,9 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
     {
       /* If stack grows up, we must leave a hole at the bottom, note
          that sp already has been advanced for the arguments!  */
-      if (DEPRECATED_CALL_DUMMY_STACK_ADJUST_P ())
-       sp += DEPRECATED_CALL_DUMMY_STACK_ADJUST;
       sp = DEPRECATED_STACK_ALIGN (sp);
     }
 
-/* XXX This seems wrong.  For stacks that grow down we shouldn't do
-   anything here!  */
-  /* MVS 11/22/96: I think at least some of this stack_align code is
-     really broken.  Better to let PUSH_ARGUMENTS adjust the stack in
-     a target-defined manner.  */
-  if (DEPRECATED_CALL_DUMMY_STACK_ADJUST_P ())
-    if (INNER_THAN (1, 2))
-      {
-       /* stack grows downward */
-       sp -= DEPRECATED_CALL_DUMMY_STACK_ADJUST;
-      }
-
   /* Store the address at which the structure is supposed to be
      written.  */
   /* NOTE: 2003-03-24: Since PUSH_ARGUMENTS can (and typically does)
@@ -909,7 +872,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
     else
       {
        /* The assumption here is that push_dummy_call() returned the
-          stack part of the frame ID.  Unfortunatly, many older
+          stack part of the frame ID.  Unfortunately, many older
           architectures were, via a convoluted mess, relying on the
           poorly defined and greatly overloaded
           DEPRECATED_TARGET_READ_FP or DEPRECATED_FP_REGNUM to supply
@@ -1075,22 +1038,6 @@ the function call).", name);
   do_cleanups (inf_status_cleanup);
 
   /* Figure out the value returned by the function.  */
-  /* elz: I defined this new macro for the hppa architecture only.
-     this gives us a way to get the value returned by the function
-     from the stack, at the same address we told the function to put
-     it.  We cannot assume on the pa that r28 still contains the
-     address of the returned structure. Usually this will be
-     overwritten by the callee.  I don't know about other
-     architectures, so I defined this macro */
-  /* FIXME: cagney/2003-09-27: This is no longer needed.  The problem
-     is now handled directly be by the code below.  */
-#ifdef DEPRECATED_VALUE_RETURNED_FROM_STACK
-  if (struct_return)
-    {
-      do_cleanups (retbuf_cleanup);
-      return DEPRECATED_VALUE_RETURNED_FROM_STACK (value_type, struct_addr);
-    }
-#endif
   if (struct_return)
     {
       /* NOTE: cagney/2003-09-27: This assumes that PUSH_DUMMY_CALL
This page took 0.026615 seconds and 4 git commands to generate.