Skip to content

Commit

Permalink
[IA64] fix stack alignment for ia32 signal handlers
Browse files Browse the repository at this point in the history
This fixes the setup of the alignment of the signal frame, so that all
signal handlers are run with a properly aligned stack frame.

The current code "over-aligns" the stack pointer so that the stack frame
is effectively always mis-aligned by 4 bytes.  But what we really want
is that on function entry ((sp + 4) & 15) == 0, which matches what would
happen if the stack were aligned before a "call" instruction.

i386 and x86_64 are already fixed by d347f37

Signed-off-by: Markus F.X.J. Oberhumer <[email protected]>
Signed-off-by: Tony Luck <[email protected]>
  • Loading branch information
markus-oberhumer authored and aegl committed May 8, 2007
1 parent 0e17b56 commit 6676152
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion arch/ia64/ia32/ia32_signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,11 @@ get_sigframe (struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
}
/* Legacy stack switching not supported */

return (void __user *)((esp - frame_size) & -8ul);
esp -= frame_size;
/* Align the stack pointer according to the i386 ABI,
* i.e. so that on function entry ((sp + 4) & 15) == 0. */
esp = ((esp + 4) & -16ul) - 4;
return (void __user *) esp;
}

static int
Expand Down

0 comments on commit 6676152

Please sign in to comment.