aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Ludvig <mludvig@suse.cz>2003-08-07 11:21:58 +0000
committerMichal Ludvig <mludvig@suse.cz>2003-08-07 11:21:58 +0000
commitf22992f1153f76c2bd54d7f0714d18352e5cd8c2 (patch)
tree249bed8d3af3f78dcce3d5d7f8669287690728f6
parente4989c00ae3f5e36b5749aad32796732ad96c310 (diff)
downloadgdb-f22992f1153f76c2bd54d7f0714d18352e5cd8c2.zip
gdb-f22992f1153f76c2bd54d7f0714d18352e5cd8c2.tar.gz
gdb-f22992f1153f76c2bd54d7f0714d18352e5cd8c2.tar.bz2
2003-08-07 Michal Ludvig <mludvig@suse.cz>
* x86-64-tdep.c (x86_64_push_arguments): Skip the red zone.
-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];