"Ir" (THREAD_SIZE - 8 - sizeof(regs)), 
"Ir" (THREAD_START_SP - sizeof(regs)), 
long execve(const char *filename, char **argv, char **envp){	struct pt_regs regs;	int ret;	memset(&regs, 0, sizeof(struct pt_regs));	ret = do_execve((char *)filename, (char __user * __user *)argv,			(char __user * __user *)envp, &regs);	if (ret < 0)		goto out;	/*	 * Save argc to the register structure for userspace.	 */	regs.ARM_r0 = ret;	/*	 * We were successful.  We won't be returning to our caller, but	 * instead to user space by manipulating the kernel stack.	 */	asm(	"add	r0, %0, %1\n\t"		"mov	r1, %2\n\t"		"mov	r2, %3\n\t"		"bl	memmove\n\t"	/* copy regs to top of stack */		"mov	r8, #0\n\t"	/* not a syscall */		"mov	r9, %0\n\t"	/* thread structure */		"mov	sp, r0\n\t"	/* reposition stack pointer */		"b	ret_to_user"		:		: "r" (current_thread_info()),		  "Ir" (THREAD_SIZE - 8 - sizeof(regs)),		  "r" (&regs),		  "Ir" (sizeof(regs))		: "r0", "r1", "r2", "r3", "ip", "memory"); out:	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/4f7a18124c1a44858fb74a1c4234015009952959/sys_arm.c/buggy/arch/arm/kernel/sys_arm.c