aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/arch/stack-frame.h2
-rw-r--r--arch/x86/stack-frame.c6
2 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/include/arch/stack-frame.h b/arch/x86/include/arch/stack-frame.h
index 216f7613..fc0ab27c 100644
--- a/arch/x86/include/arch/stack-frame.h
+++ b/arch/x86/include/arch/stack-frame.h
@@ -8,6 +8,8 @@ struct vm_method;
struct expression;
struct compilation_unit;
+#define X86_STACK_ALIGN 16
+
struct native_stack_frame {
void *prev; /* previous stack frame link */
unsigned long return_address;
diff --git a/arch/x86/stack-frame.c b/arch/x86/stack-frame.c
index 25680e5c..f691a4e4 100644
--- a/arch/x86/stack-frame.c
+++ b/arch/x86/stack-frame.c
@@ -105,11 +105,15 @@ unsigned long slot_offset_64(struct stack_slot *slot)
unsigned long frame_locals_size(struct stack_frame *frame)
{
unsigned long nr_locals;
+ unsigned long size;
assert(frame->nr_local_slots >= frame->nr_args);
nr_locals = frame->nr_local_slots - frame->nr_args;
- return __index_to_offset(nr_locals + frame->nr_spill_slots);
+
+ size = __index_to_offset(nr_locals + frame->nr_spill_slots);
+
+ return ALIGN(size, X86_STACK_ALIGN);
}
/*