infcall: refactor 'call_function_by_hand_dummy'
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Wed, 23 Oct 2019 18:58:42 +0000 (20:58 +0200)
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Wed, 23 Oct 2019 18:58:42 +0000 (20:58 +0200)
Extract out the code region that reserves stack space to a separate
function.

Fix the comment of 'call_function_by_hand_dummy' to remove reference
to the NARGS argument that was removed in commit (e71585ffe2e "Use
gdb:array_view in call_function_by_hand & friends").

gdb/ChangeLog:
2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* infcall.c (call_function_by_hand_dummy): Fix the function
comment.  And extract out a code section into...
(reserve_stack_space): ...this new function.

Change-Id: I8938ef4134aff68a0a21724aaa2406bfe453438a

gdb/ChangeLog
gdb/infcall.c

index 52aea372762d7f8bde6d8da325132807c3fb0910..a976d8f9a712e8d3c15ee52f653e4dc9ae7a001b 100644 (file)
@@ -1,3 +1,9 @@
+2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+       * infcall.c (call_function_by_hand_dummy): Fix the function
+       comment.  And extract out a code section into...
+       (reserve_stack_space): ...this new function.
+
 2019-10-23  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
        * infcall.c (value_arg_coerce): Remove an unused parameter.
index b83f1bf323069816503bad4afb5be661d9fb5da0..583f0deef0e903536ed03a73f77e0cd97a48e504 100644 (file)
@@ -668,6 +668,42 @@ run_inferior_call (struct call_thread_fsm *sm,
   return caught_error;
 }
 
+/* Reserve space on the stack for a value of the given type.
+   Return the address of the allocated space.
+   Make certain that the value is correctly aligned.
+   The SP argument is modified.  */
+
+static CORE_ADDR
+reserve_stack_space (const type *values_type, CORE_ADDR &sp)
+{
+  struct frame_info *frame = get_current_frame ();
+  struct gdbarch *gdbarch = get_frame_arch (frame);
+  CORE_ADDR addr = 0;
+
+  if (gdbarch_inner_than (gdbarch, 1, 2))
+    {
+      /* Stack grows downward.  Align STRUCT_ADDR and SP after
+        making space.  */
+      sp -= TYPE_LENGTH (values_type);
+      if (gdbarch_frame_align_p (gdbarch))
+       sp = gdbarch_frame_align (gdbarch, sp);
+      addr = sp;
+    }
+  else
+    {
+      /* Stack grows upward.  Align the frame, allocate space, and
+        then again, re-align the frame???  */
+      if (gdbarch_frame_align_p (gdbarch))
+       sp = gdbarch_frame_align (gdbarch, sp);
+      addr = sp;
+      sp += TYPE_LENGTH (values_type);
+      if (gdbarch_frame_align_p (gdbarch))
+       sp = gdbarch_frame_align (gdbarch, sp);
+    }
+
+  return addr;
+}
+
 /* See infcall.h.  */
 
 struct value *
@@ -689,7 +725,7 @@ call_function_by_hand (struct value *function,
    making dummy frames be different from normal frames, consider that.  */
 
 /* Perform a function call in the inferior.
-   ARGS is a vector of values of arguments (NARGS of them).
+   ARGS is a vector of values of arguments.
    FUNCTION is a value, the function to be called.
    Returns a value representing what the function returned.
    May fail to return, if a breakpoint or signal is hit
@@ -989,8 +1025,7 @@ call_function_by_hand_dummy (struct value *function,
     }
 
   /* Reserve space for the return structure to be written on the
-     stack, if necessary.  Make certain that the value is correctly
-     aligned.
+     stack, if necessary.
 
      While evaluating expressions, we reserve space on the stack for
      return values of class type even if the language ABI and the target
@@ -1005,28 +1040,7 @@ call_function_by_hand_dummy (struct value *function,
 
   if (return_method != return_method_normal
       || (stack_temporaries && class_or_union_p (values_type)))
-    {
-      if (gdbarch_inner_than (gdbarch, 1, 2))
-       {
-         /* Stack grows downward.  Align STRUCT_ADDR and SP after
-             making space for the return value.  */
-         sp -= TYPE_LENGTH (values_type);
-         if (gdbarch_frame_align_p (gdbarch))
-           sp = gdbarch_frame_align (gdbarch, sp);
-         struct_addr = sp;
-       }
-      else
-       {
-         /* Stack grows upward.  Align the frame, allocate space, and
-             then again, re-align the frame???  */
-         if (gdbarch_frame_align_p (gdbarch))
-           sp = gdbarch_frame_align (gdbarch, sp);
-         struct_addr = sp;
-         sp += TYPE_LENGTH (values_type);
-         if (gdbarch_frame_align_p (gdbarch))
-           sp = gdbarch_frame_align (gdbarch, sp);
-       }
-    }
+    struct_addr = reserve_stack_space (values_type, sp);
 
   std::vector<struct value *> new_args;
   if (return_method == return_method_hidden_param)