On 04/12/09 8:21 -0800, Dave Hansen wrote: > 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? Looks ok :) Thanks, Louis > > 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 > -- Dr Louis Rilling Kerlabs Skype: louis.rilling Batiment Germanium Phone: (+33|0) 6 80 89 08 23 80 avenue des Buttes de Coesmes http://www.kerlabs.com/ 35700 Rennes
Attachment:
signature.asc
Description: Digital signature
_______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers