diff options
-rw-r--r-- | arch/x86/include/arch/stack-frame.h | 2 | ||||
-rw-r--r-- | arch/x86/stack-frame.c | 6 |
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); } /* |