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 <[email protected]>
---
 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 <[email protected]>

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.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to