From 754c4bbcdde860417380ad38f65a4ac520777452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Mon, 27 Feb 2012 10:55:00 +0100 Subject: [PATCH] Some more details on W64 stack arguments. --- x86_64/README | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/x86_64/README b/x86_64/README index fe6f2a8b..e8cb17b6 100644 --- a/x86_64/README +++ b/x86_64/README @@ -24,7 +24,7 @@ Registers May be Argument %r14 %r15 -w64 ABI, according to +W64 ABI, according to http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx: Registers May be Argument @@ -51,3 +51,15 @@ Additional arguments are passed on the stack. "backing store" on the stack for the four register arguments is also required. %xmm6 to %xmm15 are callee-saved. The "long" type is just 32 bits. Nettle currently does *NOT* support this ABI. + +If we have five arguments, and push the additional callee-save +registers %rdi and %rsi on the stack, we get a stack frame like + +56(%rsp): Fifth argument +48(%rsp): Space for fourth argument +40(%rsp): Space for third argument +32(%rsp): Space for second argument +24(%rsp): Space for first argument +16(%rsp): Return address +8(%rsp): Saved %rsi +(%rsp) : Saved %rdi -- GitLab