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
