PERFORCE change 103337 for review

Roman Divacky rdivacky at FreeBSD.org
Sun Aug 6 13:26:49 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=103337

Change 103337 by rdivacky at rdivacky_witten on 2006/08/06 13:26:24

	A few small fixes:
	
	o		in CLONE_PARENT_SETTID use the actual variable in sizeof
	o		add dummy handler for CLONE_PARENT and add this flag
	o		add handler for CLONE_THREAD which nulls exit_signal
	o		copyout the correct pid in sched_tail

Affected files ...

.. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#32 edit

Differences ...

==== //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#32 (text+ko) ====

@@ -358,7 +358,8 @@
 #define CLONE_FS	0x200
 #define CLONE_FILES	0x400
 #define CLONE_SIGHAND	0x800
-#define CLONE_PID	0x1000
+#define CLONE_PID	0x1000		/* this flag does not exist in linux */
+#define CLONE_PARENT    0x00008000 
 #define CLONE_THREAD	0x10000
 #define CLONE_SETTLS    0x80000
 #define CLONE_CHILD_CLEARTID	0x00200000
@@ -432,13 +433,23 @@
 		   	EMUL_RUNLOCK(&emul_lock);
 			return (EINVAL);
 		}
-		error = copyout(&em->shared->group_pid, args->parent_tidptr, sizeof(td->td_proc->p_pid));
+		error = copyout(&em->shared->group_pid, args->parent_tidptr, sizeof(em->shared->group_pid));
 		if (error) {
 		   	EMUL_RUNLOCK(&emul_lock);
 			return (error);
 		}
 	}
+
+	if (args->flags & CLONE_PARENT)
+	   	printf("linux_clone: CLONE_PARENT\n");
 	   	
+	if (args->flags & CLONE_THREAD) {
+	 //  	p2->p_pgrp = td->td_proc->p_pgrp;
+	 //	p2->p_pptr = td->td_proc->p_pptr;
+	 	exit_signal = 0;
+	   	printf("linux_clone: CLONE_THREADS\n");
+	}
+
 	if (args->flags & CLONE_CHILD_SETTID)
 		em->child_set_tid = args->child_tidptr;
 	else
@@ -1327,13 +1338,13 @@
 
 	if (em == NULL) {
 #ifdef	DEBUG
-	  // 	printf(LMSG("we didnt find emuldata for the userreting process.\n"));
+	   	printf(LMSG("we didnt find emuldata for the userreting process.\n"));
 #endif
 		return;
 	}
 
 	if (em->child_set_tid != NULL)
-	   	error = copyout(&p->p_pid, em->child_set_tid, sizeof(p->p_pid));
+	   	error = copyout(&em->shared->group_pid, em->child_set_tid, sizeof(em->shared->group_pid));
 
 	EMUL_RUNLOCK(&emul_lock);
 	return;


More information about the p4-projects mailing list