This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[pushed] infcall: move assertions in 'call_function_by_hand_dummy' to an earli...
- From: "Sourceware to Gerrit sync (Code Review)" <gerrit at gnutoolchain-gerrit dot osci dot io>
- To: Tankut Baris Aktemur <tankut dot baris dot aktemur at intel dot com>, Luis Machado <luis dot machado at linaro dot org>, Tom de Vries <tdevries at suse dot de>, Simon Marchi <simon dot marchi at polymtl dot ca>, gdb-patches at sourceware dot org
- Date: Wed, 23 Oct 2019 14:50:05 -0400
- Subject: [pushed] infcall: move assertions in 'call_function_by_hand_dummy' to an earli...
- Auto-submitted: auto-generated
- References: <gerrit.1571406803000.I411ac083ac6a9ee6eb93c4b82393a81a4fc927be@gnutoolchain-gerrit.osci.io>
- Reply-to: noreply at gnutoolchain-gerrit dot osci dot io, tankut dot baris dot aktemur at intel dot com, simon dot marchi at polymtl dot ca, tdevries at suse dot de, luis dot machado at linaro dot org, gdb-patches at sourceware dot org
The original change was created by Tankut Baris Aktemur.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/139
......................................................................
infcall: move assertions in 'call_function_by_hand_dummy' to an earlier spot
This is a refactoring that performs type assertions on the callee
function at the beginning of 'call_function_by_hand_dummy' rather than
at a later point so that
- the checks are grouped together at the beginning of the function for
improved readability, and
- we don't have to align and push things on the stack only to find out
later that the function call is illegal.
gdb/ChangeLog:
2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
* infcall.c (call_function_by_hand_dummy): Refactor.
Change-Id: I411ac083ac6a9ee6eb93c4b82393a81a4fc927be
---
M gdb/ChangeLog
M gdb/infcall.c
2 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 53f50e2..6fafc44 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+ * infcall.c (call_function_by_hand_dummy): Refactor.
+
+2019-10-23 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
* MAINTAINERS (Write After Approval): Add Tankut Baris Aktemur.
2019-10-23 Tom Tromey <tom@tromey.com>
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 726f14d..0d8d5b2 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -746,6 +746,27 @@
if (!gdbarch_push_dummy_call_p (gdbarch))
error (_("This target does not support function calls."));
+ /* Find the function type and do a sanity check. */
+ type *ftype;
+ type *values_type;
+ CORE_ADDR funaddr = find_function_addr (function, &values_type, &ftype);
+
+ if (values_type == NULL)
+ values_type = default_return_type;
+ if (values_type == NULL)
+ {
+ const char *name = get_function_name (funaddr,
+ name_buf, sizeof (name_buf));
+ error (_("'%s' has unknown return type; "
+ "cast the call to its declared return type"),
+ name);
+ }
+
+ values_type = check_typedef (values_type);
+
+ if (args.size () < TYPE_NFIELDS (ftype))
+ error (_("Too few arguments in function call."));
+
/* A holder for the inferior status.
This is only needed while we're preparing the inferior function call. */
infcall_control_state_up inf_status (save_infcall_control_state ());
@@ -851,23 +872,6 @@
}
}
- type *ftype;
- type *values_type;
- CORE_ADDR funaddr = find_function_addr (function, &values_type, &ftype);
-
- if (values_type == NULL)
- values_type = default_return_type;
- if (values_type == NULL)
- {
- const char *name = get_function_name (funaddr,
- name_buf, sizeof (name_buf));
- error (_("'%s' has unknown return type; "
- "cast the call to its declared return type"),
- name);
- }
-
- values_type = check_typedef (values_type);
-
/* Are we returning a value using a structure return? */
if (gdbarch_return_in_first_hidden_param_p (gdbarch, values_type))
@@ -945,9 +949,6 @@
internal_error (__FILE__, __LINE__, _("bad switch"));
}
- if (args.size () < TYPE_NFIELDS (ftype))
- error (_("Too few arguments in function call."));
-
for (int i = args.size () - 1; i >= 0; i--)
{
int prototyped;