mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 18:53:52 +08:00
[PATCH] m68knommu: force stack alignment on ColdFire
This patch solve a bug triggered by execvp (this function use calloc to store the argument list and gcc 3.4.x align the stack to word, not to dword). This situation aren't related to signal handling and all 2.6.x have the bug. On ColdFire targets we must force the stack to be aligned. Original patch from Andrea Tarani <andrea.tarani@gilbarco.com>, Signed-off-by: Greg Ungerer <gerg@uclinux.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
31f4fde38c
commit
7bf9a37d8d
@ -77,6 +77,16 @@ struct thread_struct {
|
||||
{0, 0}, 0, {0,}, {0, 0, 0}, {0,}, \
|
||||
}
|
||||
|
||||
/*
|
||||
* Coldfire stacks need to be re-aligned on trap exit, conventional
|
||||
* 68k can handle this case cleanly.
|
||||
*/
|
||||
#if defined(CONFIG_COLDFIRE)
|
||||
#define reformat(_regs) do { (_regs)->format = 0x4; } while(0)
|
||||
#else
|
||||
#define reformat(_regs) do { } while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Do necessary setup to start up a newly executed thread.
|
||||
*
|
||||
@ -87,6 +97,8 @@ struct thread_struct {
|
||||
do { \
|
||||
set_fs(USER_DS); /* reads from user space */ \
|
||||
(_regs)->pc = (_pc); \
|
||||
((struct switch_stack *)(_regs))[-1].a6 = 0; \
|
||||
reformat(_regs); \
|
||||
if (current->mm) \
|
||||
(_regs)->d5 = current->mm->start_data; \
|
||||
(_regs)->sr &= ~0x2000; \
|
||||
|
Loading…
Reference in New Issue
Block a user