aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog2
-rw-r--r--gdb/x86-64-tdep.c8
2 files changed, 10 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e501922..29591f7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,7 @@
2003-08-07 Michal Ludvig <mludvig@suse.cz>
+
* x86-64-tdep.c (x86_64_dwarf_regmap): Correct register numbers.
+ (x86_64_push_arguments): Skip the red zone.
2003-08-04 Daniel Jacobowitz <drow@mvista.com>
diff --git a/gdb/x86-64-tdep.c b/gdb/x86-64-tdep.c
index 21a60f3..1d960a0 100644
--- a/gdb/x86-64-tdep.c
+++ b/gdb/x86-64-tdep.c
@@ -624,6 +624,14 @@ x86_64_push_arguments (struct regcache *regcache, int nargs,
int stack_values_count = 0;
int *stack_values;
stack_values = alloca (nargs * sizeof (int));
+
+ /* Before storing anything to the stack we must skip
+ the "Red zone" (see the "Function calling sequence" section
+ of AMD64 ABI).
+ It could have already been skipped in the function's
+ prologue, but we don't care and will easily skip it once again. */
+ sp -= 128;
+
for (i = 0; i < nargs; i++)
{
enum x86_64_reg_class class[MAX_CLASSES];