On Fri, 2009-12-04 at 17:08 +0100, Louis Rilling wrote: > On 04/12/09 8:05 -0800, Dave Hansen wrote: > > > syscall also destroys r11, so it should be added to the clobber list. > > > > Even though it is a ptregscall? > > The assembly instruction itself destroys r11 (same for rcx). Thanks again for the help, Louis. How does this look? int clone_with_pids(long flags_low, struct clone_args *clone_args, long args_size, int *pids) { long retval; __asm__ __volatile__( "movq %5, %%r10\n\t" /* pids in r10*/ "syscall\n\t" /* Linux/x86_64 system call */ "testq %0,%0\n\t" /* check return value */ "jne 1f\n\t" /* jump if parent */ "popq %%rax\n\t" /* get subthread function */ "popq %%rdi\n\t" /* get the subthread function arg */ "call *%%rax\n\t" /* start subthread function */ "movq %6,%0\n\t" "syscall\n" /* exit system call: exit subthread */ "1:\n\t" :"=a" (retval) :"0" (__NR_clone3),/* eax */ "D" (flags_low), /* rdi */ "S" (clone_args), /* rsi */ "d" (args_size), /* rdx */ "m" (pids), /* gets moved to r10 */ "i" (__NR_exit) :"rcx", "r10", "r11", "cc" ); /* * glibc lists 'cc' as clobbered, so we might as * well do it too. 'r11' and 'rcx' are clobbered * by the 'syscall' instruction itself. 'r8' and * 'r9' are clobbered by the clone, but that * thread will exit before getting back out to C. */ if (retval < 0) { errno = -retval; retval = -1; } return retval; } > Thanks, > > Louis > -- Dave _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers