> I got the following output from valgrind/memcheck while
> I was testing mozilla thunderbird using its test framework, "make mozmill".

> 1. Can this unfamiliar clone be supported?

> ==803== Unsupported clone() flags: 0x800600

Perhaps.  Here is an analysis plus something that you can attempt:

----- /usr/include/bits/sched.h:
# define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */

# define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  
*/
# define CLONE_FILES   0x00000400 /* Set if open files shared between 
processes.  */

# define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
                                     wake it up on mm_release.  */

# define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
                                      force CLONE_PTRACE on this clone.  */

----- coregrind/m_syswrap/syswrap-amd64-linux.c
   /* Only look at the flags we really care about */
   switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
                         | VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
   case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
      /* thread creation */
      <<snip>>

   case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
      /* FALLTHROUGH - assume vfork == fork */
      cloneflags &= ~(VKI_CLONE_VFORK | VKI_CLONE_VM);

   case 0: /* plain fork */
      <<snip>>

   default:
      /* should we just ENOSYS? */
      VG_(message)(Vg_UserMsg,
                   "Unsupported clone() flags: 0x%lx\n", ARG1);
-----

So by omitting VKI_CLONE_VM from flags then mozilla is *not* making a new 
thread,
but instead is making a new process via "plain fork".  However, a plain fork
with CLONE_FS and CLONE_FILES set (that is, a separate process that *shares*
filesystem info and open files with its parent) is not something that coregrind
understands.  I'm not sure I understand it, either.  What do the mozilla 
comments
say?  What is mozilla trying to accomplish by clone() with those peculiar flags?

After that, then the first thing to try is to tail-merge mozilla's special case
into coregrind's "plain fork":

    case VKI_CLONE_FS | VKI_CLONE_FILES:  /* DEBUG: mozilla special case */
       /* FALLTHROUGH into plain fork */

    case 0: /* plain fork */

Re-build valgrind (including "make install") and try that.

-- 


------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to