aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2004-01-10 17:48:15 +0000
committerMark Kettenis <kettenis@gnu.org>2004-01-10 17:48:15 +0000
commit6470d250697a88ab127acaa9e63adc1c5de56ea6 (patch)
treeac3826a58ffd67b718cb6a805bed274f5e3686b5
parent562c50c21805565c3fc31631a05fc72ee6a328d2 (diff)
downloadgdb-6470d250697a88ab127acaa9e63adc1c5de56ea6.zip
gdb-6470d250697a88ab127acaa9e63adc1c5de56ea6.tar.gz
gdb-6470d250697a88ab127acaa9e63adc1c5de56ea6.tar.bz2
* x86-64-tdep.c (amd64_push_arguments): Add struct_return
argument. Use it to reserve a register if necessary. (amd64_push_dummy_call): Pass STRUCT_RETURN in call to amd64_push_arguments.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/x86-64-tdep.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f9d48bd..bdf88b9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2004-01-10 Mark Kettenis <kettenis@gnu.org>
+ * x86-64-tdep.c (amd64_push_arguments): Add struct_return
+ argument. Use it to reserve a register if necessary.
+ (amd64_push_dummy_call): Pass STRUCT_RETURN in call to
+ amd64_push_arguments.
+
* x86-64-tdep.c (amd64_classify_aggregate): Ignore static fields.
* x86-64-tdep.c (amd64_register_info): Add %cs and %ss. Adjust
diff --git a/gdb/x86-64-tdep.c b/gdb/x86-64-tdep.c
index c3bb166..242d597 100644
--- a/gdb/x86-64-tdep.c
+++ b/gdb/x86-64-tdep.c
@@ -481,7 +481,7 @@ amd64_return_value (struct gdbarch *gdbarch, struct type *type,
static CORE_ADDR
amd64_push_arguments (struct regcache *regcache, int nargs,
- struct value **args, CORE_ADDR sp)
+ struct value **args, CORE_ADDR sp, int struct_return)
{
static int integer_regnum[] =
{
@@ -505,6 +505,10 @@ amd64_push_arguments (struct regcache *regcache, int nargs,
int sse_reg = 0;
int i;
+ /* Reserve a register for the "hidden" argument. */
+ if (struct_return)
+ integer_reg++;
+
for (i = 0; i < nargs; i++)
{
struct type *type = VALUE_TYPE (args[i]);
@@ -613,7 +617,7 @@ amd64_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr,
char buf[8];
/* Pass arguments. */
- sp = amd64_push_arguments (regcache, nargs, args, sp);
+ sp = amd64_push_arguments (regcache, nargs, args, sp, struct_return);
/* Pass "hidden" argument". */
if (struct_return)