Re: [LTP] ltp_clone alignment issues.

Hannu Heikkinen
2010-09-30T10:33:53Z

On 29/09/10 15:34 +0200, ext Carmelo AMOROSO wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 9/27/2010 3:34 PM, Carmelo AMOROSO wrote:
> > Folks,
> > I want to reopen an old discussion on ltp_clone and stack alignment
> > issue (see
> > http://sourceforge.net/mailarchive/message.php?msg_name=4B421480.1040400%40petalogix.com).
> > Indeed recently a commit has partially fixed a problem on ARM
> > (0056e395170eb8fc3ffbb22d7bd364fe47c2013e), but I think this should be
> > extended to all archs that have stack that grows downwards.
> >
> > Indeed, as Jiri replied in that old thread, the value passed to clone as
> > child stack should be never accessed, because it is the topmost address
> > of the memory allocated for the child process (it's the previous stack
> > pointer).
> >
> > So, in archs that do not like unaligned stack, using (stack - size - 1 )
> > will cause the process to be killed by a SIGBUS, on other archs, we are
> > just wasting one byte of the malloc-ed stack.
> >
> > On my SH4 arch, the stack must be 4byte aligned (as in ARM).
> >
> > Please, find attached a patch against master branch
> >
> > Best regards,
> > Carmelo
>
> Hi,
> any feedback on this ?
>
> Cheers,
> Carmelo

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
---
lib/cloner.c | 9 +++------
1 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/lib/cloner.c b/lib/cloner.c
index 6ad4a00..e53c9cf 100644
--- a/lib/cloner.c
+++ b/lib/cloner.c
@@ -59,16 +59,13 @@ ltp_clone(unsigned long clone_flags, int (*fn)(void
*arg), void *arg,
ret = clone(fn, stack, clone_flags, arg);
#elif defined(__ia64__)
ret = clone2(fn, stack, stack_size, clone_flags, arg, NULL, NULL,
NULL);
-#elif defined(__arm__)
+#else
/*
- * Stack size should be a multiple of 32 bit words
- * & stack limit must be aligned to a 32 bit boundary
+ * For archs where stack grows downwards, stack points to the topmost
address
+ * of the memory space set up for the child stack.
*/
ret = clone(fn, (stack ? stack + stack_size : NULL),
clone_flags, arg);
-#else
- ret = clone(fn, (stack ? stack + stack_size - 1 : NULL),
- clone_flags, arg);
#endif

return ret;
--
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Hi,

Acked-by Hannu Heikkinen <ext-hannu.m.heikkinen@nokia.com>

Br,
Hannu

--
Hannu Heikkinen
http://www.nixu.com

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.