Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7bf9a37d authored by Greg Ungerer's avatar Greg Ungerer Committed by Linus Torvalds
Browse files

[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: default avatarGreg Ungerer <gerg@uclinux.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 31f4fde3
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -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;				\